aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--README.md2
-rw-r--r--config.sample.py1
-rw-r--r--data/.keep0
-rw-r--r--docker-compose.yaml6
-rw-r--r--env.env.sample1
-rw-r--r--handlers/__init__.py8
-rw-r--r--handlers/gen.py18
-rw-r--r--handlers/leave.py8
-rw-r--r--handlers/member.py105
-rw-r--r--handlers/msg.py6
-rw-r--r--handlers/pin.py (renamed from handlers/poll.py)24
-rw-r--r--poetry.lock282
-rw-r--r--pyproject.toml4
-rw-r--r--requirements.txt21
-rw-r--r--shared/__init__.py4
-rw-r--r--shared/config.py3
-rw-r--r--shared/instances.py4
-rw-r--r--utils/filters.py2
19 files changed, 347 insertions, 157 deletions
diff --git a/.gitignore b/.gitignore
index 3f04cab..710696a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -125,10 +125,7 @@ venv.bak/
125.dmypy.json 125.dmypy.json
126dmypy.json 126dmypy.json
127 127
128
129# Pyre type checker 128# Pyre type checker
130.pyre/ 129.pyre/
131 130
132data/* 131env.env
133config.py
134!.keep
diff --git a/README.md b/README.md
index 8312bf7..ee98c92 100644
--- a/README.md
+++ b/README.md
@@ -4,6 +4,6 @@
4 4
5# Основные возможности 5# Основные возможности
6- Генерация текста 6- Генерация текста
7- Пробразован бржения в `.gif` форат 7- Приё заяво
8 8
9**Данного бота нельзя добавить в другую группу** 9**Данного бота нельзя добавить в другую группу**
diff --git a/config.sample.py b/config.sample.py
deleted file mode 100644
index 9124afc..0000000
--- a/config.sample.py
+++ /dev/null
@@ -1 +0,0 @@
1token = ""
diff --git a/data/.keep b/data/.keep
deleted file mode 100644
index e69de29..0000000
--- a/data/.keep
+++ /dev/null
diff --git a/docker-compose.yaml b/docker-compose.yaml
index f7f5289..91b2b7c 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -5,5 +5,9 @@ services:
5 build: "." 5 build: "."
6 restart: "always" 6 restart: "always"
7 volumes: 7 volumes:
8 - "./data/samples.txt:/app/samples.txt" 8 - "data:/app/data"
9 env_file:
10 env.env
9 11
12volumes:
13 data:
diff --git a/env.env.sample b/env.env.sample
new file mode 100644
index 0000000..13854d0
--- /dev/null
+++ b/env.env.sample
@@ -0,0 +1 @@
TOKEN="123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
diff --git a/handlers/__init__.py b/handlers/__init__.py
index 5de35a4..5608612 100644
--- a/handlers/__init__.py
+++ b/handlers/__init__.py
@@ -1,7 +1,7 @@
1from . import leave 1# isort: skip_file
2from . import msg
3from . import gen 2from . import gen
4from . import poll 3from . import pin
4from . import member
5 5
6# from . import member 6from . import msg
7from . import system 7from . import system
diff --git a/handlers/gen.py b/handlers/gen.py
index 55ea01a..a27fb86 100644
--- a/handlers/gen.py
+++ b/handlers/gen.py
@@ -6,12 +6,12 @@ from shared.instances import bot, dp
6from utils import filters as f 6from utils import filters as f
7 7
8 8
9@dp.message_handler(f.message.is_chat, commands=["gen"]) 9@dp.message_handler(commands=["gen"])
10async def сгенерировать_хуету(msg: t.Message): 10async def сгенерировать_хуету(msg: t.Message):
11 await msg.answer(получить_говно()) 11 await msg.answer(получить_говно(msg.chat.id))
12 12
13 13
14@dp.message_handler(f.message.is_chat, commands=["del"]) 14@dp.message_handler(commands=["del"])
15async def удалить_хуету(msg: t.Message): 15async def удалить_хуету(msg: t.Message):
16 await msg.delete() 16 await msg.delete()
17 17
@@ -43,13 +43,11 @@ async def изменить_шанс_срания(msg: t.Message):
43 await msg.answer(f"Я сру с шансом в: {ins.gen_chance.get(msg.chat.id, 10)}%") 43 await msg.answer(f"Я сру с шансом в: {ins.gen_chance.get(msg.chat.id, 10)}%")
44 44
45 45
46@dp.message_handler( 46@dp.message_handler(f.message.chance, content_types=[t.ContentType.ANY])
47 f.message.chance, f.message.is_chat, content_types=[t.ContentType.ANY]
48)
49async def срать_сообщение_с_шансом(msg: t.Message): 47async def срать_сообщение_с_шансом(msg: t.Message):
50 await msg.answer(получить_говно()) 48 await msg.answer(получить_говно(msg.chat.id))
51 49
52 50
53def получить_говно() -> str: 51def получить_говно(id: int) -> str:
54 samples = mc.util.load_txt_samples("samples.txt", separator="§") 52 samples = mc.util.load_txt_samples(f"data/{id}", separator="§")
55 return mc.StringGenerator(samples=samples).generate_string().capitalize() 53 return mc.StringGenerator(samples=samples).generate_string()
diff --git a/handlers/leave.py b/handlers/leave.py
index 990795f..198e847 100644
--- a/handlers/leave.py
+++ b/handlers/leave.py
@@ -5,9 +5,5 @@ from utils import filters as f
5 5
6 6
7@dp.my_chat_member_handler(f.user.add_member) 7@dp.my_chat_member_handler(f.user.add_member)
8async def пососи(upd: t.ChatMemberUpdated): 8async def создатьтемплейты(upd: t.ChatMemberUpdated):
9 if upd.chat.id not in (-1001444484622, -1001197098429): 9 open(f"data/{upd.chat.id}", "w").close()
10 await upd.bot.send_message(
11 upd.chat.id, "https://www.youtube.com/watch?v=xdDhmagsXrc"
12 )
13 await upd.chat.leave()
diff --git a/handlers/member.py b/handlers/member.py
index d242779..3704c33 100644
--- a/handlers/member.py
+++ b/handlers/member.py
@@ -1,66 +1,69 @@
1from asyncio import sleep
2
3from aiogram import types as t 1from aiogram import types as t
4 2
5from shared.instances import bot, dp 3from shared.instances import bot, dp
6from utils import filters as f 4from utils import filters as f
7 5
8unmute = t.ChatPermissions(*[True] * 8) 6request_queue: list[int] = []
9mute = t.ChatPermissions(*[False] * 8)
10 7
11 8
12@dp.chat_member_handler(f.user.add_member) 9@dp.chat_join_request_handler()
13async def запрашиваем_пропуск(upd: t.ChatMemberUpdated): 10async def приём_запроса(cjr: t.ChatJoinRequest):
14 pass_user_markup = t.InlineKeyboardMarkup().add( 11 if cjr.from_user.id not in request_queue:
15 t.InlineKeyboardButton( 12 request_queue.append(cjr.from_user.id)
16 "Да", callback_data=f"pass_user@{upd.new_chat_member.user.id}" 13 r = await bot.send_message(
17 ), 14 cjr.chat.id,
18 t.InlineKeyboardButton( 15 f'<a href="tg://user?id={cjr.from_user.id}">{cjr.from_user.mention}</a> хочет в чат',
19 "Нет", callback_data=f"kick_user@{upd.new_chat_member.user.id}" 16 parse_mode=t.ParseMode.HTML,
20 ), 17 )
21 ) 18 await bot.send_poll(
22 await upd.chat.restrict(upd.new_chat_member.user.id, mute) 19 cjr.chat.id,
23 await bot.send_message( 20 "Пускаем ?",
24 upd.chat.id, 21 [
25 f'Это наш <a href="tg://user?id={upd.new_chat_member.user.id}">чел</a> ?', 22 "Да",
26 parse_mode=t.ParseMode.HTML, 23 "Нет",
27 reply_markup=pass_user_markup, 24 ],
28 ) 25 False,
26 reply_to_message_id=r.message_id,
27 open_period=600,
28 reply_markup=t.InlineKeyboardMarkup().add(
29 t.InlineKeyboardButton(
30 "Проверить опрос",
31 callback_data=f"check_request_poll:{cjr.from_user.id}",
32 )
33 ),
34 )
35 await bot.send_message(
36 cjr.from_user.id, "Заявка на вступление в группу будет вскоре рассмотрена"
37 )
29 38
30 39
31@dp.callback_query_handler( 40@dp.callback_query_handler(
32 f.message.is_chat, lambda clb: clb.data.split("@")[0] == "pass_user" 41 f.message.is_chat, lambda clb: clb.data.split(":")[0] == "check_request_poll"
33) 42)
34async def пропустить(clb: t.CallbackQuery): 43async def проверить_запрос(clb: t.CallbackQuery):
35 member = await clb.message.chat.get_member(clb.from_user.id) 44 poll = clb.message.poll
45 msg = clb.message
46 data = clb.data.split(":")
47 user_id = int(data[1])
36 48
37 if not member.is_chat_admin(): 49 if poll.total_voter_count < 4:
38 await clb.answer("Ты не админ") 50 await clb.answer(f"Нужно хотябы 4 голоса, сейчас {poll.total_voter_count}")
39 return
40 else: 51 else:
41 await clb.message.chat.restrict(int(clb.data.split("@")[1]), unmute) 52 if not poll.is_closed:
42 53 await bot.stop_poll(msg.chat.id, msg.message_id)
43 await clb.message.delete()
44 await clb.message.answer(
45 f'<a href="tg://user?id={int(clb.data.split("@")[1])}">Ананасер</a> добро пожаловать в чат для <a href="tg://user?id={clb.from_user.id}">крутых</a>',
46 parse_mode=t.ParseMode.HTML,
47 )
48 54
55 request_queue.remove(user_id)
56 yes = poll.options[0].voter_count
57 no = poll.options[1].voter_count
58 win = max(yes, no)
49 59
50@dp.callback_query_handler( 60 if win == yes:
51 f.message.is_chat, lambda clb: clb.data.split("@")[0] == "kick_user" 61 await bot.approve_chat_join_request(msg.chat.id, user_id)
52) 62 await bot.send_message(
53async def выкинуть(clb: t.CallbackQuery): 63 user_id, "Ваша заявка на вступление принята, добро пожаловать в группу"
54 member = await clb.message.chat.get_member(clb.from_user.id) 64 )
55 65 elif win == no:
56 if not member.is_chat_admin(): 66 await bot.decline_chat_join_request(msg.chat.id, user_id)
57 await clb.answer("Ты не админ") 67 await bot.send_message(user_id, "Ваша заявка на вступление НЕ принята")
58 return 68 if not msg.chat.has_protected_content:
59 else: 69 await msg.forward(user_id)
60 await clb.message.chat.unban(int(clb.data.split("@")[1]), False)
61
62 await clb.message.delete()
63 await clb.message.answer(
64 f'Эта группа для <a href="tg://user?id={clb.from_user.id}">крутых</a>',
65 parse_mode=t.ParseMode.HTML,
66 )
diff --git a/handlers/msg.py b/handlers/msg.py
index 12dfa6c..dca295f 100644
--- a/handlers/msg.py
+++ b/handlers/msg.py
@@ -8,13 +8,11 @@ async def сосалка(msg: t.Message):
8 text = msg.text or msg.caption 8 text = msg.text or msg.caption
9 if text.startswith("/"): 9 if text.startswith("/"):
10 return False 10 return False
11 with open("samples.txt", "a+") as file: 11 with open(f"data/{msg.chat.id}", "a+") as file:
12 file.write(text.lower().replace("§", "") + "§") 12 file.write(text.lower().replace("§", "") + "§")
13 return False 13 return False
14 14
15 15
16@dp.message_handler( 16@dp.message_handler(f.message.has_text, сосалка, content_types=[t.ContentType.ANY])
17 f.message.is_chat, f.message.has_text, сосалка, content_types=[t.ContentType.ANY]
18)
19async def ХУЙ(): 17async def ХУЙ():
20 pass 18 pass
diff --git a/handlers/poll.py b/handlers/pin.py
index 8e7b542..dc08633 100644
--- a/handlers/poll.py
+++ b/handlers/pin.py
@@ -5,20 +5,22 @@ from aiogram import types as t
5from shared.instances import bot, dp 5from shared.instances import bot, dp
6from utils import filters as f 6from utils import filters as f
7 7
8pin_reply_markup = t.InlineKeyboardMarkup().add(
9 t.InlineKeyboardButton("Проверить сейчас", callback_data="check_pin_poll")
10)
11
12 8
13@dp.message_handler(f.message.is_chat, commands=["pin"]) 9@dp.message_handler(f.message.is_chat, commands=["pin"])
14async def закрепить_хуету(msg: t.Message): 10async def закрепить_хуету(msg: t.Message):
15 await msg.delete() 11 await msg.delete()
16 if msg.reply_to_message: 12 if msg.reply_to_message:
17 await msg.reply_to_message.reply_poll( 13 r = await msg.reply_to_message.reply(
14 f'<a href="tg://user?id={msg.from_user.id}">{msg.from_user.mention}</a> хочет закрепить сообщение',
15 parse_mode=t.ParseMode.HTML,
16 )
17 await r.reply_poll(
18 "Закрепить ?", 18 "Закрепить ?",
19 ["Да", "УДАЛИ НАХУЙ", "Нет"], 19 ["Да", "УДАЛИ НАХУЙ", "Нет"],
20 close_date=datetime.now() + timedelta(minutes=10), 20 close_date=datetime.now() + timedelta(minutes=10),
21 reply_markup=pin_reply_markup, 21 reply_markup=t.InlineKeyboardMarkup().add(
22 t.InlineKeyboardButton("Проверить опрос", callback_data="check_pin_poll")
23 ),
22 ) 24 )
23 else: 25 else:
24 await msg.answer("Ты умник, ответь на сообщение") 26 await msg.answer("Ты умник, ответь на сообщение")
@@ -29,14 +31,12 @@ async def проверить_закреп(clb: t.CallbackQuery):
29 poll = clb.message.poll 31 poll = clb.message.poll
30 msg = clb.message 32 msg = clb.message
31 33
32 if poll.total_voter_count <= 0: 34 if poll.total_voter_count < 2:
33 await clb.answer("Видишь голоса? Вот и я невижу") 35 await clb.answer(f"Нужно хотябы 2 голоса, сейчас {poll.total_voter_count}")
34 elif poll.total_voter_count <= 2:
35 await clb.answer("Видишь голоса? Они есть, но их мало")
36 else: 36 else:
37 if not poll.is_closed: 37 if not poll.is_closed:
38 await bot.stop_poll(msg.chat.id, msg.message_id) 38 await bot.stop_poll(msg.chat.id, msg.message_id)
39 poll.is_closed = True 39
40 yes = poll.options[0].voter_count 40 yes = poll.options[0].voter_count
41 delete = poll.options[1].voter_count 41 delete = poll.options[1].voter_count
42 win = max(yes, delete) 42 win = max(yes, delete)
@@ -45,6 +45,4 @@ async def проверить_закреп(clb: t.CallbackQuery):
45 await msg.reply_to_message.pin() 45 await msg.reply_to_message.pin()
46 elif win == delete: 46 elif win == delete:
47 await msg.reply_to_message.delete() 47 await msg.reply_to_message.delete()
48
49 if poll.is_closed:
50 await msg.delete() 48 await msg.delete()
diff --git a/poetry.lock b/poetry.lock
index 90c31a4..d0db6c4 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,6 +1,6 @@
1[[package]] 1[[package]]
2name = "aiogram" 2name = "aiogram"
3version = "2.20" 3version = "2.21"
4description = "Is a pretty simple and fully asynchronous framework for Telegram Bot API" 4description = "Is a pretty simple and fully asynchronous framework for Telegram Bot API"
5category = "main" 5category = "main"
6optional = false 6optional = false
@@ -81,7 +81,7 @@ pytz = ">=2015.7"
81 81
82[[package]] 82[[package]]
83name = "black" 83name = "black"
84version = "22.3.0" 84version = "22.6.0"
85description = "The uncompromising code formatter." 85description = "The uncompromising code formatter."
86category = "dev" 86category = "dev"
87optional = false 87optional = false
@@ -92,7 +92,7 @@ click = ">=8.0.0"
92mypy-extensions = ">=0.4.3" 92mypy-extensions = ">=0.4.3"
93pathspec = ">=0.9.0" 93pathspec = ">=0.9.0"
94platformdirs = ">=2" 94platformdirs = ">=2"
95tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} 95tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
96 96
97[package.extras] 97[package.extras]
98colorama = ["colorama (>=0.4.3)"] 98colorama = ["colorama (>=0.4.3)"]
@@ -102,26 +102,26 @@ uvloop = ["uvloop (>=0.15.2)"]
102 102
103[[package]] 103[[package]]
104name = "certifi" 104name = "certifi"
105version = "2021.10.8" 105version = "2022.6.15"
106description = "Python package for providing Mozilla's CA Bundle." 106description = "Python package for providing Mozilla's CA Bundle."
107category = "main" 107category = "main"
108optional = false 108optional = false
109python-versions = "*" 109python-versions = ">=3.6"
110 110
111[[package]] 111[[package]]
112name = "charset-normalizer" 112name = "charset-normalizer"
113version = "2.0.12" 113version = "2.1.0"
114description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." 114description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
115category = "main" 115category = "main"
116optional = false 116optional = false
117python-versions = ">=3.5.0" 117python-versions = ">=3.6.0"
118 118
119[package.extras] 119[package.extras]
120unicode_backport = ["unicodedata2"] 120unicode_backport = ["unicodedata2"]
121 121
122[[package]] 122[[package]]
123name = "click" 123name = "click"
124version = "8.1.2" 124version = "8.1.3"
125description = "Composable command line interface toolkit" 125description = "Composable command line interface toolkit"
126category = "dev" 126category = "dev"
127optional = false 127optional = false
@@ -132,7 +132,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""}
132 132
133[[package]] 133[[package]]
134name = "colorama" 134name = "colorama"
135version = "0.4.4" 135version = "0.4.5"
136description = "Cross-platform colored terminal text." 136description = "Cross-platform colored terminal text."
137category = "dev" 137category = "dev"
138optional = false 138optional = false
@@ -169,6 +169,21 @@ colors = ["colorama (>=0.4.3,<0.5.0)"]
169plugins = ["setuptools"] 169plugins = ["setuptools"]
170 170
171[[package]] 171[[package]]
172name = "jedi"
173version = "0.18.1"
174description = "An autocompletion tool for Python that can be used for text editors."
175category = "dev"
176optional = false
177python-versions = ">=3.6"
178
179[package.dependencies]
180parso = ">=0.8.0,<0.9.0"
181
182[package.extras]
183qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
184testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"]
185
186[[package]]
172name = "mc.py" 187name = "mc.py"
173version = "3.1.1" 188version = "3.1.1"
174description = "String generator based on Markov process" 189description = "String generator based on Markov process"
@@ -185,6 +200,24 @@ optional = false
185python-versions = ">=3.7" 200python-versions = ">=3.7"
186 201
187[[package]] 202[[package]]
203name = "mypy"
204version = "0.961"
205description = "Optional static typing for Python"
206category = "dev"
207optional = false
208python-versions = ">=3.6"
209
210[package.dependencies]
211mypy-extensions = ">=0.4.3"
212tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""}
213typing-extensions = ">=3.10"
214
215[package.extras]
216dmypy = ["psutil (>=4.0)"]
217python2 = ["typed-ast (>=1.4.0,<2)"]
218reports = ["lxml"]
219
220[[package]]
188name = "mypy-extensions" 221name = "mypy-extensions"
189version = "0.4.3" 222version = "0.4.3"
190description = "Experimental type system extensions for programs checked with the mypy typechecker." 223description = "Experimental type system extensions for programs checked with the mypy typechecker."
@@ -193,6 +226,18 @@ optional = false
193python-versions = "*" 226python-versions = "*"
194 227
195[[package]] 228[[package]]
229name = "parso"
230version = "0.8.3"
231description = "A Python Parser"
232category = "dev"
233optional = false
234python-versions = ">=3.6"
235
236[package.extras]
237qa = ["flake8 (==3.8.3)", "mypy (==0.782)"]
238testing = ["docopt", "pytest (<6.0.0)"]
239
240[[package]]
196name = "pathspec" 241name = "pathspec"
197version = "0.9.0" 242version = "0.9.0"
198description = "Utility library for gitignore style pattern matching of file paths." 243description = "Utility library for gitignore style pattern matching of file paths."
@@ -213,6 +258,103 @@ docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehint
213test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] 258test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"]
214 259
215[[package]] 260[[package]]
261name = "pluggy"
262version = "1.0.0"
263description = "plugin and hook calling mechanisms for python"
264category = "dev"
265optional = false
266python-versions = ">=3.6"
267
268[package.extras]
269dev = ["pre-commit", "tox"]
270testing = ["pytest", "pytest-benchmark"]
271
272[[package]]
273name = "pyls-isort"
274version = "0.2.2"
275description = "Isort plugin for python-lsp-server"
276category = "dev"
277optional = false
278python-versions = "*"
279
280[package.dependencies]
281isort = "*"
282python-lsp-server = "*"
283
284[[package]]
285name = "pylsp-mypy"
286version = "0.6.2"
287description = "Mypy linter for the Python LSP Server"
288category = "dev"
289optional = false
290python-versions = ">=3.7"
291
292[package.dependencies]
293mypy = "*"
294python-lsp-server = "*"
295toml = "*"
296
297[package.extras]
298test = ["tox", "pytest", "pytest-cov", "coverage"]
299
300[[package]]
301name = "python-lsp-black"
302version = "1.2.1"
303description = "Black plugin for the Python LSP Server"
304category = "dev"
305optional = false
306python-versions = ">=3.7"
307
308[package.dependencies]
309black = ">=22.3.0"
310python-lsp-server = ">=1.4.0"
311toml = "*"
312
313[package.extras]
314dev = ["flake8", "isort (>=5.0)", "mypy", "pre-commit", "pytest", "types-pkg-resources", "types-setuptools", "types-toml"]
315
316[[package]]
317name = "python-lsp-jsonrpc"
318version = "1.0.0"
319description = "JSON RPC 2.0 server library"
320category = "dev"
321optional = false
322python-versions = "*"
323
324[package.dependencies]
325ujson = ">=3.0.0"
326
327[package.extras]
328test = ["pylint", "pycodestyle", "pyflakes", "pytest", "pytest-cov", "coverage"]
329
330[[package]]
331name = "python-lsp-server"
332version = "1.4.1"
333description = "Python Language Server for the Language Server Protocol"
334category = "dev"
335optional = false
336python-versions = ">=3.7"
337
338[package.dependencies]
339jedi = ">=0.17.2,<0.19.0"
340pluggy = ">=1.0.0"
341python-lsp-jsonrpc = ">=1.0.0"
342ujson = ">=3.0.0"
343
344[package.extras]
345all = ["autopep8 (>=1.6.0,<1.7.0)", "flake8 (>=4.0.0,<4.1.0)", "mccabe (>=0.6.0,<0.7.0)", "pycodestyle (>=2.8.0,<2.9.0)", "pydocstyle (>=2.0.0)", "pyflakes (>=2.4.0,<2.5.0)", "pylint (>=2.5.0)", "rope (>=0.10.5)", "yapf"]
346autopep8 = ["autopep8 (>=1.6.0,<1.7.0)"]
347flake8 = ["flake8 (>=4.0.0,<4.1.0)"]
348mccabe = ["mccabe (>=0.6.0,<0.7.0)"]
349pycodestyle = ["pycodestyle (>=2.8.0,<2.9.0)"]
350pydocstyle = ["pydocstyle (>=2.0.0)"]
351pyflakes = ["pyflakes (>=2.4.0,<2.5.0)"]
352pylint = ["pylint (>=2.5.0)"]
353rope = ["rope (>0.10.5)"]
354test = ["pylint (>=2.5.0)", "pytest", "pytest-cov", "coverage", "numpy", "pandas", "matplotlib", "pyqt5", "flaky"]
355yapf = ["yapf"]
356
357[[package]]
216name = "pytz" 358name = "pytz"
217version = "2022.1" 359version = "2022.1"
218description = "World timezone definitions, modern and historical" 360description = "World timezone definitions, modern and historical"
@@ -221,6 +363,14 @@ optional = false
221python-versions = "*" 363python-versions = "*"
222 364
223[[package]] 365[[package]]
366name = "toml"
367version = "0.10.2"
368description = "Python Library for Tom's Obvious, Minimal Language"
369category = "dev"
370optional = false
371python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
372
373[[package]]
224name = "tomli" 374name = "tomli"
225version = "2.0.1" 375version = "2.0.1"
226description = "A lil' TOML parser" 376description = "A lil' TOML parser"
@@ -229,6 +379,22 @@ optional = false
229python-versions = ">=3.7" 379python-versions = ">=3.7"
230 380
231[[package]] 381[[package]]
382name = "typing-extensions"
383version = "4.3.0"
384description = "Backported and Experimental Type Hints for Python 3.7+"
385category = "dev"
386optional = false
387python-versions = ">=3.7"
388
389[[package]]
390name = "ujson"
391version = "5.4.0"
392description = "Ultra fast JSON encoder and decoder for Python"
393category = "dev"
394optional = false
395python-versions = ">=3.7"
396
397[[package]]
232name = "yarl" 398name = "yarl"
233version = "1.7.2" 399version = "1.7.2"
234description = "Yet another URL library" 400description = "Yet another URL library"
@@ -243,12 +409,12 @@ multidict = ">=4.0"
243[metadata] 409[metadata]
244lock-version = "1.1" 410lock-version = "1.1"
245python-versions = "^3.10" 411python-versions = "^3.10"
246content-hash = "efa0e2c5d3b8f77a22478a52ca869113f970e18c77d8da40a7d020c0eb572a0a" 412content-hash = "d45de286b7d24be6148463e2c4e8466545ef88c228dbdf905946480d1b002db7"
247 413
248[metadata.files] 414[metadata.files]
249aiogram = [ 415aiogram = [
250 {file = "aiogram-2.20-py3-none-any.whl", hash = "sha256:5281bd5fac2dcc81f2bd1edad45c0d8dfe209733878a2fff00bb63f658e28aae"}, 416 {file = "aiogram-2.21-py3-none-any.whl", hash = "sha256:33ee61db550f6fc455e2d74d8911af31108e3c398eda03c2f91b0a7cb32a97d9"},
251 {file = "aiogram-2.20.tar.gz", hash = "sha256:20a0a8b18a2a656dc6efce40947019dc558bd4d5f8217452994c75d8e79bb6d7"}, 417 {file = "aiogram-2.21.tar.gz", hash = "sha256:390ac56a629cd0d151d544e3b87d539ee49f734ccc7a1a7e375c33f436e556e0"},
252] 418]
253aiohttp = [ 419aiohttp = [
254 {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8"}, 420 {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8"},
@@ -340,46 +506,22 @@ babel = [
340 {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, 506 {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"},
341 {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, 507 {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"},
342] 508]
343black = [ 509black = []
344 {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"},
345 {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"},
346 {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"},
347 {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"},
348 {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"},
349 {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"},
350 {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"},
351 {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"},
352 {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"},
353 {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"},
354 {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"},
355 {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"},
356 {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"},
357 {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"},
358 {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"},
359 {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"},
360 {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"},
361 {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"},
362 {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"},
363 {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"},
364 {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"},
365 {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"},
366 {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"},
367]
368certifi = [ 510certifi = [
369 {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, 511 {file = "certifi-2022.6.15-py3-none-any.whl", hash = "sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412"},
370 {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, 512 {file = "certifi-2022.6.15.tar.gz", hash = "sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d"},
371] 513]
372charset-normalizer = [ 514charset-normalizer = [
373 {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, 515 {file = "charset-normalizer-2.1.0.tar.gz", hash = "sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413"},
374 {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, 516 {file = "charset_normalizer-2.1.0-py3-none-any.whl", hash = "sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5"},
375] 517]
376click = [ 518click = [
377 {file = "click-8.1.2-py3-none-any.whl", hash = "sha256:24e1a4a9ec5bf6299411369b208c1df2188d9eb8d916302fe6bf03faed227f1e"}, 519 {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
378 {file = "click-8.1.2.tar.gz", hash = "sha256:479707fe14d9ec9a0757618b7a100a0ae4c4e236fac5b7f80ca68028141a1a72"}, 520 {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
379] 521]
380colorama = [ 522colorama = [
381 {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, 523 {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
382 {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, 524 {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
383] 525]
384frozenlist = [ 526frozenlist = [
385 {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3"}, 527 {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3"},
@@ -450,9 +592,11 @@ isort = [
450 {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, 592 {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
451 {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, 593 {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
452] 594]
453"mc.py" = [ 595jedi = [
454 {file = "mc.py-3.1.1.tar.gz", hash = "sha256:eaa4436add72c578c1d6dd257c13d6a802ebb8a997f50293176aa46676a2e5dd"}, 596 {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"},
597 {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"},
455] 598]
599"mc.py" = []
456multidict = [ 600multidict = [
457 {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, 601 {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"},
458 {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, 602 {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"},
@@ -514,10 +658,36 @@ multidict = [
514 {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, 658 {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"},
515 {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, 659 {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"},
516] 660]
661mypy = [
662 {file = "mypy-0.961-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:697540876638ce349b01b6786bc6094ccdaba88af446a9abb967293ce6eaa2b0"},
663 {file = "mypy-0.961-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b117650592e1782819829605a193360a08aa99f1fc23d1d71e1a75a142dc7e15"},
664 {file = "mypy-0.961-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bdd5ca340beffb8c44cb9dc26697628d1b88c6bddf5c2f6eb308c46f269bb6f3"},
665 {file = "mypy-0.961-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3e09f1f983a71d0672bbc97ae33ee3709d10c779beb613febc36805a6e28bb4e"},
666 {file = "mypy-0.961-cp310-cp310-win_amd64.whl", hash = "sha256:e999229b9f3198c0c880d5e269f9f8129c8862451ce53a011326cad38b9ccd24"},
667 {file = "mypy-0.961-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b24be97351084b11582fef18d79004b3e4db572219deee0212078f7cf6352723"},
668 {file = "mypy-0.961-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f4a21d01fc0ba4e31d82f0fff195682e29f9401a8bdb7173891070eb260aeb3b"},
669 {file = "mypy-0.961-cp36-cp36m-win_amd64.whl", hash = "sha256:439c726a3b3da7ca84a0199a8ab444cd8896d95012c4a6c4a0d808e3147abf5d"},
670 {file = "mypy-0.961-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5a0b53747f713f490affdceef835d8f0cb7285187a6a44c33821b6d1f46ed813"},
671 {file = "mypy-0.961-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0e9f70df36405c25cc530a86eeda1e0867863d9471fe76d1273c783df3d35c2e"},
672 {file = "mypy-0.961-cp37-cp37m-win_amd64.whl", hash = "sha256:b88f784e9e35dcaa075519096dc947a388319cb86811b6af621e3523980f1c8a"},
673 {file = "mypy-0.961-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d5aaf1edaa7692490f72bdb9fbd941fbf2e201713523bdb3f4038be0af8846c6"},
674 {file = "mypy-0.961-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9f5f5a74085d9a81a1f9c78081d60a0040c3efb3f28e5c9912b900adf59a16e6"},
675 {file = "mypy-0.961-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f4b794db44168a4fc886e3450201365c9526a522c46ba089b55e1f11c163750d"},
676 {file = "mypy-0.961-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:64759a273d590040a592e0f4186539858c948302c653c2eac840c7a3cd29e51b"},
677 {file = "mypy-0.961-cp38-cp38-win_amd64.whl", hash = "sha256:63e85a03770ebf403291ec50097954cc5caf2a9205c888ce3a61bd3f82e17569"},
678 {file = "mypy-0.961-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5f1332964963d4832a94bebc10f13d3279be3ce8f6c64da563d6ee6e2eeda932"},
679 {file = "mypy-0.961-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:006be38474216b833eca29ff6b73e143386f352e10e9c2fbe76aa8549e5554f5"},
680 {file = "mypy-0.961-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9940e6916ed9371809b35b2154baf1f684acba935cd09928952310fbddaba648"},
681 {file = "mypy-0.961-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5ea0875a049de1b63b972456542f04643daf320d27dc592d7c3d9cd5d9bf950"},
682 {file = "mypy-0.961-cp39-cp39-win_amd64.whl", hash = "sha256:1ece702f29270ec6af25db8cf6185c04c02311c6bb21a69f423d40e527b75c56"},
683 {file = "mypy-0.961-py3-none-any.whl", hash = "sha256:03c6cc893e7563e7b2949b969e63f02c000b32502a1b4d1314cabe391aa87d66"},
684 {file = "mypy-0.961.tar.gz", hash = "sha256:f730d56cb924d371c26b8eaddeea3cc07d78ff51c521c6d04899ac6904b75492"},
685]
517mypy-extensions = [ 686mypy-extensions = [
518 {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, 687 {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
519 {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, 688 {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
520] 689]
690parso = []
521pathspec = [ 691pathspec = [
522 {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, 692 {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
523 {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, 693 {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
@@ -526,14 +696,32 @@ platformdirs = [
526 {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, 696 {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
527 {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, 697 {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
528] 698]
699pluggy = [
700 {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
701 {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
702]
703pyls-isort = []
704pylsp-mypy = []
705python-lsp-black = []
706python-lsp-jsonrpc = []
707python-lsp-server = []
529pytz = [ 708pytz = [
530 {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"}, 709 {file = "pytz-2022.1-py2.py3-none-any.whl", hash = "sha256:e68985985296d9a66a881eb3193b0906246245294a881e7c8afe623866ac6a5c"},
531 {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"}, 710 {file = "pytz-2022.1.tar.gz", hash = "sha256:1e760e2fe6a8163bc0b3d9a19c4f84342afa0a2affebfaa84b01b978a02ecaa7"},
532] 711]
712toml = [
713 {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
714 {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
715]
533tomli = [ 716tomli = [
534 {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, 717 {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
535 {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, 718 {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
536] 719]
720typing-extensions = [
721 {file = "typing_extensions-4.3.0-py3-none-any.whl", hash = "sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"},
722 {file = "typing_extensions-4.3.0.tar.gz", hash = "sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"},
723]
724ujson = []
537yarl = [ 725yarl = [
538 {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"}, 726 {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"},
539 {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"}, 727 {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"},
diff --git a/pyproject.toml b/pyproject.toml
index 36f6956..f8b07d7 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -13,6 +13,10 @@ aiogram = "^2.20"
13[tool.poetry.dev-dependencies] 13[tool.poetry.dev-dependencies]
14black = "^22.3.0" 14black = "^22.3.0"
15isort = "^5.10.1" 15isort = "^5.10.1"
16python-lsp-server = "^1.4.1"
17pylsp-mypy = "^0.6.2"
18pyls-isort = "^0.2.2"
19python-lsp-black = "^1.2.1"
16 20
17[tool.black] 21[tool.black]
18line-length = 90 22line-length = 90
diff --git a/requirements.txt b/requirements.txt
index 234bc0b..ab8da8b 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,6 @@
1aiogram==2.20; python_version >= "3.7" \ 1aiogram==2.21; python_version >= "3.7" \
2 --hash=sha256:5281bd5fac2dcc81f2bd1edad45c0d8dfe209733878a2fff00bb63f658e28aae \ 2 --hash=sha256:33ee61db550f6fc455e2d74d8911af31108e3c398eda03c2f91b0a7cb32a97d9 \
3 --hash=sha256:20a0a8b18a2a656dc6efce40947019dc558bd4d5f8217452994c75d8e79bb6d7 3 --hash=sha256:390ac56a629cd0d151d544e3b87d539ee49f734ccc7a1a7e375c33f436e556e0
4aiohttp==3.8.1; python_version >= "3.7" \ 4aiohttp==3.8.1; python_version >= "3.7" \
5 --hash=sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8 \ 5 --hash=sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8 \
6 --hash=sha256:7dadf3c307b31e0e61689cbf9e06be7a867c563d5a63ce9dca578f956609abf8 \ 6 --hash=sha256:7dadf3c307b31e0e61689cbf9e06be7a867c563d5a63ce9dca578f956609abf8 \
@@ -86,12 +86,12 @@ attrs==21.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or pyth
86babel==2.9.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \ 86babel==2.9.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" \
87 --hash=sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9 \ 87 --hash=sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9 \
88 --hash=sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0 88 --hash=sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0
89certifi==2021.10.8; python_version >= "3.7" \ 89certifi==2022.6.15; python_version >= "3.7" \
90 --hash=sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569 \ 90 --hash=sha256:fe86415d55e84719d75f8b69414f6438ac3547d2078ab91b67e779ef69378412 \
91 --hash=sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872 91 --hash=sha256:84c85a9078b11105f04f3036a9482ae10e4621616db313fe045dd24743a0820d
92charset-normalizer==2.0.12; python_full_version >= "3.5.0" and python_version >= "3.7" \ 92charset-normalizer==2.1.0; python_full_version >= "3.6.0" and python_version >= "3.7" \
93 --hash=sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597 \ 93 --hash=sha256:575e708016ff3a5e3681541cb9d79312c416835686d054a23accb873b254f413 \
94 --hash=sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df 94 --hash=sha256:5189b6f22b01957427f35b6a08d9a0bc45b46d3788ef5a92e978433c7a35f8a5
95frozenlist==1.3.0; python_version >= "3.7" \ 95frozenlist==1.3.0; python_version >= "3.7" \
96 --hash=sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3 \ 96 --hash=sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3 \
97 --hash=sha256:4a44ebbf601d7bac77976d429e9bdb5a4614f9f4027777f9e54fd765196e9d3b \ 97 --hash=sha256:4a44ebbf601d7bac77976d429e9bdb5a4614f9f4027777f9e54fd765196e9d3b \
@@ -155,8 +155,7 @@ frozenlist==1.3.0; python_version >= "3.7" \
155idna==3.3; python_version >= "3.7" \ 155idna==3.3; python_version >= "3.7" \
156 --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \ 156 --hash=sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff \
157 --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d 157 --hash=sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d
158mc.py==3.1.1; python_version >= "3.6" \ 158mc.py==3.1.1; python_version >= "3.6"
159 --hash=sha256:eaa4436add72c578c1d6dd257c13d6a802ebb8a997f50293176aa46676a2e5dd
160multidict==6.0.2; python_version >= "3.7" \ 159multidict==6.0.2; python_version >= "3.7" \
161 --hash=sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2 \ 160 --hash=sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2 \
162 --hash=sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3 \ 161 --hash=sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3 \
diff --git a/shared/__init__.py b/shared/__init__.py
index e69de29..9153c94 100644
--- a/shared/__init__.py
+++ b/shared/__init__.py
@@ -0,0 +1,4 @@
1# isort: skip_file
2from . import config
3from . import instances
4from . import commands
diff --git a/shared/config.py b/shared/config.py
new file mode 100644
index 0000000..6b973d3
--- /dev/null
+++ b/shared/config.py
@@ -0,0 +1,3 @@
1from os import environ as env
2
3token = env["TOKEN"]
diff --git a/shared/instances.py b/shared/instances.py
index c1234b2..3ffec5e 100644
--- a/shared/instances.py
+++ b/shared/instances.py
@@ -1,7 +1,7 @@
1from aiogram import Bot, Dispatcher 1from aiogram import Bot, Dispatcher
2 2
3from config import token 3from shared.config import token
4 4
5bot = Bot(token=token) 5bot = Bot(token=token)
6dp = Dispatcher(bot) 6dp = Dispatcher(bot)
7gen_chance = {} 7gen_chance: dict[int, int] = {}
diff --git a/utils/filters.py b/utils/filters.py
index 58442ce..90b908a 100644
--- a/utils/filters.py
+++ b/utils/filters.py
@@ -10,8 +10,6 @@ from shared import instances as ins
10 10
11class message: 11class message:
12 is_chat = f.ChatTypeFilter((t.ChatType.GROUP, t.ChatType.SUPERGROUP)) 12 is_chat = f.ChatTypeFilter((t.ChatType.GROUP, t.ChatType.SUPERGROUP))
13 is_private = f.ChatTypeFilter(t.ChatType.PRIVATE)
14 is_reply = f.IsReplyFilter(True)
15 13
16 @staticmethod 14 @staticmethod
17 def chance(msg: t.Message): 15 def chance(msg: t.Message):