首页 > 解决方案 > 为什么成员未定义?

问题描述

    client.on('raw', (e) => {
    if (e.t === 'MESSAGE_REACTION_ADD' && e.d.message_id === '813150433651851265' && e.d.emoji.name === "✅" )
    {
        const guild = client.guilds.cache.get(e.d.guild_id)
        const member = guild.members.cache.find(user => user.id === e.d.user_id)
        console.log(member)
        const role = guild.roles.cache.find(role => role.id === "812809799233699871")
        if (!member.roles.find(role => role.id === "812809799233699871")) member.roles.add(role)
        else return
    }
})

我正在尝试制作一个反应角色。但是成员未定义?有人知道为什么吗?

标签: javascriptnode.jsnpmdiscord.js

解决方案


我建议您首先发出 messageReactionAdd 事件,然后运行 ​​messageReactionAdd 事件并使用它进行配置,因为它比使用原始事件更容易,以下是如何发出 messageReactionAdd 事件,

client.on('raw', (packet) => {
if(!['MESSAGE_REACTION_ADD'].includes(packet.t)) return undefined;

let channel = client.channels.cache.get(packet.d.channel_id);
if(channel.messages.cache.has(packet.d.message_id)) return undefined;

channel.messages.fetch(packet.d.message_id).then(message => {
    const emoji = packet.d.emoji.id ? `${packet.d.emoji.name}:${packet.d.emoji.id}` : packet.d.emoji.name;
    const reaction = message.reactions.cache.get(emoji);
    if (reaction) reaction.users.cache.set(packet.d.user_id, client.users.cache.get(packet.d.user_id));

    if (packet.t === 'MESSAGE_REACTION_ADD') {
        client.emit('messageReactionAdd', reaction, client.users.cache.get(packet.d.user_id));
    }
})

})

现在您可以使用 messageReactionAdd 事件来为您的反应角色,

client.on('messageReactionAdd', (reaction, user) => {
  //Do your thing here.
})

希望这可以帮助,


推荐阅读