RuntimeWarning: coroutine 'subscribe_check' was never awaited AioGram
Пишу код Telegram-бота используя Aiogram 2.x. Хочу создать проверку платной подписки, но когда запускаю бота появляется ошибка.
Ошибка которая происходит -
C:\Users\Wizi\Desktop\TWTSNOSBOT\start.py:635: RuntimeWarning: coroutine
'subscribe_check' was never awaited
if subscribe_check(message.from_user.id):
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Код проверки платной подписки -
async def subscribe_check(id):
conn = sqlite3.connect("database.db")
cursor = conn.cursor()
cursor. Execute("SELECT expiration_date FROM subscriptions WHERE user_id=?", (id,))
result = cursor.fetchone()
if result:
return True
else:
return False
Код который переводит к ошибке -
@dp.message_handler(commands=['snos'])
async def ss_command(message: types.Message, state: FSMContext):
if subscribe_check(message.from_user.id):
await state.finish()
return
args = message.text.split()
if len(args) == 2:
link = args[1]
await bot.send_message(log_chat_id, f"? Жалоба отправлена!\n\nОтправитель: id
{message.from_user.username}\nЦель: {link}", parse_mode="HTML",
disable_web_page_preview=True)
await message.reply("⚡️ Отправка жалоб началась! Удачи.", parse_mode='HTML')
successful_reports, failed_reports = await report_message(link)
bt1 = types.InlineKeyboardMarkup(row_widtfh=1)
sender = types.InlineKeyboardButton(text=f"⚙️ Просмотр жалобы",url=f"{link}")
bt1.add(sender)
await message.reply(f"⚙️ Жалобы отправлены\n\n ? Валидные: {successful_reports}\n ? Не валидные: {failed_reports}", reply_markup=bt1,parse_mode='HTML')
button = types.InlineKeyboardMarkup(row_width=1)
sender = types.InlineKeyboardButton(text=f"@{message.from_user.username}",url=f"https://t.me/{message.from_user.username}")
button.add(sender)
await bot.send_message(log_chat_id, f"<b>? Жалоба отправлена!\n\nОтправитель: id {message.from_user.id}\nЦель: {message.text}\nУспешно сесий: {successful_reports}\nНеудачно сесий: {failed_reports}</b>", reply_markup=button, parse_mode="HTML", disable_web_page_preview=True)
else:
await message.reply("♦ Неверный формат!\n\nИспользуйте формат команды: /snos ссылка", parse_mode='HTML')
Ответы (1 шт):
Автор решения: Вадим-VOLT VIA
Обработчик команды
→ Ссылка
Проблема
Ты вызываешь асинхронную функцию subscribe_check
как обычную синхронную. В Python для работы с асинхронными функциями нужно использовать ключевое слово await
.
Как исправить
Твой текущий код:
if subscribe_check(message.from_user.id):
await state.finish()
return
Исправленный код:
Просто добавь await
перед вызовом асинхронной функции:
if await subscribe_check(message.from_user.id):
await state.finish()
return
Полный пример кода:
Функция проверки подписки
import sqlite3
from aiogram import types
async def subscribe_check(id):
conn = sqlite3.connect("database.db")
cursor = conn.cursor()
cursor.execute("SELECT expiration_date FROM subscriptions WHERE user_id=?", (id,))
result = cursor.fetchone()
conn.close() # Не забудь закрыть соединение
return result is not None # Если есть результат, возвращаем True, иначе False
Обработчик команды /snos
@dp.message_handler(commands=['snos'])
async def ss_command(message: types.Message, state: FSMContext):
if await subscribe_check(message.from_user.id): # Добавляем await здесь
await state.finish()
return
args = message.text.split()
if len(args) == 2:
link = args[1]
await bot.send_message(log_chat_id, f"? Жалоба отправлена!\n\nОтправитель: id {message.from_user.username}\nЦель: {link}", parse_mode="HTML", disable_web_page_preview=True)
await message.reply("⚡️ Отправка жалоб началась! Удачи.", parse_mode='HTML')
successful_reports, failed_reports = await report_message(link)
bt1 = types.InlineKeyboardMarkup(row_width=1)
sender = types.InlineKeyboardButton(text=f"⚙️ Просмотр жалобы", url=f"{link}")
bt1.add(sender)
await message.reply(f"⚙️ Жалобы отправлены\n\n ? Валидные: {successful_reports}\n ? Не валидные: {failed_reports}", reply_markup=bt1, parse_mode='HTML')
button = types.InlineKeyboardMarkup(row_width=1)
sender = types.InlineKeyboardButton(text=f"@{message.from_user.username}", url=f"https://t.me/{message.from_user.username}")
button.add(sender)
await bot.send_message(log_chat_id, f"<b>? Жалоба отправлена!\n\nОтправитель: id {message.from_user.id}\nЦель: {message.text}\nУспешно сесий: {successful_reports}\nНеудачно сесий: {failed_reports}</b>", reply_markup=button, parse_mode="HTML", disable_web_page_preview=True)
else:
await message.reply("♦ Неверный формат!\n\nИспользуйте формат команды: /snos ссылка", parse_mode='HTML')
Что изменилось?
- Добавил
await
перед вызовомsubscribe_check
. - Закрыл соединение с базой данных в функции
subscribe_check
после выполнения запроса.
Теперь твой бот должен работать без ошибок.