diff options
Diffstat (limited to 'handlers')
| -rw-r--r-- | handlers/__init__.py | 8 | ||||
| -rw-r--r-- | handlers/gen.py | 18 | ||||
| -rw-r--r-- | handlers/leave.py | 8 | ||||
| -rw-r--r-- | handlers/member.py | 105 | ||||
| -rw-r--r-- | handlers/msg.py | 6 | ||||
| -rw-r--r-- | handlers/pin.py (renamed from handlers/poll.py) | 24 |
6 files changed, 81 insertions, 88 deletions
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 @@ | |||
| 1 | from . import leave | 1 | # isort: skip_file |
| 2 | from . import msg | ||
| 3 | from . import gen | 2 | from . import gen |
| 4 | from . import poll | 3 | from . import pin |
| 4 | from . import member | ||
| 5 | 5 | ||
| 6 | # from . import member | 6 | from . import msg |
| 7 | from . import system | 7 | from . 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 | |||
| 6 | from utils import filters as f | 6 | from 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"]) |
| 10 | async def сгенерировать_хуету(msg: t.Message): | 10 | async 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"]) |
| 15 | async def удалить_хуету(msg: t.Message): | 15 | async 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 | ) | ||
| 49 | async def срать_сообщение_с_шансом(msg: t.Message): | 47 | async def срать_сообщение_с_шансом(msg: t.Message): |
| 50 | await msg.answer(получить_говно()) | 48 | await msg.answer(получить_говно(msg.chat.id)) |
| 51 | 49 | ||
| 52 | 50 | ||
| 53 | def получить_говно() -> str: | 51 | def получить_говно(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) |
| 8 | async def пососи(upd: t.ChatMemberUpdated): | 8 | async 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 @@ | |||
| 1 | from asyncio import sleep | ||
| 2 | |||
| 3 | from aiogram import types as t | 1 | from aiogram import types as t |
| 4 | 2 | ||
| 5 | from shared.instances import bot, dp | 3 | from shared.instances import bot, dp |
| 6 | from utils import filters as f | 4 | from utils import filters as f |
| 7 | 5 | ||
| 8 | unmute = t.ChatPermissions(*[True] * 8) | 6 | request_queue: list[int] = [] |
| 9 | mute = t.ChatPermissions(*[False] * 8) | ||
| 10 | 7 | ||
| 11 | 8 | ||
| 12 | @dp.chat_member_handler(f.user.add_member) | 9 | @dp.chat_join_request_handler() |
| 13 | async def запрашиваем_пропуск(upd: t.ChatMemberUpdated): | 10 | async 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 | ) |
| 34 | async def пропустить(clb: t.CallbackQuery): | 43 | async 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( |
| 53 | async 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 | ) | ||
| 19 | async def ХУЙ(): | 17 | async 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 | |||
| 5 | from shared.instances import bot, dp | 5 | from shared.instances import bot, dp |
| 6 | from utils import filters as f | 6 | from utils import filters as f |
| 7 | 7 | ||
| 8 | pin_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"]) |
| 14 | async def закрепить_хуету(msg: t.Message): | 10 | async 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() |
