Почему код бота игнорирует одну из трех async функций?
Бот модерирует чат и управляет двумя таблицами: users и bans. В обеих таблицах users и bans есть запись одного и того же пользователя (тестовая). При получении комментария в чате, бот записывает id нового комментатора в таблицу users (первая функция) и проверяет наличие id комментатора в таблице bans (вторая функция). Если id есть в таблице bans, бот должен удалить любой комментарий "забаненного". Если комментатор не в бане, проверяется наличие в комментарии запрещенных слов (третья функция). Первая функция работает правильно, в users добавляется запись, но затем управление перепрыгивает в третью функцию и она тоже работает правильно: при наличии запрещенных слов комментарий удаляется. Однако, вторая функция не работает, комментарии пользователя из таблицы bans игнорируются и не удаляются. При запуске в PyCharm код работает без ошибок. Что именно нужно поправить в коде, в чем ошибка?
@dp.message_handler()
# Добавляем id каждого пользователя в users
async def check_database(message: types.Message):
if not db.user_exists(message.from_user.id):
db.add_user(message.from_user.id, message.from_user.first_name)
await check_bans(message)
await mess_handler(message)
async def check_bans(message: types.Message):
# Проверяем наличие id пользователя в bans, удаляем его комментарий
if db.user_bans(message.from_user.id):
await message.delete()
await mess_handler(message)
async def mess_handler(message: types.Message):
# Удаляем комментарии, если есть запрещенные слова
text = message.text.lower()
if str(message.from_user.id) != cfg.ADMIN_ID:
for word in cfg.WORDS:
if word in text:
await message.delete()
Код файла 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))