Discord机器人异常问题:匹配指定短语却响应所有消息
问题原因
你的代码把存储短语的列表转成了字符串,导致message.content in List的逻辑完全错误——它不再检查消息是否匹配文件里的短语,而是检查消息内容是否是这个列表字符串的子串(比如消息里的任何字符只要出现在["xxx", "yyy"]这种格式里,都会被匹配),所以才会响应所有消息。此外,每次收到消息都重新读取文件也会影响性能。
修正后的代码
# 在机器人启动时读取一次文件,避免重复IO with open("D:/code/code/DIscord bot/myFile.txt", "r", encoding="utf-8") as f: # 去掉每行的换行符和空白字符,过滤空行 trigger_phrases = {line.strip() for line in f if line.strip()} @client.event async def on_message(message): # 忽略机器人自己发的消息 if message.author == client.user: return # 情况1:消息内容完全等于某个短语时回复 if message.content.strip() in trigger_phrases: await message.reply("REAL!") # 情况2:消息内容中包含任意一个短语时回复(如果需要这种逻辑就打开下面的代码) # for phrase in trigger_phrases: # if phrase in message.content: # await message.reply("REAL!") # break
关键修改点
- 提前读取文件:在机器人启动时就读取并处理好短语集合,不用每次收到消息都读文件,提升效率。
- 正确存储短语:用集合存储处理后的短语(去掉换行、空白,过滤空行),集合的查找速度比列表更快。
- 修正匹配逻辑:直接检查消息内容(或内容包含)是否在短语集合里,而不是错误的字符串子串匹配。
内容的提问来源于stack exchange,提问作者Isohel
相关产品推荐
相关产品推荐

