首页 > 解决方案 > 使用 awaitReactions() 函数时如何修复超时错误?

问题描述

我已经在我的 Bot 中编写了这段代码,但它不能正常工作。该函数awaitReactions()总是超时:

message.channel.send({ embed: hEmbed }).then(embedreacted => {
        embedreacted.react('').then(() => embedreacted.react(''));

        const filter = (reaction, user) => {
            console.log("user \n" + user)
            return ['', ''].includes(reaction.emoji.name) && user.id === message.author.id;
        };

        embedreacted.awaitReactions(filter, { max: 1, time: 20000, errors: ['time'] })
            .then(collected => {
                console.log("col" + collected)
                const reaction = collected.first();
                if (reaction.emoji.name == '') {
                    let hlembed = new Discord.MessageEmbed()
                        Embed
                    embedreacted.edit({ embed: hlembed });
                } else if (reaction.emoji.name === '') {
                    let hfEmbed = new Discord.MessageEmbed()
                     Embed
                    embedreacted.edit({ embed: hfEmbed });
                }
                for (const [key, value] of Object.entries(reaction)) {
                    console.log(key, value);
                }

            })
            .catch(collected => {
                console.log("collected \n" + collected.keys())
            });

标签: javascriptnode.jsdiscord.jsbots

解决方案


在您的filter功能中:

const filter = (reaction, user) => {
    console.log("user \n" + user)
    return ['', ''].includes(reaction.emoji.name) && user.id === message.author.id;
};

message.author.id是机器人的用户 ID,因为正在“等待”反应的消息是由机器人创建的。因此,该条件user.id === message.author.id只会在机器人的用户对其做出反应时触发。

我不确定这是否是您想要的,但如果您希望它仅在用户对其做出反应(而不是机器人本身)时触发,只需执行user.id !== <Client>.user.id或什user.id !== message.author.id至作为快捷方式。

如果您希望仅收到创建此消息的先前消息的用户的反应,则需要将该<Message>对象设置为变量,然后使用user.id === variable.author.id


推荐阅读