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

时间:2018-10-26 19:08:30

标签: c# discord discord.net

我想让Discord客户在ReactionAdded事件中扮演角色。为什么这行不通?

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

        }

    }
}

1 个答案:

答案 0 :(得分:0)

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

同样,通过role通过channel获取_client的方法似乎不合适。为什么要费心创建一个新的commandContext,只需从Cacheable channel获得角色即可。

var role = ((ITextChannel) channel).Guild.Roles.FirstOrDefault(x => x.Name == "PS4");

这应该让您扮演角色。同样,如果它是您的私有服务器,那么您要编写代码就不必使用角色名称了。而是使用

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

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

  

\ @ bot

成为

  

<@&437634977941684226>

并且437634977941684226是您的roleID