コード例 #1
0
 def balance_changes(self):
     if self.bets:
         for bet in self.bets:
             if (bet['bet'] == 'r' or bet['bet'] == 'b') and self.won(
                     bet['bet']):
                 UserDB.balance_changer(user_id=bet['user_id'],
                                        value=bet['value'] * 2)
             elif bet['bet'] == 'z' and self.won(bet['bet']):
                 UserDB.balance_changer(user_id=bet['user_id'],
                                        value=bet['value'] * 14)
         balances_changes = []
         k = 1
         for user in self.bets:
             changes = "+" if self.won(user['bet']) else "-"
             changes += str(user['value']) if self.number != 0 else str(
                 user['value'] * 14)
             balances_changes.append(
                 "{counter}. @id{user_id} ({name}): {changes} [{bet}]".
                 format(counter=k,
                        user_id=user['user_id'],
                        changes=changes,
                        name=StaticMethods.get_username(user['user_id']),
                        bet=self.user_bet_to_text(user['bet'])))
             k += 1
         LogWork.game_log('\n'.join(balances_changes), self.game_id)
         return balances_changes
コード例 #2
0
    def start(peer_id):
        vk = BotAPI()
        for game in StaticData.current_games:
            if game['peer_id'] == peer_id:
                vk.message_send(peer_id=peer_id, message="Игра уже началась!")
                return

        vk.message_send(
            message=
            "Игра началась.\nВ течении 1 минуты вы можете заходить в игру.\nПример:(/rp)",
            peer_id=peer_id)

        game_id = GameDB.add_game('russian_roulette', peer_id)
        game = RussianRoulette(peer_id, game_id)

        StaticData.current_games.append({
            'game_id': game_id,
            'game': 'russian_roulette',
            'peer_id': peer_id,
            'class': game,
            'interface': RussianRouletteInterface
        })

        LogWork.log("Game #{game_id} has been started at {time}".format(
            game_id=game_id, time=StaticMethods.get_time().strftime("%D %T")))

        RussianRouletteInterface.end_game(peer_id, game.game())
コード例 #3
0
 def get(user_id, peer_id):
     vk = BotAPI()
     vk.message_send(
         message="@id{user_id} ({username}), ваш баланс: {balance}$".format(
             username=StaticMethods.get_username(user_id),
             balance=UserDB.getter(user_id)['balance'], user_id=user_id),
         peer_id=peer_id)
コード例 #4
0
 def init(peer_id, user_id):
     vk = BotAPI()
     vk.message_send(
         message=
         "@id{user_id} ({username}), нет запущенных игр.\nНапишите /help для справки."
         .format(username=StaticMethods.get_username(user_id),
                 user_id=user_id),
         peer_id=peer_id)
コード例 #5
0
 def change_time(user_id, time=None):
     data = UserDB.initialize()
     conn, cursor = data[0], data[1]
     time = StaticMethods.get_time().strftime('%D %T') if not time else time
     cursor.execute(
         f'UPDATE userdata SET last_balance_update="{time}" WHERE user_id={user_id}'
     )
     conn.commit()
コード例 #6
0
 def add_user(user_id):
     if UserDB.user_exists(user_id):
         return
     data = UserDB.initialize()
     conn, cursor = data[0], data[1]
     cursor.execute(
         'INSERT INTO userdata (user_id, last_balance_update) VALUES ({}, "{}")'
         .format(user_id,
                 StaticMethods.get_time().strftime('%D %T')))
     conn.commit()
コード例 #7
0
    def init(peer_id, user_id):
        vk = BotAPI()
        vk.message_send(message="""@id{user_id} ({username}),
Чтобы начать игру Russian Roulette - наберите /rr.
Принять участие - /rp

• 1 патрон в 6 ячейках револьвера.
• Каждый игрок идет вабанк.
• В случае проигрыша - деньги проигравшего деляться на всех поровну.
""".format(user_id=user_id, username=StaticMethods.get_username(user_id)),
                        peer_id=peer_id)
