Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)