Как проверять статус платежа telebot Python?

Я новичок, как ни странно в этом деле. Пишу своего телеграмм бота используя документацию pyTelegramBotAPI. Возник вопрос с платежами. У меня подключена yookassa, работаю как самозанятый. Через BotFather реализация не работает для самозанятого думаю вы в курсе. Пошел другим путем через API yookassa. В этом я тоже полный ноль , действовал по инструкции в официальной документации. Кое-что получилось,у меня есть кнопка "купить подписку". Собственно это мне и нужно реализовать. Высылаю форму с оплатой, пользователь делает покупку и возвращается на сайт, все вроде хорошо. Но как мне после этого в автоматическом режиме активировать эту подписку и дать преимущества пользователю? Как проверять статус платежа одновременно с работой самого бота? Я перепробовал почти все, думаю как-то через потоки нужно, но ничего не выходит. Я только куски кода вставил, и это последний вариант, на котором я остановился, но пробовал очень много всего.

def pay(): #Выставить счет на оплату
idempotence_key = str(uuid.uuid4())
payment = Payment.create({
    "amount": {
        "value": "2.00",
        "currency": "RUB"
        },
    "payment_method_data": {
        "type": "bank_card"
        },
    "confirmation": {
        "type": "redirect",
        "return_url": "https://t.me/MYBot"
        },
    "capture": True,
    "description": "Заказ №1"
}, idempotence_key)
return payment
def pay_st(payid,userid,chatid): #Цикл проверяющий статус платежа
    count = 300
    while True:
        time.sleep(1)
        print(*(Payment.find_one(payid).status))
        if Payment.find_one(payid).status == 'succeeded':
            upd_bd('sub',1,userid)
            bot.send_message(chatid, "?Подписка активированна!?", reply_markup=markup2)
            break
        elif count == 0:
           break
        count-=1
def thread(use,chat): #Вот поток, но он ломается, когда хотя бы 2 пользователя совершают оплату
    th1 = threading.Thread(target = pay_st(sel_bd('pay_id',use),use,chat)).start()
    return th1
@bot.message_handler(state="*", func=lambda message: message.text == '?Купить подписку?')

async def handle_text(message):
#Оплата       
if message.text == '?Купить подписку?':
    if sel_bd('sub',message.from_user.id) == 1:
        await bot.send_message(message.chat.id, 'Вы уже приобрели подписку?', 
                               reply_markup=markup2)
    elif sel_bd('sub',message.from_user.id) == 0:
        await bot.send_message(message.chat.id,
                        "бла бла бла", reply_markup=markup2)        

        # get confirmation url
        confirmation_url = pay().confirmation.confirmation_url
        upd_bd('pay_id',confirmation_url.split('=')[1],message.from_user.id)
        
        keyboard = types.InlineKeyboardMarkup()
        url_button = types.InlineKeyboardButton(text="Оплатить 108руб", url=confirmation_url)
        callback_button11 = types.InlineKeyboardButton(text="Отмена", callback_data="cb_data_1")
        callback_button12 = types.InlineKeyboardButton(text="Связь с разработчиком", callback_data="cb_data_2")
        keyboard.row(url_button,callback_button11)
        keyboard.add(callback_button12)

        pay_con(confirmation_url)
        await bot.send_message(message.chat.id, "Привет! Нажми на кнопку Оплатить, что бы 
                           активировать подписку.", reply_markup=keyboard)
        thread(message.from_user.id,message.chat.id)

Этот код кажется работает, но никак не могу прислать ответ, что подписка активирована.

class MyThread(threading.Thread):
    def __init__(self, payid, userid, chatid):
        threading.Thread.__init__(self)
        self.payid = payid
        self.userid = userid
        self.chatid = chatid

    def run(self):
        count = 5
        while True:
            time.sleep(1)
            print(*(Payment.find_one(self.payid).status))
            if Payment.find_one(self.payid).status == 'succeeded':
                upd_bd('sub',1,self.userid)
                bot.send_message(self.chatid, "?Подписка активированна!?",reply_markup=markup2) 
                break
            elif count == 0:
                break
            count-=1

Запуск самого потока:

MyThread(sel_bd('pay_id',message.from_user.id),message.from_user.id,message.chat.id).start()

А вот ошибка: Warning (from warnings module): File "C:\Users\PC\Desktop\Bot\mybot.py", line 68 bot.send_message(self.chatid, "?Подписка активированна!?", reply_markup=markup2) RuntimeWarning: coroutine 'AsyncTeleBot.send_message' was never awaited


Ответы (0 шт):