首页 > 解决方案 > RichEmbed 使用硬编码反应更新 (Discord.js)

问题描述

我按照其他一些问题为丰富的嵌入制作了一个反应收集器(我确实先尝试了 awaitReaction 方法,但我无法应用它)。现在我遇到了一个问题,即一旦机器人添加了反应,编辑就会发生,而我希望等待用户输入相同的内容。我在下面添加了我的原始代码。

                        let botembed = new Discord.RichEmbed()
                            .setTitle(data.englishTitle)
                            .setAuthor(data.title + ", " + data.synonyms)
                            .setColor(rcolor)
                            .setFooter(data.url, data.thumbnail)
                            .setThumbnail(data.picture)
                            .addField("Score", data.score)
                            .addField("Episodes", data.episodes)
                            .addField("Description", "React");
                        return message.channel.send(botembed).then(msg => msg.react('️'))
                            .then(mReaction => {
                                const reactionFilter = (reaction, user) => reaction.emoji.name === '️';
                                const collector = mReaction.message
                                    .createReactionCollector(reactionFilter, {
                                        time: 15000
                                    });
                                collector.on('collect', r => {
                                    const newEmbed = new Discord.RichEmbed()
                                        .setTitle(data.englishTitle)
                                        .setAuthor(data.title + ", " + data.synonyms)
                                        .setColor(rcolor)
                                        .setFooter(data.url, data.thumbnail)
                                        .setImage(data.picture)
                                        .addField("Score", data.score)
                                        .addField("Episodes", data.episodes)
                                        .addField("Description", data.synopsis);

                                    r.message.edit(newEmbed)
                                        .catch(console.log);
                                });
                            })
                            .catch(console.log);

实现这一点的正确方法是什么,或者是否有更好的方法?

标签: javascriptdiscorddiscord.js

解决方案


您可以在此代码中更改两个主要内容。首先,使用异步/等待承诺工作流程,而不是面向回调。它更容易理解并且更具可读性。其次,将您的问题分解为较小的功能,它很难快速理解,因此您可以在其他功能之间拆分一些任务。

同样很难理解您在这里遇到的问题,但是,如果您的问题是机器人正在收集自己的反应,您可以将反应过滤器更改为:

const reactionFilter = (reaction, user) => reaction.emoji.name === '️' && !user.bot;

推荐阅读