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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:54:18