Вы должны обрабатывать события для некэшированных сообщений
Причина, по которой он не работает при перезагрузке, заключается в том, что кэш очищается при каждой перезагрузке бота. Только новые сообщения будут кешироваться. События реакции не запускаются для выгруженных сообщений.
Чтобы решить эту проблему, вам нужно будет прослушать raw
события. Это выглядит так:
// check for reactions on unloaded messages and trigger the appropriate events
client.on('raw', packet => {
if (!['MESSAGE_REACTION_ADD', 'MESSAGE_REACTION_REMOVE'].includes(packet.t)) return;
const channel = client.channels.get(packet.d.channel_id);
if (channel.messages.has(packet.d.message_id)) return;
channel.fetchMessage(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.get(emoji);
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)); }
});
});
Я не могу объяснить это лучше, чем то, что делает Эвелин Лашанс в оригинальном руководстве, я взял это из , так что если вы хотите понять, как это работаетПрочтите его там.
Этот фрагмент автоматически вызовет события messageReactionAdd
и messageReactionRemove
и передаст необходимые аргументы, так что вам не нужно будет делать ничего, кроме вставки копий в ваш файл. основной файл.