Странное поведение реакции, разлад в системе билетов. js - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь создать собственную систему тикетов для моего сервера Discord с помощью моего Discord. js bot. Если пользователь реагирует на определенное сообщение с помощью эмодзи ?, я хочу, чтобы он сначала немедленно удалил реакцию, а затем продолжил. Таким образом, в основном количество реакций остается на 1 (единственное, что было у моего бота). Проблема в том, что если я перезапускаю бота и реагирую на сообщение, он не удаляет мою реакцию, однако, когда я вручную удаляю его и повторяю попытку, он работает!

Вот мой код:

client.on("messageReactionAdd", async (messageReaction, user) => {
    if (messageReaction.partial) {
        try {
            await messageReaction.fetch();
        } catch (error) {
            console.log("couldn't fetch message1", error);
        }
    }
    let msg = messageReaction.message;
    if (msg.id === config.support_msg_id) {
        const userReactions = msg.reactions.cache.filter(reaction => reaction.users.cache.has(user.id));
        try {
            for (const reaction of userReactions.values()) {
                await reaction.users.remove(user.id);
            }
        } catch (error) {
            console.error('Failed to remove reactions.');
        }
    }
});

1 Ответ

0 голосов
/ 04 августа 2020

Проблема в том, что событие messageReactionAdd запускается только тогда, когда реакция добавляется к сообщению cached , как указано в Discord. js docs :

Излучается всякий раз, когда реакция добавляется к кэшированному сообщению.

Это можно исправить, добавляя каждое сообщение в кеш при запуске бота, используя следующий код:

client.on('ready', () => {
  client.guilds.cache.each(guild => {
    guild.channels.cache.each(channel => {
      if (channel.type === 'text' || channel.type === 'dm') {
        channel.messages.fetch();
      }
    });
  });
});

Если вы хотите предотвратить добавление слишком большого количества сообщений в кеш, вы можете передать ChannelLogsQueryOptions функции MessageManager.fetch().

...