Beispiel #1
0
def release_cmd(message):
    t = timer.get_time()
    l = message.text.split(' ', maxsplit=1)
    if len(l) < 2 or not l[1].isdecimal():
        bot.send_message(message.chat.id, 'Wrong format!\n/release <num>')
        return
    n = int(l[1])
    try:
        kp = User.get(User.tg_id == message.chat.id)
    except DoesNotExist:
        logger.error("Can't find @{} - {} in database".format(message.from_user.username, message.chat.id))
        bot.send_message(message.chat.id, 'Что-то пошло не так. Вас нет в базе.'
                                          ' Напишите номер группы и текущее время @{}'.format(config.creatorUsername))
        return
    try:
        player = Player.get(Player.name == kp.currentTeamName)
    except DoesNotExist:
        logger.error("Can't find player")
        bot.send_message(message.chat.id, 'Что-то пошло не так. Напишите номер группы и текущее время @{}'.format(
            config.creatorUsername))
        return
    player.energy += n
    player.time += t
    player.currentRound += 1
    player.save()
    kp.currentTeamName = 'waiting'
    # kp.currentTeamName = set_next_team(kp, player.currentRound)
    kp.save()
    bot.send_message(kp.tg_id, "Успешно! Ждите конца раунда\n/time покажет вам время с момента начала раунда")
    if player.currentRound <= 9:
        bot.send_message(player.tg_id, config.nextKpName.format(
            config.kp_rus.get(config.kp[player.race - 1][player.currentRound],
                              default=config.kp[player.race - 1][player.currentRound])))
    else:
        bot.send_message(player.tg_id, 'Поздравляю вас! Вы прошли все испытания! Дождитесь конца раунда')
Beispiel #2
0
def pay2(message):
    if not check_text(message, pay2):
        return
    if not message.text.isdecimal():
        bot.send_message(message.chat.id, config.warningWrongDataFormat)
        bot.register_next_step_handler(message, pay2)
        return
    amount = int(message.text)
    if amount <= 0:
        bot.send_message(message.chat.id, config.warningWrongAmount)
        bot.register_next_step_handler(message, pay2)
        return
    try:
        payer = Player.get(Player.tg_id == message.chat.id)
    except DoesNotExist:
        logger.critical("Can't find user - {} in database!".format(message.from_user.username))
        bot.send_message(message.chat.id, 'Критическая ошибка! Обратитесь к  организаторам или напишите @{}'.format(
            config.creatorUsername))
        return
    if payer.energy < amount:
        bot.send_message(message.chat.id, config.warningNotEnoughEnergy)
        return
    logger.info("Team {} has payed {} energy".format(payer.name, amount))
    payer.energy -= amount
    payer.save()
    bot.send_message(payer.tg_id, 'Успешно!')
Beispiel #3
0
def add_cmd(message):
    l = message.text.split(' ', maxsplit=1)
    if len(l) < 2 or not l[1].isdecimal():
        bot.send_message(message.chat.id, 'Wrong format!\n/add <num>')
        return
    try:
        kp = User.get(User.tg_id == message.chat.id)
    except DoesNotExist:
        bot.send_message(message.chat.id, 'Не могу найти вас в базе пользователей')
        logger.error("Can't find @{} - {} in database".format(message.from_user.username, message.chat.id))
        return
    if kp.role != Role.KP:
        bot.send_message(kp.tg_id, 'Вы не КПшник!')
        logger.info("Unauthorized access to <add> cmd by @{}".format(kp.username))
        return
    try:
        player = Player.get(Player.name == kp.currentTeamName)
    except DoesNotExist:
        bot.send_message(kp.tg_id, 'Что-то пошло не так! Напишите @{}'.format(config.creatorUsername))
        logger.critical('No active team for @{} - {}'.format(kp.username, kp.tg_id))
        set_next_team(kp, currentRound)
        return
    player.energy += int(l[1])
    player.save()
    kp.currentTeamName = set_next_team(kp, currentRound)
    kp.save()
    bot.send_message(kp.tg_id, 'Следующая группа - {}'.format(kp.currentTeamName))
Beispiel #4
0
def transfer3(message):
    if not check_text(message, transfer3):
        return
    if not message.text.isdecimal():
        bot.send_message(message.chat.id, config.warningWrongDataFormat)
        bot.register_next_step_handler(message, transfer3)
        return
    amount = int(message.text)
    if amount <= 0:
        bot.send_message(message.chat.id, config.warningWrongAmount)
        bot.register_next_step_handler(message, transfer3)
        return
    try:
        payer = Player.get(Player.tg_id == message.chat.id)
    except DoesNotExist:
        logger.critical("Can't find user - {} in database!".format(message.from_user.username))
        bot.send_message(message.chat.id, 'Критическая ошибка! Обратитесь к  организаторам или напишите @{}'.format(
            config.creatorUsername
        ))
        return
    if payer.energy < amount:
        bot.send_message(message.chat.id, config.warningNotEnoughEnergy)
        return
    recipient = transfers.get(message.from_user.username)
    if recipient is None:
        logger.warning("Couldn't found a team! Asked by {}".format(message.from_user.username))
        bot.send_message(message.chat.id, config.warningSmthWentWrongTransfer)
        return
    logger.info("Team {} has transferred {} energy to {} team".format(payer.name, amount, recipient.name))
    payer.energy -= amount
    recipient.energy += amount
    payer.save()
    recipient.save()
    bot.send_message(payer.tg_id, 'Вы передали свою энергию')
    bot.send_message(recipient.tg_id, 'Команда {} передала вам энергию ({})'.format(payer.name, amount))
