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

求助:Discord计数恢复机器人可检测消息但无法读取频道内容

Discord计数机器人无法读取消息内容的解决方案

核心问题原因

你的机器人能检测到消息但读取不到内容,是因为没有正确配置Discord的消息内容意图(Message Content Intent)。Discord v14+版本要求必须显式开启这个权限才能读取消息内容,该权限默认是关闭状态。

解决步骤

1. 在Discord开发者门户开启权限

  • 登录Discord开发者门户,进入你的应用页面
  • 切换到「Bot」标签页,在「Privileged Gateway Intents」区域开启Message Content Intent

2. 修改代码中的Intents配置

在Rick和Morty类的初始化方法里,添加intents.message_content = True配置:

class Rick(discord.Client):
    def __init__(self):
        intents = discord.Intents.default()
        intents.members = True
        intents.message_content = True  # 新增:开启消息内容读取权限
        super().__init__(intents=intents)
        self.count = 1
        self.mistake = None
        self.counting_channel_id = 1100778496130830446 # Replace with the ID of the counting channel

    # ... 其他代码保持不变

class Morty(discord.Client):
    def __init__(self):
        intents = discord.Intents.default()
        intents.members = True
        intents.message_content = True  # 新增:开启消息内容读取权限
        super().__init__(intents=intents)

    # ... 其他代码保持不变

额外优化建议

  • 目前Morty客户端未实现on_message逻辑,无法响应频道内消息,后续可根据需求补充对应处理代码
  • _count_with_morty方法中重复调用get_channel可以优化,提前获取频道对象以减少冗余操作:
    async def _count_with_morty(self, number):
        print("Counting with Morty:", number)
        await self.wait_until_ready()
        channel = self.get_channel(self.counting_channel_id)  # 提前获取频道对象
        while True:
            last_message = await channel.fetch_message(channel.last_message_id)
            if last_message.content.startswith("Rick counting:"):
                break
            await asyncio.sleep(1)
        await channel.send(f"Morty counting: {number}")
    

内容的提问来源于stack exchange,提问作者0utcast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 14:32:04