aboutsummaryrefslogtreecommitdiff
path: root/velascobot2
diff options
context:
space:
mode:
authorGuillermo Serrahima <dev@vylion.com>2026-02-04 12:17:14 +0100
committerGuillermo Serrahima <dev@vylion.com>2026-02-04 12:17:14 +0100
commit5ddae470ce5ffbf8d6bb1bedc3b6b411aff802bc (patch)
treeae26a0022785f4f705a474ad2596b6262d2a535c /velascobot2
parent2d143ebcaf238707ddb58a4f354f30262e60e3e0 (diff)
downloadvelascobot2-5ddae470ce5ffbf8d6bb1bedc3b6b411aff802bc.tar.xz
velascobot2-5ddae470ce5ffbf8d6bb1bedc3b6b411aff802bc.zip
Added dynamic calculation of processed messages
Diffstat (limited to 'velascobot2')
-rw-r--r--velascobot2/bot.py54
-rw-r--r--velascobot2/database.py14
-rw-r--r--velascobot2/messenger.py3
-rw-r--r--velascobot2/parrot.py6
4 files changed, 44 insertions, 33 deletions
diff --git a/velascobot2/bot.py b/velascobot2/bot.py
index bf1a161..d11865b 100644
--- a/velascobot2/bot.py
+++ b/velascobot2/bot.py
@@ -191,28 +191,10 @@ class Bot:
assert update.message
chat_id = str(update.message.chat.id)
- chat_data = self.messenger.get_chat_data(chat_id)
- if chat_data is None:
- try:
- await update.message.reply_text(
- "I've processed no messages so far."
- )
- except (
- telegram.error.Forbidden,
- telegram.error.BadRequest,
- telegram.error.NetworkError,
- ) as e:
- logger.error(str(e))
- return
-
- num = (
- str(chat_data.processed_messages)
- if chat_data.processed_messages > 0
- else "no"
- )
+ count = self.messenger.get_processed_messages(chat_id)
try:
await update.message.reply_text(
- "I've processed {} messages so far.".format(num)
+ f"I remember {count} messages."
)
except (
telegram.error.Forbidden,
@@ -379,7 +361,9 @@ class Bot:
"let only admins" if not chat_data.restricted else "let everyone"
)
try:
- await update.message.reply_text(f"I will {allowed} configure me now.")
+ await update.message.reply_text(
+ f"I will {allowed} configure me now."
+ )
except (
telegram.error.Forbidden,
telegram.error.BadRequest,
@@ -672,15 +656,26 @@ class Bot:
self, update: Update, context: ContextTypes.DEFAULT_TYPE
):
"""Handles the /speak command."""
+ assert update.message
chat = update.message.chat
chat_id = str(chat.id)
+ if self.messenger.get_processed_messages(chat_id) == 0:
+ empty_gen_warning = "I haven't learned a single word yet."
+ await self.send(
+ chat_id,
+ Response.TEXT,
+ content=empty_gen_warning,
+ reply_to_message_id=update.message.message_id,
+ )
+ return
+
chat_data = self.messenger.get_chat_data(chat_id)
if chat_data is None:
return
if not self.testing and chat_data.restricted:
- assert update.message
+ assert update.message.from_user
user = await update.message.chat.get_member(
update.message.from_user.id
)
@@ -696,16 +691,7 @@ class Bot:
# words = update.message.text.split()
# if len(words) > 1:
# self.messenger.process_text(chat_id, ' '.join(words[1:]))
- if chat_data.processed_messages > 0:
- await self.speak(chat_id, reply_to_message_id=rid)
- else:
- empty_gen_warning = "I haven't learned a single word yet."
- await self.send(
- chat_id,
- Response.TEXT,
- content=empty_gen_warning,
- reply_to_message_id=rid,
- )
+ await self.speak(chat_id, reply_to_message_id=rid)
async def show_config(
self, update: Update, context: ContextTypes.DEFAULT_TYPE
@@ -726,10 +712,12 @@ class Bot:
else:
permissions = "neither restricted nor silenced"
+ processed_messages = self.messenger.get_processed_messages(chat_id)
+
answer = (
f"You're messaging in the chat of __{chat_data.name}__, with id "
f"`{chat_data.id}`, message count "
- f"{chat_data.processed_messages}, period "
+ f"{processed_messages}, period "
f"{chat_data.message_period}, and answer probability "
f"{chat_data.answer_chance}.\n\nThis chat is {permissions}."
)
diff --git a/velascobot2/database.py b/velascobot2/database.py
index 582495f..8be2b8c 100644
--- a/velascobot2/database.py
+++ b/velascobot2/database.py
@@ -154,6 +154,20 @@ class Database:
return rows
+ def get_chat_vocab_count(self, chat_id: str) -> int:
+ with _SQLiteContextMgr(database=self.db_name) as db:
+ result = db.execute(
+ "SELECT SUM(count) FROM vocab WHERE chat_id = ?", (chat_id,)
+ ).fetchone()[0]
+ return result or 0
+
+ def get_chat_graph_count(self, chat_id: str) -> int:
+ with _SQLiteContextMgr(database=self.db_name) as db:
+ result = db.execute(
+ "SELECT SUM(count) FROM graphics WHERE chat_id = ?", (chat_id,)
+ ).fetchone()[0]
+ return result or 0
+
def get_graphics(self, chat_id: str):
with _SQLiteContextMgr(database=self.db_name) as db:
rows = db.execute(
diff --git a/velascobot2/messenger.py b/velascobot2/messenger.py
index 7298cac..6c39574 100644
--- a/velascobot2/messenger.py
+++ b/velascobot2/messenger.py
@@ -138,3 +138,6 @@ class Messenger:
def update_set_silenced(self, chat_id: str, silenced: bool):
self._parrot.update_chat_set_silenced(chat_id, silenced)
+
+ def get_processed_messages(self, chat_id: str) -> int:
+ return self._parrot.get_processed_messages(chat_id)
diff --git a/velascobot2/parrot.py b/velascobot2/parrot.py
index 9ca139a..641dd31 100644
--- a/velascobot2/parrot.py
+++ b/velascobot2/parrot.py
@@ -133,3 +133,9 @@ class Parrot:
def update_chat_set_silenced(self, chat_id: str, silenced: bool):
self.db.update_chat_set_silenced(chat_id, silenced)
+
+ def get_processed_messages(self, chat_id: str) -> int:
+ graph_count = self.db.get_chat_graph_count(chat_id)
+ start_words = self.db.get_next_words(chat_id, " ")
+ start_word_count = sum(weight for _, weight in start_words)
+ return graph_count + start_word_count