我不知道我从根本上做错了什么。
我正在尝试检查用户是否在某个服务器上(通过 UserID 和 ServerID),然后检查他的权限。
使用后DiscordSocketClient.GetGuild(serverid)
我得到一个 IGuild(它不是空的,我可以看到它的 ID)。但是当我尝试通过 IGuild.Users
获取用户时我得到一个空列表(IGuild.GetUserAsync()
返回一个空的 GuildUser)。
我必须先做些什么来加载它们吗?
public IGuildUser GetUserFromServer(ulong userid, ulong serverid) {
IGuildUser gu = null;
try {
IGuild g = _client.GetGuild(serverid);
Console.WriteLine("GuildID: "+g.Id);
gu=g.GetUserAsync(userid).Result;
Console.WriteLine("UserID: "+gu.Id);
} catch(Exception e) {
Console.WriteLine(e.Message);
}
return gu;
}
编辑 1:gu 为空且 Task<IGuildUser>.Status
返回 RanToCompletion
最佳答案
你的代码可以这样写
public IGuildUser GetUserFromServer(ulong userid, ulong serverid)
{
return _client.GetGuild(serverid)?.GetUser(userid);
}
如果找不到给定 id 的公会,则返回 null,否则尝试检索用户。该方法将返回 null(如果未找到用户)或将用户作为 IGuildUser。
有可能用户实际上在公会中,但他们不在缓存中,在这种情况下,您可以回退到休息请求。
public async Task<IGuildUser> GetUserFromServer(ulong userid, ulong serverid)
{
return _client.GetGuild(serverid)?.GetUser(userid) ?? await _client.Rest.GetGuildUserAsync(serverid, userid);
}
使用此选项,如果您无法从缓存中检索用户,则执行休息请求以确认用户确实不是公会成员。您可以通过访问作为 DiscordSocketClient
DiscordSocketRestClient
来执行此操作
关于c# - 尝试从 IGuild 获取 IGuildUser 时如何修复 "Nullpointer Exception",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57923738/