diff options
Diffstat (limited to 'handlers')
| -rw-r--r-- | handlers/__init__.py | 7 | ||||
| -rw-r--r-- | handlers/gen.py | 51 | ||||
| -rw-r--r-- | handlers/img.py | 52 | ||||
| -rw-r--r-- | handlers/leave.py (renamed from handlers/ananas_only.py) | 7 | ||||
| -rw-r--r-- | handlers/member.py | 66 | ||||
| -rw-r--r-- | handlers/msg.py | 13 | ||||
| -rw-r--r-- | handlers/poll.py | 21 | ||||
| -rw-r--r-- | handlers/system.py (renamed from handlers/all.py) | 5 |
8 files changed, 95 insertions, 127 deletions
diff --git a/handlers/__init__.py b/handlers/__init__.py index 6ba46f4..16c0fe7 100644 --- a/handlers/__init__.py +++ b/handlers/__init__.py | |||
| @@ -1,6 +1,5 @@ | |||
| 1 | from . import ananas_only | 1 | from . import leave |
| 2 | from . import msg | 2 | from . import msg |
| 3 | from . import poll | 3 | from . import poll |
| 4 | from . import img | 4 | from . import member |
| 5 | from . import gen | 5 | from . import system |
| 6 | from . import all | ||
diff --git a/handlers/gen.py b/handlers/gen.py deleted file mode 100644 index 822b4ad..0000000 --- a/handlers/gen.py +++ /dev/null | |||
| @@ -1,51 +0,0 @@ | |||
| 1 | import mc | ||
| 2 | from aiogram import types as t | ||
| 3 | |||
| 4 | from shared import instances as ins | ||
| 5 | from shared.instances import dp, bot | ||
| 6 | from utils import filters as f | ||
| 7 | |||
| 8 | |||
| 9 | @dp.message_handler(f.message.is_chat, commands=["gen"]) | ||
| 10 | async def сгенерировать_хуету(msg: t.Message): | ||
| 11 | await msg.answer(получить_говно()) | ||
| 12 | |||
| 13 | |||
| 14 | @dp.message_handler(f.message.is_chat, commands=["del"]) | ||
| 15 | async def удалить_хуету(msg: t.Message): | ||
| 16 | await msg.delete() | ||
| 17 | |||
| 18 | if msg.reply_to_message: | ||
| 19 | if msg.reply_to_message.from_user.id in [bot.id, msg.from_user.id]: | ||
| 20 | await msg.reply_to_message.delete() | ||
| 21 | else: | ||
| 22 | await msg.answer("Ты умник, можно только свои или мои удалять") | ||
| 23 | else: | ||
| 24 | await msg.answer("Ты умник, ответь на сообщение") | ||
| 25 | |||
| 26 | |||
| 27 | @dp.message_handler(commands=["chance"]) | ||
| 28 | async def изменить_шанс_срания(msg: t.Message): | ||
| 29 | if msg.get_args(): | ||
| 30 | try: | ||
| 31 | chance = int(msg.get_args().split()[0]) | ||
| 32 | if 0 <= chance <= 100: | ||
| 33 | ins.gen_chance = chance | ||
| 34 | else: | ||
| 35 | raise RuntimeError() | ||
| 36 | |||
| 37 | await msg.answer(f"Теперь я сру с шансом в: {chance}%") | ||
| 38 | except Exception: | ||
| 39 | await msg.answer("Я хз что не так, но я знаю что ты дебил \n /chance <ЧИСЛО ОТ 0 ДО 100>") | ||
| 40 | else: | ||
| 41 | await msg.answer(f"Я сру с шансом в: {ins.gen_chance}%") | ||
| 42 | |||
| 43 | |||
| 44 | @dp.message_handler(f.message.chance, f.message.is_chat, content_types=[t.ContentType.ANY]) | ||
| 45 | async def срать_сообщение_с_шансом(msg: t.Message): | ||
| 46 | await msg.answer(получить_говно()) | ||
| 47 | |||
| 48 | |||
| 49 | def получить_говно() -> str: | ||
| 50 | samples = mc.util.load_txt_samples('samples.txt', separator='§') | ||
| 51 | return mc.StringGenerator(samples=samples).generate_string().capitalize() | ||
diff --git a/handlers/img.py b/handlers/img.py deleted file mode 100644 index 19c3b4f..0000000 --- a/handlers/img.py +++ /dev/null | |||
| @@ -1,52 +0,0 @@ | |||
| 1 | from os import system as run | ||
| 2 | |||
| 3 | from aiogram import types as t | ||
| 4 | from aiogram.dispatcher import filters | ||
| 5 | |||
| 6 | from handlers.gen import получить_говно | ||
| 7 | from shared.instances import dp, bot | ||
| 8 | |||
| 9 | |||
| 10 | async def скачать(name: str) -> str: | ||
| 11 | msg = t.Message.get_current() | ||
| 12 | if msg.content_type == t.ContentType.TEXT: | ||
| 13 | if msg.reply_to_message is None: | ||
| 14 | await msg.answer("Эээм… а где ответ ?") | ||
| 15 | return | ||
| 16 | msg = msg.reply_to_message | ||
| 17 | |||
| 18 | if msg.content_type == t.ContentType.PHOTO: | ||
| 19 | file_id = msg.photo[-1].file_id | ||
| 20 | elif msg.content_type == t.ContentType.DOCUMENT: | ||
| 21 | file_id = msg.document.file_id | ||
| 22 | else: | ||
| 23 | await msg.answer("Эээм… а где фото ?") | ||
| 24 | return | ||
| 25 | |||
| 26 | name = f"{name}.{msg.from_user.id}.{msg.chat.id}" | ||
| 27 | await bot.download_file_by_id(file_id, destination=f"tmp/{name}.jpg") | ||
| 28 | return name | ||
| 29 | |||
| 30 | |||
| 31 | def удалить(name: str): | ||
| 32 | run(f"rm -rf tmp/*{name}*") | ||
| 33 | |||
| 34 | |||
| 35 | @dp.message_handler( | ||
| 36 | filters.Command("gif", ignore_caption=False), | ||
| 37 | content_types=[t.ContentType.PHOTO, t.ContentType.DOCUMENT, t.ContentType.TEXT], | ||
| 38 | ) | ||
| 39 | async def высрать_гифку_по_фото(msg: t.Message): | ||
| 40 | name = await скачать("gif") | ||
| 41 | run( | ||
| 42 | " ".join( | ||
| 43 | [ | ||
| 44 | "ffmpeg -loglevel quiet -y", | ||
| 45 | f"-i tmp/{name}.jpg", | ||
| 46 | '-vf scale="ceil(iw/2)*2:ceil(ih/2)*2"', | ||
| 47 | f"tmp/{name}.mp4", | ||
| 48 | ] | ||
| 49 | ) | ||
| 50 | ) | ||
| 51 | await msg.answer_animation(open(f"tmp/{name}.mp4", "rb"), caption=получить_говно()) | ||
| 52 | удалить(name) | ||
diff --git a/handlers/ananas_only.py b/handlers/leave.py index a6ee13c..990795f 100644 --- a/handlers/ananas_only.py +++ b/handlers/leave.py | |||
| @@ -1,10 +1,13 @@ | |||
| 1 | from shared.instances import dp | ||
| 2 | from aiogram import types as t | 1 | from aiogram import types as t |
| 2 | |||
| 3 | from shared.instances import dp | ||
| 3 | from utils import filters as f | 4 | from utils import filters as f |
| 4 | 5 | ||
| 5 | 6 | ||
| 6 | @dp.my_chat_member_handler(f.user.add_member) | 7 | @dp.my_chat_member_handler(f.user.add_member) |
| 7 | async def пососи(upd: t.ChatMemberUpdated): | 8 | async def пососи(upd: t.ChatMemberUpdated): |
| 8 | if upd.chat.id not in (-1001444484622, -1001197098429): | 9 | if upd.chat.id not in (-1001444484622, -1001197098429): |
| 9 | await upd.bot.send_message(upd.chat.id, 'https://www.youtube.com/watch?v=xdDhmagsXrc') | 10 | await upd.bot.send_message( |
| 11 | upd.chat.id, "https://www.youtube.com/watch?v=xdDhmagsXrc" | ||
| 12 | ) | ||
| 10 | await upd.chat.leave() | 13 | await upd.chat.leave() |
diff --git a/handlers/member.py b/handlers/member.py new file mode 100644 index 0000000..f915feb --- /dev/null +++ b/handlers/member.py | |||
| @@ -0,0 +1,66 @@ | |||
| 1 | from asyncio import sleep | ||
| 2 | |||
| 3 | from aiogram import types as t | ||
| 4 | |||
| 5 | from shared.instances import bot, dp | ||
| 6 | from utils import filters as f | ||
| 7 | |||
| 8 | unmute = t.ChatPermissions(*[True] * 8) | ||
| 9 | mute = t.ChatPermissions(*[False] * 8) | ||
| 10 | |||
| 11 | |||
| 12 | @dp.chat_member_handler(f.user.add_member) | ||
| 13 | async def запрашиваем_пропуск(upd: t.ChatMemberUpdated): | ||
| 14 | pass_user_markup = t.InlineKeyboardMarkup().add( | ||
| 15 | t.InlineKeyboardButton( | ||
| 16 | "Да", callback_data=f"pass_user@{upd.new_chat_member.user.id}" | ||
| 17 | ), | ||
| 18 | t.InlineKeyboardButton( | ||
| 19 | "Нет", callback_data=f"kick_user@{upd.new_chat_member.user.id}" | ||
| 20 | ), | ||
| 21 | ) | ||
| 22 | await upd.chat.restrict(upd.new_chat_member.user.id, mute) | ||
| 23 | await bot.send_message( | ||
| 24 | upd.chat.id, | ||
| 25 | f'Это наш <a href="tg://user?id={upd.new_chat_member.user.id}">чел</a> ?', | ||
| 26 | parse_mode=t.ParseMode.HTML, | ||
| 27 | reply_markup=pass_user_markup, | ||
| 28 | ) | ||
| 29 | |||
| 30 | |||
| 31 | @dp.callback_query_handler( | ||
| 32 | f.message.is_chat, lambda clb: clb.data.split("@")[0] == "pass_user" | ||
| 33 | ) | ||
| 34 | async def пропустить(clb: t.CallbackQuery): | ||
| 35 | member = await clb.message.chat.get_member(clb.from_user.id) | ||
| 36 | if not member.is_chat_admin(): | ||
| 37 | await clb.answer("Ты не админ") | ||
| 38 | return | ||
| 39 | else: | ||
| 40 | await clb.message.chat.restrict(int(clb.data.split("@")[1]), unmute) | ||
| 41 | |||
| 42 | await clb.message.delete() | ||
| 43 | await clb.message.answer( | ||
| 44 | f'Добро пожаловать <a href="tg://user?id={int(clb.data.split("@")[1])}">ананасер</a> (<a href="tg://user?id={clb.from_user.id}">принят</a>)', | ||
| 45 | parse_mode=t.ParseMode.HTML, | ||
| 46 | ) | ||
| 47 | |||
| 48 | |||
| 49 | @dp.callback_query_handler( | ||
| 50 | f.message.is_chat, lambda clb: clb.data.split("@")[0] == "kick_user" | ||
| 51 | ) | ||
| 52 | async def выкинуть(clb: t.CallbackQuery): | ||
| 53 | member = await clb.message.chat.get_member(clb.from_user.id) | ||
| 54 | await clb.message.delete() | ||
| 55 | await clb.message.answer( | ||
| 56 | f'Эта группа для <a href="tg://user?id={clb.from_user.id}">крутых</a>', | ||
| 57 | parse_mode=t.ParseMode.HTML, | ||
| 58 | ) | ||
| 59 | |||
| 60 | await sleep(3) | ||
| 61 | |||
| 62 | if not member.is_chat_admin(): | ||
| 63 | await clb.answer("Ты не админ") | ||
| 64 | return | ||
| 65 | else: | ||
| 66 | await clb.message.chat.unban(int(clb.data.split("@")[1]), False) | ||
diff --git a/handlers/msg.py b/handlers/msg.py index 58f3213..12dfa6c 100644 --- a/handlers/msg.py +++ b/handlers/msg.py | |||
| @@ -1,17 +1,20 @@ | |||
| 1 | from shared.instances import dp | ||
| 2 | from aiogram import types as t | 1 | from aiogram import types as t |
| 2 | |||
| 3 | from shared.instances import dp | ||
| 3 | from utils import filters as f | 4 | from utils import filters as f |
| 4 | 5 | ||
| 5 | 6 | ||
| 6 | async def сосалка(msg: t.Message): | 7 | async def сосалка(msg: t.Message): |
| 7 | text = msg.text or msg.caption | 8 | text = msg.text or msg.caption |
| 8 | if text.startswith('/'): | 9 | if text.startswith("/"): |
| 9 | return False | 10 | return False |
| 10 | with open('samples.txt', 'a+') as file: | 11 | with open("samples.txt", "a+") as file: |
| 11 | file.write(text.lower().replace('§', '') + '§') | 12 | file.write(text.lower().replace("§", "") + "§") |
| 12 | return False | 13 | return False |
| 13 | 14 | ||
| 14 | 15 | ||
| 15 | @dp.message_handler(f.message.is_chat, f.message.has_text, сосалка, content_types=[t.ContentType.ANY]) | 16 | @dp.message_handler( |
| 17 | f.message.is_chat, f.message.has_text, сосалка, content_types=[t.ContentType.ANY] | ||
| 18 | ) | ||
| 16 | async def ХУЙ(): | 19 | async def ХУЙ(): |
| 17 | pass | 20 | pass |
diff --git a/handlers/poll.py b/handlers/poll.py index f6fb962..8f6a6ca 100644 --- a/handlers/poll.py +++ b/handlers/poll.py | |||
| @@ -1,11 +1,12 @@ | |||
| 1 | from datetime import datetime, timedelta | 1 | from datetime import datetime, timedelta |
| 2 | 2 | ||
| 3 | from shared.instances import dp, bot | ||
| 4 | from utils import filters as f | ||
| 5 | from aiogram import types as t | 3 | from aiogram import types as t |
| 6 | 4 | ||
| 5 | from shared.instances import bot, dp | ||
| 6 | from utils import filters as f | ||
| 7 | |||
| 7 | pin_reply_markup = t.InlineKeyboardMarkup().add( | 8 | pin_reply_markup = t.InlineKeyboardMarkup().add( |
| 8 | t.InlineKeyboardButton("Проверить сейчас", callback_data="chek") | 9 | t.InlineKeyboardButton("Проверить сейчас", callback_data="check_pin_poll") |
| 9 | ) | 10 | ) |
| 10 | 11 | ||
| 11 | 12 | ||
| @@ -15,25 +16,23 @@ async def закрепить_хуету(msg: t.Message): | |||
| 15 | if msg.reply_to_message: | 16 | if msg.reply_to_message: |
| 16 | await msg.reply_to_message.reply_poll( | 17 | await msg.reply_to_message.reply_poll( |
| 17 | "Закрепить ?", | 18 | "Закрепить ?", |
| 18 | [ | 19 | ["Да", "УДАЛИ НАХУЙ", "Нет"], |
| 19 | "Да", | ||
| 20 | "УДАЛИ НАХУЙ", | ||
| 21 | "Нет" | ||
| 22 | ], | ||
| 23 | close_date=datetime.now() + timedelta(minutes=10), | 20 | close_date=datetime.now() + timedelta(minutes=10), |
| 24 | reply_markup=pin_reply_markup | 21 | reply_markup=pin_reply_markup, |
| 25 | ) | 22 | ) |
| 26 | else: | 23 | else: |
| 27 | await msg.answer("Ты умник, ответь на сообщение") | 24 | await msg.answer("Ты умник, ответь на сообщение") |
| 28 | 25 | ||
| 29 | 26 | ||
| 30 | @dp.callback_query_handler(f.message.is_chat, lambda clb: clb.data == "chek") | 27 | @dp.callback_query_handler(f.message.is_chat, lambda clb: clb.data == "check_pin_poll") |
| 31 | async def проверить_рс(clb: t.CallbackQuery): | 28 | async def проверить_крп(clb: t.CallbackQuery): |
| 32 | poll = clb.message.poll | 29 | poll = clb.message.poll |
| 33 | msg = clb.message | 30 | msg = clb.message |
| 34 | 31 | ||
| 35 | if poll.total_voter_count <= 0: | 32 | if poll.total_voter_count <= 0: |
| 36 | await clb.answer("Видишь голоса? Вот и я невижу") | 33 | await clb.answer("Видишь голоса? Вот и я невижу") |
| 34 | elif poll.total_voter_count >= 2: | ||
| 35 | await clb.answer("Видишь голоса? Они есть, но их мало") | ||
| 37 | else: | 36 | else: |
| 38 | if not poll.is_closed: | 37 | if not poll.is_closed: |
| 39 | await bot.stop_poll(msg.chat.id, msg.message_id) | 38 | await bot.stop_poll(msg.chat.id, msg.message_id) |
diff --git a/handlers/all.py b/handlers/system.py index 1947604..5346c54 100644 --- a/handlers/all.py +++ b/handlers/system.py | |||
| @@ -1,12 +1,13 @@ | |||
| 1 | import logging | 1 | import logging |
| 2 | import traceback | 2 | import traceback |
| 3 | 3 | ||
| 4 | from shared.instances import dp | ||
| 5 | from aiogram import types as t | 4 | from aiogram import types as t |
| 6 | 5 | ||
| 6 | from shared.instances import dp | ||
| 7 | |||
| 7 | 8 | ||
| 8 | @dp.errors_handler() | 9 | @dp.errors_handler() |
| 9 | async def errors_handler(upd: t.Update, err: Exception): | 10 | async def уборщик_какашек(upd: t.Update, err: Exception): |
| 10 | txt = "Я хз что произошло, но да \n" | 11 | txt = "Я хз что произошло, но да \n" |
| 11 | txt += f" {err.__class__.__name__}: {' '.join(map(str, err.args))}" | 12 | txt += f" {err.__class__.__name__}: {' '.join(map(str, err.args))}" |
| 12 | 13 | ||
