discord.js - (discord.js v12) messageReactionAdd 仅适用于消息的所有者
问题描述
我对带有流动代码的messageReactionAdd有疑问:
bot.on("ready", () =>
{
// I cache the selected message declared before in message_id and channel_id
bot.channels.cache.get(channel_id).messages.fetch(message_id).then(m => {
console.log("Cached reaction message.");
}).catch(e => {
console.error("Error loading message.");
console.error(e);
});
})
bot.on("messageReactionAdd", (reaction, user) => {
if(reaction.emoji.name == "" && reaction.message.id === message_id)
try {
const role = reaction.message.channel.guild.roles.cache.find(role => role.name == "Membres");
reaction.message.guild.member(user).roles.add(role);
} catch {
console.log('Error : can\'t add the role');
}
});
问题是代码只适用于缓存消息的所有者,而不适用于频道中的其他用户。
你知道为什么吗 ?
解决方案
如果要创建反应角色系统,可以使用raw
bot.on('raw', event => {
if (event.t === 'MESSAGE_REACTION_ADD' || event.t == "MESSAGE_REACTION_REMOVE"){
let reaction = event.d.emoji
let userID = enevt.d.user_id
let messageID = event.d.message_id
let guildID = event.d.guild_id
let guild = bot.guilds.cache.get(guildID)
let role = guild.roles.cache.get(role_id) //role id is defined by yourself
let user = guild.members.cache.get(userID) //You need to enable server members intent to use that command
}
}
并且我创建了所有可以开发反应角色系统的 id 和对象。如果您没有启用服务器成员意图,您可以使用:
guild.members.fetch(userID).then(user => user.roles.add(role))
推荐阅读
- r - 下载最终数据表并在 shinydashboard 中绘图
- firebase - 通过 Cloud Functions 对用户进行身份验证
- python - 如何在 Django 模板中呈现 ChoiceField 选项
- python - 为什么内部标签中的文本被忽略,如何解决?
- javascript - 在Angular中重新加载时如何设置超时不会重复
- stata - 如何在stata中使用asdoc命令获取值标签作为表标题?
- microsoft-graph-api - Microsoft Graph Beta 端点元数据是否因名称冲突而无效?
- python - Conv Autoencoder 层级数
- flutter - socket 、 socketio 和 websockets 之间的区别
- c++ - 将元素添加到列表