Added check for generated messages with empty Generator

This commit is contained in:
vylion 2021-01-22 20:32:41 +01:00
parent f028b9ab73
commit 7b5028081f

View file

@ -261,7 +261,10 @@ class Speaker(object):
words = update.message.text.split() words = update.message.text.split()
if len(words) > 1: if len(words) > 1:
reader.read(' '.join(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 # Checks user permissions. Bot admin is always considered as having full permissions
def user_is_admin(self, member): def user_is_admin(self, member):
@ -276,7 +279,8 @@ class Speaker(object):
def speech(self, reader): def speech(self, reader):
return reader.generate_message(self.max_len) 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): def say(self, bot, reader, replying=None, **kwargs):
cid = reader.cid() cid = reader.cid()
if self.cid_whitelist is not None and cid not in self.cid_whitelist: 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(): if self.is_mute():
# Don't, if mute time isn't over # Don't, if mute time isn't over
return return
try: 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: if self.bypass:
# Testing mode, force a reasonable period (to not have the bot spam one specific chat with a low period) # Testing mode, force a reasonable period (to not have the bot spam one specific chat with a low period)
minp = self.min_period minp = self.min_period
@ -295,7 +301,8 @@ class Speaker(object):
rangep = maxp - minp rangep = maxp - minp
reader.set_period(random.randint(rangep // 4, rangep) + minp) reader.set_period(random.randint(rangep // 4, rangep) + minp)
if random.random() <= self.repeat: 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 # 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 # out in the documentation how error 429 is handled by python-telegram-bot
except NetworkError as e: except NetworkError as e:
@ -306,6 +313,7 @@ class Speaker(object):
except Exception as e: except Exception as e:
self.logger.error("Sending a message caused exception:") self.logger.error("Sending a message caused exception:")
self.logger.exception(e) self.logger.exception(e)
return True
# Handling /count command # Handling /count command
def get_count(self, update, context): def get_count(self, update, context):