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

C# 基于DSharp获取文本频道所有用户仅返回自身与机器人的问题

问题原因

  • channel.Users读取的是机器人本地缓存的用户数据,默认只会缓存和机器人有过交互、或者当前在线的少量用户,不会同步服务器全量成员。
  • Discord平台对机器人做了网关推送限制,未开启「服务器成员特权意图」的机器人,无法拉取到服务器全量成员列表,仅能获取到有限的缓存用户。

解决方案

步骤1:开启特权网关权限

登录Discord开发者后台,进入当前机器人的应用管理页,切换到「Bot」标签,下拉找到Privileged Gateway Intents区域,开启Server Members Intent选项。

步骤2:代码初始化时启用对应意图

以Discord.Net库为例,初始化机器人配置时需要显式声明启用成员相关的网关意图,示例代码:

var socketConfig = new DiscordSocketConfig
{
    // 基础权限叠加成员访问权限
    GatewayIntents = GatewayIntents.AllUnprivileged | GatewayIntents.GuildMembers
};
var client = new DiscordSocketClient(socketConfig);

步骤3:调整业务代码使用全量拉取接口

不要直接读取本地缓存的Users属性,改用官方提供的异步拉取全量用户的接口,修正后的代码如下:

var channel = ctx.Guild.GetChannel(id);
// 异步拉取当前频道内的全量用户数据
var users = await channel.GetUsersAsync().FlattenAsync();

foreach (var item in users)
{
    Console.WriteLine(item);
}

如果后续需要频繁读取成员数据,也可以先执行await ctx.Guild.DownloadUsersAsync();把当前服务器全量成员缓存到本地,之后再读取channel.Users也能获取到完整列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:18:04