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, 'Поздравляю вас! Вы прошли все испытания! Дождитесь конца раунда')
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, 'Успешно!')
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))
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))
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))
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))
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 ))
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)