From 7b5028081f1935e853ef6d87f5317cfda6ab8291 Mon Sep 17 00:00:00 2001 From: vylion Date: Fri, 22 Jan 2021 20:32:41 +0100 Subject: [PATCH] Added check for generated messages with empty Generator --- speaker.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/speaker.py b/speaker.py index 71bd0bb..e62e606 100644 --- a/speaker.py +++ b/speaker.py @@ -261,7 +261,10 @@ class Speaker(object): words = update.message.text.split() if len(words) > 1: reader.read(' '.join(words[1:])) - self.say(context.bot, reader, replying=rid) + success = self.say(context.bot, reader, replying=rid) + if not success: + empty_gen_warning = "I haven't learned a single word yet." + send(context.bot, reader.cid(), empty_gen_warning, replying=rid, logger=self.logger) # Checks user permissions. Bot admin is always considered as having full permissions def user_is_admin(self, member): @@ -276,7 +279,8 @@ class Speaker(object): def speech(self, reader): return reader.generate_message(self.max_len) - # Say a newly generated message + # Say a newly generated message. Returns True if it could generate a response (even + # if it failed to send it) def say(self, bot, reader, replying=None, **kwargs): cid = reader.cid() if self.cid_whitelist is not None and cid not in self.cid_whitelist: @@ -285,9 +289,11 @@ class Speaker(object): if self.is_mute(): # Don't, if mute time isn't over return - try: - send(bot, cid, self.speech(reader), replying, logger=self.logger, **kwargs) + new_msg = self.speech(reader) + if new_msg == "": + return False + send(bot, cid, new_msg, replying, logger=self.logger, **kwargs) if self.bypass: # Testing mode, force a reasonable period (to not have the bot spam one specific chat with a low period) minp = self.min_period @@ -295,7 +301,8 @@ class Speaker(object): rangep = maxp - minp reader.set_period(random.randint(rangep // 4, rangep) + minp) if random.random() <= self.repeat: - send(bot, cid, self.speech(reader), logger=self.logger, **kwargs) + new_msg = self.speech(reader) + send(bot, cid, new_msg, logger=self.logger, **kwargs) # Consider any Network Error as a Telegram temporary ban, as I couldn't find # out in the documentation how error 429 is handled by python-telegram-bot except NetworkError as e: @@ -306,6 +313,7 @@ class Speaker(object): except Exception as e: self.logger.error("Sending a message caused exception:") self.logger.exception(e) + return True # Handling /count command def get_count(self, update, context):