aboutsummaryrefslogtreecommitdiff
path: root/handlers
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
parent91a36ea91b7a1933e3f5933ca01396fee77c214a (diff)
downloadkarpov_ai_bot-93067d9a91395c339ce55a111ce4b6e1020f0121.tar.gz
karpov_ai_bot-93067d9a91395c339ce55a111ce4b6e1020f0121.zip
Теперь доступен не только в ананасах!
+ опрос на вступление человека
Diffstat (limited to 'handlers')
-rw-r--r--handlers/__init__.py8
-rw-r--r--handlers/gen.py18
-rw-r--r--handlers/leave.py8
-rw-r--r--handlers/member.py105
-rw-r--r--handlers/msg.py6
-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 @@
1from . import leave 1# isort: skip_file
2from . import msg
3from . import gen 2from . import gen
4from . import poll 3from . import pin
4from . import member
5 5
6# from . import member 6from . import msg
7from . import system 7from . 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
6from utils import filters as f 6from 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"])
10async def сгенерировать_хуету(msg: t.Message): 10async 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"])
15async def удалить_хуету(msg: t.Message): 15async 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)
49async def срать_сообщение_с_шансом(msg: t.Message): 47async def срать_сообщение_с_шансом(msg: t.Message):
50 await msg.answer(получить_говно()) 48 await msg.answer(получить_говно(msg.chat.id))
51 49
52 50
53def получить_говно() -> str: 51def получить_говно(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)
8async def пососи(upd: t.ChatMemberUpdated): 8async 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 @@
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 )
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)
19async def ХУЙ(): 17async 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
5from shared.instances import bot, dp 5from shared.instances import bot, dp
6from utils import filters as f 6from utils import filters as f
7 7
8pin_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"])
14async def закрепить_хуету(msg: t.Message): 10async 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()