Discord 机器人未分配角色(C# Discord.net)

Discord bot not Assigning roles (C# Discord.net)

所以我正在构建一个机器人,当用户 dms 机器人“!接受”时,它会分配一个角色,问题是当我尝试对此进行测试时,我收到了这个错误

MessageReceived 处理程序引发了未处理的异常。: System.NullReferenceException: 对象引用未设置到对象的实例。 在 Discord.Commands.SocketCommandContext..ctor(DiscordSocketClient 客户端,SocketUserMessage 消息) 在 UBot_CodeV2.Program.d__9.MoveNext() 在 C:\Users\sarah\source\repos\UBot_CodeV2\UBot_CodeV2\Program.cs:line 70 --- 从抛出异常的先前位置开始的堆栈跟踪结束 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Discord.EventExtensions.d__1`1.MoveNext() --- 从抛出异常的先前位置开始的堆栈跟踪结束 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Discord.WebSocket.DiscordSocketClient.d__132.MoveNext() 对象引用未设置为对象的实例。

    [Command("Accept")]
    public async Task Accepted()
    {
            var role = Context.Guild.GetRole(780162818729050114);
        if ((Context.Guild.GetUser(Context.User.Id).Roles.Contains(role))) return;
            await ((SocketGuildUser)Context.User).AddRoleAsync(role);
            await Context.User.SendMessageAsync("Welcome! Your next step is to open a ticket with !ticket open Verification");
        
    }

这是我目前的任务代码

我尝试了您正在使用的类似代码,我的代码运行正常。这是结果,我在代码中添加了一些注释供您调试。我会在代码后面详细解释。

[Command("test")]
public async Task TestAsyync()
{
    var guild = Context.Client.GetGuild(759016895390154754); // Debug if it's not null
    var role = guild.GetRole(776340732075573310); // Debug if it's not null
    var user = Context.Guild.GetUser(Context.User.Id); // Debug if it's not null

    if (!user.Roles.Contains(role))
    {
        await user.AddRoleAsync(role);
        LogUtils.Info("Add role");
    } else
    {
        LogUtils.Info("User already have role");
    }
}

个案

  • 如果 guild 为空,可能是您的机器人无法访问公会
  • 如果 roleuser 为空,则您的机器人意图可能存在问题 ()
  • 如果await user.AddRoleAsync(role); return禁止,您需要将您的机器人角色设置在其他角色之上

红色方块是我的机器人角色,紫色方块是我要授予的角色

实际上我今天才知道这个角色层次结构(Discord.NET assigning roles)