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
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())
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)
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)
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()
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()
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)
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
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
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
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)
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)
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)
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")