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

如何在Node.js中使用Discord OAuth2的messages.read权限?

在Node.js中使用Discord OAuth2的messages.read权限

核心说明

messages.read是Discord OAuth2的受限权限,仅允许读取用户与你的应用的直接消息历史,无法访问用户和其他用户/服务器的对话内容。官方文档提及较少,是因为它的使用场景有限,且需要严格遵守Discord开发者政策。

实现步骤

  1. 配置OAuth2应用

    • 登录Discord开发者平台,进入你的应用后台,在OAuth2 > URL Generator页面:
      • 勾选identify(获取基础用户信息)和messages.read权限
      • 设置合法的重定向URL(例如http://localhost:3000/callback)
      • 复制生成的授权链接,引导用户完成授权
  2. Node.js后端处理授权流程
    用express和axios实现基础的授权回调逻辑(也可使用discord-oauth2这类专用库简化操作):

    const express = require('express');
    const axios = require('axios');
    const app = express();
    
    // 替换为你的应用信息
    const CLIENT_ID = '你的应用ID';
    const CLIENT_SECRET = '你的应用密钥';
    const REDIRECT_URI = 'http://localhost:3000/callback';
    
    // 跳转至Discord授权页
    app.get('/auth', (req, res) => {
      const authUrl = `https://discord.com/api/oauth2/authorize?client_id=${CLIENT_ID}&redirect_uri=${encodeURIComponent(REDIRECT_URI)}&response_type=code&scope=identify%20messages.read`;
      res.redirect(authUrl);
    });
    
    // 处理授权回调,获取访问令牌
    app.get('/callback', async (req, res) => {
      const { code } = req.query;
      try {
        const tokenResp = await axios.post('https://discord.com/api/oauth2/token', new URLSearchParams({
          client_id: CLIENT_ID,
          client_secret: CLIENT_SECRET,
          code: code,
          grant_type: 'authorization_code',
          redirect_uri: REDIRECT_URI,
          scope: 'identify messages.read'
        }), {
          headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        });
    
        const accessToken = tokenResp.data.access_token;
        res.send(`已获取访问令牌:${accessToken},可用于调用消息接口`);
      } catch (err) {
        console.error(err);
        res.status(500).send('授权失败');
      }
    });
    
    app.listen(3000, () => console.log('服务运行在3000端口'));
    
  3. 调用API读取消息
    拿到access_token后,调用Discord的直接消息相关接口:

    // 获取用户与应用的直接消息频道列表
    const channels = await axios.get('https://discord.com/api/users/@me/channels', {
      headers: { 'Authorization': `Bearer ${accessToken}` }
    });
    
    // 读取指定频道的消息(仅用户与应用的对话频道)
    const messages = await axios.get(`https://discord.com/api/channels/${channels.data[0].id}/messages`, {
      headers: { 'Authorization': `Bearer ${accessToken}` },
      params: { limit: 50 } // 单次最多返回50条消息
    });
    console.log(messages.data);
    

关键注意事项

  • messages.read权限需要用户明确授权,且你的应用必须有合理的使用场景,否则Discord可能拒绝你的应用发布审核
  • 不得存储用户的消息数据,只能用于当前会话的业务需求,必须严格遵循Discord隐私政策
  • 若调用API返回403错误,需检查权限是否正确申请、用户是否完成授权

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:35:02