Как сделать обнаружение запрещенных слов в чате? Telebot, Python
Помогите пожалуйста реализовать фильтрацию по словам в чате. Я написал такой код, но столкнулся со следующими проблемами: Если запретить писать слово "Пример1", то нельзя будет писать и слово "Пример", то есть цифра 1 на конце вроде как учитывается, а вроде как и нет. Буду благодарен если кто-то сможет предложить более удачную идею для решения моей задачи.
message_words = message.text.split()
for word in message_words:
if word.lower() not in DB.blacklisted_words_get(message.chat.id):
pass
else:
bot.delete_message(message.chat.id, message.id)
bot.send_message(message.chat.id, f'<a href="tg://user?id={user_id}">{user_name}</a>, '
'Вы использовали запрещенное слово!', parse_mode='html')
Ответы (2 шт):
Советую тебе создать массив запретных слов и уже каждое слово из СООБЩЕНИЯ сравнивать с каждым словом из МАССИВА. Ибо Пример содержится в строке Пример1, а Пример1 в Пример уже не содержится, понимаешь?:)
И сравнивать не с помощью if <Пример1> in <Массив слов сообщения>, а с помощью if <Пример1> == <Пример>, точно не прогадаешь. Хотя и так и так может сработать, главное именно массивы держать.
у вас задом наперед построена логика
попробуйте такой код:
restricted_words=["слово1","слово2"] и так далее полный набор
потом если надо удалить все сообщение то можно сделать так:
for restricted_word in restricted_words:
if len(message)>len(message.replace(restricted_word,""):
message="Сообщение удалено"
break
если надо заменять отдельные слова то можно сделать так же:
for restricted_word in restricted_words:
message=message.replace(restricted_word,"-_-")
ну и потом возвращаем message обратно на вывод.
Проблема очевидна - всякие реконструкции через латиницу или 1337 стайл оскорбления все еще будут проходить. А что бы не проходили надо написать небольшой лингво-движок, который и "потреблять" не забанит, "xy*" тоже распознает. Но это совсем другая история.