@X-yro

Как правильно настроить фильтрацию сквернословия в aiogram?

Здравствуйте Юзеры Habr. Я создаю бота на Aiogram и у меня встал такой вопрос: Как мне лучше всего сделать фильтрацию сквернословия? Типа кто-то пишет какой-то мат в чат и в независимости от регистра введенного слова чтобы боте его оперативно удалял. Также есть еще такой вопрос, как добавить так скажем, всю базу матюков без лишней запары. Чтобы не вводить каждый мат в команду исключения, а то таким макаром запипикаешься вводить все эти маты.
Вот та небольшая часть кода которую я уже успел набросать:
import config
import logging
import filters

from aiogram import Bot, Dispatcher, executor, types

from filters import IsAdminFilter

logging.basicConfig(level=logging.INFO)

bot = Bot(token=config.TOKEN)
dp = Dispatcher(bot)

dp.filters_factory.bind(IsAdminFilter)


@dp.message_handler(is_admin=True, commands=["ban"], commands_prefix="!/")
async def cmd_ban(message: types.Message):
    if not message.reply_to_message:
        await message.reply("Эта команда должна быть ответом на сообщение!")
        return

    await message.bot.delete_message(config.GROUP_ID, message.message_id)
    await message.bot.ban_chat_member(chat_id=config.GROUP_ID, user_id=message.reply_to_message.from_user.id)
    await message.bot.unban_chat_member(chat_id=config.GROUP_ID, user_id=message.reply_to_message.from_user.id)

    await message.reply_to_message.reply("Пользователь забанен!")


@dp.message_handler(is_admin=True, commands=["unban"], commands_prefix="!/")
async def cmd_ban(message: types.Message):
    if not message.reply_to_message:
        await message.reply("Эта команда должна быть ответом на сообщение!")
        return

    await message.bot.delete_message(config.GROUP_ID, message.message_id)
    await message.bot.unban_chat_member(chat_id=config.GROUP_ID, user_id=message.reply_to_message.from_user.id)

    await message.reply_to_message.reply("Пользователь разбанен!")




@dp.message_handler(content_types=["new_chat_members"])
async def on_user_joined(message: types.Message):
    await message.delete()

@dp.message_handler()
async def filter_messages(message: types.Message):
    if "Плохое слово" in message.text:
        await message.delete()


if __name__ == "__main__":
    executor.start_polling(dp, skip_updates=True)
  • Вопрос задан
  • 586 просмотров
Решения вопроса 1
@defriz
люблю js
можно к примеру сделать массив с этими словами и потом проходиться по нему с помощью цикла for
bad_words = ["плохое слово","очень плохое слово"]

@dp.message_handler()
async def filter_messages(message: types.Message):
    lower_message = message.text.lower()
    for bad_word in bad_words:
        if bad_word in lower_message:
            await message.delete()
            break
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы