gpt4 book ai didi

c# - 尝试从 IGuild 获取 IGuildUser 时如何修复 "Nullpointer Exception"

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:03 26 4
gpt4 key购买 nike

我不知道我从根本上做错了什么。

我正在尝试检查用户是否在某个服务器上(通过 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com