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

Discord API读取频道历史消息返回401未授权错误求助

问题原因

你现在遇到401的核心问题是授权模式选错了:

  • 你用的client_credentials是OAuth2的客户端凭证模式,这个模式仅用于应用自身查询公开基础信息,天生不具备访问服务器、频道内私有资源的权限,不管配置多少scope都无法调用频道消息接口。你能成功调用/users/@me只是因为该接口对客户端凭证模式开放了基础的应用身份查询能力,和频道资源的权限要求完全不互通。
  • 你当前配置的identify connections scope本身也没有读取频道消息的权限,就算换对授权流,也需要单独申请消息读取相关的权限。
长期稳定替代方案

最合规、最稳定的方案是使用Bot(机器人)账号,不要用浏览器提取的个人用户Token,也不要继续尝试客户端凭证模式:

  • 直接在开发者后台为你的应用创建Bot账号,将Bot拉入目标频道,给Bot分配「查看频道」「读取消息历史」的权限即可。
  • Bot的Token只要你不手动重置就长期有效,完全符合Discord的使用规则,不会出现临时失效、风控封号的问题,是官方推荐的接口调用方式。
  • 浏览器提取的个人用户Token本身违反平台服务条款,不仅有效期短,还会触发风控导致账号被封,不建议长期使用。
DiscordPy 实现方案

首先安装依赖:
pip install discord.py

前置配置:在开发者后台的Bot设置页,打开「Privileged Gateway Intents」分类下的「Message Content Intent」开关,否则无法读取消息内容。

最小实现代码:

import discord
from discord import Intents

# 配置所需权限
intents = Intents.default()
intents.messages = True
intents.message_content = True

client = discord.Client(intents=intents)
# 替换为你的目标频道数字ID
TARGET_CHANNEL_ID = 000000000000000000

@client.event
async def on_ready():
    print(f"登录成功,身份:{client.user}")
    target_channel = client.get_channel(TARGET_CHANNEL_ID)
    # limit=None 表示拉取频道全部历史消息,discord.py会自动处理接口限速
    async for message in target_channel.history(limit=None):
        print(f"[{message.created_at}] {message.author.name}: {message.content}")
    # 拉取完成后关闭连接
    await client.close()

# 替换为你自己的Bot Token
client.run("你的Bot Token")

注意:不要尝试用个人用户Token运行discord.py,这类自机器人行为属于违规操作,会直接导致个人账号被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:48:27