aboutsummaryrefslogtreecommitdiff
path: root/handlers/member.py
diff options
context:
space:
mode:
authorIgor Tolmachov <me@igorek.dev>2022-07-09 01:13:20 +0900
committerIgor Tolmachov <me@igorek.dev>2022-07-09 01:13:20 +0900
commit93067d9a91395c339ce55a111ce4b6e1020f0121 (patch)
tree310012b67d6e31c3779e57cd50285650b2d83d13 /handlers/member.py
parent91a36ea91b7a1933e3f5933ca01396fee77c214a (diff)
downloadkarpov_ai_bot-93067d9a91395c339ce55a111ce4b6e1020f0121.tar.gz
karpov_ai_bot-93067d9a91395c339ce55a111ce4b6e1020f0121.zip
Теперь доступен не только в ананасах!
+ опрос на вступление человека
Diffstat (limited to 'handlers/member.py')
-rw-r--r--handlers/member.py105
1 files changed, 54 insertions, 51 deletions
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 )