diff --git a/.gitignore b/.gitignore --- 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 --- a/velascobot2/bot.py +++ b/velascobot2/bot.py @@ -191,28 +191,10 @@ ) -> None: 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 @@ allowed = ( "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 @@ async def speak_command( 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 @@ rid = replied.message_id if replied else mid # 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 @@ permissions = "not restricted but silenced" 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 --- a/velascobot2/database.py +++ b/velascobot2/database.py @@ -154,6 +154,20 @@ return [] 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 --- a/velascobot2/messenger.py +++ b/velascobot2/messenger.py @@ -138,3 +138,6 @@ self._parrot.update_chat_set_restricted(chat_id, restricted) 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 --- a/velascobot2/parrot.py +++ b/velascobot2/parrot.py @@ -133,3 +133,9 @@ self.db.update_chat_set_restricted(chat_id, restricted) 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