#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 или более слов.