所以我一直在努力让我的机器人向用户添加角色。
下面是获取用户信息的代码。
仅用于上下文 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");
}
它确实是空的。
知道问题可能是什么吗?
当user
已经null
或无法实现user
到IGuildUser
的转换时,结果将null
。 最后一个,就是您当前代码中的情况
GetUser()
函数返回一个SocketUser
,它是一个IUser
,而不是一个IGuildUser
。
如果你想要一个IGuildUser
,您首先必须确定要从哪个服务器IGuildUser
。因为同一用户所在的每个公会都会有不同的版本。
假设你已经知道你要获得的公会,并且你也在args中传递它,你可以改用类似的东西。
var guild = _client.GetGuild(args[2]);
var guildUser = guild.GetUser(args[1]);
如果您将用户作为参数,我建议您使用IGuildUser
而不是字符串。 D.net 将处理co版本,您将立即拥有一个IGuildUser
实例。
它也不太容易出现错别字等。
如果出于某种原因希望它是一个 ID 而不是用户,您可以请求一个 ulong 而不是一个字符串,这不需要您使用从string
到ulong
的转换。