反应事件discord.js

2023-12-04

我正在尝试用我的机器人编写右舷代码,其他一切都运行良好。但我试图让机器人忽略实际消息作者的反应。

这是我当前的代码:

client.on('messageReactionAdd', (reaction_orig, message, user) => {
  if (message.author.id === reaction_orig.users.id) return

  manageBoard(reaction_orig)
})

它返回以下错误:

if (message.author.id === reaction_orig.users.id) return;
                   ^
TypeError: Cannot read property 'id' of undefined

问题是messageReactionAdd有两个参数;消息反应作为第一个,应用表情符号的用户作为第二个。当你写的时候reaction_orig, message, user, reaction_orig是反应(这是正确的),但是message是做出反应的用户,因为它是第二个参数。这user变量将是undefined.

另一个问题是reaction_orig.users返回一个反应用户管理器没有一个id财产。幸运的是,user已经传递给您的回调,因此您可以使用它的 ID。

Also, reaction_orig has a message属性,该反应引用的原始消息,以便您可以从中获取其作者 ID。

您可以将代码更改为这样才能工作:

client.on('messageReactionAdd', (reaction_orig, user) => {
  if (reaction_orig.message.author.id === user.id) {
    // the reaction is coming from the same user who posted the message
    return;
  }

  manageBoard(reaction_orig);
});

但是,上面的代码仅适用于缓存的消息,即连接机器人后发布的消息。对旧消息做出反应不会触发messageReactionAdd事件。如果您还想听取对旧消息的反应,您需要启用部分结构MESSAGE, CHANNEL and REACTION实例化您的客户端时,如下所示:

const client = new Discord.Client({
  partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
});

您可以通过例如检查消息是否被缓存检查是否是author财产不是null。如果它是null, 你可以获取消息。现在,您已经有了消息作者和做出反应的用户,因此您可以比较他们的 ID:

