messageReactionAdd обнаруживает только кешированные сообщения - PullRequest
0 голосов
/ 01 августа 2020

К сожалению, я обнаружил, что событие client.on("messageReactionAdd") срабатывает только для реакций на сообщения, которые были написаны после моего разногласия. js бот вышел в онлайн. Как мне тогда закодировать функцию роли реакции или что-то еще?

Я действительно застрял. После исследования я узнал о https://github.com/AnIdiotsGuide/discordjs-bot-guide/blob/master/coding-guides/raw-events.md, но все же после того, как я скопировал и вставил это в свой основной файл, даже кешированные реакции не запускались:

client.on('raw', packet => {
    // We don't want this to run on unrelated packets
    if (!['MESSAGE_REACTION_ADD', 'MESSAGE_REACTION_REMOVE'].includes(packet.t)) return;
    // Grab the channel to check the message from
    const channel = client.channels.get(packet.d.channel_id);
    // There's no need to emit if the message is cached, because the event will fire anyway for that
    if (channel.messages.has(packet.d.message_id)) return;
    // Since we have confirmed the message is not cached, let's fetch it
    channel.fetchMessage(packet.d.message_id).then(message => {
        // Emojis can have identifiers of name:id format, so we have to account for that case as well
        const emoji = packet.d.emoji.id ? `${packet.d.emoji.name}:${packet.d.emoji.id}` : packet.d.emoji.name;
        // This gives us the reaction we need to emit the event properly, in top of the message object
        const reaction = message.reactions.get(emoji);
        // Adds the currently reacting user to the reaction's users collection.
        if (reaction) reaction.users.set(packet.d.user_id, client.users.get(packet.d.user_id));
        // Check which type of event it is before emitting
        if (packet.t === 'MESSAGE_REACTION_ADD') {
            client.emit('messageReactionAdd', reaction, client.users.get(packet.d.user_id));
        }
        if (packet.t === 'MESSAGE_REACTION_REMOVE') {
            client.emit('messageReactionRemove', reaction, client.users.get(packet.d.user_id));
        }
    });
});

1 Ответ

1 голос
/ 01 августа 2020

Вы можете использовать партиалы сообщений, чтобы просмотреть сообщения, которые были отправлены до того, как бот был переведен в сеть.

...