我如何从await获得表情符号名称

时间:2020-03-17 21:12:15

标签: discord.js

所以在这里,我试图得到一个反应,并检查它反应了什么表情符号。但是,我不确定如何做到这一点。

      WarnMsg.react('⬅️')
      .then(() => WarnMsg.react('➡️'))
      .then(() => WarnMsg.react('?'))
      const filter = (reaction, user) => user.id === receivedMessage.member.user.id
      WarnMsg.awaitReactions(filter, { time: 30000, max: 1 })
      .then(collected => {
        console.log(collected)
        if(reaction.emoji.name === '?'){
          WarnMsg.delete()
          receivedMessage.delete()
        }
        else if(reaction.emoji.name === '⬅️'){
          if(PageNumber == 1)return
          PageNumber = PageNumber - 1
        }

这是我当前拥有的代码,但是我仍然对如何获取表情符号名称感到困惑。

1 个答案:

答案 0 :(得分:1)

对于您的代码,collected返回collection的反应,因此您需要获取第一个collection元素。

      WarnMsg.react('⬅️')
      .then(() => WarnMsg.react('➡️'))
      .then(() => WarnMsg.react('?'))
      const filter = (reaction, user) => user.id === receivedMessage.member.user.id
      WarnMsg.awaitReactions(filter, { time: 30000, max: 1 })
      .then(collected => {
        const reaction = collected.first()
        if(reaction.emoji.name === '?'){
          WarnMsg.delete()
          receivedMessage.delete()
        }
        else if(reaction.emoji.name === '⬅️'){
          if(PageNumber == 1)return
          PageNumber = PageNumber - 1
        }

但是,如果您想处理1次以上的反应,那是不正确的方法。因为如果将max: 1设置为max:40,则事件.then(collected => {仅在收集到所有反应或时间结束时触发。因此,您需要使用事件createReactionCollector,然后您才能处理所有反应。

一些示例:

const filter = (reaction, user) => {
            return ([`◀️`, '▶️'].includes(reaction.emoji.name) || [`667456912471883779`, '667456950207905824', '667456934718210059'].includes(reaction.emoji.id)) && user.id === message.author.id;
        };
        const collector = msg.createReactionCollector(filter, {
            max: 50,
            time: 60000,
        });
        collector.on('collect', (reaction, reactionCollector) => {
            if (reaction.emoji.name === `◀️`) {
                    // do somethink
            } else if (reaction.emoji.name === `▶️`) {
                            // do somethink
            } else if (reaction.emoji.id === `667456912471883779`) {
                       // do somethink
            } else if (reaction.emoji.id === `667456950207905824`) {
                        // do somethink
            } else if (reaction.emoji.id === `667456934718210059`) {
                    // do somethink
            }
        });
        collector.on('end', (reaction, reactionCollector) => {
            msg.clearReactions();
        });