Нужна помощь в фильтрации чата, код не работает

#python #discord #bots #discord.py

#python #Discord #боты #discord.py

Вопрос:

Я пишу слова из bad_list, но бот их не удаляет, что я сделал не так?

 bad_list = ['toy', 'hack']
@client.event
async def on_message( message ):
    await client.process_commands( message )

    msg = message.content.lower()

    if msg in bad_list:
        await message.delete()
        await message.author.send(embed = discord.Embed(description = f'{message.author},такие слова не допустимы!',color = 0xff0000))
  

в командной строке нет ошибок

введите описание изображения здесь

Комментарии:

1. Если я не ошибаюсь, process_commands — это блокирующий вызов … попробуйте сначала установить фильтр

2. Я удалил код await client.process_commands( message ) не работает @KingsleyZhong

3. Вы должны разместить его await client.process_commands(message) в конце вашего on_message мероприятия. Также я не могу воспроизвести вашу проблему, ваш код, похоже, отлично работает с моей стороны. Вы уверены, что у бота есть соответствующие разрешения?

4. Возможно ли, что код не работает, если он большой? изображение возможно ли, что код не работает, если есть другой? изображение @Jawad

Ответ №1:

Вы сравниваете полное сообщение, которое хранится в msg , со словами в вашем bad_list . Это будет справедливо только в том случае, если комментарий состоит исключительно из одного из слов в вашем списке.

Вместо этого вам следует проверить, появляются ли какие-либо плохие слова в сообщении. Для этой цели вам пришлось бы изменить if-оператор:

     is_bad = False
    for w in bad_list:
        if w in msg: is_bad=True
    if is_bad:
        await message.delete()
        await message.author.send(embed = discord.Embed(description = f'{message.author},такие слова не допустимы!',color = 0xff0000))
  

Используя эту модификацию, программа выполняет поиск любого плохого слова в сообщении и переключается на удаление, как только плохое слово обнаружено.

Однако остается одна проблема. Если сообщение содержит слово, которое содержит только эти строки и не является плохим словом, оно также будет удалено (например: shackles, latoya). Вам лучше выполнить поиск по словам, перед которыми стоит пробел. Таким образом, это только удалит взлом, взломанный, хакер…

if ' ' w in msg: is_bad=True