使用Python访问Discord服务器频道提取指定关键词消息的方案咨询
无Bot权限下提取Discord频道消息的可行方案
- 首先明确前提:OAuth2方案确实无法实现该需求,Discord当前未向第三方应用开放读取用户所在服务器频道消息的OAuth授权 scope,此前Stack Overflow的相关描述是准确的。
- 可行方案1:个人用户令牌调用官方API
作为已加入目标服务器的注册用户,你可以获取自己的账号访问令牌,直接调用Discord用户侧API拉取消息:- 令牌获取方式:打开Discord网页端,按F12打开开发者工具,在「网络」面板中筛选任意发送给Discord域名的请求,复制请求头中
Authorization字段的值即为你的个人用户令牌 - 调用方式:请求
/channels/{channel.id}/messages接口,请求头携带上述Authorization值,即可拉取你有权限查看的频道历史消息,拉取后可在本地过滤包含指定关键词的内容
注意:使用个人用户令牌批量调用API属于Discord服务条款禁止的「自机器人」行为,一旦被平台检测到会直接封禁账号,仅建议用于极小量级的测试场景
- 令牌获取方式:打开Discord网页端,按F12打开开发者工具,在「网络」面板中筛选任意发送给Discord域名的请求,复制请求头中
- 可行方案2:本地客户端自动化采集
不调用官方API,通过桌面自动化工具、浏览器脚本等方式读取你本地运行的Discord客户端/网页端的界面内容,匹配筛选关键词:- 该方案不会触发API侧的风险检测,账号封禁风险极低
- 缺陷是采集效率低,无法实现高频率、大范围的消息拉取,仅适合低频的小规模采集需求
/guilds/{guild.id}/channels 接口工作逻辑与使用方法 - 核心功能:该接口用于获取指定Discord服务器(即guild)下,你当前使用的身份(用户/Bot)有权限访问的所有频道列表,返回结果包含文字频道、语音频道、公告频道、频道分类等所有类型的频道对象
- 权限要求:
- 若使用Bot令牌调用,需要该Bot已加入目标服务器,且拥有「查看频道」的全局权限
- 若使用个人用户令牌调用,需要你本人为目标服务器的成员,且对应频道对你开放查看权限
- 调用方法:
- 请求方法为
GET - 路径参数
{guild.id}替换为目标服务器的数字ID,可在Discord开发者模式下右键服务器名称复制获取 - 请求头必须携带
Authorization字段,Bot令牌格式为Bot 你的Bot令牌值,个人用户令牌直接填写获取到的令牌值即可 - 可选查询参数:可添加
type参数过滤返回的频道类型,比如传0仅返回文字频道,传2仅返回语音频道
- 请求方法为
- 返回结果:返回一个JSON数组,每个元素为单个频道的结构化数据,包含频道ID、名称、类型、所属分类ID、权限配置等字段,你可以从返回结果中提取目标频道的ID,用于后续的消息拉取接口调用
内容的提问来源于stack exchange,提问作者Amara Fray
相关产品推荐
相关产品推荐

