【问题标题】:Undefined error with await message reaction in discord.jsdiscord.js 中等待消息反应的未定义错误
【发布时间】:2021-03-07 11:44:53
【问题描述】:

我试图做到这一点,因此当您选择特定反应时,它会向频道发送有关您反应的消息。添加了反应,但是当我做出反应时,它返回一个错误,指出该表情符号未定义。当我在控制台登录时,collected.first() 返回为未定义。

            message.awaitReactions((reaction, user) => user.id == message.author.id && (reaction.emoji.name == '1️⃣' || reaction.emoji.name == '2️⃣' || reaction.emoji.name == '3️⃣' || reaction.emoji.name == '4️⃣' || reaction.emoji.name == '5️⃣'),
            { max: 1, time: 10000 }).then(collected => {

                console.log(collected.first())

                if (collected.first().emoji.name == '1️⃣') {

                    const channel = client.channels.cache.get(`764829720729747486`);
                    message.channel.send(`Successfully bought ${one}`)
                    channel.send(`<@${user.id}> Bought ${one}`).then(message => {
                        message.react('✅').then(r => {
                            message.react('❎');
                        });
                        message.awaitReactions((reaction, user) => user.id === '610294687701532691' && (reaction.emoji.name === '✅' || reaction.emoji.name === '❎'),
                            { max: 1, time: 86400000 }).then(collected => {
                                if (collected.first().emoji.name === '✅') {
                                    user.send('Order Accepted')
                                } else if (collected.first().emoji.name === '❎') {
                                    user.send('Order Declined')
                                }
                            })

                    })

                } else if (collected.first().emoji.name == '2️⃣') {

                    const channel = client.channels.cache.get(`764829720729747486`);
                    message.channel.send(`Successfully bought ${tow}`)
                    channel.send(`<@${user.id}> Bought ${tow}`).then(message => {
                        message.react('✅').then(r => {
                            message.react('❎');
                        });
                        message.awaitReactions((reaction, user) => user.id === '610294687701532691' && (reaction.emoji.name === '✅' || reaction.emoji.name === '❎'),
                            { max: 1, time: 86400000 }).then(collected => {
                                if (collected.first().emoji.name === '✅') {
                                    user.send('Order Accepted')
                                } else if (collected.first().emoji.name === '❎') {
                                    user.send('Order Declined')
                                }
                            })

                    })

                } else if (collected.first().emoji.name == '3️⃣') {

                    const channel = client.channels.cache.get(`764829720729747486`);
                    message.channel.send(`Successfully bought ${tho}`)
                    channel.send(`<@${user.id}> Bought ${tho}`).then(message => {
                        message.react('✅').then(r => {
                            message.react('❎');
                        });
                        message.awaitReactions((reaction, user) => user.id === '610294687701532691' && (reaction.emoji.name === '✅' || reaction.emoji.name === '❎'),
                            { max: 1, time: 86400000 }).then(collected => {
                                if (collected.first().emoji.name === '✅') {
                                    user.send('Order Accepted')
                                } else if (collected.first().emoji.name === '❎') {
                                    user.send('Order Declined')
                                }
                            })

                    })

                } else if (collected.first().emoji.name == '4️⃣') {

                    const channel = client.channels.cache.get(`764829720729747486`);
                    message.channel.send(`Successfully bought ${fo}`)
                    channel.send(`<@${user.id}> Bought ${fo}`).then(message => {
                        message.react('✅').then(r => {
                            message.react('❎');
                        });
                        message.awaitReactions((reaction, user) => user.id === '610294687701532691' && (reaction.emoji.name === '✅' || reaction.emoji.name === '❎'),
                            { max: 1, time: 86400000 }).then(collected => {
                                if (collected.first().emoji.name === '✅') {
                                    user.send('Order Accepted')
                                } else if (collected.first().emoji.name === '❎') {
                                    user.send('Order Declined')
                                }
                            })

                    })

                } else if (collected.first().emoji.name == '5️⃣') {

                    const channel = client.channels.cache.get(`764829720729747486`);
                    message.channel.send(`Successfully bought ${fif}`)
                    channel.send(`<@${user.id}> Bought ${fif}`).then(message => {
                        message.react('✅').then(r => {
                            message.react('❎');
                        });
                        message.awaitReactions((reaction, user) => user.id === '610294687701532691' && (reaction.emoji.name === '✅' || reaction.emoji.name === '❎'),
                            { max: 1, time: 86400000 }).then(collected => {
                                if (collected.first().emoji.name === '✅') {
                                    user.send('Order Accepted')
                                } else if (collected.first().emoji.name === '❎') {
                                    user.send('Order Declined')
                                }
                            })

                    })

                }

            }).catch(err => {
                message.reply(' Error')
                console.log(err)
            })

【问题讨论】:

  • 尝试collected[0],而不是数组从0开始计数——如果这不起作用,请尝试定义一个新的常量const first = collected.shift()
  • 我都试过了,它们都返回相同的错误 |它还说collected.shift() 不是函数
  • @JonathanStevens collected 是 Collection,而不是数组。

标签: javascript discord discord.js


【解决方案1】:

问题在于您没有将time 视为error。按照目前的情况,10 秒后,无论收集到多少反应,promise 都会以Collection 解决。您收到此错误是因为 Collection.prototype.first() 显然会在空集合上返回 undefined。

如果您希望承诺在时间结束后拒绝(执行catch 函数),您必须在Message.prototype.awaitReactions() 函数中添加一个附加选项。

此外,您可以通过简单地创建一组可能的表情符号名称并将其与当前表情符号名称进行一次检查来压缩您的过滤器功能。

message
 .awaitReactions(
  (reaction, user) =>
   user.id == message.author.id &&
   ['1️⃣', '2️⃣', '3️⃣', '4️⃣', '5️⃣'].includes(reaction.emoji.name),
  { max: 1, time: 10000, errors: ['time'] } // errors: ['time'] - reject after time is up
 )
 .then('...')
 .catch('...');

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2018-10-23
    • 2020-07-02
    • 2020-12-11
    • 1970-01-01
    • 2021-12-30
    • 2020-12-03
    • 1970-01-01
    • 2020-06-27
    相关资源
    最近更新 更多