diff options
Diffstat (limited to 'handlers/gen.py')
| -rw-r--r-- | handlers/gen.py | 59 |
1 files changed, 7 insertions, 52 deletions
diff --git a/handlers/gen.py b/handlers/gen.py index 72afb79..ef397db 100644 --- a/handlers/gen.py +++ b/handlers/gen.py | |||
| @@ -1,60 +1,15 @@ | |||
| 1 | import random | ||
| 2 | |||
| 3 | import mc | ||
| 4 | from aiogram import types as t | 1 | from aiogram import types as t |
| 5 | 2 | ||
| 6 | from shared.database import Message | 3 | from shared.instances import chats, dp |
| 7 | from shared.instances import bot, config, dp, session | 4 | from shared.samples import samples |
| 8 | from utils import filters as f | 5 | from utils import filters as f |
| 9 | 6 | ||
| 10 | 7 | ||
| 11 | def get_text(chat_id: int) -> str: | ||
| 12 | with session() as s: | ||
| 13 | samples = [ | ||
| 14 | m.tuple()[0] | ||
| 15 | for m in s.query(Message.message).filter(Message.chat_id == chat_id).all() | ||
| 16 | ] | ||
| 17 | |||
| 18 | assert ( | ||
| 19 | len(samples) != 0 | ||
| 20 | ), "Нету данных на основе которых можно сгенерировать сообщение" | ||
| 21 | |||
| 22 | generator = mc.PhraseGenerator(samples) | ||
| 23 | gen_config = config.get_config(chat_id).gen | ||
| 24 | validators = [] | ||
| 25 | |||
| 26 | if gen_config.max_word_count is not None or gen_config.min_word_count is not None: | ||
| 27 | validators.append( | ||
| 28 | mc.builtin.validators.words_count( | ||
| 29 | minimal=gen_config.min_word_count, | ||
| 30 | maximal=gen_config.max_word_count, | ||
| 31 | ) | ||
| 32 | ) | ||
| 33 | |||
| 34 | while True: | ||
| 35 | message = generator.generate_phrase_or_none(1, validators=validators) | ||
| 36 | if message is not None: | ||
| 37 | return message | ||
| 38 | |||
| 39 | |||
| 40 | @dp.message_handler(commands=["gen"]) | 8 | @dp.message_handler(commands=["gen"]) |
| 41 | async def gen_command(msg: t.Message) -> None: | 9 | async def gen_command(msg: t.Message) -> None: |
| 42 | if config.get_config(msg.chat.id).gen.delete_command: | 10 | if chats.get(msg.chat.id).gen.delete_command: |
| 43 | await msg.delete() | 11 | await msg.delete() |
| 44 | await msg.answer(get_text(msg.chat.id)) | 12 | await msg.answer(samples.get(msg.chat.id).generate()) |
| 45 | |||
| 46 | |||
| 47 | @dp.message_handler(commands=["del"]) | ||
| 48 | async def del_command(msg: t.Message) -> None: | ||
| 49 | await msg.delete() | ||
| 50 | |||
| 51 | if msg.reply_to_message: | ||
| 52 | if msg.reply_to_message.from_user.id == bot.id: | ||
| 53 | await msg.reply_to_message.delete() | ||
| 54 | else: | ||
| 55 | await msg.reply("Можно удалять только сообщения бота") | ||
| 56 | else: | ||
| 57 | await msg.reply("Вы не ответили на сообщение") | ||
| 58 | 13 | ||
| 59 | 14 | ||
| 60 | @dp.message_handler( | 15 | @dp.message_handler( |
| @@ -63,7 +18,7 @@ async def del_command(msg: t.Message) -> None: | |||
| 63 | content_types=[t.ContentType.ANY], | 18 | content_types=[t.ContentType.ANY], |
| 64 | ) | 19 | ) |
| 65 | async def chance_message(msg: t.Message) -> None: | 20 | async def chance_message(msg: t.Message) -> None: |
| 66 | if config.get_config(msg.chat.id).gen.reply: | 21 | if chats.get(msg.chat.id).gen.reply: |
| 67 | await msg.reply(get_text(msg.chat.id)) | 22 | await msg.reply(samples.get(msg.chat.id).generate()) |
| 68 | else: | 23 | else: |
| 69 | await msg.answer(get_text(msg.chat.id)) | 24 | await msg.answer(samples.get(msg.chat.id).generate()) |
