如何让Discord Python Bot替换消息指定内容后重新发送?
问题原因
- 你重复定义了两次
on_message事件处理函数,Discord.py的事件注册机制中后定义的同名函数会覆盖先定义的,所以两段逻辑无法同时生效 - 你现有的替换逻辑没有对原始消息内容做全局替换,只是固定发送
nice123,不符合替换整条消息中指定关键词的需求
解决方案
把两段逻辑合并到同一个on_message函数中,先做自身消息过滤,再执行关键词检测和替换逻辑,示例代码如下:
@client.event async def on_message(message): # 第一步:过滤Bot自身发送的消息,避免循环触发 if message.author == client.user: return # 配置需要替换的关键词映射,key是要匹配的原词,value是替换后的内容 replace_map = { 'test': 'nice123' # 后续要加其他替换规则直接往这个字典里加即可 } new_content = message.content # 遍历替换规则批量替换消息内容 for old_word, new_word in replace_map.items(): new_content = new_content.replace(old_word, new_word) # 只有内容发生了变化才发送,避免发送无效重复消息 if new_content != message.content: await message.channel.send(new_content) # 如果你使用的是discord.ext.commands.Bot而非基础Client,需要取消注释下方代码,否则后续注册的命令会失效 # await client.process_commands(message)
可选优化点
- 如果需要严格匹配完整单词而非子字符串,可以引入正则表达式的
\b边界匹配规则,避免误替换包含关键词的长单词 - 如果需要保留原消息的上下文关联,可以在发送时传入
reference=message参数,让新消息直接引用原用户的发送内容
内容的提问来源于stack exchange,提问作者Alex4701
相关产品推荐
相关产品推荐

