我知道如何让它对你好、你好等做出反应。问题是,即使“你好”在一个词中,例如“寒意”,它也会做出反应,我如何阻止它对“寒意”之类的消息做出反应。我尝试使用空格,但他们最终只会破坏它更多
@bot.listen() #react to messages
async def on_message(message):
if message.guild is not None:
content = message.content
reaction = "?"
if 'hi' in content.lower():
try:
await asyncio.sleep(1)
await message.add_reaction(f"<{reaction}>")
print(f'added reaction {reaction} {content}')
except Exception as e:
print(f'error adding reaction {reaction} {content}')
答案 0 :(得分:2)
发生这种情况是因为使用 if 'hi' in content.lower()
您正在查看是否在字符串 hi
中找到了字符串 message.content
。解决此问题的最佳方法是使用 regex (regular expressions)。
您可以创建一个如下所示的函数,该函数将检查作为参数传递的字符串是否在另一个字符串中找到。与您所做的不同的是,此方法包含 \b
正则表达式标记中的单词,这些标记用于单词边界,这使我们可以仅搜索整个单词。
import re
def findCoincidences(w):
return re.compile(r'\b({0})\b'.format(w)).search
您可以简单地将其添加到您的代码中并像这样使用它:
# ...
if findCoincidences('hi')(content.lower()):
try:
await asyncio.sleep(1)
await message.add_reaction(f"<{reaction}>")
print(f'added reaction {reaction} {content}')
except Exception as e:
print(f'error adding reaction {reaction} {content}')
基本上这个新的 findCoincidences()
函数会返回一个 re.Match
对象,如果他在消息的内容中找到单词“hi”,那么它就会进入 try
语句。