为啥成员未定义?
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.
)
希望这会有所帮助,?
【讨论】:
以上是关于为啥成员未定义?的主要内容,如果未能解决你的问题,请参考以下文章