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");
}

它真的是空的。

知道问题出在哪里吗?

结果将是 nulluser 已经是 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 而不是一个字符串,这样你就不需要使用从 stringulong 的转换.