コード例 #8
0
    def balance_changes(self):
        if self.members:
            killed = None
            for user in self.members:
                if user['number'] == self.number:
                    killed = user

            balances_changes = []
            k = 1

            if len(self.members) == 1:
                for user in self.members:
                    if user['number'] != self.number:
                        UserDB.balance_changer(user_id=user['user_id'],
                                               static_value=user['value'] + killed['value'])
                        changes = f"+ {killed['value']}"
                    else:
                        changes = f"- {killed['value']}"
                    balances_changes.append(
                        "{counter}. @id{user_id} ({name}): {changes}".format(counter=k, user_id=user['user_id'],
                                                                             changes=changes,
                                                                             name=StaticMethods.get_username(
                                                                                 user['user_id']),
                                                                             ))
            else:
                for user in self.members:
                    if user['number'] != self.number:
                        UserDB.balance_changer(user_id=user['user_id'],
                                               static_value=user['value'] + killed['value'] // len(self.members) - 1)
                        changes = f"+ {killed['value'] // len(self.members) - 1}"
                    else:
                        changes = f"- {killed['value']}"
                    balances_changes.append(
                        "{counter}. @id{user_id} ({name}): {changes}".format(counter=k, user_id=user['user_id'],
                                                                             changes=changes,
                                                                             name=StaticMethods.get_username(
                                                                                 user['user_id']),
                                                                             ))
                    k += 1
            LogWork.game_log('\n'.join(balances_changes), self.game_id)
            return balances_changes
コード例 #9
0
    def init(peer_id, user_id):
        vk = BotAPI()
        data = UserDB.get_top_balances()
        current_user = UserDB.get_user_by_balance(user_id)
        if data:
            top_balances = []
            for balance in data:
                top_balances.append({
                    'user_id': balance[0],
                    'balance': str(balance[1]) + '$'
                })

            out = "👑"
            k = 1
            done = False
            for user in top_balances:
                if k == 6 and not done:
                    out += "...\n"
                    out += "{counter}. @id{user_id} ({username}) - {balance}$\n".format(
                        counter=current_user[0],
                        user_id=user_id,
                        username=StaticMethods.get_username(user_id),
                        balance=current_user[1])
                    break
                elif k == 6:
                    break
                if user['user_id'] == user_id:
                    done = True

                out += "{counter}. @id{user_id} ({username}) - {balance}\n".format(
                    counter=k,
                    user_id=user['user_id'],
                    username=StaticMethods.get_username(user['user_id']),
                    balance=user['balance'])
                k += 1
            try:
                vk.message_send(message=f'Глобальный топ:\n{out}',
                                peer_id=peer_id)
            except:
                pass
コード例 #10
0
    def add_member(peer_id, user_id):
        vk = BotAPI()

        LogWork.log(f'{user_id} trying to adding into russian_roulette')

        if UserDB.getter(user_id)['balance'] == 0:
            vk.message_send(
                peer_id=peer_id,
                message="@id{user_id} ({name}), нечего ставить.".format(
                    user_id=user_id, name=StaticMethods.get_username(user_id)))
            return

        for game in StaticData.current_games:
            if game['peer_id'] == peer_id:
                for user in game['class'].members:
                    if user['user_id'] == user_id:
                        vk.message_send(
                            peer_id=peer_id,
                            message="@id{user_id} ({name}), Вы уже в игре!".
                            format(user_id=user_id,
                                   name=StaticMethods.get_username(user_id)))
                        return

        for game in StaticData.current_games:
            if game['peer_id'] == peer_id:
                if game['class'].add_member(user_id=user_id):
                    vk.message_send(
                        message="@id{user_id} ({name}), Вы в ИГРЕ!".format(
                            user_id=user_id,
                            name=StaticMethods.get_username(user_id)),
                        peer_id=peer_id)
                else:
                    vk.message_send(
                        message=
                        "@id{user_id} ({name}), увы.\nМест в игре не осталось."
                        .format(user_id=user_id,
                                name=StaticMethods.get_username(user_id)),
                        peer_id=peer_id)
                    return
コード例 #11
0
ファイル: ResetInterface.py プロジェクト: icYFTL/GameSpaceBot
    def init(user_id, peer_id):
        vk = BotAPI()
        user = UserDB.getter(user_id)

        current_time = strptime(StaticMethods.get_time().strftime('%D %T'),
                                '%m/%d/%y %H:%M:%S')
        last_time = strptime(user['last_balance_update'], '%m/%d/%y %H:%M:%S')

        current_time = datetime.fromtimestamp(mktime(current_time))
        last_time = datetime.fromtimestamp(mktime(last_time))

        delta = str(last_time - current_time).split(',')[1].strip()

        if (current_time - last_time).days < 1:
            vk.message_send(
                message=
                "@id{user_id} ({username}), до ресета нужно подождать еще {time}"
                .format(user_id=user_id,
                        time=delta,
                        username=StaticMethods.get_username(user_id)),
                peer_id=peer_id)
        elif user['balance'] >= 1000:
            vk.message_send(
                message=
                "@id{user_id} ({username}), в текущий момент у Вас на балансе {balance}. Делать ресет баланса бесполезно."
                .format(user_id=user_id,
                        balance=user['balance'],
                        username=StaticMethods.get_username(user_id)),
                peer_id=peer_id)
        else:
            UserDB.balance_changer(user_id=user_id, static_value=1000)
            vk.message_send(
                message=
                "@id{user_id} ({username}), баланс успешно сброшен до 1000$.".
                format(user_id=user_id,
                       username=StaticMethods.get_username(user_id)),
                peer_id=peer_id)
            UserDB.change_time(user_id=user_id)
コード例 #12
0
    def init(peer_id, user_id):
        vk = BotAPI()
        vk.message_send(
            message="""@id{user_id} ({username}),
Чтобы начать игру double - наберите /double.
Сделать ставку - /bet (количество игровой валюты) (z/r/b)

(z - Zero - Ноль - Зеленые)
(r - Red - 1:7 - Красные)
(b - Black - 8:14 - Черные)

Пример: /bet 100 z
""".format(user_id=user_id, username=StaticMethods.get_username(user_id)),
            peer_id=peer_id)
コード例 #13
0
    def init(peer_id, user_id):
        vk = BotAPI()
        vk.message_send(
            message="""@id{user_id} ({username}),
GameSpaceBot умеет играть в:
• Double (help - /doubleh)
• Russian Roulette (help - /rrh)

По умолчанию - у всех новых игроков по 1000$.

Раз в сутки можно сбрасывать свой игровой баланс командой /reset до 1000$.
Узнать глобальный топ игроков можно командой /top.
""".format(user_id=user_id, username=StaticMethods.get_username(user_id)),
            peer_id=peer_id)
コード例 #14
0
    def end_game(peer_id, status):
        vk = BotAPI()

        current_game = GameInterface.get_game(peer_id)
        current_game['class'].game()

        GameDB.status_changer(current_game['game_id'], "post game")
        LogWork.log(
            "Post game for Game #{game_id} has been initiated at {time}".
            format(game_id=current_game['game_id'],
                   time=StaticMethods.get_time().strftime('%D %T')))
        killed = None
        for user in current_game['class'].members:
            if user['number'] == status:
                killed = user
                break

        if killed == None:
            end_message = f"""Игра #{current_game[
                'game_id']} завершена!\nНикто не был убит!\nЗагаданное число: {status}."""
            vk.message_send(message=end_message, peer_id=peer_id)
            LogWork.game_log(end_message, current_game['game_id'])
            RussianRouletteInterface.balance_recover(current_game)

        else:
            end_message = f"""Игра #{current_game['game_id']} завершена!\n@id{killed[
                'user_id']} ({StaticMethods.get_username(
                killed['user_id'])}) был убит!\nЗагаданное число: {status}."""

            vk.message_send(message=end_message, peer_id=peer_id)
            LogWork.game_log(end_message, current_game['game_id'])
            time.sleep(1)

            balances_changes = current_game['class'].balance_changes()

            if balances_changes:
                vk.message_send(message="Изменения балансов:\n" +
                                '\n'.join(balances_changes),
                                peer_id=peer_id)

        for game in range(len(StaticData.current_games)):
            if StaticData.current_games[game]['peer_id'] == peer_id:
                del (StaticData.current_games[game])

        GameDB.status_changer(current_game['game_id'], "ended")