如何在Node.js中使用Discord OAuth2的messages.read权限?
在Node.js中使用Discord OAuth2的
messages.read权限 核心说明
messages.read是Discord OAuth2的受限权限,仅允许读取用户与你的应用的直接消息历史,无法访问用户和其他用户/服务器的对话内容。官方文档提及较少,是因为它的使用场景有限,且需要严格遵守Discord开发者政策。
实现步骤
配置OAuth2应用
- 登录Discord开发者平台,进入你的应用后台,在
OAuth2 > URL Generator页面:- 勾选
identify(获取基础用户信息)和messages.read权限 - 设置合法的重定向URL(例如
http://localhost:3000/callback) - 复制生成的授权链接,引导用户完成授权
- 勾选
- 登录Discord开发者平台,进入你的应用后台,在
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端口'));调用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
相关产品推荐
相关产品推荐

