Ejemplo n.º 1
0
def delay(context: CallbackContext):
    group_helpers.yes_game(*context.job.context)
Ejemplo n.º 2
0
def timer(context):
    data = context.job.context
    chat_id = context.job.name
    lang = data["lang"]
    dp = data["dp"]
    # repeated join/leave timer
    if not len(data["players"]) == MAX_PLAYERS:
        known_players = []
        joined_player = []
        for player in data["players"]:
            user_id = player["user_id"]
            known_players.append(user_id)
            if user_id in data["known_players"]:
                data["known_players"].remove(user_id)
            # player joined
            else:
                joined_player.append(player)
        # if players are left in known_players data, they left
        left_player = []
        if data["known_players"]:
            for user_id in data["known_players"]:
                left_player.append({
                    "user_id": user_id,
                    "first_name": data["left_players"][user_id]
                })
                data["left_players"].pop(user_id)
        # if both lists are empty, nothing happened, so the timer runs out
        if not joined_player and not left_player:
            pass
        # yes, this replace is stupid. stupider then copying the function though. F**k you.
        else:
            if joined_player:
                text = get_string(lang, "player_joins_text")\
                    .format(group_helpers.players_mentions(joined_player).replace("\n", ", "))
                if left_player:
                    text += "\n\n" + get_string(lang, "player_leaves_text")\
                        .format(group_helpers.players_mentions(left_player).replace("\n", ", "))
            # we can do that, cause otherwise we wouldn't be here
            else:
                text = get_string(lang, "player_leaves_text")\
                    .format(group_helpers.players_mentions(left_player).replace("\n", ", "))
            if context.job.interval == START_TIME:
                long = True
            else:
                long = False
            if len(data["players"]) >= 3:
                text += get_string(lang, "player_action_text").format(
                    get_string(lang, "start"))
                if long:
                    context.job.interval = TIME
            else:
                text += get_string(lang, "player_action_text").format(
                    get_string(lang, "fail")).replace("30", "60")
                if not long:
                    context.job.interval = START_TIME
            context.bot.send_message(chat_id, text, parse_mode=ParseMode.HTML)
            data["known_players"] = known_players
            return
    # game either ends/starts
    dp.chat_data[chat_id].clear()
    context.job.schedule_removal()
    if not len(data["players"]) == MAX_PLAYERS:
        context.bot.edit_message_reply_markup(chat_id,
                                              data["message"],
                                              reply_markup=None)
    if len(data["players"]) >= 3:
        player_ids = [all_player["user_id"] for all_player in data["players"]]
        if database.get_new_player(player_ids):
            text = get_string(lang, "rules_prepend") + get_string(
                lang, "rules")
            context.bot.send_message(chat_id, text, parse_mode=ParseMode.HTML)
            dp.chat_data[chat_id]["players"] = True
            context.job_queue.run_once(delay, 31, [context, data, chat_id, dp])
        else:
            group_helpers.yes_game(context, data, chat_id, dp)
        database.remove_group_nextgame(chat_id, player_ids)
    else:
        text = get_string(lang, "game_failed")
        context.bot.send_message(chat_id,
                                 text,
                                 reply_to_message_id=data["message"])