【问题标题】:Check if a reacting user has a role检查反应用户是否有角色
【发布时间】:2019-04-30 17:43:27
【问题描述】:

所以,我正在为建议频道创建一个平台。这个想法是有一个投票,当它达到这样的上限时,它会自动接受或拒绝。我也在使员工可以批准或拒绝。好吧,我在这方面遇到了问题。

这个平台的图片(我删掉了昵称): The image

当它达到批准上限(10 个白色复选标记)时,它应该删除嵌入并发布一个新的,表示该建议已被批准。

可重现的代码示例:

client.on("messageReactionAdd", function (messageReaction, member) {
if (member.bot) return;
    if (messageReaction.message.channel.id == "516263179446124555") {
     if (messageReaction.emoji.name == "✅") {
      if (messageReaction.count >= 10) {
        messageReaction.message.channel.send("", {embed: {
          title: "Suggestion Approved",
          description: messageReaction.message.embeds[0].title + "\n" + messageReaction.message.embeds[0].description,
          author: {
            name: messageReaction.message.embeds[0].author.name,
            icon_url: messageReaction.message.embeds[0].author.iconURL
          },
          color: 3394611,
          footer: {
            text: "Why: The message got 10 ✅ reactions."
          }
        }})
      }
      messageReaction.message.delete();
    }
    if (messageReaction.emoji.name == "516258169035554817") {
      if (messageReaction.count >= 8) {
        messageReaction.message.channel.send("", {embed: {
          title: "Suggestion sent to Staff",
          description: messageReaction.message.embeds[0].title + "\n" + messageReaction.message.embeds[0].description,
          author: {
            name: messageReaction.message.embeds[0].author.name,
            icon_url: messageReaction.message.embeds[0].author.iconURL
          },
          color: 16764006,
          footer: {
            text: "Why: The message got 8 <:neutral:516258169035554817> reactions."
          }
        }})
      }

messageReaction.message.guild.channels.get("517331518843125760").send("", {embed: {
        title: "Suggestion to check",
        description: messageReaction.message.embeds[0].title + "\n" + messageReaction.message.embeds[0].description,
        author: {
          name: messageReaction.message.embeds[0].author.name,
          icon_url: messageReaction.message.embeds[0].author.iconURL
        },
        color: 16764006,
        footer: {
          text: "Approving/disapproving this won't change the embed in <#516263179446124555>."
        }
      }})
      messageReaction.message.delete();
    }
    if (messageReaction.emoji.name == "516258587845328906") {
      if (messageReaction.count >= 7) {
        messageReaction.message.channel.send("", {embed: {
          title: "Suggestion Rejected",
          description: messageReaction.message.embeds[0].title + "\n" + messageReaction.message.embeds[0].description,
          author: {
            name: messageReaction.message.embeds[0].author.name,
            icon_url: messageReaction.message.embeds[0].author.iconURL
          },
          color: 16724736,
          footer: {
            text: "Why: The message got 7 <:bad:516258587845328906> reactions."
          }
        }})
      }
    }
    if (messageReaction.emoji.name == "☑") {
      var staffMemberReacted = false;
      messageReaction.message.guild.members.forEach(function(GuildMember) {
        if (messageReaction.users.keyArray().includes(GuildMember.user) && (GuildMember.roles.has("501752627709870080") || GuildMember.roles.has("493436150019784704"))) {
          staffMemberReacted = true;
        }
      })
        console.log("reached manapprove")
      if (staffMemberReacted) {
        messageReaction.message.channel.send("", {embed: {
          title: "Suggestion Approved",
          description: messageReaction.message.embeds[0].title + "\n" + messageReaction.message.embeds[0].description,
          author: {
            name: messageReaction.message.embeds[0].author.name,
            icon_url: messageReaction.message.embeds[0].author.iconURL
          },
          color: 3394611,
          footer: {
            text: "Why: A owner or co-owner manually approved it."
          }
        }})
        messageReaction.message.delete();
      }
    }
    if (messageReaction.emoji.name == "517327626373824522") {
      var staffMemberReacted = false;
      messageReaction.message.guild.members.forEach(function(GuildMember) {
        if (messageReaction.users.keyArray().includes(GuildMember.user) && (GuildMember.id || GuildMember.roles.find)) {
          staffMemberReacted = true;
        }
      })

      if (staffMemberReacted) {
        messageReaction.message.channel.send("", {embed: {
          title: "Suggestion Rejected",
          description: messageReaction.message.embeds[0].title + "\n" + messageReaction.message.embeds[0].description,
          author: {
            name: messageReaction.message.embeds[0].author.name,
            icon_url: messageReaction.message.embeds[0].author.iconURL
          },
          color: 16724736,
          footer: {
            text: "Why: A owner or co-owner manually rejected it."
          }
        }})
        messageReaction.message.delete();
      }
    }
  }
})

当添加它到达的console.log 时,heroku 日志不会输出任何内容。我找了一个多小时的问题。

【问题讨论】:

  • if (messageReaction.emoji.name == "✅") { if (messageReaction.count &gt;= 10) { 将运行如果有 9 ❎ 然后有人做一个 ✅

标签: javascript discord.js


【解决方案1】:

请不要这样做。

Discord.js 有关于在这种情况下做什么的指南https://discordjs.guide/#/popular-topics/reactions?id=awaiting-reactions

我会效仿他们的例子并使用message.awaitReactions 总结一下,使用过滤器来设置您将考虑的可能反应,让一切变得更容易。

这是来自那个链接。

message.react('?').then(() => message.react('?'));

const filter = (reaction, user) => {
    return ['?', '?'].includes(reaction.emoji.name) && user.id === message.author.id;
};

message.awaitReactions(filter, { max: 1, time: 60000, errors: ['time'] })
    .then(collected => {
        const reaction = collected.first();

        if (reaction.emoji.name === '?') {
            message.reply('you reacted with a thumbs up.');
        }
        else {
            message.reply('you reacted with a thumbs down.');
        }
    })
    .catch(collected => {
        console.log(`After a minute, only ${collected.size} out of 4 reacted.`);
        message.reply('you didn\'t react with neither a thumbs up, nor a thumbs down.');
    });

【讨论】:

  • Heroku 非常不稳定,因此每当 awaitReactions 运行时,机器人可能会由于未处理的“错误”事件(heroku 方面)而崩溃。我需要一些与之兼容的东西
猜你喜欢
  • 1970-01-01
  • 2021-02-24
  • 2018-06-10
  • 1970-01-01
  • 2020-08-06
  • 2010-12-22
  • 2021-07-06
  • 2019-06-16
相关资源
最近更新 更多