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
语句。
我知道如何让它对 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
语句。