1
Fork 0
mirror of https://github.com/RYGhub/royal-mifia.git synced 2024-11-29 00:54:18 +00:00

Spostato tutto in strings.py

This commit is contained in:
Steffo 2016-05-25 11:57:15 +00:00
parent 9fcaac3e24
commit 3f4174b2da

123
main.py
View file

@ -3,6 +3,7 @@
from telegram.ext import Updater, CommandHandler
import filemanager
import random
import strings as s
import logging
logger = logging.getLogger()
@ -37,38 +38,35 @@ class Royal(Role):
"""Un membro della Royal Games. Il ruolo principale, non ha alcun potere se non quello di votare."""
def __init__(self):
super().__init__()
self.icon = "\U0001F610"
self.icon = s.royal_icon
self.team = 'Good'
self.name = "Royal"
self.name = s.royal_name
class Mifioso(Role):
"""Il nemico globale. Può impostare come bersaglio una persona al giorno, per poi ucciderla alla fine.
"""Il nemico globale. Può impostare come bersaglio una persona al giorno, per poi ucciderla alla fine."""
def __init__(self):
super().__init__()
self.icon = "\U0001F47F"
self.icon = s.mifia_icon
self.team = 'Evil'
self.target = None
self.name = "Mifioso"
self.name = s.mifia_name
def power(self, bot, game, player, arg):
# Imposta una persona come bersaglio da uccidere.
self.target = game.findplayerbyusername(arg)
if self.target is not None:
player.message(bot, "Hai selezionato come bersaglio {0}.".format(self.target.tusername))
player.message(bot, s.mifia_target_selected.format(target=self.target.tusername))
def onendday(self, bot, game):
# Uccidi il bersaglio se non è protetto da un Angelo.
if self.target is not None:
if self.target.protectedby is None:
self.target.kill()
game.message(bot, "{0} è stato ucciso dalla Mifia.\n"
"Era un {1} {2}."
.format(self.target.tusername, self.target.role.icon, self.target.role.name))
game.message(bot, s.mifia_target_killed.format(target=self.target.tusername, icon=self.target.role.icon, role=self.target.role.name))
else:
game.message(bot, "{0} è stato protetto dalla Mifia da {1} {2}!\n"
.format(self.target.tusername, self.target.protectedby.role.icon,
self.target.protectedby.tusername))
game.message(bot, s.mifia_target_protected.format(target=self.target.tusername, icon=self.target.protectedby.role.icon,
protectedby=self.target.protectedby.tusername))
self.target = None
@ -76,10 +74,10 @@ class Investigatore(Role):
"""L'investigatore può indagare sul vero ruolo di una persona una volta al giorno."""
def __init__(self):
super().__init__()
self.icon = "\U0001F575"
self.icon = s.detective_icon
self.team = 'Good'
self.poweruses = 1
self.name = "Investigatore"
self.name = s.detective_name
def power(self, bot, game, player, arg):
# Indaga sul vero ruolo di una persona, se sono ancora disponibili usi del potere.
@ -87,13 +85,12 @@ class Investigatore(Role):
target = game.findplayerbyusername(arg)
if target is not None:
self.poweruses -= 1
player.message(bot, "{0} è un {1} {2}.\n"
"Puoi usare il tuo potere ancora {3} volte oggi."
.format(target.tusername, target.role.icon, target.role.name, self.poweruses))
player.message(bot, s.detective_discovery
.format(target=target.tusername, icon=target.role.icon, role=target.role.name, left=self.poweruses))
else:
player.message(bot, "Il nome utente specificato non esiste.")
player.message(bot, s.error_username)
else:
player.message(bot, "Non puoi più usare il tuo potere oggi.")
player.message(bot, s.error_no_uses)
def onendday(self, bot, game):
# Ripristina il potere
@ -104,9 +101,9 @@ class Angelo(Role):
"""L'angelo può proteggere una persona al giorno dalla Mifia. Se ha successo nella protezione, il suo ruolo sarà rivelato a tutti."""
def __init__(self):
super().__init__()
self.icon = "\U0001F607"
self.icon = s.angel_icon
self.team = 'Good' # Squadra: 'None', 'Good', 'Evil'
self.name = "Angelo"
self.name = s.angel_name
self.protecting = None # La persona che questo angelo sta proteggendo
def power(self, bot, game, player, arg):
@ -115,7 +112,7 @@ class Angelo(Role):
if player is not selected and selected is not None:
selected.protectedby = player
self.protecting = selected
player.message(bot, "Hai selezionato come protetto {0}.".format(self.protecting.tusername))
player.message(bot, s.angel_target_selected.format(target=self.protecting.tusername))
def onendday(self, bot, game):
# Resetta la protezione
@ -197,7 +194,7 @@ class Game:
try:
selected = playersleft.pop()
except IndexError:
raise IndexError("Non ci sono abbastanza giocatori!")
raise IndexError(s.error_not_enough_players)
else:
selected.role = Mifioso()
mifia -= 1
@ -206,7 +203,7 @@ class Game:
try:
selected = playersleft.pop()
except IndexError:
raise IndexError("Non ci sono abbastanza giocatori!")
raise IndexError(s.error_not_enough_players)
else:
selected.role = Investigatore()
investigatore -= 1
@ -215,7 +212,7 @@ class Game:
try:
selected = playersleft.pop()
except IndexError:
raise IndexError("Non ci sono abbastanza giocatori!")
raise IndexError(s.error_not_enough_players)
else:
selected.role = Angelo()
angelo -= 1
@ -224,7 +221,7 @@ class Game:
player.role = Royal()
# Manda i ruoli assegnati a tutti
for player in self.players:
player.message(bot, "Ti è stato assegnato il ruolo di {0} {1}.".format(player.role.icon, player.role.name))
player.message(bot, s.role_assigned.format(icon=player.role.icon, name=player.role.name))
def updatevotes(self):
"""Aggiorna il conteggio dei voti di tutti i giocatori."""
@ -268,11 +265,10 @@ class Game:
player.role.onendday(bot, self)
lynched = self.mostvotedplayer()
if lynched is not None:
self.message(bot, "{0} era il più votato ed è stato ucciso dai Royal.\n"
"Era un {1} {2}.".format(lynched.tusername, lynched.role.icon, lynched.role.name))
self.message(bot, s.player_lynched.format(name=lynched.tusername, icon=lynched.role.icon, role=lynched.role.name))
lynched.kill()
else:
self.message(bot, "La Royal Games non è giunta a una decisione in questo giorno e non ha ucciso nessuno.")
self.message(bot, s.no_players_lynched)
for player in self.players:
player.votingfor = None
# Condizioni di vittoria
@ -284,12 +280,10 @@ class Game:
elif player.alive and player.role.team == 'Good':
royal += 1
if mifiosi >= royal:
self.message(bot, "I Mifiosi rimasti sono più dei Royal.\n"
"La Mifia vince!")
self.message(bot, s.victory_mifia)
self.endgame()
elif mifiosi == 0:
self.message(bot, "Tutti i Mifiosi sono stati eliminati.\n"
"La Royal Games vince!")
self.message(bot, s.victory_royal)
self.endgame()
def endgame(self):
@ -309,7 +303,7 @@ def findgamebyid(gid) -> Game:
# Comandi a cui risponde il bot
def ping(bot, update):
"""Ping!"""
bot.sendMessage(update.message.chat['id'], "Pong!")
bot.sendMessage(update.message.chat['id'], s.pong)
def newgame(bot, update):
@ -319,11 +313,11 @@ def newgame(bot, update):
if g is None:
g = Game(update.message.chat['id'], update.message.from_user['id'])
inprogress.append(g)
bot.sendMessage(update.message.chat['id'], "Partita creata: " + repr(g))
bot.sendMessage(update.message.chat['id'], s.new_game.format(g.groupid))
else:
bot.sendMessage(update.message.chat['id'], "In questo gruppo è già in corso una partita.")
bot.sendMessage(update.message.chat['id'], s.error_game_in_progress)
else:
bot.sendMessage(update.message.chat['id'], "Non puoi creare una partita in questo tipo di chat!")
bot.sendMessage(update.message.chat['id'], s.error_chat_type)
def join(bot, update):
@ -335,32 +329,28 @@ def join(bot, update):
if p is None:
p = Player(update.message.from_user['id'], update.message.from_user['username'])
game.players.append(p)
bot.sendMessage(update.message.chat['id'], "Unito alla partita: " + str(p.tid))
bot.sendMessage(update.message.chat['id'], s.player_joined.format(name=p.tusername))
else:
bot.sendMessage(update.message.chat['id'], "Ti sei già unito alla partita: " + repr(p))
bot.sendMessage(update.message.chat['id'], s.error_player_already_joined)
def debug(bot, update):
"""Visualizza tutti i ruoli e gli id."""
game = findgamebyid(update.message.chat['id'])
if game is None:
bot.sendMessage(update.message.chat['id'], "In questo gruppo non ci sono partite in corso.")
bot.sendMessage(update.message.chat['id'], s.error_no_games_found)
else:
if game.adminid == update.message.from_user['id']:
text = "Gruppo: {0}\n" \
"Creatore: {1}\n" \
"Fase: {2}\n" \
"Giocatori partecipanti:\n".format(game.groupid, game.adminid, game.phase)
text = s.status_header.format(name=game.groupid, admin=game.adminid, phase=game.phase)
game.updatevotes()
# Aggiungi l'elenco dei giocatori
for player in game.players:
if not player.alive:
text += "\U0001F480 {0}\n".format(player.tusername)
text += s.status_dead_player.format(name=player.tusername)
elif player.votingfor is not None:
text += "{0} {1} ({2}) vota per {3}\n"\
.format(player.role.icon, player.tusername, player.votes, player.votingfor.tusername)
text += s.status_voting_player.format(icon=player.role.icon, name=player.tusername, votes=player.votes, voting=player.votingfor.tusername)
else:
text += "{0} {1} ({2})\n".format(player.role.icon, player.tusername, player.votes)
text += s.status_idle_player.format(icon=player.role.icon, name=player.tusername, votes=player.votes)
bot.sendMessage(update.message.from_user['id'], text)
@ -368,22 +358,18 @@ def status(bot, update):
"""Visualizza lo stato della partita."""
game = findgamebyid(update.message.chat['id'])
if game is None:
bot.sendMessage(update.message.chat['id'], "In questo gruppo non ci sono partite in corso.")
bot.sendMessage(update.message.chat['id'], s.error_no_games_found)
else:
text = "Gruppo: {0}\n" \
"Creatore: {1}\n" \
"Fase: {2}\n" \
"Giocatori partecipanti:\n".format(game.groupid, game.adminid, game.phase)
text = s.status_header.format(name=game.groupid, admin=game.adminid, phase=game.phase)
game.updatevotes()
# Aggiungi l'elenco dei giocatori
for player in game.players:
if not player.alive:
text += "\U0001F480 {0}\n".format(player.tusername)
text += s.status_dead_player.format(player.tusername)
elif player.votingfor is not None:
text += "\U0001F610 {0} ({1}) vota per {2}\n"\
.format(player.tusername, player.votes, player.votingfor.tusername)
text += s.status_voting_player.format(icon="\U0001F610", name=player.tusername, votes=player.votes, voting=player.votingfor.tusername)
else:
text += "\U0001F610 {0} ({1})\n".format(player.tusername, player.votes)
text += s.status_idle_player.format(icon="\U0001F610", name=player.tusername, votes=player.votes)
bot.sendMessage(update.message.chat['id'], text)
@ -392,16 +378,15 @@ def endjoin(bot, update):
game = findgamebyid(update.message.chat['id'])
if game is not None and game.phase is 'Join' and update.message.from_user['id'] == game.adminid:
game.phase = 'Voting'
game.message(bot, "La fase di join è terminata.")
game.message(bot, s.join_phase_ended)
try:
game.assignroles(bot, mifia=1, investigatore=0, angelo=1)
except IndexError:
game.message(bot, "Non ci sono abbastanza giocatori per avviare la partita.\n"
"La partita è annullata.")
game.message(bot, s.error_not_enough_players)
game.endgame()
else:
bot.sendMessage(update.message.chat['id'], "I ruoli sono stati assegnati.\n"
"Controlla la chat con @mifiabot.")
bot.sendMessage(update.message.chat['id'], s.roles_assigned_successfully)
def vote(bot, update):
@ -413,13 +398,13 @@ def vote(bot, update):
target = game.findplayerbyusername(update.message.text.split(' ')[1])
if target is not None:
player.votingfor = target
bot.sendMessage(update.message.chat['id'], "Hai votato per uccidere {0}.".format(target.tusername))
bot.sendMessage(update.message.chat['id'], s.vote.format(voted=target.tusername))
else:
bot.sendMessage(update.message.chat['id'], "Il nome utente specificato non esiste.")
bot.sendMessage(update.message.chat['id'], s.error_username)
else:
bot.sendMessage(update.message.chat['id'], "Non puoi votare. Non sei nella partita o sei morto.")
bot.sendMessage(update.message.chat['id'], s.error_dead)
else:
bot.sendMessage(update.message.chat['id'], "Nessuna partita in corso trovata.")
bot.sendMessage(update.message.chat['id'], s.error_no_games_found)
def endday(bot, update):
@ -440,11 +425,11 @@ def power(bot, update):
if player.alive:
player.role.power(bot, game, player, cmd[2])
else:
bot.sendMessage(update.message.chat['id'], "Sei morto e non puoi usare poteri.")
bot.sendMessage(update.message.chat['id'], s.error_dead)
else:
bot.sendMessage(update.message.chat['id'], "Partita non trovata.")
bot.sendMessage(update.message.chat['id'], s.error_no_games_found)
else:
bot.sendMessage(update.message.chat['id'], "Per usare /power, scrivimi in chat privata a @mifiabot!")
bot.sendMessage(update.message.chat['id'], s.error_private_required)
def debuggameslist(bot, update):