discord.py 我想让机器人对你好、你好等做出反应

discord.py I wanna make the bot react to hi, hello etc

我知道如何让它对 hi、hello 等做出反应。问题是即使“hi”在单词中它也会做出反应,例如“chill”,我如何阻止它对“chill”做出反应,比如消息。我尝试使用空格,但它们最终会破坏得更多

@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}')

发生这种情况是因为使用 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() 函数会 return 我们一个 re.Match 对象,如果他在消息的内容中找到单词“hi”,所以它会进入 try 语句。