from telegram.ext import Updater import filemanager import logging logger = logging.getLogger() logger.setLevel(logging.INFO) token = filemanager.readfile('telegramapi.txt') updater = Updater(token) # Ruoli possibili per i giocatori # Base di un ruolo class Role: icon = str() team = 'None' # Squadra: 'None', 'Good', 'Evil' haspower = False poweruses = 0 def power(self): pass def onendday(self): pass class Royal(Role): icon = "\U0001F610" team = 'Good' class Mifioso(Role): icon = "\U0001F47F" team = 'Evil' haspower = True poweruses = 1 target = None def power(self): # Imposta qualcuno come bersaglio pass def onendday(self): # Ripristina il potere self.poweruses = 1 # Uccidi il bersaglio class Investigatore(Role): icon = "\U0001F575" team = 'Good' haspower = True poweruses = 1 def power(self): # Visualizza il ruolo di qualcuno pass def onendday(self): # Ripristina il potere self.poweruses = 1 class Angelo(Role): icon = "" #TODO: Mettere un emoji per l'angelo team = 'Good' haspower = True poweruses = 1 def power(self): # Salva qualcuno dalla morte! pass def onendday(self): # Ripristina il potere self.poweruses = 1 # Classi per i giocatori class Player: tid = int() tusername = str() role = Role() # Di base, ogni giocatore รจ un ruolo indefinito alive = True votingfor = str() def message(self, bot, text): bot.sendMessage(self.tid, text) def __init__(self, tid, tusername): self.tid = tid self.tusername = tusername # Classe di ogni partita class Game: adminid = int() groupid = int() players = list() tokill = list() # Giocatori che verranno uccisi all'endday phase = 'Join' # Fase di gioco: 'Join', 'Voting', 'Ended' def __init__(self, groupid, adminid): self.groupid = groupid self.adminid = adminid def message(self, bot, text): bot.sendMessage(self.groupid, text) def adminmessage(self, bot, text): bot.sendMessage(self.adminid, text) def mifiamessage(self, bot, text): # Trova tutti i mifiosi nell'elenco dei giocatori for player in self.players: if isinstance(player.role, Mifioso): player.message(bot, text) # Inoltra il messaggio all'admin self.adminmessage(bot, text) # Partite in corso inprogress = list() # Trova una partita con un certo id def findgamebyid(gid) -> Game: for game in inprogress: if game.groupid == gid: return game # Comandi a cui risponde il bot def ping(bot, update): bot.sendMessage(update.message.chat['id'], "Pong!") def newgame(bot, update): if update.message.chat['type'] != 'private': g = Game(update.message.chat['id'], update.message.from_user['id']) inprogress.append(g) bot.sendMessage(update.message.chat['id'], "Partita creata: " + repr(g)) else: bot.sendMessage(update.message.chat['id'], "Non puoi creare una partita in questo tipo di chat!") def join(bot, update): game = findgamebyid(update.message.chat['id']) if game is not None: if game.phase == 'Join': 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: " + repr(g)) updater.dispatcher.addTelegramCommandHandler('ping', ping) updater.dispatcher.addTelegramCommandHandler('newgame', newgame) updater.dispatcher.addTelegramCommandHandler('join', join) updater.start_polling()