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

它确实是空的。

知道问题可能是什么吗?

user已经null或无法实现userIGuildUser的转换时,结果将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 而不是一个字符串,这不需要您使用从stringulong的转换。

相关内容

  • 没有找到相关文章

最新更新