diff options
Diffstat (limited to 'handlers/gen.py')
| -rw-r--r-- | handlers/gen.py | 102 |
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 @@ | |||
| 1 | import os | 1 | import random |
| 2 | 2 | ||
| 3 | import mc | 3 | import mc |
| 4 | from aiogram import types as t | 4 | from aiogram import types as t |
| 5 | 5 | ||
| 6 | from shared import config | 6 | from shared.database import Message |
| 7 | from shared.instances import bot, dp | 7 | from shared.instances import bot, config, dp, session |
| 8 | from utils import filters as f | 8 | from utils import filters as f |
| 9 | 9 | ||
| 10 | 10 | ||
| 11 | @dp.message_handler(commands=["gen"]) | 11 | def get_text(chat_id: int) -> str: |
| 12 | async 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) |
| 17 | async 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"]) | ||
| 30 | async 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"]) | ||
| 41 | async 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"]) | ||
| 41 | async 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]) | ||
| 61 | async def срать_сообщение_с_шансом(msg: t.Message): | ||
| 62 | await msg.answer(получить_говно(msg.chat.id)) | ||
| 63 | 47 | ||
| 48 | @dp.message_handler(commands=["del"]) | ||
| 49 | async def del_command(msg: t.Message) -> None: | ||
| 50 | await msg.delete() | ||
| 64 | 51 | ||
| 65 | def получить_говно(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 | ) | ||
| 66 | async 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) | ||
