def count_points(bot, game): frase_elegida = game.board.state.ordered_votes[ game.board.state.index_pick_resp] jugador_favorecido = frase_elegida.player mensaje = "La frase elegida fue: *{0}* de {1}! El cual gana 1 punto!".format( frase_elegida.content['propuesta'], helper.player_call(jugador_favorecido)) jugador_favorecido.puntaje += 1 votos_a_respuesta_elegida = [ (val[0], val[1], val[2]) for index, val in enumerate(game.board.state.votes_on_votes) if val[2] == game.board.state.index_pick_resp ] mensaje += "\nA su vez los jugadores que votaron la frase:\n" if len( votos_a_respuesta_elegida) else "\nNingun jugador voto la frase" votos_dif_jugadores = [] for voto in votos_a_respuesta_elegida: player = voto[0] player.puntaje += voto[1] if player.uid not in votos_dif_jugadores and len( votos_dif_jugadores) < 3: votos_dif_jugadores.append(player.uid) mensaje += "{name} gano {puntos} punto\n".format(name=player.name, puntos=voto[1]) game.board.state.active_player.puntaje += len(votos_dif_jugadores) mensaje += "El jugador activo ha ganado *{}* por los votos de diferentes jugadores (MAX 3)".format( len(votos_dif_jugadores)) if len(votos_dif_jugadores) > 0 else "" bot.send_message(game.cid, mensaje, ParseMode.MARKDOWN) #Commands.save(bot, game.cid) start_next_round(bot, game)
def command_jugadores(bot, update): uid = update.message.from_user.id cid = update.message.chat_id game = get_game(cid) jugadoresActuales = "Los jugadores que se han unido al momento son:\n" for uid in game.playerlist: jugadoresActuales += "{}\n".format( helper.player_call(game.playerlist[uid])) bot.send_message(game.cid, jugadoresActuales, ParseMode.MARKDOWN)
def get_respuestas(bot, game): text = "" i = 1 for vote in game.board.state.ordered_votes: text += "*{1}: {0}*\n".format(vote.content['propuesta'], i) i += 1 respuestas = "Las respuestas son:\n{}".format(text) return "{0} es hora de elegir! Elige con /pick NUMERO (En privado)\n*{1}*\n{2}\n".format( helper.player_call(game.board.state.active_player), game.board.state.acciones_carta_actual, respuestas)
def command_call(bot, game): try: # Verifico en mi maquina de estados que comando deberia usar para el estado(fase) actual if game.board.state.fase_actual == "Proponiendo Pistas": call_proponiendo_pistas(bot, game) elif game.board.state.fase_actual == "Revisando Pistas": reviewer_player = game.board.state.reviewer_player bot.send_message( game.cid, "Revisor {0} recorda que tenes que verificar las pistas". format(helper.player_call(reviewer_player)), ParseMode.MARKDOWN) elif game.board.state.fase_actual == "Adivinando": active_player = game.board.state.active_player bot.send_message( game.cid, "{0} estamos esperando para que hagas /guess EJEMPLO o /pass". format(helper.player_call(active_player)), ParseMode.MARKDOWN) except Exception as e: bot.send_message(game.cid, str(e))
def call_to_vote_respeustas(bot, game): call_text = 'Recuerden votar\n' for player in game.player_sequence: if verify_missing_votes_user(game, player.uid): lista_votos_usuario = [ (index, val[2]) for index, val in enumerate(game.board.state.votes_on_votes) if val[0].uid == player.uid ] call_text += 'Te faltan *{0}* votos {1}.\n'.format( 2 - len(lista_votos_usuario), helper.player_call(player)) bot.send_message(game.cid, call_text, ParseMode.MARKDOWN)
def myturn_message(game, uid): try: group_link_name = helper.gname(game) #group_link_name = game.groupName if get_config_data(game, "link")==None else "[{0}]({1})".format(game.groupName, get_config_data(game, "link")) #if uid == ADMIN[0]: # group_link_name = "[{0}]({1})".format(game.groupName, get_config_data(game, "link")) # Verifico en mi maquina de estados que comando deberia usar para el estado(fase) actual if game.board.state.fase_actual == "Proponiendo Pistas": mensaje_clue_ejemplo = "/resp Ejemplo" if game.board.num_players != 3 else "/resp Ejemplo Ejemplo2" return "Partida: {1} debes dar {3} para la palabra: *{2}*.\nAdivina el jugador *{4}*".format( helper.player_call(game.playerlist[uid]), group_link_name, game.board.state.acciones_carta_actual, mensaje_clue_ejemplo, game.board.state.active_player.name) elif game.board.state.fase_actual == "Revisando Pistas": reviewer_player = game.board.state.reviewer_player return "Partida: {1} Revisor recorda que tenes que verificar las pistas".format( helper.player_call(reviewer_player), group_link_name) elif game.board.state.fase_actual == "Adivinando": active_player = game.board.state.active_player return "Partida: {1} estamos esperando para que hagas /guess EJEMPLO o /pass".format( helper.player_call(active_player), group_link_name) except Exception as e: return str(e)
def command_continue(bot, game, uid): try: # Verifico en mi maquina de estados que comando deberia usar para el estado(fase) actual if game.board.state.fase_actual == "Proponiendo Pistas": # Vuelvo a mandar la pista SayAnythingController.call_players_to_clue(bot, game) elif game.board.state.fase_actual == "Revisando Pistas": SayAnythingController.review_clues(bot, game) elif game.board.state.fase_actual == "Adivinando": active_player = game.board.state.active_player bot.send_message( game.cid, "{0} estamos esperando para que hagas /guess EJEMPLO o /pass". format(helper.player_call(active_player)), ParseMode.MARKDOWN) elif game.board.state.fase_actual == "Finalizado": SayAnythingController.continue_playing(bot, game) except Exception as e: bot.send_message(game.cid, str(e))
def command_guess(bot, update, args): try: log.info('command_guess called') #Send message of executing command cid = update.message.chat_id uid = update.message.from_user.id game = Commands.get_game(cid) if (len(args) < 1 or game.board.state.fase_actual != "Adivinando" or uid != game.board.state.active_player.uid): # and uid not in ADMIN: bot.send_message( game.cid, "No es el momento de adivinar, no eres el que tiene que adivinar o no has ingresado algo para adivinar", ParseMode.MARKDOWN) return args_text = ' '.join(args) if args_text.lower() == game.board.state.acciones_carta_actual.lower(): #Adivino correctamente! Aumento el puntaje game.board.state.progreso += 1 bot.send_message(game.cid, "*CORRECTO!!!*", ParseMode.MARKDOWN) game.board.discards.append(game.board.state.acciones_carta_actual) JustOneController.start_next_round(bot, game) else: #Preguntar al revisor mensaje = "*Revisor* {0} confirme por favor!".format( helper.player_call(game.board.state.reviewer_player)) bot.send_message(game.cid, mensaje, ParseMode.MARKDOWN) chat_donde_se_pregunta = uid opciones_botones = {"correcto": "Si", "incorrecto": "No"} helper.simple_choose_buttons( bot, cid, game.board.state.reviewer_player.uid, game.board.state.reviewer_player.uid, "reviewerconfirm", "¿Es correcto lo que se adivinó ({1})? Palabra: {0}".format( game.board.state.acciones_carta_actual, args_text), opciones_botones) except Exception as e: bot.send_message(uid, str(e)) log.error("Unknown error: " + str(e))
def call_proponiendo_pistas(bot, game): if not game.dateinitvote: # If date of init vote is null, then the voting didnt start bot.send_message(game.cid, "No es momento de dar pista.") else: #If there is a time, compare it and send history of votes. start = game.dateinitvote stop = datetime.datetime.now() elapsed = stop - start if elapsed > datetime.timedelta(minutes=1): # Only remember to vote to players that are still in the game history_text = "" for player in game.player_sequence: # If the player is not in ordered_votes send him reminder voto_jugador = next((x for x in game.board.state.ordered_votes if x.player.uid == player.uid), None) if not voto_jugador and player.uid != game.board.state.active_player.uid: history_text += "Tienes que dar una respuesta {0}.\n".format( helper.player_call(player)) # Envio mensaje inicial de pistas para recordarle al jugador la pista y el grupo mensaje = "Palabra en el grupo *{1}*.\nJugador activo: *{2}*\nLa frase es: *{0}*, propone tu respuesta!".format( game.board.state.acciones_carta_actual, game.groupName, game.board.state.active_player.name) bot.send_message(player.uid, mensaje, ParseMode.MARKDOWN) mensaje = "/resp Ejemplo" if game.board.num_players != 3 else "/prop Ejemplo Ejemplo2" bot.send_message(player.uid, mensaje) bot.send_message(game.cid, history_text, ParseMode.MARKDOWN) if game.board.num_players != 3 and len( game.board.state.ordered_votes) == len( game.player_sequence) - 1: SayAnythingController.send_prop(bot, game) elif len(game.board.state.ordered_votes) == len( game.player_sequence) + 1: # De a 3 jugadores exigo que pongan 2 pistas cada uno son 4 de a 3 jugadores SayAnythingController.send_prop(bot, game) else: bot.send_message(game.cid, "5 minutos deben pasar para llamar a call")