diff options
| author | Igor Tolmachov <me@igorek.dev> | 2022-12-05 22:29:41 +0900 |
|---|---|---|
| committer | Igor Tolmachov <me@igorek.dev> | 2022-12-05 22:29:41 +0900 |
| commit | 0de7969d30e3e57d681afdfcadd245f6988a0342 (patch) | |
| tree | bc0957e9208f51354aa2330dc20a090b7f680823 /shared | |
| parent | 0d5cab62b0d077ad7946b64a534e3914f1cc79dd (diff) | |
| download | karpov_ai_bot-0de7969d30e3e57d681afdfcadd245f6988a0342.tar.gz karpov_ai_bot-0de7969d30e3e57d681afdfcadd245f6988a0342.zip | |
2.1
Diffstat (limited to 'shared')
| -rw-r--r-- | shared/__init__.py | 1 | ||||
| -rw-r--r-- | shared/commands.py | 3 | ||||
| -rw-r--r-- | shared/database.py | 1 | ||||
| -rw-r--r-- | shared/instances.py | 6 | ||||
| -rw-r--r-- | shared/samples.py | 31 | ||||
| -rw-r--r-- | shared/settings.py | 49 |
6 files changed, 59 insertions, 32 deletions
diff --git a/shared/__init__.py b/shared/__init__.py index f708bfe..edfd5c2 100644 --- a/shared/__init__.py +++ b/shared/__init__.py | |||
| @@ -2,4 +2,5 @@ | |||
| 2 | from . import settings | 2 | from . import settings |
| 3 | from . import instances | 3 | from . import instances |
| 4 | from . import database | 4 | from . import database |
| 5 | from . import samples | ||
| 5 | from . import commands | 6 | from . import commands |
diff --git a/shared/commands.py b/shared/commands.py index 684997c..a7ff002 100644 --- a/shared/commands.py +++ b/shared/commands.py | |||
| @@ -6,19 +6,16 @@ from aiogram.types import BotCommandScopeAllPrivateChats as private | |||
| 6 | commands = { | 6 | commands = { |
| 7 | group(): [ | 7 | group(): [ |
| 8 | cmd("gen", "Сгенерировать сообщение"), | 8 | cmd("gen", "Сгенерировать сообщение"), |
| 9 | cmd("del", "Удалить сообщение бота"), | ||
| 10 | cmd("pin", "Создать опрос для закрепления сообщения"), | 9 | cmd("pin", "Создать опрос для закрепления сообщения"), |
| 11 | ], | 10 | ], |
| 12 | admin(): [ | 11 | admin(): [ |
| 13 | cmd("gen", "Сгенерировать сообщение"), | 12 | cmd("gen", "Сгенерировать сообщение"), |
| 14 | cmd("del", "Удалить сообщение бота"), | ||
| 15 | cmd("pin", "Создать опрос для закрепления сообщения"), | 13 | cmd("pin", "Создать опрос для закрепления сообщения"), |
| 16 | cmd("void", "Отчистить связи для генерации сообщений"), | 14 | cmd("void", "Отчистить связи для генерации сообщений"), |
| 17 | cmd("config", "Открыть настройки чата"), | 15 | cmd("config", "Открыть настройки чата"), |
| 18 | ], | 16 | ], |
| 19 | private(): [ | 17 | private(): [ |
| 20 | cmd("gen", "Сгенерировать сообщение"), | 18 | cmd("gen", "Сгенерировать сообщение"), |
| 21 | cmd("del", "Удалить сообщение бота"), | ||
| 22 | cmd("void", "Отчистить связи для генерации сообщений"), | 19 | cmd("void", "Отчистить связи для генерации сообщений"), |
| 23 | ], | 20 | ], |
| 24 | } | 21 | } |
diff --git a/shared/database.py b/shared/database.py index 9dfe868..6ce5fa2 100644 --- a/shared/database.py +++ b/shared/database.py | |||
| @@ -11,6 +11,7 @@ class Message(Base): | |||
| 11 | __tablename__ = "messages" | 11 | __tablename__ = "messages" |
| 12 | chat_id: Mapped[int] = mapped_column(primary_key=True) | 12 | chat_id: Mapped[int] = mapped_column(primary_key=True) |
| 13 | message_id: Mapped[int] = mapped_column(primary_key=True) | 13 | message_id: Mapped[int] = mapped_column(primary_key=True) |
| 14 | user_id: Mapped[int] | ||
| 14 | message: Mapped[str] | 15 | message: Mapped[str] |
| 15 | 16 | ||
| 16 | 17 | ||
diff --git a/shared/instances.py b/shared/instances.py index fb511b3..5528206 100644 --- a/shared/instances.py +++ b/shared/instances.py | |||
| @@ -7,10 +7,10 @@ from sqlalchemy.orm import Session, sessionmaker | |||
| 7 | from shared.settings import Chats, Settings | 7 | from shared.settings import Chats, Settings |
| 8 | 8 | ||
| 9 | settings = Settings() | 9 | settings = Settings() |
| 10 | config = Chats() | 10 | chats = Chats("data/config.json") |
| 11 | if not exists("data/config.json"): | 11 | if not exists("data/config.json"): |
| 12 | config.save("data/config.json") | 12 | chats.save() |
| 13 | config.load("data/config.json") | 13 | chats.load() |
| 14 | 14 | ||
| 15 | bot = Bot(token=settings.token) | 15 | bot = Bot(token=settings.token) |
| 16 | dp = Dispatcher(bot) | 16 | dp = Dispatcher(bot) |
diff --git a/shared/samples.py b/shared/samples.py new file mode 100644 index 0000000..740cff5 --- /dev/null +++ b/shared/samples.py | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | from tgen import TextGenerator | ||
| 2 | |||
| 3 | from shared.database import Message | ||
| 4 | from shared.instances import session | ||
| 5 | |||
| 6 | |||
| 7 | class Samples: | ||
| 8 | samples: dict[int, TextGenerator] | ||
| 9 | |||
| 10 | def __init__(self) -> None: | ||
| 11 | self.samples = {} | ||
| 12 | |||
| 13 | def get(self, chat_id: int) -> TextGenerator: | ||
| 14 | if chat_id not in self.samples: | ||
| 15 | with session() as s: | ||
| 16 | samples = [ | ||
| 17 | m.tuple()[0] | ||
| 18 | for m in s.query(Message.message) | ||
| 19 | .filter(Message.chat_id == chat_id) | ||
| 20 | .all() | ||
| 21 | ] | ||
| 22 | |||
| 23 | self.samples[chat_id] = TextGenerator.from_samples(samples) | ||
| 24 | return self.samples[chat_id] | ||
| 25 | |||
| 26 | def delete(self, chat_id: int) -> None: | ||
| 27 | if chat_id in self.samples: | ||
| 28 | self.samples.pop(chat_id) | ||
| 29 | |||
| 30 | |||
| 31 | samples = Samples() | ||
diff --git a/shared/settings.py b/shared/settings.py index 560f8f8..bff7ff9 100644 --- a/shared/settings.py +++ b/shared/settings.py | |||
| @@ -11,7 +11,7 @@ class GenConfig(BaseModel): | |||
| 11 | chance: int = Field( | 11 | chance: int = Field( |
| 12 | 10, | 12 | 10, |
| 13 | description="Шанс с которым бот сгенерирует сообщение", | 13 | description="Шанс с которым бот сгенерирует сообщение", |
| 14 | ge=1, | 14 | ge=0, |
| 15 | le=100, | 15 | le=100, |
| 16 | ) | 16 | ) |
| 17 | reply: bool = Field( | 17 | reply: bool = Field( |
| @@ -22,16 +22,6 @@ class GenConfig(BaseModel): | |||
| 22 | True, | 22 | True, |
| 23 | description="Включить/Выключить удаление /gen команды", | 23 | description="Включить/Выключить удаление /gen команды", |
| 24 | ) | 24 | ) |
| 25 | min_word_count: int | str | None = Field( | ||
| 26 | None, | ||
| 27 | description="Минимальное количество слов в сгенерированном предложении", | ||
| 28 | ge=1, | ||
| 29 | ) | ||
| 30 | max_word_count: int | None = Field( | ||
| 31 | None, | ||
| 32 | description="Максимальное количество слов в сгенерированном предложении", | ||
| 33 | ge=1, | ||
| 34 | ) | ||
| 35 | 25 | ||
| 36 | 26 | ||
| 37 | class PollConfig(BaseModel): | 27 | class PollConfig(BaseModel): |
| @@ -60,22 +50,29 @@ class Config(BaseModel): | |||
| 60 | ) | 50 | ) |
| 61 | 51 | ||
| 62 | 52 | ||
| 63 | class Chats(BaseModel): | 53 | class Chats: |
| 64 | chats: dict[int, Config] = {} | 54 | file_name: str |
| 55 | configs: dict[int, Config] | ||
| 56 | |||
| 57 | def __init__(self, file_name: str) -> None: | ||
| 58 | self.file_name = file_name | ||
| 59 | self.configs = {} | ||
| 65 | 60 | ||
| 66 | @classmethod | 61 | def load(self) -> None: |
| 67 | def load(cls, file_name: str) -> "Chats": | 62 | with open(self.file_name, "r") as file: |
| 68 | with open(file_name, "r") as file: | 63 | self.configs = { |
| 69 | return cls.parse_obj(load(file)) | 64 | id_: Config.parse_obj(config) for id_, config in load(file).items() |
| 65 | } | ||
| 70 | 66 | ||
| 71 | def save(self, file_name: str) -> None: | 67 | def save(self) -> None: |
| 72 | with open(file_name, "w") as file: | 68 | with open(self.file_name, "w") as file: |
| 73 | dump(self.schema(), file) | 69 | dump({id_: config.dict() for id_, config in self.configs.items()}, file) |
| 74 | 70 | ||
| 75 | def get_config(self, chat_id: int) -> Config: | 71 | def get(self, chat_id: int) -> Config: |
| 76 | if chat_id not in self.chats: | 72 | if chat_id not in self.configs: |
| 77 | self.chats[chat_id] = Config() | 73 | self.configs[chat_id] = Config() |
| 78 | return self.chats[chat_id] | 74 | return self.configs[chat_id] |
| 79 | 75 | ||
| 80 | def set_config(self, chat_id: int, config: Config) -> None: | 76 | def set(self, chat_id: int, config: Config) -> None: |
| 81 | self.chats[chat_id] = config | 77 | self.configs[chat_id] = config |
| 78 | self.save() | ||
