javascript - Discord.js 通过对消息做出反应来添加角色
问题描述
下面的代码不会像我预期的那样工作。我希望用户用复选标记做出反应,然后在控制台中记录一些内容。而不是机器人自己激活该功能,然后该功能再也不会被调用。
client.once('ready', () => {
console.log('Ready!');
const exampleEmbed = <unimportant>;
client.channels.cache.get("771041812638728235").send(exampleEmbed).then((message) => {
message.react('✅');
message.createReactionCollector(r => r.emoji.name == '✅')
.on('collect', r => {
console.log("nice");
});
});
});
解决方案
这可能是因为反应收集器是在message.react()
方法完成执行之前创建的,导致它自己激活。您可以使用async/await
或then()
回调来确保反应已完成,或者只需添加一行以确保用户不是收集器过滤器中的机器人。
// method 1:
client.channels.cache
.get('771041812638728235')
.send(exampleEmbed)
.then(async (message) => {
// ^^^^^
// make sure the function is async
await message.react('✅');
message
.createReactionCollector((r) => r.emoji.name == '✅')
.on('collect', (r) => {
console.log('nice');
});
});
// method 2:
client.channels.cache
.get('771041812638728235')
.send(exampleEmbed)
.then(message) => {
// .then() callback
message.react('✅').then(() =>
message
.createReactionCollector((r) => r.emoji.name == '✅')
.on('collect', (r) => {
console.log('nice');
}););
});
// method 3:
client.channels.cache
.get('771041812638728235')
.send(exampleEmbed)
.then((message) => {
message.react('✅');
message
// make sure the user who reacted isn't a bot
.createReactionCollector((r, u) => r.emoji.name == '✅' && !user.bot)
.on('collect', (r) => {
console.log('nice');
});
});
推荐阅读
- php - 在画廊中显示一些带有日期的图像
- c# - 将 Entity Framework Core 实体转换为 SQL 字符串
- wordpress - 获取媒体中的 ACF 自定义字段 - Twig/Timber
- git - 为什么管道会从 git log 中删除分支名称?
- php - 如何检查我的 html 打印的时间是否超过一页?
- android - 让片段通过接口与未启动它的活动进行通信
- javascript - 如何在 Antd React.js 中取消选中 Checkbox.Group
- python - 使用 python odeint scipy 求解一系列 odes 时拆分状态向量
- python - 带注释字段的 django-filter 过滤器
- python - ValueError:n_components=4 必须介于 0 和 min(n_samples, n_features)=2 之间,且 svd_solver='full'