Example #1
0
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()
Example #2
0
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'))
Example #3
0
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()
Example #4
0
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'))
Example #5
0
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'))
Example #6
0
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'))
Example #7
0
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()
Example #8
0
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'))
Example #9
0
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'))
Example #10
0
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))
Example #11
0
 async def some(self, ans: Message, some):
     self.context["s"] = some
     await ans(f"I don't know what {some} is that")
     return ExitBranch()
Example #12
0
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)
Example #13
0
 async def exit_branch(self, answer: Message):
     await answer('Возвращаемся', keyboard=general_keyboard())
     return ExitBranch()
Example #14
0
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()