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

反应事件不一致。js

越胤
2023-03-14

我正在试着用我的机器人做右舷代码,其他一切都很好。但是我正在努力让机器人忽略实际消息作者的反应。

这是我当前的代码:

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

共有2个答案

王弘和
2023-03-14

尝试这样做:

client.on('messageReactionAdd', (reaction, user) => {
    if (!reaction.message.author.id === user.id){
        //Do whatever you like with it
        console.log(reaction.name)
    }
});

注意:必须缓存消息。为此,你需要这样做

Client.channels.cache.get("ChannelID").messages.fetch("MessageID");

我猜你用的是V12discord.js

戎俊
2023-03-14

问题是messageReactionAdd采用两个参数;消息反应是第一个,应用表情符号的用户是第二个。当您编写reaction\u orig,message,user时,reaction\u orig是反应(这是正确的),但message是作为第二个参数做出反应的用户。用户变量将是未定义的

另一个问题是reaction_orig.users返回一个没有id属性的ReactionUserManager。幸运的是,user已经传递给您的回调,因此您可以使用它的ID。

此外,reaction_orig有一个消息属性,这个反应引用的原始消息,因此您可以从中获取其作者的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事件。如果您还想监听旧消息的反应,您需要在实例化客户端时为MESSAGECHANNELREACTION启用部分结构,如下所示:

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

您可以检查消息是否缓存,例如检查其作者属性是否为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);
});
 类似资料:
  • 我不知道为什么我的反应角色代码不起作用。如果有人能帮助我,我将不胜感激! message函数用于缓存消息,以便bot可以检测对该消息的反应,如果确实需要的话,Idk。 也没有错误,只是没有给我角色。

  • 问题内容: 我想念一些东西。这是一个非常简单的问候世界,目标是仅触发警报事件onClick。该事件在页面加载时触发,但在单击按钮时不触发。感谢您的帮助。这是一个jsFiddle,使它更易于查看:jsFiddle 问题答案: 我认为您会犯错,因为ReactJS只是JavaScript,我认为触发此事件的方式不起作用。您的onClick应该触发一个附加到React元素的函数,就像这样。

  • 我对javascript和discord非常陌生。js,有人能帮我,告诉我如何设置做出反应的用户的角色吗?我自己做这件事有困难。

  • 我一直试图让我的机器人回复用户时,他们的反应机器人表情,但没有运气,我希望有人能帮助我在这里,我只是一个初学者与不和谐。js。 这是我的代码,我只是需要帮助,当用户做出反应时,机器人会发送一条消息回来。

  • 问题内容: 我正在尝试使用Python中的pygame为应用程序制定简单的控件。我已经掌握了基础知识,但是碰到了奇怪的墙:我正在使用箭头键来控制角色。如果我按住一个箭头键,然后按住另一个箭头键(以对角线方向移动),则角色将按预期方式移动。但是,如果我释放了所按下的 第二个 键(同时仍然按住第 一个 键),即使我仍然按住 第一个 键,角色也会停止移动。这是我的简单运动代码: 现在,我自然对此感到非常

  • 我希望将反应添加到消息中的机器人,而不是我。有人能帮我吗?