#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 )
не работает @KingsleyZhong3. Вы должны разместить его
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