如何让Discord Bot仅识别独立指令词'Ed'而非单词内嵌字符?
解决Discord Bot误识别名字为单词后缀的问题
你现在的问题是Bot会把单词里的'ed'(比如need里的)当成呼叫指令,加空格的判断方式又处理不了句首的情况。用正则表达式的单词边界匹配就能精准解决这个问题,它能准确识别独立的"Ed"/"ed",不管是在句首还是句子中间。
改进后的代码
首先导入Python自带的re正则模块,然后修改判断逻辑:
import re import random @bot.listen() async def on_message(positive): if positive.author == bot.user: return # 统一转小写后匹配,用正则定位独立的'ed' content_lower = positive.content.lower() if 'positivity' in content_lower and re.search(r'\bed\b', content_lower): await positive.channel.send(random.choice(positivity))
代码说明
re.search(r'\bed\b', content_lower)里的\b是单词边界,它会匹配两种合法呼叫场景:- "ed"在句子开头(比如"Ed, positivity"转小写后,开头的ed前是字符串边界,符合
\b规则) - "ed"前后是空格、标点这类非字母字符(比如"hey ed, positivity"里的独立ed)
- "ed"在句子开头(比如"Ed, positivity"转小写后,开头的ed前是字符串边界,符合
- 这种方式完全不会匹配到need、liked这类单词里的'ed'后缀。
可选优化
如果要支持用户输入带标点的呼叫(比如"Ed!"、"ed?"),当前正则依然有效——转小写后,标点会被排除在单词边界外,\b依然能识别到独立的ed。
内容的提问来源于stack exchange,提问作者nerveship
相关产品推荐
相关产品推荐

