несколько выходов для «для слова в …»

#python #python-3.x #discord #discord.py

#python #python-3.x #Discord #discord.py

Вопрос:

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

 suicide = ['wanna die', 'kill myself', 'kill me', ...]
for word in suicide:
    if (message.content.lower().count(word) > 0) and (message.author.id == 712885407993561169):
        await message.delete()
    elif (message.content.lower().count(word) > 0) and (message.author.id != 712885407993561169):    
        #message for the sucicodal prevention link goes here
 

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

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

1. Вы должны перебирать каждое слово и устанавливать логическое значение «Обнаружено ключевое слово» и выполнять действие только после этого, основываясь на том, что это значение равно true.

Ответ №1:

Вы должны перебирать каждое слово и устанавливать логическое значение «Обнаружено ключевое слово» и выполнять действие только после этого, основываясь на том, что это значение равно true.

 suicide = ['wanna die', 'kill myself', 'kill me', ...]
delete_required = False
response_required = False

for word in suicide:
    if (message.content.lower().count(word) > 0) and (message.author.id == 712885407993561169):
        delete_required = True
    elif (message.content.lower().count(word) > 0) and (message.author.id != 712885407993561169):    
        keyword_detected = True

if delete_required:
    await message.delete()
elif response_required:
    embed = discord.Embed(description='n**National Suicide Prevention Lifeline**nHours: Available 24 hoursnLanguages: English, Spanishnn:paperclip: [Chat](https://suicidepreventionlifeline.org/chat/)n:globe_with_meridians: [Official Website](https://suicidepreventionlifeline.org/)', color=0x00ff00)
    embed.set_author(name = 'Help is availablenSpeak with a counselor today', icon_url=message.author.avatar_url)
    await message.channel.send(embed=embed)
 

Ответ №2:

Вы можете использовать любой, чтобы остановить проверку, как только слово обнаружено в строке сообщения.

 if (message.author.id != 712885407993561169) and any(word in message.content.lower() for word in suicide):
 

Ответ №3:

Попробуйте это:

 suicide = ['wanna die', 'kill myself', 'kill me', ...]
contained = False
for word in suicide:
    if (message.content.lower().count(word) > 0) and (message.author.id == 712885407993561169):
        await message.delete()
    elif (message.content.lower().count(word) > 0) and (message.author.id != 712885407993561169):    
        contained = True
if contained:
    #message for the sucicodal prevention link goes here
 

Он отправит сообщение только один раз, поскольку оно находится вне цикла, поэтому оно не будет повторяться, если оно содержит 2 или более слов.