@RiderMC

Как удалить сообщение в тг чате, если в нём присутствует определеное слово?

Вот к примеру есть слово "Привет", как удалить всё сообщение, если присутствует это слово?
Не только сообщение "Привет", но и "Привет всем", "Всем привет", "Привет, как дела" и так далее?

где то видел, что через regexp можно сделать, но увы не получилось, вот код:
@dp.message_handler(regexp='Привет')
async def ky(message: types.Message):
    await bot.delete_message(group_id, message.message_id)
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix
yellow
Вообще всё должно работать, при условии, что этот обработчик зарегистрирован раньше всех других.
Но работать он не будет если допустим активен какой-то FSM, тогда управление уйдет в него.

Наверное, лучше было бы создать Middleware, и там уже обрабатывать. Для версии 2.х очень условно будет что-то вроде:
class BadWordFilterMiddleware(BaseMiddleware):

    async def on_process_message(self, message: types.Message, data: dict):

        badwords = ['привет', 'пока']

        message_text = message.text if message.text else message.caption

        if message_text:
            message_text_words = message_text.lower().split()
            for badword in badwords:
                if badword in message_text_words:
                    await bot.delete_message(message.chat.id, message.message_id)
                    raise CancelHandler()
                    return

dp.middleware.setup(BadWordFilterMiddleware())
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы