def submit(data): collection = str(datetime.date.today().year) + "_" + str( datetime.date.today().isocalendar()[1]) for index, player in enumerate(data["own"]["code"]): exists = mongo.find_one(config.get("WEEKLY_DB"), collection, {"code": player}) if (not exists): mongo.insert_one( config.get("WEEKLY_DB"), collection, { "code": player, "username": data["own"]["name"][index], "ELO": 1200, "games": [] }) for index, player in enumerate(data["opponent"]["code"]): exists = mongo.find_one(config.get("WEEKLY_DB"), collection, {"code": player}) if (not exists): mongo.insert_one( config.get("WEEKLY_DB"), collection, { "code": player, "username": data["opponent"]["name"][index], "ELO": 1200, "games": [] }) own = list( mongo.find(config.get("WEEKLY_DB"), collection, {"code": { "$in": data["own"]["code"] }})) opponent = list( mongo.find(config.get("WEEKLY_DB"), collection, {"code": { "$in": data["opponent"]["code"] }})) own_elo = sum([user["ELO"] for user in own]) / len(own) opponent_elo = sum([user["ELO"] for user in opponent]) / len(opponent) own_elo_offset, opponent_elo_offset = _calculate_elo( own_elo, opponent_elo, int(data["own"]["points"]), int(data["opponent"]["points"])) for player in list(own): game = {"own": data["own"], "opponent": data["opponent"]} player["games"].append(game) player["ELO"] += own_elo_offset mongo.update_doc(config.get("WEEKLY_DB"), collection, {"code": player["code"]}, player) for player in list(opponent): game = {"own": data["opponent"], "opponent": data["own"]} player["games"].append(game) player["ELO"] += opponent_elo_offset mongo.update_doc(config.get("WEEKLY_DB"), collection, {"code": player["code"]}, player)
def _submit_dobles_oponentes1(bot, data, chat_id): data = json.loads(redis_get(data)) users = mongo.find(config.get("MAIN_DB"), config.get("PLAYERS_COLLECTION"), {"code": { "$nin": data["own"]["code"] }}) keyboard = [] for user in users: tmp = deepcopy(data) tmp["opponent"]["code"].append(user["code"]) tmp["opponent"]["name"].append(user["username"]) uid = redis_set(json.dumps(tmp)) keyboard.append([ InlineKeyboardButton(user["username"], callback_data="game_dobles2&" + uid) ]) keyboard.append( [InlineKeyboardButton("Cancelar", callback_data="cancelar")]) reply_markup = InlineKeyboardMarkup(keyboard) bot.send_message(chat_id=chat_id, text='Seleccioná primer oponente:', reply_markup=reply_markup)
def submit(bot, update): users = mongo.find(config.get("MAIN_DB"), config.get("PLAYERS_COLLECTION"), {"code": { "$ne": str(update.message.from_user.id) }}) keyboard = [] for user in users: data = { "own": { "code": [str(update.message.from_user.id)], "name": [str(update.message.from_user.username)] }, "opponent": { "code": [str(user["code"])], "name": [str(user["username"])] } } uid = redis_set(json.dumps(data)) keyboard.append([ InlineKeyboardButton(user["username"], callback_data="game_submit&" + uid) ]) keyboard.append( [InlineKeyboardButton("Cancelar", callback_data="cancelar")]) reply_markup = InlineKeyboardMarkup(keyboard) bot.send_message(chat_id=update.message.chat_id, text='Seleccioná oponente:', reply_markup=reply_markup)
def send_ranking(bot, chat_id, db, collection): players = mongo.find(db, collection, {}) html = "<!DOCTYPE html><html><head><style>table {font-family: arial, sans-serif;border-collapse: collapse;width: 500px;}td, th {border: 1px solid #dddddd;text-align: left;padding: 8px;}.header {background-color: #dddddd;}.nameColumn {width: 250px;}.pointColumn {width: 50px;}</style></head><body><h2>Ranking</h2><table><tr><td class='nameColumn header'>Nombre</td><td class='pointColumn header'>PJ</td><td class='pointColumn header'>PG</td><td class='pointColumn header'>%G</td><td class='pointColumn header'>DG</td><td class='pointColumn header'>Puntos</td></tr>" for player in players: average_goals, average_percent_games, games_played = _get_average_stats(player,percent=False) if int(games_played) == 0: percent = "-" else: percent = str(round(100*float(float(average_percent_games)/float(games_played)),1))+"%" html = html+"<tr><td class='nameColumn'>{NOMBRE}</td><td class='pointColumn'>{PARTJU}</td><td class='pointColumn'>{PARTGA}</td><td class='pointColumn'>{PERCENT}</td><td class='pointColumn'>{GOLES}</td><td class='pointColumn'>{PUNTOS}</td></tr>".format(NOMBRE=player["username"],PARTJU=games_played,PARTGA=average_percent_games,PERCENT=str(percent),GOLES=average_goals,PUNTOS=str(int(player["ELO"]))) html = html+"</table></body></html>" file_name = str(uuid.uuid4())+".png" path_wkthmltopdf = config.get("WKHTMLTOIMAGE_PATH") config_wk = imgkit.config(wkhtmltoimage=path_wkthmltopdf) options = { 'format': 'png', 'encoding': "UTF-8", 'crop-w': '515' } imgkit.from_string(html, file_name, options=options, config=config_wk) file = open(file_name,'rb') bot.send_photo(chat_id=chat_id, photo=file, timeout=60) file.close() os.remove(file_name)
def _submit_confirm(bot, data, chat_id): data = json.loads(redis_get(data)) own = list( mongo.find(config.get("MAIN_DB"), config.get("PLAYERS_COLLECTION"), {"code": { "$in": data["own"]["code"] }})) opponent = list( mongo.find(config.get("MAIN_DB"), config.get("PLAYERS_COLLECTION"), {"code": { "$in": data["opponent"]["code"] }})) own_elo = sum([user["ELO"] for user in own]) / len(own) opponent_elo = sum([user["ELO"] for user in opponent]) / len(opponent) own_elo_offset, opponent_elo_offset = _calculate_elo( own_elo, opponent_elo, int(data["own"]["points"]), int(data["opponent"]["points"])) for player in list(own): game = {"own": data["own"], "opponent": data["opponent"]} player["games"].append(game) player["ELO"] += own_elo_offset mongo.update_doc(config.get("MAIN_DB"), config.get("PLAYERS_COLLECTION"), {"code": player["code"]}, player) _send_elo_changes(bot, player, own_elo_offset, game) for player in list(opponent): game = {"own": data["opponent"], "opponent": data["own"]} player["games"].append(game) player["ELO"] += opponent_elo_offset mongo.update_doc(config.get("MAIN_DB"), config.get("PLAYERS_COLLECTION"), {"code": player["code"]}, player) _send_elo_changes(bot, player, opponent_elo_offset, game) weekly.submit(data) if (int(data["own"]["points"]) == 8 and int(data["opponent"]["points"]) == 0) or (int(data["own"]["points"]) == 0 and int(data["opponent"]["points"]) == 8): bot.sendDocument(chat_id=config.get("MAIN_GROUP"), document=open( "/var/sources/metegolBotTelegram/8a0.gif", "rb"), timeout=120) if (int(data["own"]["points"]) == 7 and int(data["opponent"]["points"]) == 0) or (int(data["own"]["points"]) == 0 and int(data["opponent"]["points"]) == 7): bot.sendDocument(chat_id=config.get("MAIN_GROUP"), document=open( "/var/sources/metegolBotTelegram/7a0.gif", "rb"), timeout=120) if (int(data["own"]["points"]) == 7 and int(data["opponent"]["points"]) == 1) or (int(data["own"]["points"]) == 1 and int(data["opponent"]["points"]) == 7): bot.sendDocument(chat_id=config.get("MAIN_GROUP"), document=open( "/var/sources/metegolBotTelegram/7a1.gif", "rb"), timeout=120) text_out = " - ".join(data["own"]["name"]) + ": " + str(data["own"]["points"]) + \ "\n" + " - ".join(data["opponent"]["name"]) + \ ": " + str(data["opponent"]["points"]) bot.send_message(chat_id=config.get("MAIN_GROUP"), text=text_out)