1
Fork 0
mirror of https://github.com/RYGhub/royal-mifia.git synced 2024-11-25 15:14:18 +00:00
This commit is contained in:
Steffo 2016-05-22 17:13:26 +02:00
parent ccb43cb955
commit 5482090749

100
main.py
View file

@ -6,7 +6,10 @@ import random
import logging import logging
logger = logging.getLogger() logger = logging.getLogger()
logger.setLevel(logging.DEBUG) logger.setLevel(logging.WARN)
logging.basicConfig(level=logging.WARN,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
token = filemanager.readfile('telegramapi.txt') token = filemanager.readfile('telegramapi.txt')
updater = Updater(token) updater = Updater(token)
@ -15,12 +18,13 @@ updater = Updater(token)
# Ruoli possibili per i giocatori # Ruoli possibili per i giocatori
# Base di un ruolo # Base di un ruolo
class Role: class Role:
icon = "-" def __init__(self):
team = 'None' # Squadra: 'None', 'Good', 'Evil' self.icon = "-"
name = "UNDEFINED" self.team = 'None' # Squadra: 'None', 'Good', 'Evil'
haspower = False self.name = "UNDEFINED"
poweruses = 0 self.haspower = False
protectedby = None # Protettore self.poweruses = 0
self.protectedby = None # Protettore
def power(self, bot, game, player, arg): def power(self, bot, game, player, arg):
pass pass
@ -30,16 +34,20 @@ class Role:
class Royal(Role): class Royal(Role):
icon = "\U0001F610" def __init__(self):
team = 'Good' super().__init__()
name = "Royal" self.icon = "\U0001F610"
self.team = 'Good'
self.name = "Royal"
class Mifioso(Role): class Mifioso(Role):
icon = "\U0001F47F" def __init__(self):
team = 'Evil' super().__init__()
target = None self.icon = "\U0001F47F"
name = "Mifioso" self.team = 'Evil'
self.target = None
self.name = "Mifioso"
def power(self, bot, game, player, arg): def power(self, bot, game, player, arg):
# Imposta qualcuno come bersaglio # Imposta qualcuno come bersaglio
@ -57,16 +65,18 @@ class Mifioso(Role):
.format(self.target.tusername, self.target.role.icon, self.target.role.name)) .format(self.target.tusername, self.target.role.icon, self.target.role.name))
else: else:
game.message(bot, "{0} è stato protetto dalla Mifia da {1} {2}!\n" game.message(bot, "{0} è stato protetto dalla Mifia da {1} {2}!\n"
.format(self.target.tusername, self.target.role.protectedby.icon, .format(self.target.tusername, self.target.role.protectedby.role.icon,
self.target.role.protectedby.tusername)) self.target.role.protectedby.tusername))
self.target = None self.target = None
class Investigatore(Role): class Investigatore(Role):
icon = "\U0001F575" def __init__(self):
team = 'Good' super().__init__()
poweruses = 1 self.icon = "\U0001F575"
name = "Investigatore" self.team = 'Good'
self.poweruses = 1
self.name = "Investigatore"
def power(self, bot, game, player, arg): def power(self, bot, game, player, arg):
if self.poweruses > 0: if self.poweruses > 0:
@ -87,10 +97,12 @@ class Investigatore(Role):
class Angelo(Role): class Angelo(Role):
icon = "\U0001F607" def __init__(self):
team = 'Good' # Squadra: 'None', 'Good', 'Evil' super().__init__()
name = "Angelo" self.icon = "\U0001F607"
protecting = None # Protetto self.team = 'Good' # Squadra: 'None', 'Good', 'Evil'
self.name = "Angelo"
self.protecting = None # Protetto
def power(self, bot, game, player, arg): def power(self, bot, game, player, arg):
# Imposta qualcuno come bersaglio # Imposta qualcuno come bersaglio
@ -108,13 +120,6 @@ class Angelo(Role):
# Classi per i giocatori # Classi per i giocatori
class Player: class Player:
tid = int()
tusername = str()
role = Role() # Di base, ogni giocatore è un ruolo indefinito
alive = True
votingfor = None # Diventa un player se ha votato
votes = 0 # Voti. Aggiornato da updatevotes()
def message(self, bot, text): def message(self, bot, text):
bot.sendMessage(self.tid, text) bot.sendMessage(self.tid, text)
@ -124,19 +129,20 @@ class Player:
def __init__(self, tid, tusername): def __init__(self, tid, tusername):
self.tid = tid self.tid = tid
self.tusername = tusername self.tusername = tusername
self.role = Role() # Di base, ogni giocatore è un ruolo indefinito
self.alive = True
self.votingfor = None # Diventa un player se ha votato
self.votes = 0 # Voti. Aggiornato da updatevotes()
# Classe di ogni partita # Classe di ogni partita
class Game: 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): def __init__(self, groupid, adminid):
self.groupid = groupid self.groupid = groupid
self.adminid = adminid self.adminid = adminid
self.players = list()
self.tokill = list() # Giocatori che verranno uccisi all'endday
self.phase = 'Join' # Fase di gioco: 'Join', 'Voting', 'Ended'
def message(self, bot, text): def message(self, bot, text):
bot.sendMessage(self.groupid, text) bot.sendMessage(self.groupid, text)
@ -234,15 +240,15 @@ class Game:
# Mifiosi # Mifiosi
for player in self.players: for player in self.players:
if isinstance(player.role, Mifioso): if isinstance(player.role, Mifioso):
player.role.onendday(self, bot) player.role.onendday(bot, self)
# Investigatori # Investigatori
for player in self.players: for player in self.players:
if isinstance(player.role, Investigatore): if isinstance(player.role, Investigatore):
player.role.onendday(self, bot) player.role.onendday(bot, self)
# Angeli # Angeli
for player in self.players: for player in self.players:
if isinstance(player.role, Angelo): if isinstance(player.role, Angelo):
player.role.onendday(self, bot) player.role.onendday(bot, self)
lynched = self.mostvotedplayer() lynched = self.mostvotedplayer()
if lynched is not None: if lynched is not None:
self.message(bot, "{0} era il più votato ed è stato ucciso dai Royal.\n" self.message(bot, "{0} era il più votato ed è stato ucciso dai Royal.\n"
@ -309,7 +315,7 @@ def join(bot, update):
if p is None: if p is None:
p = Player(update.message.from_user['id'], update.message.from_user['username']) p = Player(update.message.from_user['id'], update.message.from_user['username'])
game.players.append(p) game.players.append(p)
bot.sendMessage(update.message.chat['id'], "Unito alla partita: " + repr(p)) bot.sendMessage(update.message.chat['id'], "Unito alla partita: " + str(p.tid))
else: else:
bot.sendMessage(update.message.chat['id'], "Ti sei già unito alla partita: " + repr(p)) bot.sendMessage(update.message.chat['id'], "Ti sei già unito alla partita: " + repr(p))
@ -363,10 +369,16 @@ def endjoin(bot, update):
game = findgamebyid(update.message.chat['id']) game = findgamebyid(update.message.chat['id'])
if game is not None and game.phase is 'Join' and update.message.from_user['id'] == game.adminid: if game is not None and game.phase is 'Join' and update.message.from_user['id'] == game.adminid:
game.phase = 'Voting' game.phase = 'Voting'
bot.sendMessage(update.message.chat['id'], "La fase di join è terminata.") game.message(bot, "La fase di join è terminata.")
game.assignroles(bot, mifia=1, investigatore=0, angelo=1) try:
bot.sendMessage(update.message.chat['id'], "I ruoli sono stati assegnati.\n" game.assignroles(bot, mifia=1, investigatore=0, angelo=1)
"Controlla la chat con @mifiabot.") except IndexError:
game.message(bot, "Non ci sono abbastanza giocatori per avviare la partita.\n"
"La partita è annullata.")
game.endgame()
else:
bot.sendMessage(update.message.chat['id'], "I ruoli sono stati assegnati.\n"
"Controlla la chat con @mifiabot.")
def vote(bot, update): def vote(bot, update):