async def repbrnch(ans: Message): cc.execute(f"SELECT * FROM users WHERE vkid = {ans.from_id}") blnc = cc.fetchall()[0][2] if ans.text.lower() == 'Назад'\ or ans.text.lower() == 'назад': main_listb = [[{'text': f'Баланс: {blnc}', 'color': 'secondary'}], [{'text': '⬇', 'color': 'primary'}, {'text': 'Играть▶', 'color': 'negative'}, {'text': '⬆', 'color': 'primary'}], [{'text': '🗄Резерв🗄', 'color': 'negative'}, {'text': '🆘Репорт🆘', 'color': 'negative'}]] main_kb = keyboard_gen(main_listb, one_time=False) await ans('...', keyboard=main_kb) return ExitBranch() else: main_listb = [[{'text': f'Баланс: {blnc}', 'color': 'secondary'}], [{'text': '⬇', 'color': 'primary'}, {'text': 'Играть▶', 'color': 'negative'}, {'text': '⬆', 'color': 'primary'}], [{'text': '🗄Резерв🗄', 'color': 'negative'}, {'text': '🆘Репорт🆘', 'color': 'negative'}]] main_kb = keyboard_gen(main_listb, one_time=False) await ans('Репорт отправлен!\nОжидайте ответа от саппартов', keyboard=main_kb) user = await bot.api.users.get(user_ids=ans.from_id) user_n = user[0].first_name user_name = f'@id{ans.from_id} ({user_n})' await bot.api.messages.send(peer_id=2000000001, random_id=0, message=f'🆘Report🆘\nОт {user_name}\nID VK: {ans.from_id}\nТекст репорта:\n{ans.text.lower()}' ) return ExitBranch()
async def branchPayOut(ans: Message, balance, number): if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() if ans.text.lower() == 'профиль': await bot.branch.exit(ans.peer_id) await profile(ans) return ExitBranch() if ans.text.isdigit(): if int(ans.text) > 10: if balance >= 10: if int(ans.text) + (int(ans.text) * 0.02) <= balance: res = await qiwi.moneyTransfer( int(ans.text), f'+{number}', 'Перевод средств с баланса профиля' ' на счет QIWI') try: if res['transaction']['state']['code'] == 'Accepted': await ans( 'Средства с баланса успешно переведены на твой QIWI кошелек!\n', keyboard=await create_keyboard('to_menu')) else: await ans('Средства не переведены. \nУвы..', keyboard=await create_keyboard('to_menu')) except KeyError: await bot.api.messages.send( message= f'У [id{ans.from_id}|пользователя] случилась проблемка.\n' f'Вот ответ сервера:\n{res}', user_ids=config.admins, keyboard=await create_keyboard('to_menu'), random_id=getRandomId()) await ans( 'Что-то пошло не так.\n' 'Попробуй повторить тоже самое через некоторое время, либо свяжись с администратором.', keyboard=await create_keyboard('to_menu')) else: await ans( 'Почему-то ты ввел значение отличающееся от баланса.\n' 'Введи, пожалуйста, цифру, которая меньше, либо равна твоему балансу.', keyboard=await create_keyboard('edit')) else: await ans( 'Твой баланс меньше 10 руб.\n' 'Так что сори. Как нибудь в другой раз(На самом деле тогда, когда у тебя баланс будет больше' ' 10 руб.)', keyboard=await create_keyboard('edit')) else: await ans('Ты ввел число меньше 10.\n' 'Введи число больше 10.', keyboard=await create_keyboard('edit')) else: await ans( f'Введи, пожалуйста, целое число, а не «{ans.text}».\n' f'Спасибо за понимание.', keyboard=await create_keyboard('edit'))
async def branchEditNickname(ans: Message): if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch if ans.text.lower() == 'профиль': await bot.branch.exit(ans.peer_id) await profile(ans) return ExitBranch() await editProfile(ans.from_id, ans.text, 'nickname') await ans( 'Ваш никнейм успешно сменен!\nТеперь можешь обратно вернуться в свой профиль.', keyboard=await create_keyboard('edit')) await bot.branch.exit(ans.peer_id) return ExitBranch()
async def branchPayBalance1(ans: Message): if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() if ans.text.isdigit() and int(ans.text) >= 10: await ans( f'Ты хочешь пополнить свой баланс на {ans.text} руб?\n' f'Если ты передумал, то введи число заново.', keyboard=keyboard_gen([[{ 'text': 'Меню', 'color': 'negative' }, { 'text': 'Далее', 'color': 'positive' }]], inline=True)) await bot.branch.exit(ans.peer_id) await bot.branch.add(ans.peer_id, 'payBalance', amount=int(ans.text)) else: await ans( f'Неверный формат ввода данных.\n' f'Вот тебе совет:\n' f' •Ты должен ввести число\n' f' •Число должно быть целым и без всяких знаков\n' f' •Число должно быть больше 10\n' f'Надеюсь, что ты сейчас введешь правильное число.', keyboard=await create_keyboard('to_menu'))
async def branchUsersInfo(ans: Message): if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() usersLinks = ans.text.replace(',', ' ').replace('https://vk.com/', '').split() try: users = await bot.api.users.get(', '.join(usersLinks)) for customer in users: balance, nickname, buy_ticket, qiwi_number, wins = await get_profile( customer.id) await ans( f'Имя и фамилия: [id{customer.id}|{customer.first_name} {customer.last_name}]\n' f'Баланс: {balance} руб\n' f'Никнейм: {nickname}\n' f'Куплено тикетов: {buy_ticket}\n' f'Номер QIWI: {qiwi_number}\n' f'Кол-во побед: {wins}') await ans(f'На этом все, Одмен.', keyboard=await create_keyboard('to_menu')) except VKError: await ans('Ты указал невалидные ссылки, мусье.\n' 'Повтори ввод.', keyboard=await create_keyboard('to_menu'))
async def branchMailing(ans: Message): if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() allUsers = await getAllUsers() splitUsers = lambda user_ids, size: [ user_ids[i:i + size] for i in range(0, len(user_ids), size) ] try: try: for users in splitUsers(allUsers, 55): await bot.api.messages.send(message=f'--Рассылка--\n' f'{ans.text}', user_ids=users, random_id=getRandomId(), keyboard=await create_keyboard('to_menu')) await ans('Рассылка не прошла..', keyboard=await create_keyboard('to_menu')) except ValidationError: await ans( 'Случилась хрень с random_id, но ничего, рассылка прошла.', keyboard=await create_keyboard('to_menu')) except VKError: await ans('Рассылка не прошла..', keyboard=await create_keyboard('to_menu'))
async def branchEditNumber(ans: Message): if ans.text.isdigit() and len(ans.text) == 11 and ans.text.startswith('7'): await editProfile(ans.from_id, ans.text, 'qiwi_number') await ans( 'Номер успешно привязан!\nТеперь можешь обратно вернуться в свой профиль.', keyboard=await create_keyboard('edit')) await bot.branch.exit(ans.peer_id) return ExitBranch() else: await ans( 'Номер невалидный!\nНомер должен:\n•Содержать только цифры и начинаться на 7(без +)\n•Длина 11 цифр.', keyboard=await create_keyboard('edit')) if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() if ans.text.lower() == 'профиль': await bot.branch.exit(ans.peer_id) await profile(ans) return ExitBranch()
async def branchAddingRaffle(ans: Message): if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() priceTicket = ans.text.split() if len(priceTicket) == 2 and all( [price.isdigit() for price in priceTicket]): price = float(priceTicket[0]) / float(priceTicket[1]) if float(price) == int( float(price)): # Проверяет, является ли число целым conn = await aiosqlite.connect('Database/database.db') cursor = await conn.cursor() await cursor.executescript( f'INSERT INTO Raffles (prize, count_tickets)' f' VALUES ({int(priceTicket[0])}, {int(priceTicket[1])})') await conn.commit() await cursor.execute('SELECT seq FROM sqlite_sequence') raffleId = await cursor.fetchone() await cursor.execute(f'CREATE TABLE \'Raffle_{raffleId[0]}\' (' f'ticket INTEGER,' f'user_id INTEGER,' f'PRIMARY KEY (ticket AUTOINCREMENT )' f');') await cursor.close() await ans('Розыгрыш добавлен!\n' 'Можешь идти в меню.', keyboard=await create_keyboard('to_menu')) else: await ans( 'Ты походу ввел не те числа.\n' 'Повтори матешу, а потом повтори ввод.\n' 'Дам подсказку: первое число должно нацело делиться на второе.\n' 'Давай без косяков, плез..', keyboard=await create_keyboard('to_menu')) else: await ans( 'Ты слишком сильно накосячил.\n' 'Введи, плез, 2 числа(<Призовой фонд:int> и <кол-во тикетов:int>).', keyboard=await create_keyboard('to_menu'))
async def branchBuyTickets(ans: Message, raffleId): if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() bought = await countTicket(raffleId) - await boughtTicket(raffleId) if ans.text.isdigit(): if bought >= int(ans.text) > 0: conn = await aiosqlite.connect('Database/database.db') cursor = await conn.cursor() await cursor.execute( f'SELECT prize, count_tickets FROM Raffles WHERE id = {raffleId}' ) res = await cursor.fetchone() prize, count_ticket = res if await balanceManipulation( ans.from_id, 'withdraw', int((prize / count_ticket) * int(ans.text))): await addTicket(ans.from_id, raffleId, int(ans.text)) await ans( f'Ты успешно купил тикеты!\n' f'С твоего баланса списано {int((prize / count_ticket) * int(ans.text))} руб.\n' f'Теперь жди оглашения результатов.\n' f'Good luck🤑', keyboard=await create_keyboard('to_menu')) if int(ans.text) == bought: ticketId, winner = await getWinner(raffleId) await balanceManipulation(winner, 'pay', prize) winnernickname = await winnerNickname(winner) if winnernickname[0] == 'не задан': name = await bot.api.users.get(user_ids=winner) winnernickname = str(name[0].first_name) + ' ' + str( name[0].last_name) else: winnernickname = winnernickname[0] await bot.api.messages.send( f'Розыгрыш №{raffleId} завершен!\n' f'Победителем стал {winnernickname}. Его тикет под номером {ticketId}' f' стал выигрышным.\n' f'💸💸💸💸💸💸💸💸', user_ids=await usersWinRaffle(raffleId, winner), keyboard=await create_keyboard('to_menu'), random_id=getRandomId()) await ans( 'Прими мои поздравления!\n' 'Ты выиграл в розыгрыше №{raffleId}🥳\n' 'Денюжки уже прилетели на твой баланс.\n' '💸💸💸💸💸💸💸💸', user_id=winner) user.api.wall.post( owner_id=config.group_id, from_group=1, message=random.choice(messages.win).replace( 'WINNER', f'[id{winner}|{winnernickname}]')) else: await ans( 'Твой баланс не позволяет приобрести такое кол-во тикетов.', keyboard=await create_keyboard('to_menu')) else: await ans( f'Увы. Ты накосячил.😶\n' f'Ты ввел несуществующее кол-во тикетов.\n\n' f'Доступное кол-во тикетов: {bought}', keyboard=await create_keyboard('to_menu')) else: await ans( f'Введи, пожалуйста, кол-во тикетов, которые собираешься приобретать(Целое число. Ок?).\n\n' f'Доступно тикетов: {bought}', keyboard=await create_keyboard('to_menu'))
async def branchPayBalance2(ans: Message, amount): tableName = f'transaction_{ans.peer_id}' if ans.text.lower() == 'меню': await bot.branch.exit(ans.peer_id) await menu(ans) return ExitBranch() elif ans.text.lower() == 'отменить': billId, _ = await forTransaction(tableName, 'pull') await qiwi.reject(billId) await ans('Счет отменен.\n' 'Предыдущая ссылка теперь больше недоступна.') await ans('Произвожу выход в меню.') await bot.branch.exit(ans.peer_id) await asyncio.sleep(1) await menu(ans) return ExitBranch() elif ans.text.lower() == 'проверить': billId, _ = await forTransaction(tableName, 'pull') status = await qiwi.status(billId) if status == 'WAITING': await ans( 'Ты еще не заплатил мне свои деньги.\nВозвращайся сюда,' ' когда ты оплатишь по ссылке, которую я тебе уже скидывал.', keyboard=keyboard_gen([[{ 'text': 'Отменить', 'color': 'negative' }, { 'text': 'Проверить', 'color': 'positive' }]], inline=True)), elif status == 'PAID': _, count = await forTransaction(tableName, 'pull') await balanceManipulation(ans.from_id, 'pay', count) await ans( 'Отлично!\n' 'Я получил твои деньги, теперь у тебя баланс пополнен и ты можешь покупать тикеты.', keyboard=await create_keyboard('to_menu')) elif ans.text.lower() == 'далее': await createTable(tableName) billId = lambda: ''.join( random.choice(string.ascii_letters + string.digits) for _ in range(10)) billId = str(billId()) amount = amount comment = comments.random_comment() await forTransaction(tableName, 'insert', billId, amount) payUrl = await qiwi.payBalance( billId, amount, f'Счет для пополнения баланса.\n' f'Комментарий к оплате: {comment}') await ans( f'Составлен счет для пополнения баланса.\nПерейди по ссылке {payUrl}' f' и пополни счет, потом возвращайся сюда, чтобы нажать на кнопку «Проверить».' f'\nИ да. Не забудь сверить комментарий к оплате. Для тебя он вот: {comment}.', keyboard=keyboard_gen([[{ 'text': 'Отменить', 'color': 'negative' }, { 'text': 'Проверить', 'color': 'positive' }]], inline=True)) else: if not await checkTable(tableName): await branchPayBalance1(ans) if await checkTable(tableName): await ans( f'Что такое этот ваш {ans.text}?\n' f'Я тебя не понял.\nНиже я прикрепил кнопки, на которые я точно тебе отвечу.', keyboard=keyboard_gen([[{ 'text': 'Отменить', 'color': 'negative' }, { 'text': 'Проверить', 'color': 'positive' }]], inline=True))
async def some(self, ans: Message, some): self.context["s"] = some await ans(f"I don't know what {some} is that") return ExitBranch()
async def branch_wrapper(ans: Message, word: str): if ans.text.lower() in ["exit", "stop"]: await ans("As you want to!") return ExitBranch() await ans(word)
async def exit_branch(self, answer: Message): await answer('Возвращаемся', keyboard=general_keyboard()) return ExitBranch()
async def vbranch(ans: Message): cc.execute(f"SELECT * FROM users WHERE vkid = {ans.from_id}") blnc = cc.fetchall()[0][2] cc.execute(f"SELECT * FROM global") ccm = cc.fetchall()[0][1] if ans.text.lower() == 'Назад': main_listb = [[{'text': f'Баланс: {blnc}', 'color': 'secondary'}], [{'text': '⬇', 'color': 'primary'}, {'text': 'Играть▶', 'color': 'negative'}, {'text': '⬆', 'color': 'primary'}], [{'text': '🗄Резерв🗄', 'color': 'negative'}, {'text': '🆘Репорт🆘', 'color': 'negative'}]] main_kb = keyboard_gen(main_listb, one_time=False) await ans('...', keyboard=main_kb) return ExitBranch() else: try: sum = int(ans.text.lower()) if sum <= blnc: ccm += sum * 0.05 amount = sum - sum * 0.05 amount *= 1000 merchant.send_payment(ans.from_id, amount) blnc -= sum blnc = round(blnc, 2) cc.execute(f"UPDATE users SET blnc = {blnc} WHERE vkid = {ans.from_id}") cc.execute(f"UPDATE global SET comcoins = {ccm}") connection.commit() main_listb = [[{'text': f'Баланс: {blnc}', 'color': 'secondary'}], [{'text': '⬇', 'color': 'primary'}, {'text': 'Играть▶', 'color': 'negative'}, {'text': '⬆', 'color': 'primary'}], [{'text': '🗄Резерв🗄', 'color': 'negative'}, {'text': '🆘Репорт🆘', 'color': 'negative'}]] main_kb = keyboard_gen(main_listb, one_time=False) await ans('Готово✔️', keyboard=main_kb) return ExitBranch() else: main_listb = [[{'text': f'Баланс: {blnc}', 'color': 'secondary'}], [{'text': '⬇', 'color': 'primary'}, {'text': 'Играть▶', 'color': 'negative'}, {'text': '⬆', 'color': 'primary'}], {{'text': '🗄Резерв🗄', 'color': 'negative'}, {'text': '🆘Репорт🆘', 'color': 'negative'}}] main_kb = keyboard_gen(main_listb, one_time=False) await ans('Недостаточно средств на балансе❌', keyboard=main_kb) return ExitBranch() except Exception as e: print(f'{e}') main_listb = [[{'text': f'Баланс: {blnc}', 'color': 'secondary'}], [{'text': '⬇', 'color': 'primary'}, {'text': 'Играть▶', 'color': 'negative'}, {'text': '⬆', 'color': 'primary'} ], [{'text': '🗄Резерв🗄', 'color': 'negative'}, {'text': '🆘Репорт🆘', 'color': 'negative'}]] main_kb = keyboard_gen(main_listb, one_time=False) await ans('...', keyboard=main_kb) return ExitBranch()