为什么我不能给不和谐的用户一个角色? C#

Why I can not give a discord user a role? c#

我想在 ReactionAdded 事件中给 Discord 客户端一个角色。为什么这不起作用?

public static async Task AddedReactEvent(Cacheable<IUserMessage, ulong> message, ISocketMessageChannel channel, SocketReaction reaction)
{
    if (channel.Id == 504031332612046881)
    {
        if (reaction.Emote.Name == "PS4")
        {
            var context = new CommandContext(_client, message.Value);
            var role = context.Guild.Roles.FirstOrDefault(x => x.Name == "PS4");

        Console.WriteLine(role.Color.ToString());
            await (reaction.User.Value as IGuildUser).AddRoleAsync(role);

        }

    }
}

明显是NullReferenceException。这可能是因为您的 var role 可能为空。如果您使用断点和 运行 调试器,您可以找到它。

另外,您通过 _client 通过 channel 获得 role 的方法似乎不合适。为什么要创建一个新的 commandContext 只是从 Cacheable channel.

中获取角色
var role = ((ITextChannel) channel).Guild.Roles.FirstOrDefault(x => x.Name == "PS4");

这应该会让你得到这个角色。另外 if 这是你的私人服务器,你正在编码,不要费心使用角色名称。而是使用像

这样的角色 ID
var role = ((ITextChannel) channel).Guild.GetRole(437634977941684226);

您可以通过提及角色并在其前面放置 \(转义)来获取角色 ID。

喜欢

\@bot

变成

<@&437634977941684226>

437634977941684226 是你的角色ID