Discord.Net中context.Guild.GetUser()仅能获取自身用户,其他返回null
解决Discord.Net中Guild.GetUser()仅能获取自身用户的问题
核心原因及修复方案
1. Intents配置未完全生效
即便在Discord开发者门户开启了Intents,代码里也必须明确指定启用GuildMembers Intent,否则机器人无法获取公会成员数据:
var socketConfig = new DiscordSocketConfig { GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildMembers | GatewayIntents.GuildMessages }; var client = new DiscordSocketClient(socketConfig);
注意:GuildMembers属于特权Intent,需要在开发者门户的Bot页面,找到"Privileged Gateway Intents"板块,开启"Server Members Intent"并保存,之后重启机器人。
2. 本地缓存无目标用户数据
GetUser()是从本地缓存读取数据的同步方法,如果目标用户不在缓存(比如机器人启动后用户才加入公会,或缓存未同步),就会返回null。改用异步方法GetUserAsync()直接从Discord API拉取数据即可:
IUser guildUser = await context.Guild.GetUserAsync(userID); if (guildUser != null) { Console.WriteLine(guildUser.Username); } else { Console.WriteLine("未找到指定用户"); }
3. 机器人权限不足
确保机器人在目标公会的角色拥有查看服务器成员的权限,若权限被限制,即便Intents配置正确,也无法获取用户数据。
内容的提问来源于stack exchange,提问作者Galatic Lua
相关产品推荐
相关产品推荐

