📜  on_raw_reaction_add 示例 - Javascript (1)

📅  最后修改于: 2023-12-03 15:03:21.894000             🧑  作者: Mango

监听用户添加反应的事件 - on_raw_reaction_add

在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事件。