Beispiel #5
0
def balance_cmd(message):
    try:
        player = Player.get(Player.tg_id == message.chat.id)
    except DoesNotExist:
        bot.send_message(message.chat.id, 'Не могу найти вас в списках игроков. Напишите @{}'.format(
            config.creatorUsername))
        logger.error("Can't find user - {} in players database!".format(message.from_user.username))
        return
    bot.send_message(player.tg_id, "У вас сейчас {} энергии".format(player.energy))
Beispiel #6
0
def get_artifact(message):
    if not check_text(message, get_artifact):
        return
    code = message.text.upper()
    try:
        player = Player.get(Player.tg_id == message.chat.id)
    except DoesNotExist:
        bot.send_message(message.chat.id, 'Не могу найти вас в списках игроков. Напишите @yury_zh')
        logger.error("Can't find user - {} in players database!".format(message.from_user.username))
        return
    if config.secondaryArtifacts.count(code):
        # TODO: Delete artifact
        config.secondaryArtifacts.remove(code)  # Deleting artifact
        config.dump()
        bot.send_message(player.tg_id, config.artifactSecondary)
        player.energy += config.secondaryEnergyAmount
        player.save()
        logger.info("Secondary artifact was registered by {}".format(player.name))
        return
    exists = False
    artifact_race = 0
    artifact_pos = 0
    while artifact_race < 10:
        if config.artifacts[artifact_race].count(code) > 0:
            exists = True
            artifact_pos = config.artifacts[artifact_race].index(code)
            break
        artifact_race += 1
    if not exists:
        bot.send_message(message.chat.id, config.artifactWrongCode)
        return
    artifact_race += 1  # 0-numeration -> 1-numeration
    if player.race != artifact_race:
        bot.send_message(message.chat.id, config.artifactWrongRace)
        logger.info("Team {} (race: {}) has found artifact of race {}".format(player.name, player.race, artifact_race))
        return
    if player.currentPurpose < artifact_pos:
        bot.send_message(player.tg_id, config.artifactTooEarly)
        logger.info("Team {} (Current purpose: {}) has fond purpose {}".format(
            player.name, player.currentPurpose, artifact_pos
        ))
    elif player.currentPurpose > artifact_pos:
        bot.send_message(player.tg_id, config.artifactUsed)
    else:
        player.currentPurpose += 1
        if player.currentPurpose >= len(config.purposes[player.race - 1]):
            player.finish = True
            if currentRound >= 10:
                player.time += timer.get_time()
                bot.send_message(player.tg_id, config.endings[player.race - 1])
            else:
                logger.warning("Team {} has done all purposes before 10th round!!!".format(player.name))
                bot.send_message(player.tg_id, 'Вы завершили все свои цели до окончания квеста!\n'
                                               'Напишите @{}'.format(config.creatorUsername))
        player.save()
        bot.send_message(player.tg_id, config.purposes[player.race - 1][player.currentPurpose - 1])
        logger.info("Team {} has reached purpose {}".format(player.name, player.currentPurpose - 1))
Beispiel #7
0
def get_user_cmd(message):
    l = message.text.split(' ', maxsplit=1)
    if len(l) < 2:
        bot.send_message(message.chat.id, 'Wrong format!\n/get_user group_number')
        return
    name = l[1]
    try:
        player = Player.get(Player.name == name)
    except DoesNotExist:
        bot.send_message(message.chat.id, 'No such user!')
        return
    bot.send_message(message.chat.id, "Group number: {}\nUsername: @{}\nRace: {}\nType: {}\nEnergy: {}\n"
                                      "Current time: {} min {} sec\nCurrent purpose: {}\n"
                                      "Current round: {}\nFinished: {}".format(
        player.name, player.username, player.race, player.round, player.energy, int(player.time // 60),
        int(player.time % 60), player.currentPurpose, player.currentRound, player.finish
    ))
Beispiel #8
0
def transfer2(message):
    if not check_text(message, transfer2):
        return

    if not message.text.isdecimal():
        bot.send_message(message.chat.id, config.warningWrongDataFormat)
        bot.register_next_step_handler(message, transfer2)
        return

    try:
        recipient = Player.get(Player.name == message.text)
    except DoesNotExist:
        bot.send_message(message.chat.id, config.warningNoSuchGroup, reply_markup=types.ReplyKeyboardRemove())
        return
    global transfers
    transfers[message.from_user.username] = recipient
    bot.send_message(message.chat.id, config.chooseTransferAmount, reply_markup=types.ReplyKeyboardRemove())
    bot.register_next_step_handler(message, transfer3)