当用户添加反应时指定角色(C#Discord.net)

当用户添加反应时指定角色(C#Discord.net),c#,discord,discord.net,C#,Discord,Discord.net,我想在有人使用discord API单击“OK”反应时为用户分配一个角色。然而,我在代码的第43行遇到了一个错误(如下所示) 控制台日志: Discord.WebSocket.DiscordSocketClient[0] Gateway: A ReactionAdded handler has thrown an unhandled exception. System.InvalidOperationException: This property has no value set.

我想在有人使用discord API单击“OK”反应时为用户分配一个角色。然而,我在代码的第43行遇到了一个错误(如下所示)

控制台日志:

 Discord.WebSocket.DiscordSocketClient[0]
  Gateway: A ReactionAdded handler has thrown an unhandled exception.
  System.InvalidOperationException: This property has no value set.
     at Discord.Optional`1.get_Value()
     at Template.Services.CommandHandler.OnReactionAdded(Cacheable`2 arg1, ISocketMessageChannel arg2, SocketReaction arg3) in C:\Users\Paul\Source\Repos\Discord.NET-Template\Template\Services\CommandHandler.cs:line 43
     at Discord.EventExtensions.InvokeAsync[T1,T2,T3](AsyncEvent`1 eventHandler, T1 arg1, T2 arg2, T3 arg3)
我的代码:

public override async Task InitializeAsync(CancellationToken cancellationToken)
{
    _client.MessageReceived += OnMessageReceived;
    _service.CommandExecuted += OnCommandExecuted;
    _client.ReactionAdded += OnReactionAdded;
    await _service.AddModulesAsync(Assembly.GetEntryAssembly(), _provider);
}
private async Task OnReactionAdded(Cacheable<IUserMessage, ulong> arg1, ISocketMessageChannel arg2, SocketReaction arg3)
{
    if (arg3.MessageId != 842517264716136469) return;
    if (arg3.Emote.Name != "✅") return;
    var role = (arg2 as SocketGuildChannel).Guild.GetRole(842522201881837585);
    await (arg3.User.Value as SocketGuildUser).AddRoleAsync(role); //This is line 43
}
public override异步任务初始化同步(CancellationToken CancellationToken)
{
_client.MessageReceived+=OnMessageReceived;
_service.CommandExecuted+=OnCommandExecuted;
_client.ReactionAdded+=OnReactionAdded;
wait _service.AddModulesAsync(Assembly.GetEntryAssembly(),_provider);
}
私有异步任务OnReactionAdded(可缓存arg1、ISocketMessageChannel arg2、SocketReaction arg3)
{
if(arg3.MessageId!=842517264716136469)返回;
如果(arg3.Emote.Name!“✅") 返回;
var role=(arg2作为SocketGuildChannel.Guild.GetRole(842522201881837585);
wait(arg3.User.Value作为SocketGuildUser.AddRoleAsync(角色);//这是第43行
}
arg3.User.Value
表达式有问题。 我很乐意在这个问题上得到任何帮助。

代码是正确的。 有必要在bot配置中启用网关意图

这些,位于“机器人”选项卡下的


屏幕截图:

不熟悉discord API,但错误告诉我,
SocketReaction.User
未设置或未传入
arg3
。您可以通过测试
if(arg3.User==Null)来确认这一点抛出一些异常
我强烈建议调试并检查arg3.User的外观。在Github上有一些建议,对于服务器来说,全新的用户可能会在这样的API方法中为null。