discord.net c# :: 用户作为 IGuildUser returns 空?
discord.net c# :: user as IGuildUser returns null?
所以我一直在努力让我的机器人为用户添加角色。
这是获取用户信息的代码。
仅用于上下文 args[1] 将是用户 ID。
var user = _client.GetUser(Convert.ToUInt64(args[1]));
我通过 Console.WriteLine(user.Username);
检查它是否真的正确处理了它,它确实吐出了用户名。现在的问题是,当我尝试通过 await (user as IGuildUser).AddRoleAsync(role);
向所述用户添加角色时,它给我一个错误,声称它为空。
我这样做仔细检查:
if ((user as IGuildUser) is null)
{
Console.WriteLine("User is null");
}
它真的是空的。
知道问题出在哪里吗?
结果将是 null
当 user
已经是 null
或 将 user
转换为 IGuildUser
无法实现。
最后一个,就是你现在代码中的情况
GetUser()
函数returns你是SocketUser
,它是IUser
,而不是IGuildUser
。
如果您想要 IGuildUser
,您首先必须确定您想要 IGuildUser
来自哪个服务器。因为同一用户在他们所属的每个公会中会有不同的版本。
假设您已经知道您要获得的公会,并且您也在 args 中传递了它,您可以改为使用类似的东西。
var guild = _client.GetGuild(args[2]);
var guildUser = guild.GetUser(args[1]);
如果您将用户作为参数,我建议您使用 IGuildUser
而不是字符串。 D.net 将处理联合版本,您将立即拥有一个 IGuildUser
实例。
它也不太容易出现拼写错误等。
如果出于某种原因你希望它是一个 ID 而不是用户,你可以请求一个 ulong 而不是一个字符串,这样你就不需要使用从 string
到 ulong
的转换.
所以我一直在努力让我的机器人为用户添加角色。
这是获取用户信息的代码。
仅用于上下文 args[1] 将是用户 ID。
var user = _client.GetUser(Convert.ToUInt64(args[1]));
我通过 Console.WriteLine(user.Username);
检查它是否真的正确处理了它,它确实吐出了用户名。现在的问题是,当我尝试通过 await (user as IGuildUser).AddRoleAsync(role);
向所述用户添加角色时,它给我一个错误,声称它为空。
我这样做仔细检查:
if ((user as IGuildUser) is null)
{
Console.WriteLine("User is null");
}
它真的是空的。
知道问题出在哪里吗?
结果将是 null
当 user
已经是 null
或 将 user
转换为 IGuildUser
无法实现。
最后一个,就是你现在代码中的情况
GetUser()
函数returns你是SocketUser
,它是IUser
,而不是IGuildUser
。
如果您想要 IGuildUser
,您首先必须确定您想要 IGuildUser
来自哪个服务器。因为同一用户在他们所属的每个公会中会有不同的版本。
假设您已经知道您要获得的公会,并且您也在 args 中传递了它,您可以改为使用类似的东西。
var guild = _client.GetGuild(args[2]);
var guildUser = guild.GetUser(args[1]);
如果您将用户作为参数,我建议您使用 IGuildUser
而不是字符串。 D.net 将处理联合版本,您将立即拥有一个 IGuildUser
实例。
它也不太容易出现拼写错误等。
如果出于某种原因你希望它是一个 ID 而不是用户,你可以请求一个 ulong 而不是一个字符串,这样你就不需要使用从 string
到 ulong
的转换.