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 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 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 get_group_number(message): if not check_text(message, get_group_number): return if message.text == '/reg': reg_cmd(message) return s = message.text if not s.isdecimal(): logger.warning("Not a digit in <get_group_number> by {}".format(message.from_user.username)) bot.send_message(message.chat.id, config.warningGroupNumber) bot.register_next_step_handler(message, get_group_number) return a = int(s) if (a < 101 or a > 118) and a != 141 and a != 646: logger.warning("Wrong number in <get_group_number> by {}".format(message.from_user.username)) bot.send_message(message.chat.id, config.warningTooLarge) bot.register_next_step_handler(message, get_group_number) return (race, r) = config.get_race(s) user = User.create(tg_id=message.chat.id, name=s, username=message.from_user.username, role=Role.PLAYER) player = Player.create(tg_id=message.chat.id, name=s, username=message.from_user.username, role=Role.PLAYER, race=race, round=r) if player.race < 0: logger.critical("Wrong group name at @{} !".format(message.from_user.username)) bot.send_message(config.creatorID, "Wrong group name at @{} !".format(message.from_user.username)) # TODO: here will be a transition to quest (maybe) logger.info("Group number {} was registered. Race: {}".format(a, player.race)) bot.send_message(message.chat.id, config.successfulRegistration)
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 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 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 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 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 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 play(self): self.setup() self.active = True print("[+] Starting Game loop") pl = [Player(name="NewGuy1"), Player(name="AnotherPlayer1")] count = 0 while not self.isPuzzleSolved() or not self.isMaxGuesses(): player = self.nextPlayer() self.broadCastBoardAll() guess = player.recv() correct = self.guess(player, guess) if count < 2: self.add(pl[count]) count += 1 while correct and not self.isPuzzleSolved( ) and not self.isMaxGuesses(): self.broadCastBoardAll() guess = player.recv() correct = self.guess(player, guess) if not correct: break self.active = False if self.isPuzzleSolved(): self.broadCastBoardAll() #player.send(self.showBoard()) player.send("You Won!\n\n") for p in self.playersList: if p != player: p.send("You Lose\n") return self.active else: self.broadCastBoardAll() #player.send(self.showBoard()) player.send("You Lost!\n\n") return self.active
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)
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))
self.active = False if self.isPuzzleSolved(): self.broadCastBoardAll() #player.send(self.showBoard()) player.send("You Won!\n\n") for p in self.playersList: if p != player: p.send("You Lose\n") return self.active else: self.broadCastBoardAll() #player.send(self.showBoard()) player.send("You Lost!\n\n") return self.active if __name__ == "__main__": from users import Player hangman = Hangman(name="TestGame") hangman.difficulty = 2 playerList = [] for player in ["Tom", "Dick"]: p = Player(name=player) playerList.append(p) hangman.add(p) hangman.play() #hangman.playersList = playerList print("hangman playersList: ", hangman.playersList)
correct = self.guess(player,guess) if not correct: break if self.isPuzzleSolved(): self.broadCastBoard() player.send(str(player.name) +" YOU WON!\n\n") self.broadCastExclusive(player,"You Lost\n\n") self.active = False return self.active else: self.broadCastBoard() self.broadCastExclusive(None, "You Lost\n\n") self.active = False return self.active if __name__ == "__main__": from users import Player hangman = Hangman(name="TestGame") playerList = [] for player in ["Tom", "Dick","Harry"]: p = Player("conn", "addr", name=player) playerList.append(p) hangman.add(p) print("hangman playersList: ", hangman.playersList) hangman.play()
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)