当前位置: 首页 > 知识库问答 >
问题:

如何判断使用JDA的discord机器人是否删除了反应?

饶元章
2023-03-14

我的代码中有一个MessageReactionRemve事件,每当删除反应时都会触发它。

然而,我也让我的机器人执行一些自动反应移除(移除用户的反应)。

我想防止机器人删除反应时触发MessageReactionRemoveEvent

我的代码用于防止由bot触发的MessageReactionRemoveEvent

if (event.getMember().getUser().equals(event.getJDA().getSelfUser())) return;

但是MessageReactionRemveEvents中的getUser()方法总是返回做出反应的用户的ID,而不是bot的ID。

我的问题是如何检测反应是否被机器人移除?

共有1个答案

夏建弼
2023-03-14

由于消息ReactionRemoveEvent不会返回bot ID,因此我无法验证bot是否删除了该反应。我用另一种方法来实现防止MessageReactionRemoveEvent被机器人移除时触发。

以下是方法:

  1. 添加一个布尔值,我们称之为triggerboolean trigger=true
  2. 确保使用。complete()删除反应,而不是。queue(),可以在此处看到差异:https://ci.dv8tion.net/job/JDA/javadoc/net/dv8tion/jda/api/requests/RestAction.html#queue()
  3. 移除反应后,dotrigger=false
  4. 从那以后。complete()方法将阻止当前线程,MessageReactionRemoveEvent中的代码完成之前不会调用MessageReactionAddEvent
  5. MessageReactionRemoveEvent中,只需应用if(!trigger)//do something,这意味着如果bot删除了反应,则不会执行if语句后的代码,如果用户删除了反应,则需要执行操作
  6. 在方法末尾,确保includestrigger=true 重置触发器
  7. (可选)包括trigger=trueMessageReactionAddEvent的开头

这对我来说就像魔法一样有效。

 类似资料:
  • 浏览器开启了 HSTS(HTTP Strict Transport Security)功能,它会告诉浏览器只能通过 https 访问,绝对禁止 http 方式,所以浏览器中输入http 后自动转成了 https。 疑问:如何得知浏览器是否开启了此功能? 原因:项目内需要跳转到新标签页,浏览器强制转换协议会报错(502)

  • cmf_is_mobile() 功能 判断是否为手机访问 参数 无 返回 boolean

  • 我下载了封装在zip文件中的proGuard,并将其解压缩到我的硬盘上。我没有以任何方式安装它(因为我不知道如何安装)。然后,我将添加到我的project.properties文件中。然后我做了一个“导出Android应用程序”,完全期待eclipse抱怨它不知道我的proGuard安装在哪里,但没有抱怨。事实上,一个新的apk文件出现在我的keystore中,一组文件(dump.txt等)出现在

  • 我有一台电脑,我故意安装了JDK。我有另一台带有JRE的计算机,除其他外,用于测试。然而,当我在这台计算机上使用一个java应用程序,然后在另一台计算机上试用时,它抱怨说需要JDK。如何检查系统上是否安装了JDK?注意:有问题的计算机是Mac。

  • 问题内容: 我在SUSE Linux Enterprise 10/11计算机上。我对运行Intel处理器的计算机场进行回归分析。我的某些测试失败,因为我的工具是使用需要AVX / AVX2指令支持的库构建的。我得到一个错误。 在Linux中,是否可以使用任何命令来确定CPU代码/家族名称是什么? 我相信AVX和AVX2可以分别从Intel SandyBridge和Haswell家族获得。 问题答案

  • cmf_is_mobile() 功能 判断是否为手机访问 参数 无 返回 boolean