aboutsummaryrefslogtreecommitdiff
path: root/handlers/gen.py
diff options
context:
space:
mode:
Diffstat (limited to 'handlers/gen.py')
-rw-r--r--handlers/gen.py102
1 files changed, 52 insertions, 50 deletions
diff --git a/handlers/gen.py b/handlers/gen.py
index b618fec..8f19e96 100644
--- a/handlers/gen.py
+++ b/handlers/gen.py
@@ -1,67 +1,69 @@
1import os 1import random
2 2
3import mc 3import mc
4from aiogram import types as t 4from aiogram import types as t
5 5
6from shared import config 6from shared.database import Message
7from shared.instances import bot, dp 7from shared.instances import bot, config, dp, session
8from utils import filters as f 8from utils import filters as f
9 9
10 10
11@dp.message_handler(commands=["gen"]) 11def get_text(chat_id: int) -> str:
12async def сгенерировать_хуету(msg: t.Message): 12 with session() as s:
13 await msg.answer(получить_говно(msg.chat.id)) 13 samples = [
14 m.tuple()[0]
15 for m in s.query(Message.message).filter(Message.chat_id == chat_id).all()
16 ]
14 17
18 assert (
19 len(samples) != 0
20 ), "Нету сообщений на основе которых можно сгенерировать сообщение"
15 21
16@dp.message_handler(commands=["del"]) 22 generator = mc.PhraseGenerator(samples)
17async def удалить_хуету(msg: t.Message): 23 gen_config = config.get_config(chat_id).gen
18 await msg.delete() 24 validators = []
19 25
20 if msg.reply_to_message: 26 if gen_config.max_word_count is not None or gen_config.min_word_count is not None:
21 if msg.reply_to_message.from_user.id in [bot.id, msg.from_user.id]: 27 validators.append(
22 await msg.reply_to_message.delete() 28 mc.builtin.validators.words_count(
23 else: 29 minimal=gen_config.min_word_count,
24 await msg.answer("Ты умник, можно только свои или мои удалять") 30 maximal=gen_config.max_word_count,
25 else: 31 )
26 await msg.answer("Ты умник, ответь на сообщение")
27
28
29@dp.message_handler(commands=["void"])
30async def лоботомия(msg: t.Message):
31 if msg.get_args() == "Я знаю что делаю":
32 os.remove(f"data/{msg.chat.id}")
33 await msg.answer("Лоботомия проведена успешно")
34 else:
35 await msg.answer(
36 "Напишите <code>/void Я знаю что делаю</code>", parse_mode=t.ParseMode.HTML
37 ) 32 )
38 33
34 while True:
35 message = generator.generate_phrase_or_none(1, validators=validators)
36 if message is not None:
37 return message
39 38
40@dp.message_handler(commands=["chance"])
41async def изменить_шанс_срания(msg: t.Message):
42 if msg.get_args():
43 try:
44 chance = int(msg.get_args().split()[0])
45 if 0 <= chance <= 100:
46 config.chances[str(msg.chat.id)] = chance
47 config.save()
48 else:
49 raise RuntimeError()
50
51 await msg.answer(f"Теперь я сру с шансом в: {chance}%")
52 except Exception:
53 await msg.answer(
54 "Я хз что не так, но я знаю что ты дебил \n /chance <ЧИСЛО ОТ 0 ДО 100>"
55 )
56 else:
57 await msg.answer(f"Я сру с шансом в: {config.chances.get(str(msg.chat.id), 10)}%")
58 39
40@dp.message_handler(commands=["gen"])
41async def gen_command(msg: t.Message) -> None:
42 await msg.delete()
43 message = get_text(msg.chat.id)
44 if message is not None:
45 await msg.answer(message)
59 46
60@dp.message_handler(f.message.chance, content_types=[t.ContentType.ANY])
61async def срать_сообщение_с_шансом(msg: t.Message):
62 await msg.answer(получить_говно(msg.chat.id))
63 47
48@dp.message_handler(commands=["del"])
49async def del_command(msg: t.Message) -> None:
50 await msg.delete()
64 51
65def получить_говно(id: int) -> str: 52 if msg.reply_to_message:
66 samples = mc.util.load_txt_samples(f"data/{id}", separator="§") 53 if msg.reply_to_message.from_user.id == bot.id:
67 return mc.StringGenerator(samples=samples).generate_string() 54 await msg.reply_to_message.delete()
55 else:
56 await msg.reply("Можно удалять только сообщения бота")
57 else:
58 await msg.reply("Вы не ответили на сообщение")
59
60
61@dp.message_handler(
62 f.message.is_chat,
63 f.message.chance,
64 content_types=[t.ContentType.ANY],
65)
66async def chance_message(msg: t.Message) -> None:
67 message = get_text(msg.chat.id)
68 if message is not None:
69 await msg.reply(message)