Discord.py如何实现不同频道触发不同的消息响应逻辑
问题根源
你重复定义了on_message事件处理函数,Discord.py的@bot.event装饰器会覆盖之前注册的同名事件,你第一个编写的对应Admin Commands频道逻辑的on_message不仅没有被注册到bot上,就算完成了注册也会被第二个带装饰器的on_message完全覆盖,所以只有Admin Chat的响应逻辑可以生效。
修复方案
将两个频道的响应逻辑合并到同一个on_message事件函数中即可,优化后的代码如下:
@bot.event async def on_message(message): # 统一过滤所有机器人发送的消息 if message.author.bot: return # 定义频道ID与对应回复内容的映射,后续新增规则只需修改该字典即可 channel_rule = { 780617002267967508: "Admin Commands <@287750380299747338>", 780599527664255003: "Admin Chat <@287750380299747338>" } # 匹配频道规则后触发响应 if message.channel.id in channel_rule: if ' ' in message.content: await message.channel.send(channel_rule[message.channel.id]) return
额外说明
上述代码去掉了冗余的bot.get_channel调用,直接对比消息自带的频道ID即可,不仅性能更高,也能避免频道对象获取失败导致的报错问题。
内容的提问来源于stack exchange,提问作者Rohin Hora
相关产品推荐
相关产品推荐

