summaryrefslogtreecommitdiff
path: root/python-social-ethosa.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-10 08:22:20 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-10 08:22:20 +0000
commitbddc0d069a499c88c10838ecc177f729657d3625 (patch)
treec0a7911146719f0473a2daa46281b05590fef78d /python-social-ethosa.spec
parentb2e4ebcc70c3fcd90f41764cdb906bafa48bfa15 (diff)
automatic import of python-social-ethosa
Diffstat (limited to 'python-social-ethosa.spec')
-rw-r--r--python-social-ethosa.spec1505
1 files changed, 1505 insertions, 0 deletions
diff --git a/python-social-ethosa.spec b/python-social-ethosa.spec
new file mode 100644
index 0000000..3f5c0c1
--- /dev/null
+++ b/python-social-ethosa.spec
@@ -0,0 +1,1505 @@
+%global _empty_manifest_terminate_build 0
+Name: python-social-ethosa
+Version: 0.6.4
+Release: 1
+Summary: The social ethosa library for Python
+License: LGPLv3
+URL: https://github.com/Ethosa/social_ethosa
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/e3/de/3ad1fcf5e1d19777c886140929bde0796766f81a817990c4a679e635f9fa/social-ethosa-0.6.4.tar.gz
+BuildArch: noarch
+
+Requires: python3-requests
+Requires: python3-regex
+
+%description
+<h1 align="center">Social-ethosa</h1>
+
+A Python library that uses requests
+Documentation in other languages
+- [Russian](https://github.com/Ethosa/social_ethosa/blob/master/README_RU.md)
+
+[Changelog](https://github.com/Ethosa/social_ethosa/blob/master/ChangeLog.md)
+
+Examples:
+- [Inline keyboard](https://github.com/Ethosa/social_ethosa/tree/master/examples/keyboard_inline.py)
+- [Standart keyboard](https://github.com/Ethosa/social_ethosa/tree/master/examples/keyboard_standart.py)
+- [Receiving new messages by the group](https://github.com/Ethosa/social_ethosa/tree/master/examples/group_messages.py)
+- [Receiving new messages by the group (OOP)](https://github.com/Ethosa/social_ethosa/tree/master/examples/group_messages_oop.py)
+- [Receiving new messages by the user](https://github.com/Ethosa/social_ethosa/tree/master/examples/user_messages.py)
+- [Receiving new messages by the user (OOP)](https://github.com/Ethosa/social_ethosa/tree/master/examples/user_messages_oop.py)
+- [Keyboard buttons](https://github.com/Ethosa/social_ethosa/blob/master/examples/buttons.py)
+- [Files upload](https://github.com/Ethosa/social_ethosa/blob/master/examples/uploadFilesVk.py)
+
+## Get started
+Installation: `pip install --upgrade social-ethosa`
+Import:
+```python
+from social_ethosa import *
+```
+
+## Vkcom
+```python
+vk = Vk(token="Your token is here", group_id=12345, debug=True, lang="en")
+# the group_id parameter should be used if you are going to log in through a group.
+# In this example, we will use group authorization.
+
+@vk.on_message_new
+# This decorator is an event handler that executes the function passed to it on a new message
+# The decorator's name is taken from the official names, but with the prefix " on_"
+# https://vk.com/dev/groups_events
+def getMessage(message):
+ text = message.text
+ peer_id = message.peer_id
+ from_id = message.from_id
+ attachments = message.attachments
+```
+
+using the file Uploader:
+```python
+vk.uploader.getUploadUrl("message_photo") # getting a link to upload files
+# you can also pass other arguments (argument=value)
+# to get the rest of the UploadUrl names, use the function
+# uploader.getAllTypes
+```
+upload files:
+```python
+response = vk.uploader.uploadFile("path") # you can also pass other arguments (argument=value)
+```
+
+Some audio methods are also available in my library:
+```python
+login = "89007003535"
+password = "qwertyuiop"
+
+audio = Audio(login=login, password=password, debug=1)
+audios = audio.get()
+# Since the audio methods are not available in the official API, I had to make a parser of the site
+```
+## Yandex api
+Using Yandex api:
+```python
+TOKEN = "translate token"
+yt = YTranslator(token=TOKEN)
+text = "Пайтон - хороший язык программирования"
+response = yt.translate(text=text, lang="en") # Text translation
+print(response)
+```
+## Trace moe
+Using the [TraceMoe api](https://trace):
+```python
+tracemoe = TraceMoe() # initialization for future use
+# In directory with script there is screenshot from anime " a. png"
+response = tracemoe.search("a.png", False, 1)
+# param 1 - path to image or image url
+# param 2 - True, if param 1 is link
+# param 3 - filter search
+```
+![Image did not load](https://i.pinimg.com/originals/33/55/37/335537e3904b0a3b204364907b22622f.jpg)
+
+If the anime is found, you should get a video preview of the found moment:
+```python
+video = tracemoe.getVideo(response, mute=0) # The mute parameter must be 1 if you want to get video without sound
+tracemoe.writeFile("file.mp4", video)
+# param 1 is a path to write file
+# param 2 is a video received by the get Video method
+```
+
+## BotWrapper
+In the library there is a wrapper for bots!
+Initialization:
+```python
+bw = BotWrapper()
+```
+Getting a random date
+```python
+date = bw.randomDate(fromYear="2001", toYear="3001")
+# Returned: string
+# The fromYear and toYear parameters are optional
+```
+
+## BetterBotBase
+This class uses pickle to maintain the database.
+Let's initialize this class.
+```python
+bbs = BetterBotBase("users folder", "dat")
+# The first argument is the name of the folder where users will be stored
+# the second argument is the Postfix of the files, in our case the files will look like this:
+# 123123123.dat
+```
+
+BetterBotBase can also be used with Vkcom:
+```python
+@vk.on_message_new
+def getNewMessage(message):
+ from_id = message.from_id
+ if from_id > 0:
+ user = bbs.autoInstall(from_id, vk)
+# autoInstall automatically creates or loads users and returns the user for further action with it.
+```
+
+BotWrapper can also be used to interact with BetterBotBase!
+```python
+text = bw.answerPattern("Hello, <name>, your money is <money>!", user)
+# the answer Pattern method automatically substitutes variables from user,
+# thus making it a little easier to format the string
+```
+
+You can define your own templates to the database!
+```python
+# right after BetterBotBase announcement
+bbs.addPattern("countMessages", 0)
+# the first argument is the variable name
+# the second argument is the default value of the variable (when creating a user)
+```
+
+You created a template, but it was not added to the old users? not a problem!
+```python
+bbs.addNewVariable("countMessages", 0)
+# this method works the same as addPattern, but with older users
+```
+
+
+## ThisPerson api
+Initialization is quite simple
+```python
+person = ThisPerson()
+```
+
+In the class now only 3 methods to retrieve non-existent people/cats/waifu
+```python
+rperson = person.getRandomPerson()
+rcat = person.getRandomCat()
+rwaifu = person.getRandomWaifu()
+```
+
+after receiving the generated photo, it should be written to a file.
+```python
+person.writeFile("person.png", rperson)
+person.writeFile("cat.png", rcat)
+person.writeFile("waifu.png", rwaifu)
+```
+
+## Yummyanime club
+There are few methods here, as I have not found an official API. Let's get started.
+```python
+ym = YummyAnime()
+ym = YummyAnime(login="yourmail@gmail.com", password="iampassword")
+# You can log in to your account if you need to
+```
+Getting random anime
+```python
+randomAnime = ym.getRandomAnime()
+print(dir(randomAnime))
+print(randomAnime)
+```
+You can also get a list of anime updates
+```python
+updates = ym.getUpdates()
+anime = updates[0].open() # You will get the same object that the getRandomAnime() method returns
+print(updates)
+print(anime)
+```
+And also you can view your profile
+```python
+profile = ym.getProfile()
+print(profile)
+```
+
+## bloggercom api
+Module to work with [blogger.com](https://blogger.com)
+Initialization:
+```python
+blogger = Blogger(apiKey="Your api key")
+```
+
+get blog by id:
+```python
+blog = blogger.blogs.get(123123)
+print(blog["name"]) # You can use the resulting object as a dictionary
+print(blog.name) # or as an object :/
+print(blog)
+```
+get blog by url:
+```python
+blog = blogger.blogs.getByUrl("https://meethosa.blogspot.com")
+```
+get posts by blog id
+```python
+posts = blogger.posts.get(123123)
+```
+get pages by blog id
+```python
+posts = blogger.pages.get(123123)
+```
+
+## eMath
+I decided that very few people will need this module, so importing it separately from the main one:
+```python
+from social_ethosa.eMath import *
+```
+### Point
+You can create an N-dimensional point:
+```python
+point = Point(0, 0, 0)
+point1 = Point(4, 2, 3)
+```
+And also you can find the Euclidean distance between them:
+```python
+distance = point.euclideanDistance(point1)
+print(distance)
+```
+### Matrix
+Also this module has a Matrix class
+```python
+matrix = Matrix(3, 3) # Creating a 3x3 matrix
+matrix1 = Matrix([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]]) # Creating a 3x3 matrix
+```
+You can transpose the matrix
+```python
+matrix1.transpose()
+# 1 4 7
+# 2 5 8
+# 3 6 9
+```
+And multiply the matrix by the number
+```python
+matrix1 *= 3
+# 3 12 21
+# 6 15 24
+# 9 18 27
+```
+The addition of two matrices is also possible
+```python
+matrix2 = Matrix([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]])
+matrix1 += matrix2
+# 4 14 24
+# 10 20 30
+# 16 26 36
+```
+Matrix multiplication? No problem!
+```python
+matrix = Matrix([[1, 2, 3],
+ [4, 5, 6]])
+matrix1 = Matrix([[1, 2],
+ [3, 4],
+ [5, 6]])
+matrix *= matrix1
+# 22, 28
+# 49, 64
+
+matrix = Matrix([[1, 2],
+ [3, 4]])
+matrix1 = Matrix([[1, 2],
+ [3, 4]])
+matrix *= matrix1
+# 7, 10
+# 15, 22
+```
+You can also clear or fill the matrix with any numbers!
+```python
+matrix = Matrix([[1, 2],
+ [3, 4]])
+# 1 2
+# 3 4
+
+matrix.clear()
+# 0 0
+# 0 0
+
+matrix.fill()
+# 0 0
+# 0 0
+
+matrix.fill(7)
+# 7 7
+# 7 7
+```
+you can also edit individual parts of the matrix
+```python
+matrix.setAt(0, 0, 8)
+# 8 7
+# 7 7
+
+a = matrix.getAt(0, 0)
+# 7
+```
+And also you can mirror the matrix:
+```python
+matrix.flip()
+# 7 7
+# 7 8
+```
+
+### ArithmeticSequence
+There are many ways to initialize an arithmetic sequence.
+```python
+ars = ArithmeticSequence(0, 2)
+ars = ArithmeticSequence([0, 2])
+ars.getElem(1) # 2
+ars.getElem(0) # 0
+ars.getElem(4) # 8
+```
+You can also get the sum of the elements
+```python
+ars = ArithmeticSequence(5, 5)
+ars.getSum(0) # 5
+ars.getSum(2) # 15
+```
+
+### GeometricSequence
+There are many ways to initialize an geometric sequence.
+```python
+ars = GeometricSequence(1, 2)
+ars = GeometricSequence([1, 2])
+ars.getElem(1) # 2
+ars.getElem(0) # 1
+ars.getElem(4) # 16
+```
+You can also get the sum of the elements
+```python
+ars = ArithmeticSequence(1, 2)
+ars.getSum(0) # 1
+ars.getSum(2) # 7
+ars.getSum(1) # 3
+```
+
+## utils
+This module can make your life much easier.
+```python
+def smthDef(arg1, arg2, **kwargs):
+ print(getValue(kwargs, "argument", None))
+# getValue - abbreviation of kwargs["argument"] if "argument" in kwargs else None
+
+downloadFileFromUrl("url", "path to file")
+# this method downloads the file from the link and places it in the specified path.
+
+updateLibrary("0.2.42")
+# this method automatically updates the library to the specified version.
+# if no version is specified, the library is updated to the latest version.
+
+lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
+print(splitList(lst, 2))
+# [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
+
+lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
+print(splitList(lst, 3))
+# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0]]
+# the splitList method tries to divide the passed list into equal parts
+
+timer = Timer()
+# Timer-class for calling certain functions after a certain time.
+
+@timer.after(1000)
+# after method run this function after 1000 milliseconds
+def hi():
+ print("hello world")
+
+@timer.afterEvery(100, 1000)
+# the after Every method starts this function after 100 milliseconds and will call it every subsequent 1000 milliseconds
+def hello(): print("hello")
+
+timer.cancel()
+# when the timer method is called.cancel will automatically close all running timers of this timer
+
+```
+
+## extra
+This module, like eMath, must be imported separately
+```python
+from social_ethosa.extra import *
+```
+### EList:
+```python
+lst1 = EList() # create []
+lst2 = EList("string") # create ["s", "t", "r", "i", "n", "g"]
+lst3 = EList(1, 2, 3) # create [1, 2, 3]
+lst4 = EList([1, 2, 3]) # create [1, 2, 3]
+```
+all the methods of normal lists are present in this, however there are a few features here
+```python
+lst1 += 1 # [1]
+lst1 += [1, 2] # [1, 1, 2]
+lst1 += EList(3, 4) # [1, 1, 2, 3, 4]
+lst1.clear() # []
+lst1 += [1, 2, 3] # [1, 2, 3]
+lst1.split(1) # [[1], [2], [3]]
+lst1.clear()
+lst1 += [1, 2, 3]
+lst1[2] # 3
+lst1[3] # error
+lst1[3] = 4 # working!
+lst1 # [1, 2, 3, 4]
+lst1.len() == len(lst1) # True
+lst1.sum() == sum(lst1) # True
+lst1.standartItem(0)
+lst1[8] = 1
+lst1 # [1, 2, 3, 4, 0, 0, 0, 0, 1]
+```
+There are also non-standard methods, for example:
+```python
+lst1.binarySearch(1) # 0
+lst1.interpolationSearch(1) # 0
+lst1.sortA(EList.GNOME_SORT) # [0, 0, 0, 0, 1, 1, 2, 3, 4]
+```
+
+### LogManager
+```python
+LogManager("filename.txt", "text for log")
+# or
+with LogManager("filename.txt") as log:
+ log.write("text for log")
+```
+### MarkovChains
+```python
+mchains = MarkovChains()
+mchains.addChain("name", "hello")
+mchains.addChain("hello", "name")
+mchains.generateSequence(5, auth="name")
+# ["hello", "name", "hello", "name", "hello"]
+
+mchains = MarkovChains()
+mchains.execute("name => hello => c <=> ban => name => c")
+mchains.generateSequence(5) # ['c', 'ban', 'name', 'hello', 'c']
+```
+
+### AMarkov
+Also you can easily use Markov algorithm
+```python
+m = AMarkov()
+m.addRule("1", "0|")
+m.addRule("|0", "||0")
+m.addRule("0", "")
+m.compile("101") # |||||
+```
+
+### EQueue
+There is an queue here
+```python
+queue = EQueue()
+for i in range(10):
+ queue.add(i)
+queue.len() # 10
+test = ", ".join("%s" % queue.getRandom() for i in range(queue.len()))
+queue.len() # 0
+test # 8, 1, 9, 0, 6, 4, 2, 5, 3, 7
+```
+
+
+
+
+%package -n python3-social-ethosa
+Summary: The social ethosa library for Python
+Provides: python-social-ethosa
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-social-ethosa
+<h1 align="center">Social-ethosa</h1>
+
+A Python library that uses requests
+Documentation in other languages
+- [Russian](https://github.com/Ethosa/social_ethosa/blob/master/README_RU.md)
+
+[Changelog](https://github.com/Ethosa/social_ethosa/blob/master/ChangeLog.md)
+
+Examples:
+- [Inline keyboard](https://github.com/Ethosa/social_ethosa/tree/master/examples/keyboard_inline.py)
+- [Standart keyboard](https://github.com/Ethosa/social_ethosa/tree/master/examples/keyboard_standart.py)
+- [Receiving new messages by the group](https://github.com/Ethosa/social_ethosa/tree/master/examples/group_messages.py)
+- [Receiving new messages by the group (OOP)](https://github.com/Ethosa/social_ethosa/tree/master/examples/group_messages_oop.py)
+- [Receiving new messages by the user](https://github.com/Ethosa/social_ethosa/tree/master/examples/user_messages.py)
+- [Receiving new messages by the user (OOP)](https://github.com/Ethosa/social_ethosa/tree/master/examples/user_messages_oop.py)
+- [Keyboard buttons](https://github.com/Ethosa/social_ethosa/blob/master/examples/buttons.py)
+- [Files upload](https://github.com/Ethosa/social_ethosa/blob/master/examples/uploadFilesVk.py)
+
+## Get started
+Installation: `pip install --upgrade social-ethosa`
+Import:
+```python
+from social_ethosa import *
+```
+
+## Vkcom
+```python
+vk = Vk(token="Your token is here", group_id=12345, debug=True, lang="en")
+# the group_id parameter should be used if you are going to log in through a group.
+# In this example, we will use group authorization.
+
+@vk.on_message_new
+# This decorator is an event handler that executes the function passed to it on a new message
+# The decorator's name is taken from the official names, but with the prefix " on_"
+# https://vk.com/dev/groups_events
+def getMessage(message):
+ text = message.text
+ peer_id = message.peer_id
+ from_id = message.from_id
+ attachments = message.attachments
+```
+
+using the file Uploader:
+```python
+vk.uploader.getUploadUrl("message_photo") # getting a link to upload files
+# you can also pass other arguments (argument=value)
+# to get the rest of the UploadUrl names, use the function
+# uploader.getAllTypes
+```
+upload files:
+```python
+response = vk.uploader.uploadFile("path") # you can also pass other arguments (argument=value)
+```
+
+Some audio methods are also available in my library:
+```python
+login = "89007003535"
+password = "qwertyuiop"
+
+audio = Audio(login=login, password=password, debug=1)
+audios = audio.get()
+# Since the audio methods are not available in the official API, I had to make a parser of the site
+```
+## Yandex api
+Using Yandex api:
+```python
+TOKEN = "translate token"
+yt = YTranslator(token=TOKEN)
+text = "Пайтон - хороший язык программирования"
+response = yt.translate(text=text, lang="en") # Text translation
+print(response)
+```
+## Trace moe
+Using the [TraceMoe api](https://trace):
+```python
+tracemoe = TraceMoe() # initialization for future use
+# In directory with script there is screenshot from anime " a. png"
+response = tracemoe.search("a.png", False, 1)
+# param 1 - path to image or image url
+# param 2 - True, if param 1 is link
+# param 3 - filter search
+```
+![Image did not load](https://i.pinimg.com/originals/33/55/37/335537e3904b0a3b204364907b22622f.jpg)
+
+If the anime is found, you should get a video preview of the found moment:
+```python
+video = tracemoe.getVideo(response, mute=0) # The mute parameter must be 1 if you want to get video without sound
+tracemoe.writeFile("file.mp4", video)
+# param 1 is a path to write file
+# param 2 is a video received by the get Video method
+```
+
+## BotWrapper
+In the library there is a wrapper for bots!
+Initialization:
+```python
+bw = BotWrapper()
+```
+Getting a random date
+```python
+date = bw.randomDate(fromYear="2001", toYear="3001")
+# Returned: string
+# The fromYear and toYear parameters are optional
+```
+
+## BetterBotBase
+This class uses pickle to maintain the database.
+Let's initialize this class.
+```python
+bbs = BetterBotBase("users folder", "dat")
+# The first argument is the name of the folder where users will be stored
+# the second argument is the Postfix of the files, in our case the files will look like this:
+# 123123123.dat
+```
+
+BetterBotBase can also be used with Vkcom:
+```python
+@vk.on_message_new
+def getNewMessage(message):
+ from_id = message.from_id
+ if from_id > 0:
+ user = bbs.autoInstall(from_id, vk)
+# autoInstall automatically creates or loads users and returns the user for further action with it.
+```
+
+BotWrapper can also be used to interact with BetterBotBase!
+```python
+text = bw.answerPattern("Hello, <name>, your money is <money>!", user)
+# the answer Pattern method automatically substitutes variables from user,
+# thus making it a little easier to format the string
+```
+
+You can define your own templates to the database!
+```python
+# right after BetterBotBase announcement
+bbs.addPattern("countMessages", 0)
+# the first argument is the variable name
+# the second argument is the default value of the variable (when creating a user)
+```
+
+You created a template, but it was not added to the old users? not a problem!
+```python
+bbs.addNewVariable("countMessages", 0)
+# this method works the same as addPattern, but with older users
+```
+
+
+## ThisPerson api
+Initialization is quite simple
+```python
+person = ThisPerson()
+```
+
+In the class now only 3 methods to retrieve non-existent people/cats/waifu
+```python
+rperson = person.getRandomPerson()
+rcat = person.getRandomCat()
+rwaifu = person.getRandomWaifu()
+```
+
+after receiving the generated photo, it should be written to a file.
+```python
+person.writeFile("person.png", rperson)
+person.writeFile("cat.png", rcat)
+person.writeFile("waifu.png", rwaifu)
+```
+
+## Yummyanime club
+There are few methods here, as I have not found an official API. Let's get started.
+```python
+ym = YummyAnime()
+ym = YummyAnime(login="yourmail@gmail.com", password="iampassword")
+# You can log in to your account if you need to
+```
+Getting random anime
+```python
+randomAnime = ym.getRandomAnime()
+print(dir(randomAnime))
+print(randomAnime)
+```
+You can also get a list of anime updates
+```python
+updates = ym.getUpdates()
+anime = updates[0].open() # You will get the same object that the getRandomAnime() method returns
+print(updates)
+print(anime)
+```
+And also you can view your profile
+```python
+profile = ym.getProfile()
+print(profile)
+```
+
+## bloggercom api
+Module to work with [blogger.com](https://blogger.com)
+Initialization:
+```python
+blogger = Blogger(apiKey="Your api key")
+```
+
+get blog by id:
+```python
+blog = blogger.blogs.get(123123)
+print(blog["name"]) # You can use the resulting object as a dictionary
+print(blog.name) # or as an object :/
+print(blog)
+```
+get blog by url:
+```python
+blog = blogger.blogs.getByUrl("https://meethosa.blogspot.com")
+```
+get posts by blog id
+```python
+posts = blogger.posts.get(123123)
+```
+get pages by blog id
+```python
+posts = blogger.pages.get(123123)
+```
+
+## eMath
+I decided that very few people will need this module, so importing it separately from the main one:
+```python
+from social_ethosa.eMath import *
+```
+### Point
+You can create an N-dimensional point:
+```python
+point = Point(0, 0, 0)
+point1 = Point(4, 2, 3)
+```
+And also you can find the Euclidean distance between them:
+```python
+distance = point.euclideanDistance(point1)
+print(distance)
+```
+### Matrix
+Also this module has a Matrix class
+```python
+matrix = Matrix(3, 3) # Creating a 3x3 matrix
+matrix1 = Matrix([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]]) # Creating a 3x3 matrix
+```
+You can transpose the matrix
+```python
+matrix1.transpose()
+# 1 4 7
+# 2 5 8
+# 3 6 9
+```
+And multiply the matrix by the number
+```python
+matrix1 *= 3
+# 3 12 21
+# 6 15 24
+# 9 18 27
+```
+The addition of two matrices is also possible
+```python
+matrix2 = Matrix([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]])
+matrix1 += matrix2
+# 4 14 24
+# 10 20 30
+# 16 26 36
+```
+Matrix multiplication? No problem!
+```python
+matrix = Matrix([[1, 2, 3],
+ [4, 5, 6]])
+matrix1 = Matrix([[1, 2],
+ [3, 4],
+ [5, 6]])
+matrix *= matrix1
+# 22, 28
+# 49, 64
+
+matrix = Matrix([[1, 2],
+ [3, 4]])
+matrix1 = Matrix([[1, 2],
+ [3, 4]])
+matrix *= matrix1
+# 7, 10
+# 15, 22
+```
+You can also clear or fill the matrix with any numbers!
+```python
+matrix = Matrix([[1, 2],
+ [3, 4]])
+# 1 2
+# 3 4
+
+matrix.clear()
+# 0 0
+# 0 0
+
+matrix.fill()
+# 0 0
+# 0 0
+
+matrix.fill(7)
+# 7 7
+# 7 7
+```
+you can also edit individual parts of the matrix
+```python
+matrix.setAt(0, 0, 8)
+# 8 7
+# 7 7
+
+a = matrix.getAt(0, 0)
+# 7
+```
+And also you can mirror the matrix:
+```python
+matrix.flip()
+# 7 7
+# 7 8
+```
+
+### ArithmeticSequence
+There are many ways to initialize an arithmetic sequence.
+```python
+ars = ArithmeticSequence(0, 2)
+ars = ArithmeticSequence([0, 2])
+ars.getElem(1) # 2
+ars.getElem(0) # 0
+ars.getElem(4) # 8
+```
+You can also get the sum of the elements
+```python
+ars = ArithmeticSequence(5, 5)
+ars.getSum(0) # 5
+ars.getSum(2) # 15
+```
+
+### GeometricSequence
+There are many ways to initialize an geometric sequence.
+```python
+ars = GeometricSequence(1, 2)
+ars = GeometricSequence([1, 2])
+ars.getElem(1) # 2
+ars.getElem(0) # 1
+ars.getElem(4) # 16
+```
+You can also get the sum of the elements
+```python
+ars = ArithmeticSequence(1, 2)
+ars.getSum(0) # 1
+ars.getSum(2) # 7
+ars.getSum(1) # 3
+```
+
+## utils
+This module can make your life much easier.
+```python
+def smthDef(arg1, arg2, **kwargs):
+ print(getValue(kwargs, "argument", None))
+# getValue - abbreviation of kwargs["argument"] if "argument" in kwargs else None
+
+downloadFileFromUrl("url", "path to file")
+# this method downloads the file from the link and places it in the specified path.
+
+updateLibrary("0.2.42")
+# this method automatically updates the library to the specified version.
+# if no version is specified, the library is updated to the latest version.
+
+lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
+print(splitList(lst, 2))
+# [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
+
+lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
+print(splitList(lst, 3))
+# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0]]
+# the splitList method tries to divide the passed list into equal parts
+
+timer = Timer()
+# Timer-class for calling certain functions after a certain time.
+
+@timer.after(1000)
+# after method run this function after 1000 milliseconds
+def hi():
+ print("hello world")
+
+@timer.afterEvery(100, 1000)
+# the after Every method starts this function after 100 milliseconds and will call it every subsequent 1000 milliseconds
+def hello(): print("hello")
+
+timer.cancel()
+# when the timer method is called.cancel will automatically close all running timers of this timer
+
+```
+
+## extra
+This module, like eMath, must be imported separately
+```python
+from social_ethosa.extra import *
+```
+### EList:
+```python
+lst1 = EList() # create []
+lst2 = EList("string") # create ["s", "t", "r", "i", "n", "g"]
+lst3 = EList(1, 2, 3) # create [1, 2, 3]
+lst4 = EList([1, 2, 3]) # create [1, 2, 3]
+```
+all the methods of normal lists are present in this, however there are a few features here
+```python
+lst1 += 1 # [1]
+lst1 += [1, 2] # [1, 1, 2]
+lst1 += EList(3, 4) # [1, 1, 2, 3, 4]
+lst1.clear() # []
+lst1 += [1, 2, 3] # [1, 2, 3]
+lst1.split(1) # [[1], [2], [3]]
+lst1.clear()
+lst1 += [1, 2, 3]
+lst1[2] # 3
+lst1[3] # error
+lst1[3] = 4 # working!
+lst1 # [1, 2, 3, 4]
+lst1.len() == len(lst1) # True
+lst1.sum() == sum(lst1) # True
+lst1.standartItem(0)
+lst1[8] = 1
+lst1 # [1, 2, 3, 4, 0, 0, 0, 0, 1]
+```
+There are also non-standard methods, for example:
+```python
+lst1.binarySearch(1) # 0
+lst1.interpolationSearch(1) # 0
+lst1.sortA(EList.GNOME_SORT) # [0, 0, 0, 0, 1, 1, 2, 3, 4]
+```
+
+### LogManager
+```python
+LogManager("filename.txt", "text for log")
+# or
+with LogManager("filename.txt") as log:
+ log.write("text for log")
+```
+### MarkovChains
+```python
+mchains = MarkovChains()
+mchains.addChain("name", "hello")
+mchains.addChain("hello", "name")
+mchains.generateSequence(5, auth="name")
+# ["hello", "name", "hello", "name", "hello"]
+
+mchains = MarkovChains()
+mchains.execute("name => hello => c <=> ban => name => c")
+mchains.generateSequence(5) # ['c', 'ban', 'name', 'hello', 'c']
+```
+
+### AMarkov
+Also you can easily use Markov algorithm
+```python
+m = AMarkov()
+m.addRule("1", "0|")
+m.addRule("|0", "||0")
+m.addRule("0", "")
+m.compile("101") # |||||
+```
+
+### EQueue
+There is an queue here
+```python
+queue = EQueue()
+for i in range(10):
+ queue.add(i)
+queue.len() # 10
+test = ", ".join("%s" % queue.getRandom() for i in range(queue.len()))
+queue.len() # 0
+test # 8, 1, 9, 0, 6, 4, 2, 5, 3, 7
+```
+
+
+
+
+%package help
+Summary: Development documents and examples for social-ethosa
+Provides: python3-social-ethosa-doc
+%description help
+<h1 align="center">Social-ethosa</h1>
+
+A Python library that uses requests
+Documentation in other languages
+- [Russian](https://github.com/Ethosa/social_ethosa/blob/master/README_RU.md)
+
+[Changelog](https://github.com/Ethosa/social_ethosa/blob/master/ChangeLog.md)
+
+Examples:
+- [Inline keyboard](https://github.com/Ethosa/social_ethosa/tree/master/examples/keyboard_inline.py)
+- [Standart keyboard](https://github.com/Ethosa/social_ethosa/tree/master/examples/keyboard_standart.py)
+- [Receiving new messages by the group](https://github.com/Ethosa/social_ethosa/tree/master/examples/group_messages.py)
+- [Receiving new messages by the group (OOP)](https://github.com/Ethosa/social_ethosa/tree/master/examples/group_messages_oop.py)
+- [Receiving new messages by the user](https://github.com/Ethosa/social_ethosa/tree/master/examples/user_messages.py)
+- [Receiving new messages by the user (OOP)](https://github.com/Ethosa/social_ethosa/tree/master/examples/user_messages_oop.py)
+- [Keyboard buttons](https://github.com/Ethosa/social_ethosa/blob/master/examples/buttons.py)
+- [Files upload](https://github.com/Ethosa/social_ethosa/blob/master/examples/uploadFilesVk.py)
+
+## Get started
+Installation: `pip install --upgrade social-ethosa`
+Import:
+```python
+from social_ethosa import *
+```
+
+## Vkcom
+```python
+vk = Vk(token="Your token is here", group_id=12345, debug=True, lang="en")
+# the group_id parameter should be used if you are going to log in through a group.
+# In this example, we will use group authorization.
+
+@vk.on_message_new
+# This decorator is an event handler that executes the function passed to it on a new message
+# The decorator's name is taken from the official names, but with the prefix " on_"
+# https://vk.com/dev/groups_events
+def getMessage(message):
+ text = message.text
+ peer_id = message.peer_id
+ from_id = message.from_id
+ attachments = message.attachments
+```
+
+using the file Uploader:
+```python
+vk.uploader.getUploadUrl("message_photo") # getting a link to upload files
+# you can also pass other arguments (argument=value)
+# to get the rest of the UploadUrl names, use the function
+# uploader.getAllTypes
+```
+upload files:
+```python
+response = vk.uploader.uploadFile("path") # you can also pass other arguments (argument=value)
+```
+
+Some audio methods are also available in my library:
+```python
+login = "89007003535"
+password = "qwertyuiop"
+
+audio = Audio(login=login, password=password, debug=1)
+audios = audio.get()
+# Since the audio methods are not available in the official API, I had to make a parser of the site
+```
+## Yandex api
+Using Yandex api:
+```python
+TOKEN = "translate token"
+yt = YTranslator(token=TOKEN)
+text = "Пайтон - хороший язык программирования"
+response = yt.translate(text=text, lang="en") # Text translation
+print(response)
+```
+## Trace moe
+Using the [TraceMoe api](https://trace):
+```python
+tracemoe = TraceMoe() # initialization for future use
+# In directory with script there is screenshot from anime " a. png"
+response = tracemoe.search("a.png", False, 1)
+# param 1 - path to image or image url
+# param 2 - True, if param 1 is link
+# param 3 - filter search
+```
+![Image did not load](https://i.pinimg.com/originals/33/55/37/335537e3904b0a3b204364907b22622f.jpg)
+
+If the anime is found, you should get a video preview of the found moment:
+```python
+video = tracemoe.getVideo(response, mute=0) # The mute parameter must be 1 if you want to get video without sound
+tracemoe.writeFile("file.mp4", video)
+# param 1 is a path to write file
+# param 2 is a video received by the get Video method
+```
+
+## BotWrapper
+In the library there is a wrapper for bots!
+Initialization:
+```python
+bw = BotWrapper()
+```
+Getting a random date
+```python
+date = bw.randomDate(fromYear="2001", toYear="3001")
+# Returned: string
+# The fromYear and toYear parameters are optional
+```
+
+## BetterBotBase
+This class uses pickle to maintain the database.
+Let's initialize this class.
+```python
+bbs = BetterBotBase("users folder", "dat")
+# The first argument is the name of the folder where users will be stored
+# the second argument is the Postfix of the files, in our case the files will look like this:
+# 123123123.dat
+```
+
+BetterBotBase can also be used with Vkcom:
+```python
+@vk.on_message_new
+def getNewMessage(message):
+ from_id = message.from_id
+ if from_id > 0:
+ user = bbs.autoInstall(from_id, vk)
+# autoInstall automatically creates or loads users and returns the user for further action with it.
+```
+
+BotWrapper can also be used to interact with BetterBotBase!
+```python
+text = bw.answerPattern("Hello, <name>, your money is <money>!", user)
+# the answer Pattern method automatically substitutes variables from user,
+# thus making it a little easier to format the string
+```
+
+You can define your own templates to the database!
+```python
+# right after BetterBotBase announcement
+bbs.addPattern("countMessages", 0)
+# the first argument is the variable name
+# the second argument is the default value of the variable (when creating a user)
+```
+
+You created a template, but it was not added to the old users? not a problem!
+```python
+bbs.addNewVariable("countMessages", 0)
+# this method works the same as addPattern, but with older users
+```
+
+
+## ThisPerson api
+Initialization is quite simple
+```python
+person = ThisPerson()
+```
+
+In the class now only 3 methods to retrieve non-existent people/cats/waifu
+```python
+rperson = person.getRandomPerson()
+rcat = person.getRandomCat()
+rwaifu = person.getRandomWaifu()
+```
+
+after receiving the generated photo, it should be written to a file.
+```python
+person.writeFile("person.png", rperson)
+person.writeFile("cat.png", rcat)
+person.writeFile("waifu.png", rwaifu)
+```
+
+## Yummyanime club
+There are few methods here, as I have not found an official API. Let's get started.
+```python
+ym = YummyAnime()
+ym = YummyAnime(login="yourmail@gmail.com", password="iampassword")
+# You can log in to your account if you need to
+```
+Getting random anime
+```python
+randomAnime = ym.getRandomAnime()
+print(dir(randomAnime))
+print(randomAnime)
+```
+You can also get a list of anime updates
+```python
+updates = ym.getUpdates()
+anime = updates[0].open() # You will get the same object that the getRandomAnime() method returns
+print(updates)
+print(anime)
+```
+And also you can view your profile
+```python
+profile = ym.getProfile()
+print(profile)
+```
+
+## bloggercom api
+Module to work with [blogger.com](https://blogger.com)
+Initialization:
+```python
+blogger = Blogger(apiKey="Your api key")
+```
+
+get blog by id:
+```python
+blog = blogger.blogs.get(123123)
+print(blog["name"]) # You can use the resulting object as a dictionary
+print(blog.name) # or as an object :/
+print(blog)
+```
+get blog by url:
+```python
+blog = blogger.blogs.getByUrl("https://meethosa.blogspot.com")
+```
+get posts by blog id
+```python
+posts = blogger.posts.get(123123)
+```
+get pages by blog id
+```python
+posts = blogger.pages.get(123123)
+```
+
+## eMath
+I decided that very few people will need this module, so importing it separately from the main one:
+```python
+from social_ethosa.eMath import *
+```
+### Point
+You can create an N-dimensional point:
+```python
+point = Point(0, 0, 0)
+point1 = Point(4, 2, 3)
+```
+And also you can find the Euclidean distance between them:
+```python
+distance = point.euclideanDistance(point1)
+print(distance)
+```
+### Matrix
+Also this module has a Matrix class
+```python
+matrix = Matrix(3, 3) # Creating a 3x3 matrix
+matrix1 = Matrix([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]]) # Creating a 3x3 matrix
+```
+You can transpose the matrix
+```python
+matrix1.transpose()
+# 1 4 7
+# 2 5 8
+# 3 6 9
+```
+And multiply the matrix by the number
+```python
+matrix1 *= 3
+# 3 12 21
+# 6 15 24
+# 9 18 27
+```
+The addition of two matrices is also possible
+```python
+matrix2 = Matrix([[1, 2, 3],
+ [4, 5, 6],
+ [7, 8, 9]])
+matrix1 += matrix2
+# 4 14 24
+# 10 20 30
+# 16 26 36
+```
+Matrix multiplication? No problem!
+```python
+matrix = Matrix([[1, 2, 3],
+ [4, 5, 6]])
+matrix1 = Matrix([[1, 2],
+ [3, 4],
+ [5, 6]])
+matrix *= matrix1
+# 22, 28
+# 49, 64
+
+matrix = Matrix([[1, 2],
+ [3, 4]])
+matrix1 = Matrix([[1, 2],
+ [3, 4]])
+matrix *= matrix1
+# 7, 10
+# 15, 22
+```
+You can also clear or fill the matrix with any numbers!
+```python
+matrix = Matrix([[1, 2],
+ [3, 4]])
+# 1 2
+# 3 4
+
+matrix.clear()
+# 0 0
+# 0 0
+
+matrix.fill()
+# 0 0
+# 0 0
+
+matrix.fill(7)
+# 7 7
+# 7 7
+```
+you can also edit individual parts of the matrix
+```python
+matrix.setAt(0, 0, 8)
+# 8 7
+# 7 7
+
+a = matrix.getAt(0, 0)
+# 7
+```
+And also you can mirror the matrix:
+```python
+matrix.flip()
+# 7 7
+# 7 8
+```
+
+### ArithmeticSequence
+There are many ways to initialize an arithmetic sequence.
+```python
+ars = ArithmeticSequence(0, 2)
+ars = ArithmeticSequence([0, 2])
+ars.getElem(1) # 2
+ars.getElem(0) # 0
+ars.getElem(4) # 8
+```
+You can also get the sum of the elements
+```python
+ars = ArithmeticSequence(5, 5)
+ars.getSum(0) # 5
+ars.getSum(2) # 15
+```
+
+### GeometricSequence
+There are many ways to initialize an geometric sequence.
+```python
+ars = GeometricSequence(1, 2)
+ars = GeometricSequence([1, 2])
+ars.getElem(1) # 2
+ars.getElem(0) # 1
+ars.getElem(4) # 16
+```
+You can also get the sum of the elements
+```python
+ars = ArithmeticSequence(1, 2)
+ars.getSum(0) # 1
+ars.getSum(2) # 7
+ars.getSum(1) # 3
+```
+
+## utils
+This module can make your life much easier.
+```python
+def smthDef(arg1, arg2, **kwargs):
+ print(getValue(kwargs, "argument", None))
+# getValue - abbreviation of kwargs["argument"] if "argument" in kwargs else None
+
+downloadFileFromUrl("url", "path to file")
+# this method downloads the file from the link and places it in the specified path.
+
+updateLibrary("0.2.42")
+# this method automatically updates the library to the specified version.
+# if no version is specified, the library is updated to the latest version.
+
+lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
+print(splitList(lst, 2))
+# [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
+
+lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
+print(splitList(lst, 3))
+# [[1, 2, 3], [4, 5, 6], [7, 8, 9], [0]]
+# the splitList method tries to divide the passed list into equal parts
+
+timer = Timer()
+# Timer-class for calling certain functions after a certain time.
+
+@timer.after(1000)
+# after method run this function after 1000 milliseconds
+def hi():
+ print("hello world")
+
+@timer.afterEvery(100, 1000)
+# the after Every method starts this function after 100 milliseconds and will call it every subsequent 1000 milliseconds
+def hello(): print("hello")
+
+timer.cancel()
+# when the timer method is called.cancel will automatically close all running timers of this timer
+
+```
+
+## extra
+This module, like eMath, must be imported separately
+```python
+from social_ethosa.extra import *
+```
+### EList:
+```python
+lst1 = EList() # create []
+lst2 = EList("string") # create ["s", "t", "r", "i", "n", "g"]
+lst3 = EList(1, 2, 3) # create [1, 2, 3]
+lst4 = EList([1, 2, 3]) # create [1, 2, 3]
+```
+all the methods of normal lists are present in this, however there are a few features here
+```python
+lst1 += 1 # [1]
+lst1 += [1, 2] # [1, 1, 2]
+lst1 += EList(3, 4) # [1, 1, 2, 3, 4]
+lst1.clear() # []
+lst1 += [1, 2, 3] # [1, 2, 3]
+lst1.split(1) # [[1], [2], [3]]
+lst1.clear()
+lst1 += [1, 2, 3]
+lst1[2] # 3
+lst1[3] # error
+lst1[3] = 4 # working!
+lst1 # [1, 2, 3, 4]
+lst1.len() == len(lst1) # True
+lst1.sum() == sum(lst1) # True
+lst1.standartItem(0)
+lst1[8] = 1
+lst1 # [1, 2, 3, 4, 0, 0, 0, 0, 1]
+```
+There are also non-standard methods, for example:
+```python
+lst1.binarySearch(1) # 0
+lst1.interpolationSearch(1) # 0
+lst1.sortA(EList.GNOME_SORT) # [0, 0, 0, 0, 1, 1, 2, 3, 4]
+```
+
+### LogManager
+```python
+LogManager("filename.txt", "text for log")
+# or
+with LogManager("filename.txt") as log:
+ log.write("text for log")
+```
+### MarkovChains
+```python
+mchains = MarkovChains()
+mchains.addChain("name", "hello")
+mchains.addChain("hello", "name")
+mchains.generateSequence(5, auth="name")
+# ["hello", "name", "hello", "name", "hello"]
+
+mchains = MarkovChains()
+mchains.execute("name => hello => c <=> ban => name => c")
+mchains.generateSequence(5) # ['c', 'ban', 'name', 'hello', 'c']
+```
+
+### AMarkov
+Also you can easily use Markov algorithm
+```python
+m = AMarkov()
+m.addRule("1", "0|")
+m.addRule("|0", "||0")
+m.addRule("0", "")
+m.compile("101") # |||||
+```
+
+### EQueue
+There is an queue here
+```python
+queue = EQueue()
+for i in range(10):
+ queue.add(i)
+queue.len() # 10
+test = ", ".join("%s" % queue.getRandom() for i in range(queue.len()))
+queue.len() # 0
+test # 8, 1, 9, 0, 6, 4, 2, 5, 3, 7
+```
+
+
+
+
+%prep
+%autosetup -n social-ethosa-0.6.4
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-social-ethosa -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.6.4-1
+- Package Spec generated