javascript - 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);
实现这一点的正确方法是什么,或者是否有更好的方法?
解决方案
您可以在此代码中更改两个主要内容。首先,使用异步/等待承诺工作流程,而不是面向回调。它更容易理解并且更具可读性。其次,将您的问题分解为较小的功能,它很难快速理解,因此您可以在其他功能之间拆分一些任务。
同样很难理解您在这里遇到的问题,但是,如果您的问题是机器人正在收集自己的反应,您可以将反应过滤器更改为:
const reactionFilter = (reaction, user) => reaction.emoji.name === '️' && !user.bot;
推荐阅读
- shell - 如何使用 sed 提取模式之间的线
- reactjs - Redux 提供程序未在加载时为 React 组件提供道具
- python - jinja,烧瓶中的for循环
- twilio - Twilio SMS (Whatsapp):发送位置
- xml - 无法在 wordpress 网站上验证 RSS 提要
- memory - Vulkan,我是否需要以及何时从 VK_* 结构中释放内存
- linux - 如何检查输入设备是否在同一个物理设备中?
- php - 如何从输入值中拆分单词?
- apl - 从以秒为单位的 unix 时间到 ISO-8601 中的日期时间
- linux - Vim is not installing on fedora