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

Finito lo stagista. E funziona!

This commit is contained in:
Steffo 2017-01-29 00:36:58 +01:00
parent c7f360caf1
commit 44976143cf
2 changed files with 50 additions and 34 deletions

45
main.py
View file

@ -329,16 +329,16 @@ class Stagista(Role):
def power(self, bot, game, arg): def power(self, bot, game, arg):
target = game.findplayerbyusername(arg) target = game.findplayerbyusername(arg)
if target is not None and target is not self.player: if target is not None and target is not self.player and target.alive:
self.master = target self.master = target
self.player.message(bot, s.intern_started_internship) self.player.message(bot, s.intern_started_internship.format(master=self.master.tusername))
else: else:
self.player.message(bot, s.error_no_username) self.player.message(bot, s.error_no_username)
def onendday(self, bot, game): def onendday(self, bot, game):
if self.master is not None: if self.master is not None:
if self.master.alive: if self.master.alive:
game.message(bot, s.intern_changed_role) game.message(bot, s.intern_changed_role.format(icon=self.master.role.__class__.icon, role=self.master.role.__class__.name))
game.changerole(self.player, self.master.role.__class__) game.changerole(self.player, self.master.role.__class__)
else: else:
game.message(bot, "easter egg. yey") game.message(bot, "easter egg. yey")
@ -373,7 +373,7 @@ class Player:
if not self.dummy: if not self.dummy:
try: try:
bot.sendMessage(self.tid, text, parse_mode=ParseMode.MARKDOWN) bot.sendMessage(self.tid, text, parse_mode=ParseMode.MARKDOWN)
except TelegramError: except TelegramError as t:
pass pass
@ -452,7 +452,7 @@ class Game:
def findplayerbyusername(self, tusername) -> Player: def findplayerbyusername(self, tusername) -> Player:
"""Trova il giocatore con un certo username.""" """Trova il giocatore con un certo username."""
for player in self.players: for player in self.players:
if player.tusername.lower() == tusername.lower(): if player.tusername.lower() == tusername.strip("@").lower():
return player return player
else: else:
return None return None
@ -536,7 +536,7 @@ class Game:
def endday(self, bot): def endday(self, bot):
"""Finisci la giornata, uccidi il più votato del giorno ed esegui gli endday di tutti i giocatori.""" """Finisci la giornata, uccidi il più votato del giorno ed esegui gli endday di tutti i giocatori."""
# SALVA LA PARTITA, così se crasha si riprende da qui # SALVA LA PARTITA, così se crasha si riprende da qui
self.save() self.save(bot)
# Conta i voti ed elimina il più votato. # Conta i voti ed elimina il più votato.
topvotes = self.mostvotedplayer() topvotes = self.mostvotedplayer()
if len(topvotes) > 0: if len(topvotes) > 0:
@ -625,6 +625,7 @@ class Game:
self.votingmifia = True self.votingmifia = True
self.missingmifia = False self.missingmifia = False
self.endconfig(bot) self.endconfig(bot)
self.message(bot, "Utilizzo il preset di debug (uno di ogni ruolo)")
elif preset == "simple": elif preset == "simple":
# Preset semplice # Preset semplice
self.roleconfig = { self.roleconfig = {
@ -702,7 +703,7 @@ class Game:
def endgame(self): def endgame(self):
inprogress.remove(self) inprogress.remove(self)
def save(self): def save(self, bot):
# Crea il file. # Crea il file.
try: try:
file = open(str(self.groupid) + ".p", 'x') file = open(str(self.groupid) + ".p", 'x')
@ -715,8 +716,8 @@ class Game:
pickle.dump(self, file) pickle.dump(self, file)
file.close() file.close()
# Crea un file uguale ma con un timestamp # Crea un file uguale ma con un timestamp
# Non sono troppo sicuro che il timestamp si faccia così # Non sono troppo sicuro che il timestamp si faccia così però funziona
t = datetime.datetime(0,0,0,0,0).now() t = datetime.datetime(2000,1,1,1,1).now()
try: try:
file = open("{group}-{yy}-{mm}-{dd}-{hh}-{mi}.p".format(group=str(self.groupid), yy=t.year, mm=t.month, dd=t.day, hh=t.hour, mi=t.minute), 'x') file = open("{group}-{yy}-{mm}-{dd}-{hh}-{mi}.p".format(group=str(self.groupid), yy=t.year, mm=t.month, dd=t.day, hh=t.hour, mi=t.minute), 'x')
except FileExistsError: except FileExistsError:
@ -726,6 +727,7 @@ class Game:
# Scrivi sul file. # Scrivi sul file.
file = open("{group}-{yy}-{mm}-{dd}-{hh}-{mi}.p".format(group=str(self.groupid), yy=t.year, mm=t.month, dd=t.day, hh=t.hour, mi=t.minute), 'wb') file = open("{group}-{yy}-{mm}-{dd}-{hh}-{mi}.p".format(group=str(self.groupid), yy=t.year, mm=t.month, dd=t.day, hh=t.hour, mi=t.minute), 'wb')
pickle.dump(self, file) pickle.dump(self, file)
self.message(bot, s.game_saved)
file.close() file.close()
def victoryconditions(self, bot): def victoryconditions(self, bot):
@ -763,9 +765,10 @@ class Game:
def changerole(self, player, newrole): def changerole(self, player, newrole):
"""Cambia il ruolo di un giocatore, aggiornando tutti i valori""" """Cambia il ruolo di un giocatore, aggiornando tutti i valori"""
self.playersinrole[player.role].remove(player) if player.role.__class__ != Royal:
self.playersinrole[player.role.__class__.__name__].remove(player)
player.role = newrole(player) player.role = newrole(player)
self.playersinrole[newrole].append(player) self.playersinrole[newrole.__name__].append(player)
# TODO: controllare se basta fare così # TODO: controllare se basta fare così
@ -1021,7 +1024,7 @@ def vote(bot, update):
game.message(bot, s.error_username) game.message(bot, s.error_username)
return return
player.votingfor = target player.votingfor = target
game.message(bot, s.vote.format(voted=target.tusername)) game.message(bot, s.vote.format(voting=player.tusername, voted=target.tusername))
def endday(bot, update): def endday(bot, update):
@ -1139,7 +1142,7 @@ def save(bot, update):
"""Salva una partita su file.""" """Salva una partita su file."""
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None: if game is not None:
game.save() game.save(bot)
else: else:
bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN) bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN)
@ -1149,7 +1152,6 @@ def debug(bot, update):
if __debug__: if __debug__:
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None: if game is not None:
if game.admin.tid == update.message.from_user['id']:
text = s.status_header.format(name=game.groupid, admin=game.admin.tid, phase=game.phase) text = s.status_header.format(name=game.groupid, admin=game.admin.tid, phase=game.phase)
game.updatevotes() game.updatevotes()
# Aggiungi l'elenco dei giocatori # Aggiungi l'elenco dei giocatori
@ -1160,10 +1162,18 @@ def debug(bot, update):
text += s.status_alive_player.format(icon=player.role.icon, text += s.status_alive_player.format(icon=player.role.icon,
name=player.tusername, name=player.tusername,
votes=str(player.votes)) votes=str(player.votes))
game.adminmessage(bot, text) game.message(bot, text)
game.message(bot, s.check_private)
else: else:
game.message(bot, s.error_not_admin) bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN)
def debugchangerole(bot, update):
"""Cambia il ruolo a un giocatore."""
if __debug__:
game = findgamebyid(update.message.chat['id'])
if game is not None:
cmd = update.message.text.split(' ', 2)
game.changerole(game.findplayerbyusername(cmd[1]), globals()[cmd[2]])
else: else:
bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN) bot.sendMessage(update.message.chat['id'], s.error_no_games_found, parse_mode=ParseMode.MARKDOWN)
@ -1209,6 +1219,7 @@ updater.dispatcher.add_handler(CommandHandler('fakerole', fakerole))
updater.dispatcher.add_handler(CommandHandler('save', save)) updater.dispatcher.add_handler(CommandHandler('save', save))
updater.dispatcher.add_handler(CommandHandler('load', load)) updater.dispatcher.add_handler(CommandHandler('load', load))
updater.dispatcher.add_handler(CommandHandler('delete', delete)) updater.dispatcher.add_handler(CommandHandler('delete', delete))
updater.dispatcher.add_handler(CommandHandler('debugchangerole', debugchangerole))
updater.dispatcher.add_handler(CallbackQueryHandler(selectpreset)) updater.dispatcher.add_handler(CallbackQueryHandler(selectpreset))
updater.dispatcher.add_error_handler(handleerror) updater.dispatcher.add_error_handler(handleerror)
updater.start_polling() updater.start_polling()

