You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:45:01