javascript - 使用 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())
});
解决方案
在您的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
推荐阅读
- c++ - 使用 cout 和 cin 时,“<<”和“>>”运算符在做什么,我们为什么要使用它们?
- javascript - 用jquery选择相邻的div
- html - 即使调整窗口大小,也将 div 元素放置在图像顶部
- android - 数据未显示在使用 firebase ui 的 firebase 的 recyclerview 中
- python - for循环和追加的Python问题
- ansible - 如何在使用 terraform 创建的 kmv 中运行 ansible playbook
- debugging - How to run and debug a snap application with GDB?
- javascript - TypeError:无法读取未定义的属性“get”-Vue-resource 和 Nuxt
- node.js - Nodemon 已安装,但不运行服务器
- typescript - 在 gatsby 中将 typescript 标记的联合添加到 graphql 查询的结果