View file

@ -125,21 +125,23 @@ mom_power_description = "All'inizio della partita scoprirai il ruolo di un gioca
# Mamma: scoperta di un ruolo # Mamma: scoperta di un ruolo
mom_discovery = "@{target} è un *{icon} {role}*.\n" \ mom_discovery = "@{target} è un *{icon} {role}*.\n" \
#TODO: Mettere qualcosa qui
# Stagista: icona # Stagista: icona
intern_icon = "intern_icon" intern_icon = "\U0001F913"
# Stagista: nome ruolo # Stagista: nome ruolo
intern_name = "Stagista" intern_name = "Stagista"
# Stagista: descrizione del potere # Stagista: descrizione del potere
intern_power_description = "intern_power_description" intern_power_description = "In qualsiasi momento della partita puoi scegliere un altro giocatore.\n" \
"Il tuo ruolo diventerà uguale al suo.\n" \
"Ricordati che, qualsiasi cosa succeda, è sempre colpa dello stagista, cioè tua!"
# TODO: si dice in stage?
# Stagista: inizia lo stage # Stagista: inizia lo stage
intern_started_internship = "intern_started_internship" intern_started_internship = "Stai andando in stage da @{master}."
# Stagista: cambiato ruolo # Stagista: cambiato ruolo
intern_changed_role = "intern_changed_role" intern_changed_role = "Lo stagista ha finito il tirocinio ed ha imparato i segreti del mestiere di *{icon} {role}*."
# Generale: ruolo assegnato # Generale: ruolo assegnato
role_assigned = "Ti è stato assegnato il ruolo di *{icon} {name}*." role_assigned = "Ti è stato assegnato il ruolo di *{icon} {name}*."
@ -176,7 +178,7 @@ mifia_team_intro = "I mifiosi in questa partita sono:\n"
mifia_team_player = "{icon} {name}\n" mifia_team_player = "{icon} {name}\n"
# Generale: votazione completata # Generale: votazione completata
vote = "Hai votato per uccidere @{voted}." vote = "@{voting} ha votato per uccidere @{voted}."
# Generale: un admin ha ucciso un giocatore con /kill # Generale: un admin ha ucciso un giocatore con /kill
admin_killed = "{name} è morto _di infarto_.\n" \ admin_killed = "{name} è morto _di infarto_.\n" \
@ -186,6 +188,9 @@ admin_killed = "{name} è morto _di infarto_.\n" \
check_private = "Messaggio inviato in chat privata.\n" \ check_private = "Messaggio inviato in chat privata.\n" \
"Controlla @mifiabot." "Controlla @mifiabot."
# Generale: partita salvata
game_saved = "Partita salvata su file."
# Generale: partita caricata # Generale: partita caricata
game_loaded = "Partita caricata da file." game_loaded = "Partita caricata da file."