вам нужно использовать логику asyncio там, где вы запускаете ваш бот. Для этого сначала импортируйте asyncio в вашем коде:
import asyncio
Замените ваш код, который запускает бота на следующий:
def main():
loop = asyncio.get_event_loop()
loop.create_task(bot.polling(none_stop=True))
loop.run_forever()
И теперь, измените вызов await asyncio.run(pay_aaio(call)) на вот это:
await pay_aaio(call)
Окончательный код должен выглядеть следующим образом:
import asyncio
import telebot
import requests
bot = telebot.TeleBot("YOUR_API_KEY")
@bot.callback_query_handler(func=lambda call: call.data.startswith("pay_"))
async def pay_aaio(call):
user_id = call.from_user.id
try:
# Code
while True:
# Отправляем запрос на проверку статуса оплаты
response = requests.get(url_aaio)
if 'Заказ просрочен. Оплатить заказ необходимо было' in response.content.decode():
await bot.send_message(user_id, "Срок ссылки истёк. Вы не успели оплатить =(")
break
elif 'Заказ успешно был оплачен' in response.content.decode():
await bot.send_message(user_id, f'✅ Оплата на сумму *{amount}* прошла успешно! Ваш баланс пополнен.', parse_mode='Markdown')
break
else:
await print("Заказ не оплачен.")
await asyncio.sleep(5)
except Exception as e:
await print(e)
pass
await pay_aaio(call)
def main():
loop = asyncio.get_event_loop()
loop.create_task(bot.polling(none_stop=True))
loop.run_forever()
if __name__ == '__main__':
main()
Таким образом, вы смогли прикрепить всю вашу асинхронную логику к одному основному циклу событий asyncio и теперь смогли успешно вызвать асинхронную функцию pay_aaio.