📅  最后修改于: 2023-12-03 15:03:21.894000             🧑  作者: Mango
在Discord的JavaScript API中,我们可以使用on_raw_reaction_add
事件来监听用户添加反应的事件。该事件会在用户添加反应时触发,并提供一些有关反应信息的数据。
client.on('raw', async packet => {
// 只对“MESSAGE_REACTION_ADD”感兴趣
if (!['MESSAGE_REACTION_ADD'].includes(packet.t)) return;
// 获取反应数据
const { d: data } = packet;
const channel = await client.channels.fetch(data.channel_id);
const message = await channel.messages.fetch(data.message_id);
// 获取用户和表情符号数据
const user = await message.guild.members.fetch(data.user_id);
const emojiKey = (data.emoji.id) ? `${data.emoji.name}:${data.emoji.id}` : data.emoji.name;
const reaction = message.reactions.cache.get(emojiKey);
// 在控制台输出反应数据
console.log(`${user.user.username} added ${data.emoji.name} to ${message.author}'s message`);
});
on_raw_reaction_add
事件只有一个参数:packet
。该参数包含有关反应事件的所有数据。
事件会在发生时被触发,但理解反应事件的具体信息需要深入了解Discord的API。
在示例代码中,我们使用了message
, user
, emoji
, packet
等属性,这些属性都是根据Discord API文档中提供的内容所定义的。
尽管使用on_raw_reaction_add
事件可以监听用户添加反应的行为,但该事件的触发并不一定说明该反应是针对消息的。因此,监听该事件时应特别谨慎地处理反应数据。
另外,使用messageReactionAdd
事件可能会更好地满足某些需求,它提供的信息比on_raw_reaction_add
事件更详细,而且它只会在消息上触发。 但是,messageReactionAdd
事件是主机负载更大和消耗资源更多的事件,因此在需要更高的效率或较少的资源消耗时,可能需要优先考虑使用on_raw_reaction_add
事件。