aboutsummaryrefslogtreecommitdiff
path: root/shared
diff options
context:
space:
mode:
authorIgor Tolmachov <me@igorek.dev>2022-12-05 22:29:41 +0900
committerIgor Tolmachov <me@igorek.dev>2022-12-05 22:29:41 +0900
commit0de7969d30e3e57d681afdfcadd245f6988a0342 (patch)
treebc0957e9208f51354aa2330dc20a090b7f680823 /shared
parent0d5cab62b0d077ad7946b64a534e3914f1cc79dd (diff)
downloadkarpov_ai_bot-0de7969d30e3e57d681afdfcadd245f6988a0342.tar.gz
karpov_ai_bot-0de7969d30e3e57d681afdfcadd245f6988a0342.zip
2.1
Diffstat (limited to 'shared')
-rw-r--r--shared/__init__.py1
-rw-r--r--shared/commands.py3
-rw-r--r--shared/database.py1
-rw-r--r--shared/instances.py6
-rw-r--r--shared/samples.py31
-rw-r--r--shared/settings.py49
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 @@
2from . import settings 2from . import settings
3from . import instances 3from . import instances
4from . import database 4from . import database
5from . import samples
5from . import commands 6from . 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
6commands = { 6commands = {
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
7from shared.settings import Chats, Settings 7from shared.settings import Chats, Settings
8 8
9settings = Settings() 9settings = Settings()
10config = Chats() 10chats = Chats("data/config.json")
11if not exists("data/config.json"): 11if not exists("data/config.json"):
12 config.save("data/config.json") 12 chats.save()
13config.load("data/config.json") 13chats.load()
14 14
15bot = Bot(token=settings.token) 15bot = Bot(token=settings.token)
16dp = Dispatcher(bot) 16dp = 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 @@
1from tgen import TextGenerator
2
3from shared.database import Message
4from shared.instances import session
5
6
7class 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
31samples = 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
37class PollConfig(BaseModel): 27class PollConfig(BaseModel):
@@ -60,22 +50,29 @@ class Config(BaseModel):
60 ) 50 )
61 51
62 52
63class Chats(BaseModel): 53class 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()