From 5ddae470ce5ffbf8d6bb1bedc3b6b411aff802bc Mon Sep 17 00:00:00 2001 From: Guillermo Serrahima Date: Wed, 4 Feb 2026 12:17:14 +0100 Subject: Added dynamic calculation of processed messages --- .gitignore | 5 ++++- velascobot2/bot.py | 54 +++++++++++++++++++----------------------------- velascobot2/database.py | 14 +++++++++++++ velascobot2/messenger.py | 3 +++ velascobot2/parrot.py | 6 ++++++ 5 files changed, 48 insertions(+), 34 deletions(-) diff --git a/.gitignore b/.gitignore index ef602f4..86f22b3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,7 @@ __pycache__/ # databases *.db -*.sqlite +*.sql* + +# personal scripts +.personal_* 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 -- cgit v1.2.3