From cd82f3a8af43e28b5cf7171ff90912da00ac8ea1 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Mon, 28 Jan 2019 20:45:31 +0100 Subject: [PATCH] Fix Markov errors --- strings.py | 12 +++++++++++- telegrambot.py | 27 +++++++++++++++------------ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/strings.py b/strings.py index ad97e6a0..5d3c1556 100644 --- a/strings.py +++ b/strings.py @@ -10,11 +10,21 @@ def safely_format_string(string, **kwargs): return string.format_map(SafeDict(**kwargs)) +# Generic errors class ROYALNET: class ERRORS: TELEGRAM_NOT_LINKED = "⚠ Il tuo account Telegram non è registrato a Royalnet! Registrati con `/register@royalgamesbot `." +# Markov strings +class MARKOV: + class ERRORS: + NO_MODEL = "⚠ La catena di Markov non è disponibile." + GENERATION_FAILED = "⚠ markovify non è riuscito a generare una frase. Prova di nuovo?\n E' un'avvenimento sorprendentemente raro..." + SPECIFIC_WORD_FAILED = "⚠ markovify non è riuscito a generare una frase partendo da questa parola. Provane una diversa..." + MISSING_WORD = "⚠ La parola specificata non è presente nella catena di Markov. Provane una diversa..." + + # Matchmaking service strings class MATCHMAKING: TICKER_TEXT = { @@ -48,4 +58,4 @@ class MATCHMAKING: INVALID_SYNTAX = "⚠ Sintassi del comando errata.\n Sintassi: `/mm [minplayers-][maxplayers] per \\n[descrizione]`" NOT_ADMIN = "⚠ Non sei il creatore di questo match!" MATCH_CLOSED = "⚠ Il matchmaking per questa partita è terminato!" - UNAUTHORIZED = "⚠ Non sono autorizzato a inviare messaggi a {mention}. \nPer piacere, {mention}, inviami un messaggio in privata!" \ No newline at end of file + UNAUTHORIZED = "⚠ Non sono autorizzato a inviare messaggi a {mention}. \nPer piacere, {mention}, inviami un messaggio in privata!" diff --git a/telegrambot.py b/telegrambot.py index d3ebabe9..dc1ba54b 100644 --- a/telegrambot.py +++ b/telegrambot.py @@ -653,25 +653,28 @@ def cmd_calendar(bot: Bot, update: Update): @catch_and_report def cmd_markov(bot: Bot, update: Update): if model is None: - bot.send_message(update.message.chat.id, "⚠️ Il modello Markov non è disponibile.") + bot.send_message(update.message.chat.id, strings.MARKOV.ERRORS.NO_MODEL) return try: - _, first_word = update.message.text.split(" ", 1) - except ValueError: + first_word = update.message.text.split(" ")[1] + except IndexError: + # Any word sentence = model.make_sentence(tries=1000) if sentence is None: - bot.send_message(update.message.chat.id, "⚠ Complimenti! Hai vinto la lotteria di Markov!\n" - "O forse l'hai persa.\n" - "Non sono riuscito a generare una frase, riprova.") + bot.send_message(update.message.chat.id, strings.MARKOV.ERRORS.GENERATION_FAILED) return bot.send_message(update.message.chat.id, sentence) - else: + return + # Specific word + try: sentence = model.make_sentence_with_start(first_word, tries=1000) - if sentence is None: - bot.send_message(update.message.chat.id, "⚠ Non è stato possibile generare frasi partendo da questa" - " parola.") - return - bot.send_message(update.message.chat.id, sentence) + except KeyError: + bot.send_message(update.message.chat.id, strings.MARKOV.ERRORS.MISSING_WORD) + return + if sentence is None: + bot.send_message(update.message.chat.id, strings.MARKOV.ERRORS.SPECIFIC_WORD_FAILED) + return + bot.send_message(update.message.chat.id, sentence) @catch_and_report