def join_league(bot, update): try: logger = _get_logger() # Validaciones de argumentos if not _authenticate(update): bot.send_message(chat_id=update.message.chat_id, text="Grupo invalido") return liga = find_one(LEAGUES_COLLECTION, {"__$STATE": "JOINING"}) if not liga: bot.send_message(chat_id=update.message.chat_id, text="Mi no entender") return player = find_one(PLAYERS_COLLECTION, {"__$tel_id": update.message.from_user.id}) if not player: bot.send_message( chat_id=update.message.chat_id, text= 'No se encontro jugador, recuerde que debe linkear su usuario a un jugador' ) return if str(player["__$name"]).lower() in liga["players"]: bot.send_message(chat_id=update.message.chat_id, text='El jugador ya se encuentra en la liga') return liga["players"].append(player["__$name"].lower()) update_doc(LEAGUES_COLLECTION, {"__$STATE": "JOINING"}, liga) bot.send_message(chat_id=liga["__$grupo"], text="@" + str(player["__$name"] + " Exito al unirse a la liga")) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def submit_doble(bot, update, args): players_team_a = args[0].split("&") players_team_b = args[2].split("&") player_a_1 = find_one(PLAYERS_COLLECTION,{"$or":[{"__$name":re.compile("^"+players_team_a[0]+"$", re.IGNORECASE)},{"__$tel_name":players_team_a[0][1:]}]}) if not player_a_1: bot.send_message(chat_id=update.message.chat_id, text="Jugador "+str(players_team_a[0])+" no existe") return False player_a_2 = find_one(PLAYERS_COLLECTION,{"$or":[{"__$name":re.compile("^"+players_team_a[1]+"$", re.IGNORECASE)},{"__$tel_name":players_team_a[1][1:]}]}) if not player_a_2: bot.send_message(chat_id=update.message.chat_id, text="Jugador "+str(players_team_a[1])+" no existe") return False player_b_1 = find_one(PLAYERS_COLLECTION,{"$or":[{"__$name":re.compile("^"+players_team_b[0]+"$", re.IGNORECASE)},{"__$tel_name":players_team_b[0][1:]}]}) if not player_b_1: bot.send_message(chat_id=update.message.chat_id, text="Jugador "+str(players_team_b[0])+" no existe") return False player_b_2 = find_one(PLAYERS_COLLECTION,{"$or":[{"__$name":re.compile("^"+players_team_b[1]+"$", re.IGNORECASE)},{"__$tel_name":players_team_b[1][1:]}]}) if not player_b_2: bot.send_message(chat_id=update.message.chat_id, text="Jugador "+str(players_team_b[1])+" no existe") return False team_a_elo = int((player_a_1["__$elo"] + player_a_2["__$elo"])/2) team_b_elo = int((player_b_1["__$elo"] + player_b_2["__$elo"])/2) new_team_a_elo,new_team_b_elo = _calculate_elo(team_a_elo, team_b_elo, int(args[1]), int(args[3])) team_a_dif = ("+" if new_team_a_elo-team_a_elo > 0 else "-") + str(abs(new_team_a_elo-team_a_elo)) team_b_dif = ("+" if new_team_b_elo-team_b_elo > 0 else "-") + str(abs(new_team_b_elo-team_b_elo)) player_a_1["__$elo"] = player_a_1["__$elo"] + int(new_team_a_elo-team_a_elo) player_a_2["__$elo"] = player_a_2["__$elo"] + int(new_team_a_elo-team_a_elo) player_b_1["__$elo"] = player_b_1["__$elo"] + int(new_team_b_elo-team_b_elo) player_b_2["__$elo"] = player_b_2["__$elo"] + int(new_team_b_elo-team_b_elo) game_id = str(uuid.uuid4()) match_history = {"__$date":datetime.datetime.today(), "__$game_id":game_id, "type":"double", "team1":players_team_a, "team2":players_team_b} match_history[players_team_a[0]] = int(args[1]) match_history[players_team_a[1]] = int(args[1]) match_history[players_team_b[0]] = int(args[3]) match_history[players_team_b[1]] = int(args[3]) player_a_1["__$history"].append(match_history) player_a_2["__$history"].append(match_history) player_b_1["__$history"].append(match_history) player_b_2["__$history"].append(match_history) update_doc(PLAYERS_COLLECTION,{"__$name":player_a_1["__$name"]},player_a_1) update_doc(PLAYERS_COLLECTION,{"__$name":player_a_2["__$name"]},player_a_2) update_doc(PLAYERS_COLLECTION,{"__$name":player_b_1["__$name"]},player_b_1) update_doc(PLAYERS_COLLECTION,{"__$name":player_b_2["__$name"]},player_b_2) bot.send_message(chat_id=update.message.chat_id, text="Partido cargado con exito\n"+ str(player_a_1["__$name"])+ " (" + team_a_dif +"): "+str(int(player_a_1["__$elo"]))+"\n"+ str(player_a_2["__$name"])+ " (" + team_a_dif +"): "+str(int(player_a_2["__$elo"]))+"\n"+ str(player_b_1["__$name"])+ " (" + team_b_dif +"): "+str(int(player_b_1["__$elo"]))+"\n"+ str(player_b_2["__$name"])+ " (" + team_b_dif +"): "+str(int(player_b_2["__$elo"]))+"\n"+ str(game_id))
def start_league(bot, update): try: logger = _get_logger() if not _authenticate(update): bot.send_message(chat_id=update.message.chat_id, text="Grupo invalido") return league = find_one(LEAGUES_COLLECTION, {"__$STATE": {"$ne": "END"}}) if league: league = find_one(LEAGUES_COLLECTION, {"__$STATE": "JOINING"}) if not league: bot.send_message(chat_id=update.message.chat_id, text="Ya hay una liga en progreso") return start_playing_league(bot, update, league) bot.send_message(chat_id=update.message.chat_id, text="Inicio la liga: " + league["config"]["nombre_liga"]) bot.send_message( chat_id=update.message.chat_id, text="Lista de jugadores:\n" + "\n".join([player for player in league["players"]])) return insert_one( LEAGUES_COLLECTION, { "__$STATE": "CONFIG", "__$DATE": datetime.today(), "__$organizador": { "id": update.message.from_user.id, "name": update.message.from_user.username }, "config": { "cant_partidos": 1 }, "__$grupo": update.message.chat_id, "players": [] }) bot.send_message(chat_id=update.message.chat_id, text="La liga esta siendo configurada por: @" + str(update.message.from_user.username)) custom_keyboard = [['Solo ida', 'Ida y vuelta']] reply_markup = telegram.ReplyKeyboardMarkup(custom_keyboard) bot.send_message(chat_id=update.message.from_user.id, text="Cantidad de cruces:", reply_markup=reply_markup) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def link(bot, update, args): try: logger = _get_logger() _bot_history("set_elo", update, args) # Validaciones de argumentos if not _authenticate(update): bot.send_message(chat_id=update.message.chat_id, text="Grupo invalido") return if not args or len(args) != 1: bot.send_message( chat_id=update.message.chat_id, text= "Por favor, ingrese el nombre del jugador al que desea vincular su usuario" ) return player = find_one(PLAYERS_COLLECTION, {"__$tel_id": update.message.from_user.id}) if player: bot.send_message(chat_id=update.message.chat_id, text="Ya estas vinculado a otro jugador") return player = find_one( PLAYERS_COLLECTION, {"__$name": re.compile("^" + args[0] + "$", re.IGNORECASE)}) if not player: bot.send_message(chat_id=update.message.chat_id, text="No se encontro al jugador") return if "__$link" in player: bot.send_message(chat_id=update.message.chat_id, text="El jugador ya se encuentra vinculado") return user_id = update.message.from_user.id user_name = update.message.from_user.username update_doc(PLAYERS_COLLECTION, {"__$name": re.compile("^" + args[0] + "$", re.IGNORECASE)}, {"$set": { "__$tel_id": user_id, "__$tel_name": user_name }}) bot.send_message(chat_id=update.message.chat_id, text="Exito al vincular jugador") except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def submit_league(bot, update, args): try: logger = _get_logger() # Validaciones de argumentos if not _authenticate(update): bot.send_message(chat_id=update.message.chat_id, text="Grupo invalido") return if not submit_result_goals(bot, update, args): return player_a = args[0] player_b = args[2] goals_a = int(args[1]) goals_b = int(args[3]) league = find_one(LEAGUES_COLLECTION, {"__$STATE": "PLAYING"}) if not league: bot.send_message(chat_id=update.message.chat_id, text='No hay ninguna liga en curso') return if not _submit_league_game(bot, update, league, player_a, player_b, goals_a, goals_b): return bot.send_message(chat_id=update.message.chat_id, text='Partido de liga cargado con exito') _validate_end_league(bot, update, league) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def nombre_liga(bot, update): try: logger = _get_logger() liga = find_one(LEAGUES_COLLECTION, { "__$STATE": "CONFIG", "__$organizador.id": update.message.from_user.id }) if not liga: bot.send_message(chat_id=update.message.chat_id, text="Mi no entender") return liga["config"]["nombre_liga"] = str(update.message.text)[11:] liga["__$STATE"] = "JOINING" update_doc(LEAGUES_COLLECTION, { "__$STATE": "CONFIG", "__$organizador.id": update.message.from_user.id }, liga) reply_markup = telegram.ReplyKeyboardRemove() bot.send_message(chat_id=liga["__$grupo"], text="@" + str(liga['__$organizador']["name"]) + " da inicio a la liga: " + str(update.message.text)[11:]) bot.send_message(chat_id=liga["__$grupo"], text='Escribí /joinliga para unirte a la liga') bot.send_message(chat_id=update.message.chat_id, text='Configuracion terminada', reply_markup=reply_markup) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def cruces_partidos(bot, update): try: logger = _get_logger() liga = find_one(LEAGUES_COLLECTION, { "__$STATE": "CONFIG", "__$organizador.id": update.message.from_user.id }) if not liga: bot.send_message(chat_id=update.message.chat_id, text="Mi no entender") return print(liga) cant_partidos = 1 if update.message.text == "Solo ida" else 2 liga["config"]["cant_partidos"] = cant_partidos update_doc(LEAGUES_COLLECTION, { "__$STATE": "CONFIG", "__$organizador.id": update.message.from_user.id }, liga) reply_markup = telegram.ReplyKeyboardRemove() bot.send_message( chat_id=update.message.from_user.id, text= 'Ingrese nombre de la liga (con el formato"NombreLiga:*nombre de la liga")', reply_markup=reply_markup) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def admin_player_info(bot, update, args): try: logger = _get_logger() _bot_history("admin_player_info", update, args) # Validaciones de argumentos if not _authenticate_admin(update): bot.send_message(chat_id=update.message.chat_id, text="Requiere autorizacion de un administrador") return if not args: bot.send_message(chat_id=update.message.chat_id, text="Por favor, agregar nombre del jugador") return elif len(args) != 1: bot.send_message( chat_id=update.message.chat_id, text="Por favor, el nombre del jugador no puede tener espacios" ) return player = find_one( PLAYERS_COLLECTION, { "$or": [{ "__$name": re.compile("^" + args[0] + "$", re.IGNORECASE) }, { "__$tel_name": args[0][1:] }] }) if not player: bot.send_message(chat_id=update.message.chat_id, text="El jugador no existe") return message = "Partidos de " + str(player["__$name"]) + "\n" for game in player["__$history"]: if "type" not in game: enemy = [ player for player in list(game.keys()) if "__$" not in player ] if len(enemy) == 1: enemy = enemy[0] message = message + "- " + str( player["__$name"]) + ": " + str( game["__$own"]) + " | " + str(enemy) + ": " + str( game[enemy] ) + " / " + game["__$game_id"] + "\n" else: logger.error(game) bot.send_message(chat_id=update.message.chat_id, text=message) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def agregar_a_liga(bot, update, args): try: logger = _get_logger() if not _authenticate_admin(update): bot.send_message(chat_id=update.message.chat_id, text="Requiere autorizacion de un administrador") return if not args or len(args) != 1: bot.send_message(chat_id=update.message.chat_id, text="Carga solo un jugador") return league = find_one(LEAGUES_COLLECTION, {"__$STATE": "PLAYING"}) if not league: bot.send_message(chat_id=update.message.chat_id, text="No se està jugando ninguna liga") return player = find_one(PLAYERS_COLLECTION, {"__$name": args[0]}) if not player: bot.send_message(chat_id=update.message.chat_id, text="Jugador no existe") return for p in league["players"]: tmp = {} tmp["games"] = 0 tmp[player["__$name"]] = 0 tmp[p] = 0 league["partidos"].append(tmp) league["players"].append(player["__$name"]) update_doc(LEAGUES_COLLECTION, {"__$STATE": "PLAYING"}, league) bot.send_message(chat_id=update.message.chat_id, text="Jugador agregado con exito a la liga!") except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def submit_simple(bot, update, args): player_a = find_one(PLAYERS_COLLECTION,{"$or":[{"__$name":re.compile("^"+args[0]+"$", re.IGNORECASE)},{"__$tel_name":args[0][1:]}]}) player_a_week = find_one(WEEKLY,{"$or":[{"__$name":re.compile("^"+args[0]+"$", re.IGNORECASE)},{"__$tel_name":args[0][1:]}]}) if not player_a: bot.send_message(chat_id=update.message.chat_id, text="El primero jugador no existe") return False player_b = find_one(PLAYERS_COLLECTION,{"$or":[{"__$name":re.compile("^"+args[2]+"$", re.IGNORECASE)},{"__$tel_name":args[2][1:]}]}) player_b_week = find_one(WEEKLY,{"$or":[{"__$name":re.compile("^"+args[2]+"$", re.IGNORECASE)},{"__$tel_name":args[2][1:]}]}) if not player_b: bot.send_message(chat_id=update.message.chat_id, text="El segundo jugador no existe") return False player_a_elo,player_b_elo = _calculate_elo(player_a["__$elo"], player_b["__$elo"], int(args[1]), int(args[3])) player_a_elo_week,player_b_elo_week = _calculate_elo(player_a_week["__$elo"], player_b_week["__$elo"], int(args[1]), int(args[3])) player_a_dif = ("+" if player_a_elo-player_a["__$elo"] > 0 else "-") + str(abs(player_a_elo-player_a["__$elo"])) player_b_dif = ("+" if player_b_elo-player_b["__$elo"] > 0 else "-") + str(abs(player_b_elo-player_b["__$elo"])) player_a["__$elo"] = player_a_elo player_b["__$elo"] = player_b_elo player_a_week["__$elo"] = player_a_elo_week player_b_week["__$elo"] = player_b_elo_week game_id = str(uuid.uuid4()) match_history_a = {"__$date":datetime.datetime.today(),"__$own":int(args[1]), "__$game_id":game_id} match_history_a[str(player_b["__$name"])] = int(args[3]) match_history_b = {"__$date":datetime.datetime.today(),"__$own":int(args[3]), "__$game_id":game_id} match_history_b[str(player_a["__$name"])] = int(args[1]) player_a["__$history"].append(match_history_a) player_b["__$history"].append(match_history_b) player_a_week["__$history"].append(match_history_a) player_b_week["__$history"].append(match_history_b) update_doc(PLAYERS_COLLECTION,{"__$name":player_a["__$name"]},player_a) update_doc(PLAYERS_COLLECTION,{"__$name":player_b["__$name"]},player_b) update_doc(WEEKLY,{"__$name":player_a["__$name"]},player_a_week) update_doc(WEEKLY,{"__$name":player_b["__$name"]},player_b_week) bot.send_message(chat_id=update.message.chat_id, text="Partido cargado con exito\n"+ str(player_a["__$name"])+ " (" + player_a_dif +"): "+str(int(player_a_elo))+"\n"+ str(player_b["__$name"])+ " (" + player_b_dif +"): "+str(int(player_b_elo))+"\n"+ str(game_id))
def _validate_end_league(bot,update,league,ignore_games=False): if not ignore_games: for partido in league["partidos"]: if partido["games"] != league["config"]["cant_partidos"]: return league["__$STATE"] = "END" update_doc(LEAGUES_COLLECTION,{"__$STATE":"PLAYING"},league) bot.send_message(chat_id=league["__$grupo"], text='Finalizo la liga: ' + str(league["config"]["nombre_liga"])) date = datetime.datetime.today() for player in _calculta_league_position(league): player_data = find_one(PLAYERS_COLLECTION,{"__$name":re.compile("^"+player["NAME"]+"$", re.IGNORECASE)}) player_data["__$elo"]+=(player["POINTS"]*len(league["players"])) player_data["__$history"].append({"type":"liga","points":player["POINTS"],"name":league["config"]["nombre_liga"],"__$date":date,"players":len(league["players"])}) update_doc(PLAYERS_COLLECTION,{"__$name":re.compile("^"+player["NAME"]+"$", re.IGNORECASE)},player_data) _render_league_image(bot, update, league, overrideChatId=league["__$grupo"]) _render_league_games(bot, update, league, overrideChatId=league["__$grupo"])
def add_player(bot, update, args): try: logger = _get_logger() _bot_history("add_player", update, args) # Validaciones de argumentos if not args: bot.send_message(chat_id=update.message.chat_id, text="Por favor, agregar nombre del jugador") return elif len(args) != 1: bot.send_message( chat_id=update.message.chat_id, text="Por favor, el nombre del jugador no puede tener espacios" ) return elif "__$" in args[0]: bot.send_message(chat_id=update.message.chat_id, text="Nombre invalido, no se acepta el simbolo $") return if not _authenticate(update): bot.send_message(chat_id=update.message.chat_id, text="Grupo invalido") return player = find_one( PLAYERS_COLLECTION, {"__$name": re.compile("^" + args[0] + "$", re.IGNORECASE)}) if not player: insert_one(PLAYERS_COLLECTION, { "__$name": args[0], "__$elo": 1800, "__$history": [] }) insert_one(WEEKLY, { "__$name": args[0], "__$elo": 1800, "__$history": [] }) else: bot.send_message(chat_id=update.message.chat_id, text="El jugador ya existe") return bot.send_message(chat_id=update.message.chat_id, text="Jugador agregado con exito") except Exception as ex: logger.exception(ex) bot.send_message(chat_id=update.message.chat_id, text=str(ex)) return
def league_games(bot, update): try: logger = _get_logger() # Validaciones de argumentos if not _authenticate(update): bot.send_message(chat_id=update.message.chat_id, text="Grupo invalido") return league = find_one(LEAGUES_COLLECTION, {"__$STATE": "PLAYING"}) if not league: bot.send_message(chat_id=update.message.chat_id, text='No hay ninguna liga en curso') return _render_league_games(bot, update, league) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def end_league(bot, update): try: logger = _get_logger() if not _authenticate_admin(update): bot.send_message(chat_id=update.message.chat_id, text="Requiere autorizacion de un administrador") return league = find_one(LEAGUES_COLLECTION, {"__$STATE": "PLAYING"}) if not league: bot.send_message(chat_id=update.message.chat_id, text="No se està jugando ninguna liga") return _validate_end_league(bot, update, league, ignore_games=True) bot.send_message(chat_id=update.message.chat_id, text="Liga terminada") except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return
def player_statics(bot, update, args): try: logger = _get_logger() _bot_history("player_statics", update, args) # Validaciones de argumentos if not _authenticate(update): bot.send_message(chat_id=update.message.chat_id, text="Grupo invalido") return if not args: args = [str(update.message.from_user.id)] elif len(args) != 1: bot.send_message( chat_id=update.message.chat_id, text="Por favor, el nombre del jugador no puede tener espacios" ) return query = { "$or": [{ "__$name": re.compile("^" + args[0] + "$", re.IGNORECASE) }, { "__$tel_name": args[0][1:] }] } try: query["$or"].append({"__$tel_id": int(args[0])}) except: pass player = find_one(PLAYERS_COLLECTION, query) if not player: bot.send_message(chat_id=update.message.chat_id, text="El jugador no existe") return message = "Estadisticas de " + str(player["__$name"]) + "\n" games_dict = {} for game in player["__$history"]: if "type" not in game: enemy = [ player for player in list(game.keys()) if "__$" not in player ] if len(enemy) == 1: enemy = enemy[0] if enemy not in games_dict: games_dict[enemy] = {"own": 0, "enemy": 0} games_dict[enemy]["own"] = games_dict[enemy]["own"] + int( game["__$own"] > game[enemy]) games_dict[enemy]["enemy"] = games_dict[enemy][ "enemy"] + int(game[enemy] > game["__$own"]) else: logger.error(game) for key in games_dict: percent = 100 * ( float(games_dict[key]["own"]) / float(games_dict[key]["own"] + games_dict[key]["enemy"])) message = message + str(player["__$name"]) + ": " + str( games_dict[key]["own"]) + " | " + str(key) + ": " + str( games_dict[key]["enemy"]) + " - (" + str(round(percent, 1)) + "%)\n" average_goals, average_percent_games, games_played = _get_average_stats( player, percent=True) message = message + "Promedio diferencia de goles: " + str( average_goals) + "\n" message = message + "Promedio de partidos ganados: " + str( average_percent_games) + "%\n" message = message + "Partidos jugados: " + str(games_played) + "\n" bot.send_message(chat_id=update.message.chat_id, text=message) except Exception as ex: bot.send_message(chat_id=update.message.chat_id, text=str(ex)) logger.exception(ex) return