2016-04-21 16:57:23 +00:00
|
|
|
from telegram.ext import Updater
|
|
|
|
import filemanager
|
|
|
|
|
2016-04-21 20:14:35 +00:00
|
|
|
import logging
|
|
|
|
logger = logging.getLogger()
|
|
|
|
logger.setLevel(logging.INFO)
|
|
|
|
|
2016-04-21 16:57:23 +00:00
|
|
|
token = filemanager.readfile('telegramapi.txt')
|
|
|
|
updater = Updater(token)
|
|
|
|
|
|
|
|
|
2016-04-21 17:52:01 +00:00
|
|
|
# Ruoli possibili per i giocatori
|
|
|
|
# Base di un ruolo
|
|
|
|
class Role:
|
|
|
|
icon = str()
|
2016-04-21 18:20:26 +00:00
|
|
|
team = 'None' # Squadra: 'None', 'Good', 'Evil'
|
2016-04-21 17:52:01 +00:00
|
|
|
haspower = False
|
|
|
|
poweruses = 0
|
|
|
|
|
|
|
|
def power(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def onendday(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class Royal(Role):
|
|
|
|
icon = "\U0001F610"
|
2016-04-21 18:20:26 +00:00
|
|
|
team = 'Good'
|
2016-04-21 17:52:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
class Mifioso(Role):
|
|
|
|
icon = "\U0001F47F"
|
2016-04-21 18:20:26 +00:00
|
|
|
team = 'Evil'
|
2016-04-21 17:52:01 +00:00
|
|
|
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"
|
2016-04-21 18:20:26 +00:00
|
|
|
team = 'Good'
|
2016-04-21 17:52:01 +00:00
|
|
|
haspower = True
|
|
|
|
poweruses = 1
|
|
|
|
|
|
|
|
def power(self):
|
|
|
|
# Visualizza il ruolo di qualcuno
|
|
|
|
pass
|
|
|
|
|
|
|
|
def onendday(self):
|
|
|
|
# Ripristina il potere
|
|
|
|
self.poweruses = 1
|
|
|
|
|
|
|
|
|
2016-04-21 21:04:53 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
|
2016-04-21 18:20:26 +00:00
|
|
|
# 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)
|
|
|
|
|
2016-04-21 20:14:35 +00:00
|
|
|
# Partite in corso
|
|
|
|
inprogress = list()
|
|
|
|
|
2016-04-21 18:20:26 +00:00
|
|
|
|
2016-04-21 21:04:53 +00:00
|
|
|
# Trova una partita con un certo id
|
|
|
|
def findgamebyid(gid) -> Game:
|
|
|
|
for game in inprogress:
|
|
|
|
if game.groupid == gid:
|
|
|
|
return game
|
|
|
|
|
|
|
|
|
2016-04-21 17:52:01 +00:00
|
|
|
# Comandi a cui risponde il bot
|
2016-04-21 16:57:23 +00:00
|
|
|
def ping(bot, update):
|
2016-04-21 20:22:08 +00:00
|
|
|
bot.sendMessage(update.message.chat['id'], "Pong!")
|
2016-04-21 16:57:23 +00:00
|
|
|
|
2016-04-21 20:14:35 +00:00
|
|
|
|
|
|
|
def newgame(bot, update):
|
|
|
|
if update.message.chat['type'] != 'private':
|
|
|
|
g = Game(update.message.chat['id'], update.message.from_user['id'])
|
|
|
|
inprogress.append(g)
|
2016-04-21 21:04:53 +00:00
|
|
|
bot.sendMessage(update.message.chat['id'], "Partita creata: " + repr(g))
|
2016-04-21 20:14:35 +00:00
|
|
|
else:
|
2016-04-21 21:04:53 +00:00
|
|
|
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))
|
|
|
|
|
2016-04-21 20:14:35 +00:00
|
|
|
|
2016-04-21 16:57:23 +00:00
|
|
|
updater.dispatcher.addTelegramCommandHandler('ping', ping)
|
2016-04-21 20:14:35 +00:00
|
|
|
updater.dispatcher.addTelegramCommandHandler('newgame', newgame)
|
2016-04-21 21:04:53 +00:00
|
|
|
updater.dispatcher.addTelegramCommandHandler('join', join)
|
2016-04-21 20:14:35 +00:00
|
|
|
updater.start_polling()
|