【问题标题】:Why I can not give a discord user a role? c#为什么我不能给不和谐用户一个角色? C#
【发布时间】:2019-03-31 13:56:37
【问题描述】:

我想在 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);

        }

    }
}

【问题讨论】:

  • 它是如何“不工作”的?发生什么了?你有例外吗?
  • 不,它什么都不做!在控制台中什么都没有。但是我在控制台打印了一行!
  • 哦,对不起! Discord.Net.Commands.dll 中的“System.NullReferenceException” 这是我的调试视图!
  • 但是当我在 if(reaction.Emote.Name == "PS4") 下写消息时代码工作正常

标签: c# discord discord.net


【解决方案1】:

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

尽管通过_client 获得channel,但您获取role 的方法似乎不合适。何苦创建一个新的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 是您的角色 ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 2018-10-22
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多