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

通过频道ID获取文本频道所有用户仅返回本人和机器人如何解决

问题解决:Discord频道全量用户列表拉取

根因说明

Discord.NET 库中IChannel.Users属性默认读取本地缓存数据,仅包含已被客户端同步过的用户(通常是在线状态触发缓存、或和机器人有过交互的用户),不会主动拉取服务器全量成员,因此默认只能返回少量用户。

修复步骤

前置配置校验

  • 前往Discord开发者平台的机器人管理页,开启Server Members Intent网关意图,该开关是拉取全量成员的必要前提,仅配置频道/服务器权限无法生效
  • 确认机器人在目标服务器持有查看成员权限,且拥有目标文本频道的查看频道权限

代码修改

将原有逻辑调整为主动拉取全量成员后再读取,示例代码如下:

var channel = ctx.Guild.GetChannel(id);
// 主动拉取服务器全量成员到本地缓存
await ctx.Guild.DownloadUsersAsync();
var users = channel.Users;
foreach (var item in users)
{
    Console.WriteLine(item);
}

额外优化(可选)

如果需要严格筛选实际有权限访问该频道的用户,可以额外增加权限判断:

var validUsers = users.Where(u => channel.GetPermissionOverwrite(u).HasValue 
    ? channel.GetPermissionOverwrite(u).Value.ViewChannel == PermValue.Allow 
    : u.PermissionsIn(channel).ViewChannel);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:54:03