Esempio n. 1
0
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))
Esempio n. 2
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))
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
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))
Esempio n. 6
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, 'Успешно!')
Esempio n. 7
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, 'Поздравляю вас! Вы прошли все испытания! Дождитесь конца раунда')
Esempio n. 8
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))
Esempio n. 9
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))
Esempio n. 10
0
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'
Esempio n. 11
0
    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
Esempio n. 12
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
    ))
Esempio n. 13
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)
Esempio n. 14
0
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))
Esempio n. 15
0
        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)
Esempio n. 16
0
                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()


Esempio n. 17
0
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)