From 93067d9a91395c339ce55a111ce4b6e1020f0121 Mon Sep 17 00:00:00 2001 From: Igor Tolmachov Date: Sat, 9 Jul 2022 01:13:20 +0900 Subject: Теперь доступен не только в ананасах! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + опрос на вступление человека --- handlers/__init__.py | 8 ++-- handlers/gen.py | 18 ++++----- handlers/leave.py | 8 +--- handlers/member.py | 105 ++++++++++++++++++++++++++------------------------- handlers/msg.py | 6 +-- handlers/pin.py | 48 +++++++++++++++++++++++ handlers/poll.py | 50 ------------------------ 7 files changed, 118 insertions(+), 125 deletions(-) create mode 100644 handlers/pin.py delete mode 100644 handlers/poll.py (limited to 'handlers') 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 @@ -from . import leave -from . import msg +# isort: skip_file from . import gen -from . import poll +from . import pin +from . import member -# from . import member +from . import msg 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 from utils import filters as f -@dp.message_handler(f.message.is_chat, commands=["gen"]) +@dp.message_handler(commands=["gen"]) async def сгенерировать_хуету(msg: t.Message): - await msg.answer(получить_говно()) + await msg.answer(получить_говно(msg.chat.id)) -@dp.message_handler(f.message.is_chat, commands=["del"]) +@dp.message_handler(commands=["del"]) async def удалить_хуету(msg: t.Message): await msg.delete() @@ -43,13 +43,11 @@ async def изменить_шанс_срания(msg: t.Message): await msg.answer(f"Я сру с шансом в: {ins.gen_chance.get(msg.chat.id, 10)}%") -@dp.message_handler( - f.message.chance, f.message.is_chat, content_types=[t.ContentType.ANY] -) +@dp.message_handler(f.message.chance, content_types=[t.ContentType.ANY]) async def срать_сообщение_с_шансом(msg: t.Message): - await msg.answer(получить_говно()) + await msg.answer(получить_говно(msg.chat.id)) -def получить_говно() -> str: - samples = mc.util.load_txt_samples("samples.txt", separator="§") - return mc.StringGenerator(samples=samples).generate_string().capitalize() +def получить_говно(id: int) -> str: + samples = mc.util.load_txt_samples(f"data/{id}", separator="§") + 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 @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() +async def создатьтемплейты(upd: t.ChatMemberUpdated): + open(f"data/{upd.chat.id}", "w").close() 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 @@ -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) +request_queue: list[int] = [] -@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.chat_join_request_handler() +async def приём_запроса(cjr: t.ChatJoinRequest): + if cjr.from_user.id not in request_queue: + request_queue.append(cjr.from_user.id) + r = await bot.send_message( + cjr.chat.id, + f'{cjr.from_user.mention} хочет в чат', + parse_mode=t.ParseMode.HTML, + ) + await bot.send_poll( + cjr.chat.id, + "Пускаем ?", + [ + "Да", + "Нет", + ], + False, + reply_to_message_id=r.message_id, + open_period=600, + reply_markup=t.InlineKeyboardMarkup().add( + t.InlineKeyboardButton( + "Проверить опрос", + callback_data=f"check_request_poll:{cjr.from_user.id}", + ) + ), + ) + await bot.send_message( + cjr.from_user.id, "Заявка на вступление в группу будет вскоре рассмотрена" + ) @dp.callback_query_handler( - f.message.is_chat, lambda clb: clb.data.split("@")[0] == "pass_user" + f.message.is_chat, lambda clb: clb.data.split(":")[0] == "check_request_poll" ) -async def пропустить(clb: t.CallbackQuery): - member = await clb.message.chat.get_member(clb.from_user.id) +async def проверить_запрос(clb: t.CallbackQuery): + poll = clb.message.poll + msg = clb.message + data = clb.data.split(":") + user_id = int(data[1]) - if not member.is_chat_admin(): - await clb.answer("Ты не админ") - return + if poll.total_voter_count < 4: + await clb.answer(f"Нужно хотябы 4 голоса, сейчас {poll.total_voter_count}") 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, - ) + if not poll.is_closed: + await bot.stop_poll(msg.chat.id, msg.message_id) + request_queue.remove(user_id) + yes = poll.options[0].voter_count + no = poll.options[1].voter_count + win = max(yes, no) -@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) - - if not member.is_chat_admin(): - await clb.answer("Ты не админ") - return - else: - await clb.message.chat.unban(int(clb.data.split("@")[1]), False) - - await clb.message.delete() - await clb.message.answer( - f'Эта группа для крутых', - parse_mode=t.ParseMode.HTML, - ) + if win == yes: + await bot.approve_chat_join_request(msg.chat.id, user_id) + await bot.send_message( + user_id, "Ваша заявка на вступление принята, добро пожаловать в группу" + ) + elif win == no: + await bot.decline_chat_join_request(msg.chat.id, user_id) + await bot.send_message(user_id, "Ваша заявка на вступление НЕ принята") + if not msg.chat.has_protected_content: + await msg.forward(user_id) 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): text = msg.text or msg.caption if text.startswith("/"): return False - with open("samples.txt", "a+") as file: + with open(f"data/{msg.chat.id}", "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.has_text, сосалка, content_types=[t.ContentType.ANY]) async def ХУЙ(): pass diff --git a/handlers/pin.py b/handlers/pin.py new file mode 100644 index 0000000..dc08633 --- /dev/null +++ b/handlers/pin.py @@ -0,0 +1,48 @@ +from datetime import datetime, timedelta + +from aiogram import types as t + +from shared.instances import bot, dp +from utils import filters as f + + +@dp.message_handler(f.message.is_chat, commands=["pin"]) +async def закрепить_хуету(msg: t.Message): + await msg.delete() + if msg.reply_to_message: + r = await msg.reply_to_message.reply( + f'{msg.from_user.mention} хочет закрепить сообщение', + parse_mode=t.ParseMode.HTML, + ) + await r.reply_poll( + "Закрепить ?", + ["Да", "УДАЛИ НАХУЙ", "Нет"], + close_date=datetime.now() + timedelta(minutes=10), + reply_markup=t.InlineKeyboardMarkup().add( + t.InlineKeyboardButton("Проверить опрос", callback_data="check_pin_poll") + ), + ) + else: + await msg.answer("Ты умник, ответь на сообщение") + + +@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 < 2: + await clb.answer(f"Нужно хотябы 2 голоса, сейчас {poll.total_voter_count}") + else: + if not poll.is_closed: + await bot.stop_poll(msg.chat.id, msg.message_id) + + yes = poll.options[0].voter_count + delete = poll.options[1].voter_count + win = max(yes, delete) + + if win == yes: + await msg.reply_to_message.pin() + elif win == delete: + await msg.reply_to_message.delete() + await msg.delete() diff --git a/handlers/poll.py b/handlers/poll.py deleted file mode 100644 index 8e7b542..0000000 --- a/handlers/poll.py +++ /dev/null @@ -1,50 +0,0 @@ -from datetime import datetime, timedelta - -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="check_pin_poll") -) - - -@dp.message_handler(f.message.is_chat, commands=["pin"]) -async def закрепить_хуету(msg: t.Message): - await msg.delete() - if msg.reply_to_message: - await msg.reply_to_message.reply_poll( - "Закрепить ?", - ["Да", "УДАЛИ НАХУЙ", "Нет"], - close_date=datetime.now() + timedelta(minutes=10), - reply_markup=pin_reply_markup, - ) - else: - await msg.answer("Ты умник, ответь на сообщение") - - -@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) - poll.is_closed = True - yes = poll.options[0].voter_count - delete = poll.options[1].voter_count - win = max(yes, delete) - - if win == yes: - await msg.reply_to_message.pin() - elif win == delete: - await msg.reply_to_message.delete() - - if poll.is_closed: - await msg.delete() -- cgit v1.2.3