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

L'admin è ora un oggetto giocatore

This commit is contained in:
Steffo 2016-12-04 19:54:33 +01:00
parent 4c541c1255
commit 3ccaade0ac
2 changed files with 28 additions and 11 deletions

35
main.py
View file

@ -273,9 +273,9 @@ class Player:
class Game: class Game:
"""Classe di una partita, contenente parametri riguardanti stato della partita """Classe di una partita, contenente parametri riguardanti stato della partita
e informazioni sul gruppo di Telegram.""" e informazioni sul gruppo di Telegram."""
def __init__(self, groupid, adminid): def __init__(self, groupid):
self.groupid = groupid # ID del gruppo in cui si sta svolgendo una partita self.groupid = groupid # ID del gruppo in cui si sta svolgendo una partita
self.adminid = adminid # ID telegram dell'utente che ha creato la partita con /newgame self.admin = None # ID telegram dell'utente che ha creato la partita con /newgame
self.players = list() # Lista dei giocatori in partita self.players = list() # Lista dei giocatori in partita
self.tokill = list() # Giocatori che verranno uccisi all'endday self.tokill = list() # Giocatori che verranno uccisi all'endday
self.phase = 'Join' # Fase di gioco: 'Join', 'Config', 'Voting' self.phase = 'Join' # Fase di gioco: 'Join', 'Config', 'Voting'
@ -316,7 +316,7 @@ class Game:
def adminmessage(self, bot, text): def adminmessage(self, bot, text):
"""Manda un messaggio privato al creatore della partita.""" """Manda un messaggio privato al creatore della partita."""
bot.sendMessage(self.adminid, text, parse_mode=ParseMode.MARKDOWN) self.admin.message(bot, text)
def mifiamessage(self, bot, text): def mifiamessage(self, bot, text):
"""Manda un messaggio privato a tutti i Mifiosi nella partita.""" """Manda un messaggio privato a tutti i Mifiosi nella partita."""
@ -561,9 +561,10 @@ def newgame(bot, update):
if update.message.chat['type'] != 'private': if update.message.chat['type'] != 'private':
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is None: if game is None:
game = Game(update.message.chat['id'], update.message.from_user['id']) game = Game(update.message.chat['id'])
inprogress.append(game) inprogress.append(game)
game.message(bot, s.new_game.format(groupid=game.groupid, name=game.name)) game.message(bot, s.new_game.format(groupid=game.groupid, name=game.name))
join(bot, update)
else: else:
bot.sendMessage(update.message.chat['id'], s.error_game_in_progress, parse_mode=ParseMode.MARKDOWN) bot.sendMessage(update.message.chat['id'], s.error_game_in_progress, parse_mode=ParseMode.MARKDOWN)
else: else:
@ -584,6 +585,8 @@ def join(bot, update):
game.message(bot, s.error_chat_unavailable) game.message(bot, s.error_chat_unavailable)
else: else:
game.message(bot, s.player_joined.format(name=p.tusername)) game.message(bot, s.player_joined.format(name=p.tusername))
if len(game.players) == 0:
game.admin = p
game.players.append(p) game.players.append(p)
else: else:
game.message(bot, s.error_player_already_joined) game.message(bot, s.error_player_already_joined)
@ -597,7 +600,9 @@ def status(bot, update):
"""Visualizza lo stato della partita.""" """Visualizza lo stato della partita."""
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None: if game is not None:
text = s.status_header.format(name=game.name, admin=game.adminid, phase=game.phase) text = s.status_header.format(name=game.name, admin=game.admin.tusername, phase=game.phase)
if __debug__:
text += s.debug_mode
game.updatevotes() game.updatevotes()
# Aggiungi l'elenco dei giocatori # Aggiungi l'elenco dei giocatori
for player in game.players: for player in game.players:
@ -616,7 +621,7 @@ def endjoin(bot, update):
"""Termina la fase di join e inizia quella di votazione.""" """Termina la fase di join e inizia quella di votazione."""
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None and game.phase == 'Join': if game is not None and game.phase == 'Join':
if update.message.from_user['id'] == game.adminid: if update.message.from_user['id'] == game.admin.tid:
# Inizio fase di configurazione # Inizio fase di configurazione
game.phase = 'Config' game.phase = 'Config'
game.message(bot, s.join_phase_ended) game.message(bot, s.join_phase_ended)
@ -631,7 +636,7 @@ def config(bot, update):
"""Configura il parametro richiesto.""" """Configura il parametro richiesto."""
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None and game.phase is 'Config': if game is not None and game.phase is 'Config':
if update.message.from_user['id'] == game.adminid: if update.message.from_user['id'] == game.admin.tid:
cmd = update.message.text.split(' ', 1) cmd = update.message.text.split(' ', 1)
if len(cmd) >= 2: if len(cmd) >= 2:
if game.configstep == 0: if game.configstep == 0:
@ -667,6 +672,14 @@ def config(bot, update):
game.configstep += 1 game.configstep += 1
game.message(bot, s.config_list[game.configstep]) game.message(bot, s.config_list[game.configstep])
elif game.configstep == 4: elif game.configstep == 4:
try:
game.roleconfig["Derek"] = int(cmd[1])
except ValueError:
game.message(bot, s.error_invalid_config)
else:
game.configstep += 1
game.message(bot, s.config_list[game.configstep])
elif game.configstep == 5:
if cmd[1].lower() == 'testa': if cmd[1].lower() == 'testa':
game.votingmifia = False game.votingmifia = False
game.endconfig(bot) game.endconfig(bot)
@ -707,7 +720,7 @@ def vote(bot, update):
def endday(bot, update): def endday(bot, update):
"""Termina la giornata attuale.""" """Termina la giornata attuale."""
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None and game.phase is 'Voting' and update.message.from_user['id'] == game.adminid: if game is not None and game.phase is 'Voting' and update.message.from_user['id'] == game.admin.tid:
game.endday(bot) game.endday(bot)
@ -756,7 +769,7 @@ def kill(bot, update):
if __debug__: if __debug__:
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None and game.phase is 'Voting': if game is not None and game.phase is 'Voting':
if update.message.from_user['id'] == game.adminid: if update.message.from_user['id'] == game.admin.tid:
target = game.findplayerbyusername(update.message.text.split(' ')[1]) target = game.findplayerbyusername(update.message.text.split(' ')[1])
if target is not None: if target is not None:
target.kill(bot, game) target.kill(bot, game)
@ -831,8 +844,8 @@ 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.adminid == update.message.from_user['id']: if game.admin.tid == update.message.from_user['id']:
text = s.status_header.format(name=game.groupid, admin=game.adminid, 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
for player in game.players: for player in game.players:

View file

@ -190,6 +190,9 @@ status_alive_player = "{icon} @{name} ({votes} voti)\n"
# Status: giocatore morto (deve terminare con \n) # Status: giocatore morto (deve terminare con \n)
status_dead_player = "\U0001F480 @{name}\n" status_dead_player = "\U0001F480 @{name}\n"
# Status: Modalità debug
debug_mode = "*DEBUG/CHEATS MODE*"
# Ping! # Ping!
pong = "Pong!" pong = "Pong!"
@ -278,5 +281,6 @@ config_list = ["Quanti Mifiosi devono essere nella partita?",
"Quanti Investigatori devono essere nella partita?", "Quanti Investigatori devono essere nella partita?",
"Quanti Angeli devono essere nella partita?", "Quanti Angeli devono essere nella partita?",
"Quanti Terroristi devono essere nella partita?", "Quanti Terroristi devono essere nella partita?",
"Quanti Derek devono essere nella partita?",
"I mifiosi possono uccidere una persona a `testa` al giorno " "I mifiosi possono uccidere una persona a `testa` al giorno "
"o votano e decidono un'`unica` persona da uccidere per tutta la squadra?"] "o votano e decidono un'`unica` persona da uccidere per tutta la squadra?"]