def ending(): # TODO: Ending for player in Player.select().where(not Player.finish): bot.send_message(player.tg_id, config.game_over) player.time += timer.get_duration() player.save() msg = 'Final results:\n' for player in Player.select().order_by(Player.time.desc()): t = player.time msg += '{}: {} min {} sec\n'.format(player.name, int(t // 60), t % 60) bot.send_message(config.creatorID, msg) everyone(config.globalEnd)
def next_round(): global currentRound for player in Player.select().where(Player.currentRound == currentRound): player.time += timer.get_duration() # Maximal time player.currentRound += 1 bot.send_message(player.tg_id, config.endingOfRound) 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]))) player.save() try: kp = User.get(User.role == Role.KP and User.challenge.round == player.round and User.challenge.name == config.kp[player.race - 1][player.currentRound]) # kp = User.get(User.currentTeamName == player.name) except DoesNotExist: logger.critical("Can't find active kp for {} - @{}".format(player.name, player.username)) bot.send_message(config.creatorID, "Can't find active kp for {} - @{}".format(player.name, player.username)) kp = None if kp is not None: bot.send_message(kp.tg_id, 'Раунд закончился, пожалуйста введите комманду /add <num> чтобы добавить ' 'энергию команде. Если энергии не полагается введите /add 0') if currentRound < 9: for user_kp in User.select().where(User.role == Role.KP and User.currentTeamName == 'waiting'): user_kp.currentTeamName = set_next_team(user_kp, currentRound + 1) user_kp.save() currentRound += 1 logger.info("Round {} has started".format(currentRound)) if currentRound < 10: timer.start(next_round) else: everyone(config.startChanging) timer.set_duration(60*60) timer.start(ending)
def status_cmd(message): msg = 'Status:\n' for player in Player.select().order_by(Player.name): t = player.time msg += '{}: {} min {} sec\n'.format(player.name, int(t // 60), t % 60) bot.send_message(message.chat.id, msg) logger.info("<status> called by {}".format(message.from_user.username))
def set_next_team(kp, round): if round < 0 or round > 9: logger.error("Wrong round {} in <set_next_team>".format(round)) return '-2' name = kp.challenge.name r = kp.challenge.round for player in Player.select().where(Player.round == r): if config.kp[player.race - 1][round] == name: return player.name logger.critical("Can't find next group for {} {} - @{}".format(name, r, kp.username)) bot.send_message(config.creatorID, "Can't find next group for {} {} - @{}".format( name, r, kp.username )) return '-1'
def begin_cmd(message): # TODO: Beginning of the quest config.dump() autosave() global currentRound currentRound = 0 timer.set_duration(default_duration) for player in Player.select(): player.currentRound = 0 player.save() bot.send_message(player.tg_id, config.nextKpName.format( config.kp_rus.get(config.kp[player.race - 1][0], default=config.kp[player.race - 1][0]))) for kp in User.select().where(User.role == Role.KP): kp.currentTeamName = set_next_team(kp, 0) kp.save() bot.send_message(kp.tg_id, 'Текущая группа - {}'.format(kp.currentTeamName)) timer.start(next_round) everyone('Приключение началось! Удачи!') logger.info('Quest has been started by @{}'.format(message.from_user.username))
def transfer_cmd(message): markup = types.ReplyKeyboardMarkup(row_width=1) for player in Player.select().where(Player.tg_id != message.chat.id).order_by(Player.name): markup.add(types.KeyboardButton(player.name)) bot.send_message(message.chat.id, config.chooseGroupForTransfer, reply_markup=markup) bot.register_next_step_handler(message, transfer2)