From 6ef5acdce17b95ed5166a32aa479eae0cb7f8cad Mon Sep 17 00:00:00 2001 From: Igor Tolmachov Date: Wed, 20 Apr 2022 02:00:20 +0900 Subject: Рефакторинг Добавлена система заявок в группу MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handlers/__init__.py | 7 +++--- handlers/all.py | 22 ----------------- handlers/ananas_only.py | 10 -------- handlers/gen.py | 51 -------------------------------------- handlers/img.py | 52 -------------------------------------- handlers/leave.py | 13 ++++++++++ handlers/member.py | 66 +++++++++++++++++++++++++++++++++++++++++++++++++ handlers/msg.py | 13 ++++++---- handlers/poll.py | 21 ++++++++-------- handlers/system.py | 23 +++++++++++++++++ 10 files changed, 123 insertions(+), 155 deletions(-) delete mode 100644 handlers/all.py delete mode 100644 handlers/ananas_only.py delete mode 100644 handlers/gen.py delete mode 100644 handlers/img.py create mode 100644 handlers/leave.py create mode 100644 handlers/member.py create mode 100644 handlers/system.py (limited to 'handlers') 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 @@ -from . import ananas_only +from . import leave from . import msg from . import poll -from . import img -from . import gen -from . import all +from . import member +from . import system diff --git a/handlers/all.py b/handlers/all.py deleted file mode 100644 index 1947604..0000000 --- a/handlers/all.py +++ /dev/null @@ -1,22 +0,0 @@ -import logging -import traceback - -from shared.instances import dp -from aiogram import types as t - - -@dp.errors_handler() -async def errors_handler(upd: t.Update, err: Exception): - txt = "Я хз что произошло, но да \n" - txt += f" {err.__class__.__name__}: {' '.join(map(str, err.args))}" - - if upd.message: - await upd.message.answer(txt) - elif upd.callback_query: - await upd.callback_query.answer(txt) - else: - return - - logging.error(traceback.format_exc()) - - return True diff --git a/handlers/ananas_only.py b/handlers/ananas_only.py deleted file mode 100644 index a6ee13c..0000000 --- a/handlers/ananas_only.py +++ /dev/null @@ -1,10 +0,0 @@ -from shared.instances import dp -from aiogram import types as t -from utils import filters as f - - -@dp.my_chat_member_handler(f.user.add_member) -async def пососи(upd: t.ChatMemberUpdated): - if upd.chat.id not in (-1001444484622, -1001197098429): - await upd.bot.send_message(upd.chat.id, 'https://www.youtube.com/watch?v=xdDhmagsXrc') - await upd.chat.leave() 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 @@ -import mc -from aiogram import types as t - -from shared import instances as ins -from shared.instances import dp, bot -from utils import filters as f - - -@dp.message_handler(f.message.is_chat, commands=["gen"]) -async def сгенерировать_хуету(msg: t.Message): - await msg.answer(получить_говно()) - - -@dp.message_handler(f.message.is_chat, commands=["del"]) -async def удалить_хуету(msg: t.Message): - await msg.delete() - - if msg.reply_to_message: - if msg.reply_to_message.from_user.id in [bot.id, msg.from_user.id]: - await msg.reply_to_message.delete() - else: - await msg.answer("Ты умник, можно только свои или мои удалять") - else: - await msg.answer("Ты умник, ответь на сообщение") - - -@dp.message_handler(commands=["chance"]) -async def изменить_шанс_срания(msg: t.Message): - if msg.get_args(): - try: - chance = int(msg.get_args().split()[0]) - if 0 <= chance <= 100: - ins.gen_chance = chance - else: - raise RuntimeError() - - await msg.answer(f"Теперь я сру с шансом в: {chance}%") - except Exception: - await msg.answer("Я хз что не так, но я знаю что ты дебил \n /chance <ЧИСЛО ОТ 0 ДО 100>") - else: - await msg.answer(f"Я сру с шансом в: {ins.gen_chance}%") - - -@dp.message_handler(f.message.chance, f.message.is_chat, content_types=[t.ContentType.ANY]) -async def срать_сообщение_с_шансом(msg: t.Message): - await msg.answer(получить_говно()) - - -def получить_говно() -> str: - samples = mc.util.load_txt_samples('samples.txt', separator='§') - 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 @@ -from os import system as run - -from aiogram import types as t -from aiogram.dispatcher import filters - -from handlers.gen import получить_говно -from shared.instances import dp, bot - - -async def скачать(name: str) -> str: - msg = t.Message.get_current() - if msg.content_type == t.ContentType.TEXT: - if msg.reply_to_message is None: - await msg.answer("Эээм… а где ответ ?") - return - msg = msg.reply_to_message - - if msg.content_type == t.ContentType.PHOTO: - file_id = msg.photo[-1].file_id - elif msg.content_type == t.ContentType.DOCUMENT: - file_id = msg.document.file_id - else: - await msg.answer("Эээм… а где фото ?") - return - - name = f"{name}.{msg.from_user.id}.{msg.chat.id}" - await bot.download_file_by_id(file_id, destination=f"tmp/{name}.jpg") - return name - - -def удалить(name: str): - run(f"rm -rf tmp/*{name}*") - - -@dp.message_handler( - filters.Command("gif", ignore_caption=False), - content_types=[t.ContentType.PHOTO, t.ContentType.DOCUMENT, t.ContentType.TEXT], -) -async def высрать_гифку_по_фото(msg: t.Message): - name = await скачать("gif") - run( - " ".join( - [ - "ffmpeg -loglevel quiet -y", - f"-i tmp/{name}.jpg", - '-vf scale="ceil(iw/2)*2:ceil(ih/2)*2"', - f"tmp/{name}.mp4", - ] - ) - ) - await msg.answer_animation(open(f"tmp/{name}.mp4", "rb"), caption=получить_говно()) - удалить(name) diff --git a/handlers/leave.py b/handlers/leave.py new file mode 100644 index 0000000..990795f --- /dev/null +++ b/handlers/leave.py @@ -0,0 +1,13 @@ +from aiogram import types as t + +from shared.instances import dp +from utils import filters as f + + +@dp.my_chat_member_handler(f.user.add_member) +async def пососи(upd: t.ChatMemberUpdated): + if upd.chat.id not in (-1001444484622, -1001197098429): + await upd.bot.send_message( + upd.chat.id, "https://www.youtube.com/watch?v=xdDhmagsXrc" + ) + 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 @@ +from asyncio import sleep + +from aiogram import types as t + +from shared.instances import bot, dp +from utils import filters as f + +unmute = t.ChatPermissions(*[True] * 8) +mute = t.ChatPermissions(*[False] * 8) + + +@dp.chat_member_handler(f.user.add_member) +async def запрашиваем_пропуск(upd: t.ChatMemberUpdated): + pass_user_markup = t.InlineKeyboardMarkup().add( + t.InlineKeyboardButton( + "Да", callback_data=f"pass_user@{upd.new_chat_member.user.id}" + ), + t.InlineKeyboardButton( + "Нет", callback_data=f"kick_user@{upd.new_chat_member.user.id}" + ), + ) + await upd.chat.restrict(upd.new_chat_member.user.id, mute) + await bot.send_message( + upd.chat.id, + f'Это наш чел ?', + parse_mode=t.ParseMode.HTML, + reply_markup=pass_user_markup, + ) + + +@dp.callback_query_handler( + f.message.is_chat, lambda clb: clb.data.split("@")[0] == "pass_user" +) +async def пропустить(clb: t.CallbackQuery): + member = await clb.message.chat.get_member(clb.from_user.id) + if not member.is_chat_admin(): + await clb.answer("Ты не админ") + return + else: + await clb.message.chat.restrict(int(clb.data.split("@")[1]), unmute) + + await clb.message.delete() + await clb.message.answer( + f'Добро пожаловать ананасер (принят)', + parse_mode=t.ParseMode.HTML, + ) + + +@dp.callback_query_handler( + f.message.is_chat, lambda clb: clb.data.split("@")[0] == "kick_user" +) +async def выкинуть(clb: t.CallbackQuery): + member = await clb.message.chat.get_member(clb.from_user.id) + await clb.message.delete() + await clb.message.answer( + f'Эта группа для крутых', + parse_mode=t.ParseMode.HTML, + ) + + await sleep(3) + + if not member.is_chat_admin(): + await clb.answer("Ты не админ") + return + else: + 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 @@ -from shared.instances import dp from aiogram import types as t + +from shared.instances import dp from utils import filters as f async def сосалка(msg: t.Message): text = msg.text or msg.caption - if text.startswith('/'): + if text.startswith("/"): return False - with open('samples.txt', 'a+') as file: - file.write(text.lower().replace('§', '') + '§') + with open("samples.txt", "a+") as file: + file.write(text.lower().replace("§", "") + "§") return False -@dp.message_handler(f.message.is_chat, f.message.has_text, сосалка, content_types=[t.ContentType.ANY]) +@dp.message_handler( + f.message.is_chat, f.message.has_text, сосалка, content_types=[t.ContentType.ANY] +) async def ХУЙ(): 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 @@ from datetime import datetime, timedelta -from shared.instances import dp, bot -from utils import filters as f from aiogram import types as t +from shared.instances import bot, dp +from utils import filters as f + pin_reply_markup = t.InlineKeyboardMarkup().add( - t.InlineKeyboardButton("Проверить сейчас", callback_data="chek") + t.InlineKeyboardButton("Проверить сейчас", callback_data="check_pin_poll") ) @@ -15,25 +16,23 @@ async def закрепить_хуету(msg: t.Message): if msg.reply_to_message: await msg.reply_to_message.reply_poll( "Закрепить ?", - [ - "Да", - "УДАЛИ НАХУЙ", - "Нет" - ], + ["Да", "УДАЛИ НАХУЙ", "Нет"], close_date=datetime.now() + timedelta(minutes=10), - reply_markup=pin_reply_markup + reply_markup=pin_reply_markup, ) else: await msg.answer("Ты умник, ответь на сообщение") -@dp.callback_query_handler(f.message.is_chat, lambda clb: clb.data == "chek") -async def проверить_опрос(clb: t.CallbackQuery): +@dp.callback_query_handler(f.message.is_chat, lambda clb: clb.data == "check_pin_poll") +async def проверить_закреп(clb: t.CallbackQuery): poll = clb.message.poll msg = clb.message if poll.total_voter_count <= 0: await clb.answer("Видишь голоса? Вот и я невижу") + elif poll.total_voter_count >= 2: + await clb.answer("Видишь голоса? Они есть, но их мало") else: if not poll.is_closed: await bot.stop_poll(msg.chat.id, msg.message_id) diff --git a/handlers/system.py b/handlers/system.py new file mode 100644 index 0000000..5346c54 --- /dev/null +++ b/handlers/system.py @@ -0,0 +1,23 @@ +import logging +import traceback + +from aiogram import types as t + +from shared.instances import dp + + +@dp.errors_handler() +async def уборщик_какашек(upd: t.Update, err: Exception): + txt = "Я хз что произошло, но да \n" + txt += f" {err.__class__.__name__}: {' '.join(map(str, err.args))}" + + if upd.message: + await upd.message.answer(txt) + elif upd.callback_query: + await upd.callback_query.answer(txt) + else: + return + + logging.error(traceback.format_exc()) + + return True -- cgit v1.3