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

Discord.jsV12消息ReactionAdd仅在机器人反应时触发

富波光
2023-03-14

将我的bot从V11升级到V12。1.1我有一条信息Reaction添加为

client.on("messageReactionAdd", (reaction, user) => {
  console.log("Reaction added");
  if (user.id == client.user.id){return console.log("Reaction is from Lillette");}
  const chanid = reaction.message.channel.id;
  console.log(chanid);
  let chanchk = (reactchannels.indexOf(chanid) > -1);
  console.log(chanchk);
  if(chanchk === false){return console.log("Reaction not in a valid channel");}


  for (var i = 0; i < reactchannels.length; i++){
    if (reactchannels[i] == chanid && i == 0){arrayn = reactnames.one, arrayr = reactroles.one, console.log(`Success at i=${i}`);}
    else if (reactchannels[i] == chanid && i == 1){arrayn = reactnames.two, arrayr = reactroles.two, console.log(`Success at i=${i}`);}
    else {arrayn = [], arrayr = [];}
    if(arrayn.length !== arrayr.length){/*return*/ console.log("Arrays not equal length");}

    const emoji = reaction.emoji.name; //"cat";
    const guildmem = reaction.message.guild.members.cache.get(user.id);
    for (var e = 0; e < arrayn.length; e++) {
      if (emoji == arrayn[e]) {
        console.log(`Found emoji named ${arrayn[e]}, corresponding role = ${arrayr[e]}`);
        var findrole = reaction.message.guild.roles.cache.find(g => g.name === arrayr[e]);
        if (findrole == null) {return console.log("User has reacted with a valid emoji, but the role does not exist in the guild");}//End if no roles found
        guildmem.roles.add(`${findrole.id}`);//assign role
        return; //no need to continue loop if role found
      }//End of if
      //else {console.log(`No roles found for ${arrayn[e]}`);}
    }//End of for e
  }//end of for i
  if (arrayn.length == 0 || arrayr.length == 0){/*return*/ console.log("END -- arrayn or arrayr lengths are equal to 0");}
});

是的,它不整洁,但它不会通过第2行控制台。日志(“添加的反应”) 除非bot对消息做出反应,在这种情况下,由于第3行的原因,bot返回。Channel/emoji/emojinames/arrayn/arrayr是在代码上面定义的,但在这一点上似乎并不相关。

有人能告诉我为什么用户(包括我自己和alt帐户)在与机器人相同的频道/消息中使用相同的表情符号时不注册反应事件(消防线2)?

编辑:在这两种情况下,响应的消息都是在打开bot后发送的。类似地,下面的代码中包含了一个原始反应事件,用于捕获和处理未缓存的消息(但由于更简单的MessageReactionaAdd不起作用,因此尚未调试)。


共有1个答案

谭曦
2023-03-14

似乎与下面的原始事件有冲突。上面的代码应该独立工作。

 类似资料:
  • 我不知道如何使用电报机器人诱导(触发)本地服务器向通道发送消息。 例如,从用户注册并连接电报的网站向用户发送通知。我们假设用户已经开始与bot对话,并准备好接收来自bot的消息。 我有一个单独的服务器,可以使用bot向服务器发送请求,但我不明白如何在这个电报机器人服务器上接收和处理请求。 我正在使用go电报-机器人-api库,此时服务器使用长轮询方法而不是webhooks。所以它通过更新通道接收一

  • 每次机器人被邀请到服务器时,我都想发送一条消息。然后它应该写这样的话:“你好,这是我的不和机器人” 到目前为止,我有这个代码,它不会产生错误,但也不会发送消息。

  • 我目前正在制作一个discord bot,并希望在服务器加入时在服务器的通道中发送一条消息,这是我到目前为止的代码。 当我运行这段代码时,什么都不会发生。我没有得到任何ERORR或输出。 如果有人能帮忙,那就太棒了。谢谢

  • 我正在发出一个有反应的帮助命令,机器人将添加一个反应,然后用户将作出反应,机器人将发布相应的帮助消息。我很困惑为什么我的代码不能工作,因为它没有抛出错误。 收到任何帮助都表示感谢:) Ps:我在嵌入的后面使用这个,所以我希望嵌入对它有一个反应,尽管我已经做了这一点,只是不知道如何在嵌入和反应之间有效地链接代码

  • 我有两个问题与编程电报机器人的PHP。 问题:当我尝试使用电报API发送更多行的文本时。根据此代码: 我在电报机器人中的文字如下: “这是我的短信。这是新线。” 你能帮我做这个吗? 谢谢你