Код бота не вызывает функцию

Рейтинг: 0Ответов: 1Опубликовано: 13.08.2023

Бот управляет двумя таблицами: users и bans. При получении комментария в чате, бот записывает id комментатора в таблицу users и проверяет наличие id комментатора в таблице bans. Если id есть в таблице bans, то бот должен удалить любой комментарий забаненного. Но не удаляет и не могу понять почему. Как исправить ошибку?

@dp.message_handler()
async def check_database(message: types.Message):
    if not db.user_exists(message.from_user.id):
        print(message.from_user.id, 1) #выводит id комментатора
        db.add_user(message.from_user.id, message.from_user.first_name)
        await check_bans(message)
        print(message.from_user.id, 2) #выводит id комментатора
        await mess_handler(message)
        print(message.from_user.id, 3) #выводит id комментатора

async def check_bans(message: types.Message):
    print(message.from_user.id, 4) #выводит id комментатора
    if db.user_bans(message.from_user.id):
        print(message.from_user.id, 5) #ничего не выводит
        await message.delete()
        print(message.from_user.id, 6) #ничего не выводит

async def mess_handler(message: types.Message):
    text = message.text.lower()
    print(message.from_user.id, 7) #выводит id комментатора
    if str(message.from_user.id) != cfg.ADMIN_ID:
        for word in cfg.WORDS:
            if word in text:
                await message.delete()

Очередность принтов в консоли: 1 4 2 7 3

Код файла db:

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 user_bans(self, user_id):
        with self.connection:
            result1 = self.cursor.execute("SELECT * FROM 'bans' WHERE 'user_id' = ?", (user_id,)).fetchall()
            return bool(len(result1))

Ответы

▲ 0

Попробуйте вот так:

class Database:

    # ...

    def user_bans(self, user_id):
        with self.connection:
            self.cursor.execute("SELECT * FROM 'bans' WHERE 'user_id' = ?", (user_id,))
            return bool(self.cursor.fetchone())
    
    # ...