如何在Discord API中不借助任何库应用Gateway Intents?
配置Discord Gateway Intents的位置(NextJS环境)
要获取Discord服务器成员列表,你需要在两个关键位置配置Gateway Intents:Discord开发者平台,以及NextJS后端代码里的Discord Bot客户端初始化逻辑。
1. 在Discord开发者平台开启权限
- 登录Discord开发者平台,进入你的应用页面
- 切换到「Bot」标签页
- 找到「Privileged Gateway Intents」区域,开启「Server Members Intent」(这是获取成员列表必需的权限)
2. 在NextJS后端代码中配置Intents
假设你使用discord.js库操作Discord API,需在API路由的代码里初始化客户端时指定所需的Intents。
示例(App Router 格式)
在app/api/get-guild-members/route.js中:
import { Client, GatewayIntentBits } from 'discord.js'; export async function GET(request) { // 初始化Bot客户端,传入需要的Intents const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 必备:获取服务器基础信息 GatewayIntentBits.GuildMembers // 获取成员列表必需的Intent ] }); try { // 登录Bot await client.login(process.env.DISCORD_BOT_TOKEN); // 替换为你的目标服务器ID const guildId = 'YOUR_GUILD_ID'; const guild = await client.guilds.fetch(guildId); // 获取成员列表(大服务器需处理分页逻辑) const members = await guild.members.fetch(); // 整理返回数据 const memberData = Array.from(members.values()).map(m => ({ id: m.id, username: m.user.username, tag: m.user.tag, avatar: m.user.avatarURL() })); return new Response(JSON.stringify(memberData), { headers: { 'Content-Type': 'application/json' } }); } catch (error) { return new Response(JSON.stringify({ error: error.message }), { status: 500 }); } finally { // 登出客户端,释放资源 await client.destroy(); } }
示例(Pages Router 格式)
在pages/api/get-guild-members.js中:
import { Client, GatewayIntentBits } from 'discord.js'; export default async function handler(req, res) { if (req.method !== 'GET') { return res.status(405).json({ error: 'Method not allowed' }); } const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers ] }); try { await client.login(process.env.DISCORD_BOT_TOKEN); const guild = await client.guilds.fetch('YOUR_GUILD_ID'); const members = await guild.members.fetch(); const memberData = Array.from(members.values()).map(m => ({ id: m.id, username: m.user.username, tag: m.user.tag })); res.status(200).json(memberData); } catch (error) { res.status(500).json({ error: error.message }); } finally { await client.destroy(); } }
注意事项
- 确保你的Bot账号已加入目标服务器,且拥有「Server Members Intent」对应的权限
- NextJS的API路由是无状态的,每次请求都会创建新的客户端实例,务必在请求结束后调用
client.destroy()释放资源 - 若服务器成员数量超过1000,直接调用
guild.members.fetch()会触发分页,需额外处理分批获取逻辑
内容的提问来源于stack exchange,提问作者kty0205
相关产品推荐
相关产品推荐