// make sure it's an async function
client.on('messageReactionAdd', async (reaction_orig, user) => {
  // fetch the message if it's not cached
  const message = !reaction_orig.message.author
    ? await reaction_orig.message.fetch()
    : reaction_orig.message;

  if (message.author.id === user.id) {
    // the reaction is coming from the same user who posted the message
    return;
  }
  
  // the reaction is coming from a different user
  manageBoard(reaction_orig);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反应事件discord.js 的相关文章

随机推荐

  • 选择特定组件时,Inno Setup 禁用组件选择

    我希望能够根据所选的特定组件禁用对组件的选择 我无法通过组件嵌套来做到这一点 因为组件需要自行选择 但如果选择了另一个特定组件则不能选择 目前我使用NextButtonClick显示消息的事件 if IsComponentSelected
  • Html 复选框:更改颜色

    在开发 NET 应用程序期间 我遇到了一个问题 我想做的是改变一个简单的 Html 复选框的背景颜色 所以我使用了以下 HTML 代码
  • CSS 过渡自动高度不起作用[重复]

    这个问题在这里已经有答案了 我有一个网站 我决定用纯 CSS 片段替换基于 jquery 的切换框 当我使用固定高度值进行过渡 CSS 的最后几行 时 效果很好 但是使用auto值 缺少动画 只有高度变化才有效果 有没有办法将其与自动值一起
  • 我可以在 PHP 中使用 PDO 创建数据库吗?

    我想创建一个使用 PDO 与 MySQL 交互的类 我可以使用 PDO 创建新的 MySQL 表吗 是的你可以 The dsnPart 是 PDO 构造函数的第一个参数 不必有数据库名称 你可以简单地使用mysql host localho
  • `plot.密度` 将“xlim”扩展到我的数据范围之外。为什么以及如何解决它?

    使用下面的代码 我试图获取不同分布的密度图 dens lt apply df c 7 9 12 14 16 18 2 density plot NA xlim range sapply dens x ylim range sapply de
  • 为什么属性在编译期间需要显式键入?

    使用属性语法的编译要求在编译时知道接收器的类型 我可能不明白某些东西 但考虑到 Objective C 是一种动态语言 这似乎是一个损坏或不完整的编译器实现 属性 comment 定义为 property nonatomic retain
  • 在 Javascript 中捕获按键(Google 文档)

    我正在尝试编写一个小greasemonkey 脚本 书签 你有什么Google 文档 我想添加的功能需要一个 keypress keyup keydown 事件处理程序 这三个之一 不幸的是 Javascript 不是我的强项 而且我似乎无
  • 并发块如何运行单个 GPU 流式多处理器?

    我正在研究CUDA编程结构 学习后的感受是 创建块和线程后 每个块都会分配给每个流式多处理器 例如 我使用的是 GForce 560Ti 它有 14 个流式多处理器 因此一次可以将 14 个块分配给所有流式多处理器 但当我浏览一些在线材料时
  • 使用.NET读取Delphi TClientDataset文件

    我需要使用 NET 代码读取使用 Delphi 中的 TClientDataset 类编写的文件 提到的解决方案here对我不起作用 一个不在Windows平台上运行的dotNet程序 对我来说意味着您正在部署 Mono 应用程序 可能在
  • Android:如何从活动堆栈中完全删除活动?

    我有两个活动 FirstActivity 和 SecondActivity FirstActivity 有一个意图过滤器 MAIN LAUNCHER 和 DEFAULT SecondActivity 只是一个普通的 Activity And
  • C++ 数字精度和 fstream 截断

    我有一个包含数百个数字的 file txt 它们在点后有很多数字 最多 20 个 我需要在不截断的情况下获取所有数字 否则它们会在以下计算中引入错误 我用 matlab 生成了这些数字 因此它具有极高的精度 但现在我必须在我的程序中复制这种
  • 从行中选择第 i 个最高值并分配给新列的最快方法

    我正在寻找一种解决方案 将新列添加到现有数据框 数据表中 这是每个单独行中的第 i 个最高值 例如 如果我想要第四个最高值 则新列的第一行将包含 1 9 data lt data frame a c a a b b c a peak1 c
  • C# 自顶向下解析实现

    我想用 c 语言实现自上而下的解析 有没有任何资源可以告诉我方法 我的意思是实现或算法的良好方法和描述 例如 以下是一些实施步骤 1 发展语法2 LL1解析3 构造解析器 这些步骤是按顺序排列的 顺序对于给您正确的答案非常重要 以下 MSD
  • 如何放大和缩小画布中的文本大小,tkinter python

    我创建了一个画布小部件并添加了一些对象 例如矩形和文本 我还在鼠标滚轮上绑定了缩放功能 它适用于矩形 但是 它不适用于文本 我想让缩放也适用于文本 但我找不到方法 任何帮助 将不胜感激 class Layout tk Frame def i
  • 计算图像地图上多边形区域的宽度和高度

    是否可以使用坐标计算图像地图上每个多边形区域的宽度和高度 我有一个图像并使用具有多个不同大小的多边形的图像贴图 我需要找到每一个的中心点 要找到中心点 您需要找到多边形的最小和最大X和Y坐标 然后取每个多边形的中点以获得平均中心点 这是一个
  • 如何使用 C++/CLI 包装器将变量参数从托管传递到非托管?

    要在托管域中实现 params 变量参数 功能 我们在 c cli 中执行以下操作 例如 funcManaged int n array
  • 我可以用jqGrid实现延迟加载吗?

    我有一个包含超过 5000 条数据记录的网格 该数据每天都在增长 当我加载带有网格的页面时 网格几乎需要一分钟才能显示我必须一次显示 10 行的数据 那么是否可以用这个jqGrid实现延迟加载呢 这是我生成 JSON 字符串的操作 Requ
  • Javascript 函数压平多个输入数组

    我正在处理几个对象数组 这些对象将使用 React 渲染到 UI 中 这就是我正在做的事情的背景 我从不同的 API 获取不同的数据集 这些数据集是对象数组的数组 例如 age 23 name john age 24 name jane a
  • Python 组合列表——保留相对顺序

    不知道如何解决这个人 have L1 1 2 3 L2 a b c want 1 a 2 b 3 c import itertools L1 1 2 3 L2 a b c list itertools chain from iterable
  • 反应事件discord.js

    我正在尝试用我的机器人编写右舷代码 其他一切都运行良好 但我试图让机器人忽略实际消息作者的反应 这是我当前的代码 client on messageReactionAdd reaction orig message user gt if m