【发布时间】:2021-03-13 16:26:44
【问题描述】:
所以我正在构建一个机器人,当用户 dms 机器人“!Accept”时分配一个角色,问题是当我尝试对此进行测试时收到此错误
MessageReceived 处理程序引发了未处理的异常。: System.NullReferenceException:对象引用未设置为对象的实例。 在 Discord.Commands.SocketCommandContext..ctor(DiscordSocketClient 客户端,SocketUserMessage 消息) 在 C:\Users\sarah\source\repos\UBot_CodeV2\UBot_CodeV2\Program.cs:line 70 中的 UBot_CodeV2.Program.d__9.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 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");
}
这是我目前的任务代码
【问题讨论】:
-
如果用户通过 DM 执行此操作,则 Context.Guild 将为空。由于用户在 DM 中而不是公会中,因此上下文中没有公会。
-
所以不能通过dms?
-
如果这是一个私人机器人,你可以先使用
Context.Client.GetGuild(guildId)获得公会,然后再使用.GetRole。但如果这应该是公共机器人,您需要先映射guild和user。但在此之后事情会变得更加复杂。 -
它似乎不喜欢 Context.User 至少在手动设置公会之后错误仍然存在
标签: c# discord discord.net