Почему я не могу дать дискорд пользователю роль? C # - PullRequest
0 голосов
/ 26 октября 2018

Я хочу дать клиенту 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 голосов
/ 27 октября 2018

Это явно похоже на NullReferenceException.Это может быть потому, что ваш var role может быть нулевым.Вы можете узнать это, если используете точки останова и запускаете отладчик.

Также ваш метод получения role, хотя channel через _client, кажется неуместным.Зачем создавать новую commandContext, просто получите роль от Cacheable channel.

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

Это должно дать вам роль.Также , если это ваш частный сервер, который вы кодируете, не беспокойтесь об использовании названия роли.Вместо этого используйте идентификатор роли, например,

var role = ((ITextChannel) channel).Guild.GetRole(437634977941684226);

. Вы можете получить идентификатор роли, упомянув роль и поместив перед ней \ (экранируя ее).

Как

\ @ bot

становится

<@ & 437634977941684226>

и 437634977941684226 ваша роль ID

...