diff --git a/main.py b/main.py index 1af3321..a0dda5f 100644 --- a/main.py +++ b/main.py @@ -45,11 +45,7 @@ class Player: def message(self, bot, text): """Manda un messaggio privato al giocatore.""" if not self.dummy: - try: - bot.sendMessage(self.tid, text, parse_mode=ParseMode.MARKDOWN) - except Unauthorized: - print("Unauthorized to message {}".format(self)) - + bot.sendMessage(self.tid, text, parse_mode=ParseMode.MARKDOWN) def kill(self, bot, game): """Uccidi il giocatore.""" @@ -132,7 +128,7 @@ class Game: return None def assignroles(self, bot): - """Assegna ruoli casuali a tutti i giocatori.""" + """Assegna i ruoli specificati ib playersinrole a tutti i giocatori.""" random.seed() playersleft = self.players.copy() # Assegna i ruoli secondo i numeri all'interno di playersinrole @@ -283,6 +279,8 @@ class Game: InlineKeyboardButton(s.preset_advanced, callback_data="advanced") ], [ + InlineKeyboardButton(s.preset_oneofall, callback_data="oneofall"), + InlineKeyboardButton(s.preset_custom, callback_data="custom") ] ]) @@ -381,8 +379,35 @@ class Game: self.votingmifia = False self.missingmifia = False self.message(bot, s.preset_advanced_selected) - if __debug__: - self.message(bot, "Punteggio di bilanciamento: {}".format(balance)) + self.message(bot, "Punteggio di bilanciamento: {}".format(balance)) + self.endconfig(bot) + elif preset == "oneofall": + self.roleconfig = { + "Mifioso": 1, + "Investigatore": 1, + "Corrotto": 1, + "Angelo": 1, + "Terrorista": 1, + "Derek": 1, + "Disastro": 1, + "Mamma": 1, + "Stagista": 1, + "SignoreDelCaos": 0, + "Servitore": 0 + } + unassignedplayers = len(self.players) - 9 + availableroles = list() + while unassignedplayers > 0: + if len(availableroles) == 0: + availableroles = rolepriority.copy() + availableroles.remove(SignoreDelCaos) + availableroles.remove(Servitore) + random.shuffle(availableroles) + self.roleconfig[availableroles.pop().__name__] += 1 + unassignedplayers -= 1 + self.votingmifia = False + self.missingmifia = False + self.message(bot, s.preset_oneofall_selected) self.endconfig(bot) elif preset == "custom": # Preset personalizzabile @@ -530,7 +555,7 @@ class Game: for role in self.playersinrole: if len(role) > 0: availableroles.append(role) - return locals()[random.sample(availableroles, 1)[0]] + return globals()[random.sample(availableroles, 1)[0]] @@ -970,7 +995,7 @@ def inlinekeyboard(bot, update): bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.error_not_admin, show_alert=True) return game.loadpreset(bot, update.callback_query.data) - bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.preset_selected.format(selected=update.callback_query.data), show_alert=True) + bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.preset_selected.format(selected=update.callback_query.data)) elif game.phase is 'Voting': # Trova il giocatore player = game.findplayerbyid(update.callback_query.from_user.id) @@ -984,7 +1009,7 @@ def inlinekeyboard(bot, update): target = game.findplayerbyusername(update.callback_query.data) player.votingfor = target game.message(bot, s.vote.format(voting=player.tusername, voted=target.tusername)) - bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.vote_fp.format(voted=target.tusername), show_alert=True) + bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text=s.vote_fp.format(voted=target.tusername)) updater.dispatcher.add_handler(CommandHandler('ping', ping)) diff --git a/roles/Corrotto.py b/roles/Corrotto.py index 184ed90..e79c454 100644 --- a/roles/Corrotto.py +++ b/roles/Corrotto.py @@ -7,7 +7,7 @@ class Corrotto(Role): team = 'Evil' name = s.corrupt_name powerdesc = s.corrupt_power_description - value = -90 + value = -75 refillpoweruses = 1 def __init__(self, player): @@ -37,4 +37,4 @@ class Corrotto(Role): def onendday(self, bot, game): # Ripristina il potere - self.poweruses = self.refillpoweruses \ No newline at end of file + self.poweruses = self.refillpoweruses diff --git a/roles/Disastro.py b/roles/Disastro.py index 71494df..0b02c52 100644 --- a/roles/Disastro.py +++ b/roles/Disastro.py @@ -8,7 +8,7 @@ class Disastro(Role): team = 'Good' name = s.detective_name powerdesc = s.detective_power_description - value = 0 + value = -25 refillpoweruses = 1 def __init__(self, player): @@ -25,6 +25,9 @@ class Disastro(Role): if target is not None: self.poweruses -= 1 randomrole = game.getrandomrole() + while isinstance(target.role, randomrole): + # TODO: se ci fossero solo disastri in una partits cosa succederebbe? + randomrole = game.getrandomrole() self.player.message(bot, s.detective_discovery.format(target=target.tusername, icon=randomrole.icon, role=randomrole.name, diff --git a/roles/Investigatore.py b/roles/Investigatore.py index 434147f..16b09e1 100644 --- a/roles/Investigatore.py +++ b/roles/Investigatore.py @@ -37,4 +37,4 @@ class Investigatore(Role): def onendday(self, bot, game): # Ripristina il potere - self.poweruses = self.refillpoweruses \ No newline at end of file + self.poweruses = self.refillpoweruses diff --git a/roles/Servitore.py b/roles/Servitore.py index 9e302cc..b3c1550 100644 --- a/roles/Servitore.py +++ b/roles/Servitore.py @@ -5,7 +5,7 @@ import strings as s class Servitore(Role): """Il servitore del Caos è il sottoposto al Signore del Caos. Se non ci sono Signori del Caos in partita diventa Signore del Caos.""" - icon = s.derek_icon + icon = s.chaos_servant_icon team = 'Chaos' name = s.chaos_servant_name powerdesc = s.chaos_servant_power_description diff --git a/roles/Terrorista.py b/roles/Terrorista.py index 399c2f2..26521ea 100644 --- a/roles/Terrorista.py +++ b/roles/Terrorista.py @@ -8,7 +8,7 @@ class Terrorista(Role): team = "Evil" name = s.terrorist_name powerdesc = s.terrorist_power_description - value = -50 + value = -75 def __repr__(self) -> str: return "" @@ -23,4 +23,4 @@ class Terrorista(Role): game.message(bot, s.terrorist_target_killed.format(target=selectedplayer.tusername, icon=selectedplayer.role.icon, role=selectedplayer.role.name)) - selectedplayer.kill(bot, game) \ No newline at end of file + selectedplayer.kill(bot, game) diff --git a/strings.py b/strings.py index eb81f62..11d9942 100644 --- a/strings.py +++ b/strings.py @@ -107,10 +107,10 @@ derek_deathwish_unset = "*Vivrai* per morire un altro giorno." derek_deathwish_successful = "SPOILER: alla fine di questa giornata *\U0001F635 Derek* (@{name}) muore schiacciato da un container.\n" # Disastro: icona -disaster_icon = "\U0001F913" +disaster_icon = "\U0001F46E" # Disastro: nome ruolo -disaster_name = "Disastro" +disaster_name = "Carabiniere" # Mamma: icona mom_icon = "\U0001F917" @@ -139,7 +139,7 @@ intern_power_description = "In qualsiasi momento della partita puoi scegliere un "`/power {gamename} nomeutentedatoredilavoro`" # Stagista: inizia lo stage -intern_started_internship = "Stai andando in stage da @{master}." +intern_started_internship = "Andrai in stage da @{master}." # Stagista: cambiato ruolo intern_changed_role = "Lo stagista ha finito il tirocinio ed ha imparato i segreti del mestiere di *{icon} {role}*." @@ -189,6 +189,9 @@ chaos_lord_failed = "Il Caos è nell'aria...\n" \ # Servitore del Caos: nome ruolo chaos_servant_name = "Servitore del Caos" +# Servitore del Caos: icona +chaos_servant_icon = "\U0001F468\u200d\U0001F3A4" + # Servitore del Caos: descrizione potere chaos_servant_power_description = "Il Signore del Caos ti cederà i suoi poteri quando sarà morto.\n" \ "Facendo parte della fazione del Caos, hai automaticamente _vinto la partita_!" @@ -373,14 +376,7 @@ error_missing_parameters = "\U000026A0 Mancano uno o più parametri.\n" \ "Controlla la sintassi del comando e riprova." # Lista dei possibili nomi di una partita -names_list = ["Caos", - "Vuoto", - "Nulla", - "Buconero", - "Fine", - "Supernova", - "Centrogalattico", - "Madre"] +names_list = ["Mela", "Pera", "Banana", "Pesca", "Kiwi"] # Lista dei passi di configurazione da eseguire config_list = ["Quanti *Mifiosi* devono essere nella partita all'inizio?", @@ -435,8 +431,16 @@ preset_advanced_selected = "Selezionato il preset *Avanzato*.\n" \ "I ruoli in questa partita sono casuali!\n" \ "Buona fortuna a scoprirli!" +# Preset con uno di tutti +preset_oneofall = "Round Robin" + +# Preset con uno di tutti selezionato +preset_oneofall_selected = "Selezionato il preset *Round Robin*.\n" \ + "In questa partita saranno presenti lo stesso numero di tutti i ruoli.\n" \ + "Se sono presenti giocatori in eccesso, verrà assegnato loro un ruolo casuale." + # Personalizza preset_custom = "Personalizzato" # Preset selezionato -preset_selected = "Preset selezionato: {selected}" \ No newline at end of file +preset_selected = "Preset selezionato: {selected}"