Проверка содержимого сообщений работает неправильно discord.py

#if-statement #discord #discord.py

Вопрос:

Я пытаюсь создать систему плохих слов для пользовательского бота моего сервера, но, похоже, он слушает только первое условие, игнорируя второе:

 @bot.event
async def on_message(message):
  ###BAD WORDS CHECK
  if message.author == bot.user:
    pass
  else:
        if (any(x in message.content.lower() for x in words2)):
          if "hack" or "crack" in message.content.lower():
            await message.reply("I think you may be asking for illegal services or illegal advice. Please refer to rule #5 in the welcome channel!")
            await message.channel.send("If you think this was a mistake please reply with $report!")
            global CAN_REPORT
            CAN_REPORT = "yes"
            return
          else:
            pass
  await bot.process_commands(message)
 

Бот по какой-то причине ответит на любое сообщение, содержащее любое слово из words2:

 words2 = [
  "instagram",
  "snapchat",
  "roblox",
  "paypal",
  "facebook",
  "gmail",
  "fortnite",
  "minecraft",
  "apex",
  "youtube",
]
 

игнорирование того, содержит ли сообщение «взлом», что приводит к тому, что оно отвечает на каждое сообщение, в котором говорится о социальных сетях или играх. Цель состоит в том, чтобы проверить, верны ли ОБА условия.

Любая помощь будет признательна!

Ответ №1:

С помощью этой строки if "hack" or "crack" in message.content.lower(): вы в основном проверяете, является ли строка "hack" истинной или "crack" in message.content.lower() истинной.
Таким образом, проверка всегда возвращает значение true, потому "hack" что всегда будет истинной.

Способ исправить это было бы что-то вроде этого:

if "hack" in message.content.lower() or "crack" in message.content.lower():

Или, еще лучше, сделайте это так, как вы делаете при первой проверке:

 word_list = ["hack", "crack"]
if any(x in message.content.lower() for x in word_list):
 

Ответ №2:

Его просто просто добавьте :

 if words2 in message.content.lower():
    await message.delete()
    await ctx.send('that word is banned')