Hello everyone I wrote a bot for a freelance tutorial order, the bot responds to messages, but there is a problem with payment, after entering the amount of replenishment, the bot does not respond, maybe I made a mistake somewhere?
main.py code
import logging
from aiogram import Bot, Dispatcher, executor, types
import config as cfg
import markups as nav
logging.basicConfig(level=logging.INFO)
import logging
from aiogram import Bot, Dispatcher, executor, types
import config as cfg
import markups as nav
from db import Database
from pyqiwip2p import QiwiP2P
import random
logging.basicConfig(level=logging.INFO)
bot = Bot(token=cfg.TOKEN)
dp = Dispatcher(bot)
db = Database("database.db")
p2p = QiwiP2P(auth_key=cfg.QIWI_TOKEN)
def is_number(_str):
try:
int(_str)
return True
except ValueError:
return False
@dp.message_handler(commands=['start'])
async def command_start(message: types.Message):
if message.chat.type == 'private':
if not db.user_exists(message.from_user.id):
db.add_user(message.from_user.id)
await bot.send_message(message.from_user.id, "Здравствуй дорогой {0.first_name}!\n\nТвой процент удачи сегодня: 99%\n"
f"\nВаш баланс: {db.user_money(message.from_user.id)} руб".format(message.from_user), reply_markup=nav.mainMenu)
@dp.message_handler()
async def command_start(message: types.Message):
if message.text == 'ST':
await bot.send_message(message.from_user.id, '️Купить читы')
elif message.text == '️Купить читы':
await bot.send_message(message.from_user.id, 'Выберите игру!', reply_markup = nav.ChFoGaMeMenu)
elif message.text == 'Hot Новости':
await bot.send_message(message.from_user.id, 'Выберите дату!', reply_markup = nav.newsMenu)
elif message.text == '️Лайфхаки дня':
await bot.send_message(message.from_user.id, 'Выберите жанр игры!', reply_markup=nav.LiHaMenu)
elif message.text == 'О боте':
await bot.send_message(message.from_user.id, 'Хоешь узнать обо мне?!', reply_markup=nav.aboutthebotMenu)
elif message.text == 'Профиль':
await bot.send_message(message.from_user.id, 'Ваш аккаунт'.format(message.from_user), reply_markup=nav.myaccMenu)
elif message.text == 'Главное меню':
await bot.send_message(message.from_user.id, 'Вы в главном меню', reply_markup=nav.mainMenu)
#Читы для игр
elif message.text == 'CS-GO':
await bot.send_message(message.from_user.id, '\nОплатить товар [CS-GO] 110₽'
'\n'
'\nОплата Qiwi/Сбер/Тинькофф', reply_markup=nav.buyCSMenu)
elif message.text == 'Dota2':
await bot.send_message(message.from_user.id, '\nОплатить товар [Dota2] 110₽'
'\n'
'\nОплата Qiwi/Сбер/Тинькофф', reply_markup=nav.buyDota2Menu)
elif message.text == 'Call Of Duty:Black Ops':
await bot.send_message(message.from_user.id, '\nОплатить товар [Call Of Duty:Black Ops] 110₽'
'\n'
'\nОплата Qiwi/Сбер/Тинькофф', reply_markup=nav.buyCallOfDutyMenu)
elif message.text == 'PUBG':
await bot.send_message(message.from_user.id, '\nОплатить товар [PUBG] 110₽'
'\n'
'\nОплата Qiwi/Сбер/Тинькофф', reply_markup=nav.buyPUBGMenu)
elif message.text == 'Standoff2':
await bot.send_message(message.from_user.id, '\nОплатить товар [Standoff2] 110₽'
'\n'
'\nОплата Qiwi/Сбер/Тинькофф', reply_markup=nav.buyStandoff2Menu)
elif message.text == 'Главное меню':
await bot.send_message(message.from_user.id, 'Вы в главном меню', reply_markup=nav.ChFoGaMeMenu)
#Новости для игр
elif message.text == 'Today':
await bot.send_message(message.from_user.id, 'Today', reply_markup=nav.newsTMenu)
elif message.text == 'Yesterday':
await bot.send_message(message.from_user.id, 'Yesterday', reply_markup=nav.newsYEMenu)
elif message.text == 'Главное меню':
await bot.send_message(message.from_user.id, 'Вы в главном меню', reply_markup=nav.ChFoGaMeMenu)
#Лайфхак для игр
elif message.text == 'Шутеры':
await bot.send_message(message.from_user.id, 'Лайфхаки для [Шутеров] читай в Telegraph', reply_markup=nav.newsShootMenu)
elif message.text == 'ММОРПГ':
await bot.send_message(message.from_user.id, 'Лайфхаки для [ММОРПГ] читай в Telegraph', reply_markup=nav.newsMMORPGMenu)
elif message.text == 'Стратегии':
await bot.send_message(message.from_user.id, 'Лайфхаки для [Стратегии] читай в Telegraph', reply_markup=nav.newsStrategyMenu)
elif message.text == 'MMO Action[скоро!]':
await bot.send_message(message.from_user.id, 'Лайфхаки для [MMO Action] читай в Telegraph', reply_markup=nav.newsMMOActionMenu)
elif message.text == 'Главное меню':
await bot.send_message(message.from_user.id, 'Вы в главном меню', reply_markup=nav.ChFoGaMeMenu)
#О боте для игр
elif message.text == 'Кто я?':
await bot.send_message(message.from_user.id, 'Основная информация о боте указана в telegraph!', reply_markup=nav.newsWhoiambMenu)
elif message.text == 'Соглашение':
await bot.send_message(message.from_user.id, 'Основная информация о пользовательском соглашении указана в telegraph!', reply_markup=nav.newsSoglbMenu)
elif message.text == 'Главное меню':
await bot.send_message(message.from_user.id, 'Вы в главном меню', reply_markup=nav.ChFoGaMeMenu)
#Профиль игрока
elif message.text == 'Главное':
await bot.send_message(message.from_user.id, '\nВаш аккаунт: {0.first_name}'
'\n'
'\nКоличество покупок: '
'\n'
f'\nВаш баланс: {db.user_money(message.from_user.id)} руб.'.format(message.from_user), reply_markup=nav.myaccMenu)
elif message.text == 'Мои покупки':
await bot.send_message(message.from_user.id, '\nВаши покупки: '.format(message.from_user), reply_markup=nav.myaccMenu)
elif message.text == 'Баланс':
await bot.send_message(message.from_user.id, f'\nВаш баланс: {db.user_money(message.from_user.id)} руб.'.format(message.from_user), reply_markup=nav.topUpMenu)
elif message.text == 'Главное меню':
await bot.send_message(message.from_user.id, 'Вы в главном меню', reply_markup=nav.ChFoGaMeMenu)
@dp.message_handler()
async def bot_mess(message: types.Message):
if is_number(message.text):
message_money = int(message.text)
if message_money >= 5:
comment = str(message.from_user.id) + "_" + str(random.randint(1000, 9999))
bill = p2p.bill(amount=message_money, lifetime=15, comment=comment)
db.add_check(message.from_user.id, message_money, bill.bill_id)
await bot.send_message(message.from_user.id, f"Вам нужно отправить {message_money} руб. на наш счет QIWI\nСсылку: {bill.pay_url}\nУказав комментарий к оплате: {comment}", reply_markup=nav.buy_menu(url=bill.pay_url, bill=bill.bill_id))
else:
await bot.send_message(message.from_user.id, "Минимальная сумма для пополнения 5 руб.")
else:
await bot.send_message(message.from_user.id, "Введите целое число")
@dp.callback_query_handler(text="top_up")
async def top_up(callback: types.CallbackQuery):
await bot.delete_message(callback.from_user.id, callback.message.message_id)
await bot.send_message(callback.from_user.id, "Введите сумму для пополнения!")
@dp.callback_query_handler(text_contains="check_")
async def check(callback: types.CallbackQuery):
bill = str(callback.data[6:])
info = db.get_check(bill)
if info != False:
if str(p2p.check(bill_id=bill).status) == "PAID":
user_money = db.user_money(callback.from_user.id)
money = int(info[2])
db.set_money(callback.from_user.id, user_money+money)
await bot.send_message(callback.from_user.id, "Ваш счет пополнен! Напишите /start")
db.delete_check(bill)
else:
await bot.send_message(callback.from_user.id, "Вы не оплатили счет!", reply_markup=nav.buy_menu(False, bill=bill))
else:
await bot.send_message(callback.from_user.id, "Счет не найден")
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
config.py code
TOKEN = "MyToken"
QIWI_TOKEN = "MyToken"
murkaps.py code
from aiogram.types import ReplyKeyboardMarkup, KeyboardButton
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
btnMain = KeyboardButton('Главное меню')
# ---Main Menu---
btnBuyCheat = KeyboardButton('️Купить читы')
btnNews = KeyboardButton('Hot Новости')
btnLifeHack = KeyboardButton('️Лайфхаки дня')
btnMyacc = KeyboardButton('Профиль')
btnAboutTheBot = KeyboardButton('О боте')
mainMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnBuyCheat, btnNews, btnLifeHack, btnMyacc, btnAboutTheBot)
btnTopUp = InlineKeyboardButton(text="Пополнить", callback_data="top_up")
topUpMenu = InlineKeyboardMarkup(row_width=1)
topUpMenu.insert(btnTopUp)
# ---Cheat For Game Menu---
btnCSGO = KeyboardButton('CS-GO')
btnDota2 = KeyboardButton('Dota2')
btnCODBO = KeyboardButton('Call Of Duty:Black Ops')
btnPUBG = KeyboardButton('PUBG')
btnST2 = KeyboardButton('Standoff2')
ChFoGaMeMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnCSGO, btnDota2, btnCODBO, btnPUBG, btnST2, btnMain)
# ---Cheat For Game Menu---
btnToday = KeyboardButton('Today')
btnYetday = KeyboardButton('Yesterday')
newsMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnToday, btnYetday, btnMain)
# ---Lifehack for Game Menu---
btnShoot = KeyboardButton('Шутеры')
btnMMORPG = KeyboardButton('ММОРПГ')
btnStrateg = KeyboardButton('Стратегии')
btnMMOA = KeyboardButton('MMO Action[скоро!]')
LiHaMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnShoot, btnMMORPG, btnStrateg, btnMMOA, btnMain)
# ---About The Bot Menu---
btnWhoiam = KeyboardButton('Кто я?')
btnSogl = KeyboardButton('Соглашение')
aboutthebotMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnWhoiam, btnSogl, btnMain)
# ---Buy Cheat For CS-GO Menu---
btnCSBuy = KeyboardButton('Оплатить\n[CS-GO]')
buyCSMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnCSBuy, btnMain)
# ---Buy Cheat For Dota2 Menu---
btnDota2Buy = KeyboardButton('Оплатить\n[Dota2]')
buyDota2Menu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnDota2Buy, btnMain)
# ---Buy Cheat For Call Of Duty:Black Ops Menu---
btnCallOfDutyBuy = KeyboardButton('Оплатить\n[Call Of Duty:Black Ops]')
buyCallOfDutyMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnCallOfDutyBuy, btnMain)
# ---Buy Cheat For PUBG Menu---
btnPUBGBuy = KeyboardButton('Оплатить\n[PUBG]')
buyPUBGMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnPUBGBuy, btnMain)
# ---Buy Cheat For Standoff2 Menu---
btnStandoff2Buy = KeyboardButton('Оплатить\n[Standoff2]')
buyStandoff2Menu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnStandoff2Buy, btnMain)
# ---NewsToday Menu---
btnToday = KeyboardButton('Читать')
newsTMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnToday, btnMain)
# ---NewsYesterday Menu---
btnYesToday = KeyboardButton('Читать')
newsYEMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnYesToday, btnMain)
# ---Шутеры Menu---
btnShoot = KeyboardButton('Читать')
newsShootMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnShoot, btnMain)
# ---ММОРПГ Menu---
btnMMORPG = KeyboardButton('Читать')
newsMMORPGMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnMMORPG, btnMain)
# ---Стратегии---
btnStrategy = KeyboardButton('Читать')
newsStrategyMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnStrategy, btnMain)
# ---MMO Action[скоро!] Menu---
btnMMOActionToday = KeyboardButton('Читать')
newsMMOActionMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnMMOActionToday, btnMain)
# ---About Bot Menu---
btnWhoiamb = KeyboardButton('Читать')
newsWhoiambMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnWhoiamb, btnMain)
# ---Bot Agreement Menu---
btnSoglb = KeyboardButton('Читать')
newsSoglbMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnSoglb, btnMain)
# ---Profell Menu---
btnGlavn = KeyboardButton('Главное')
btnChek = KeyboardButton('Мои покупки')
btnBalans = KeyboardButton('Баланс')
myaccMenu = ReplyKeyboardMarkup(resize_keyboard = True).add(btnGlavn, btnChek, btnBalans, btnMain)
# ---Popolnit Menu---
def buy_menu(isUrl = True, url="", bill=""):
qiwiMenu = InlineKeyboardMarkup(row_width=1)
if isUrl:
btnUrlQIWI = InlineKeyboardButton(text="Ссылка на оплату", url=url)
qiwiMenu.insert(btnUrlQIWI)
btnChekQIWI = InlineKeyboardButton(text="Проверить оплату", callback_data="check_"+bill)
qiwiMenu.insert(btnChekQIWI)
return qiwiMenu
db.py code
import _sqlite3
class Database:
def __init__(self, db_file):
self.connection = _sqlite3.connect(db_file)
self.cursor = self.connection.cursor()
def user_exists(self, user_id):
with self.connection:
result = self.cursor.execute("SELECT * FROM users WHERE 'user_id' = ?", (user_id,)).fetchall()
return bool(len(result))
def add_user(self, user_id):
with self.connection:
return self.cursor.execute("INSERT INTO users ('user_id') VALUES (?)", (user_id,))
def user_money(self, user_id):
with self.connection:
result = self.cursor.execute("SELECT money FROM users WHERE user_id = ?", (user_id,)).fetchmany(1)
return int(result[0][0])
def set_money(self, user_id, user_money):
with self.connection:
return self.cursor.execute("UPDATE 'users' SET money = ? WHERE 'user_id' = ?", (user_money, user_id))
def add_check(self, user_id, money, bill_id):
with self.connection:
return self.cursor.execute("INSERT INTO 'check' ('user_id', 'money', 'bill_id') VALUES (?,?,?)", (user_id, money, bill_id,))
def get_check(self, bill_id):
with self.connection:
result = self.cursor.execute("SELECT * FROM 'check' WHERE bill_id = ?", (bill_id,)).fetchmany(1)
if not bool(len(result)):
return False
return result[0]
def delete_check(self, bill_id):
with self.connection:
return self.cursor.execute("DELETE FROM `check` WHERE `bill_id` = ?", (bill_id,))
I could not find a solution to the problem, can someone tell me