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 после выполнения запроса.

Теперь твой бот должен работать без ошибок.

→ Ссылка