为啥成员未定义?

Posted

技术标签:

【中文标题】为啥成员未定义?【英文标题】:Why member is undefined?为什么成员未定义? 【发布时间】:2021-05-24 04:52:03 【问题描述】:
    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
    
)

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

【问题讨论】:

你试过console.log(guild.members.cache)吗? undefined,因为guild.members.cache 中没有与id 属性匹配的元素e.d.user_id 那么如何定义成员呢? 【参考方案1】:

我建议您首先发出 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.
)

希望这会有所帮助,?

【讨论】:

以上是关于为啥成员未定义?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在已删除指针上调用非虚拟成员函数是未定义的行为?

为啥未定义 == 未定义但 NaN != NaN? [复制]

为啥在函数体内定义的内置类型的未初始化对象具有未定义的值?

为啥未定义 selectedimage?

为啥 jwtService 未定义?

为啥VC++编译器提示标识符未定义?