discord.js DiscordAPIError: Неизвестное сообщение

#javascript #discord #discord.js

Вопрос:

У меня есть массив, который я просматриваю с помощью реакций на встраивание. Когда реакция нажата, сообщение должно быть удалено, и функция повторяется. При втором нажатии на кнопку реакции я получаю эту ошибку:

 (node:12908) UnhandledPromiseRejectionWarning: DiscordAPIError: Unknown Message
 

При каждом реакционном нажатии после первого количество напечатанной ошибки удваивается.

Код:

 function movieChoiceEmbed(movies, message, count)
{
    pagecount = count;

    message.channel.send({embed: {
        color: '#D733FF',
        title: 'Choose movie',
        fields: [
            {
                name: movies[pagecount].title,
                value: movies[pagecount].description,
                inline: true,
            },
            {
                name: movies[pagecount 1].title,
                value: movies[pagecount 1].description,
                inline: true,
            },
            {
                name: 'u200b',
                value: 'u200b',
                inline: false,
            },
            {
                name: movies[pagecount 2].title,
                value: movies[pagecount 2].description,
                inline: true,
            },
            {
                name: movies[pagecount 3].title,
                value: movies[pagecount 3].description,
                inline: true,
            },
        ],
        timestamp: new Date(),
        footer: {
            icon_url: client.user.displayAvatarURL(),
            text: 'Andrea Gafa'
        }
      }})
        .then(sentEmbed => {
            sentEmbed.react("⏪");
            sentEmbed.react("⏩");
        })
        .catch();

    client.on("messageReactionAdd", async (reaction, user) => { // When a reaction is added
        if(user.bot) return; 

        if(reaction.emoji.name == "⏪")
        {
            await reaction.message.delete();
            count -= 4;
            movieChoiceEmbed(movies, message, count);
        }else if(reaction.emoji.name == "⏩")
        {
            await reaction.message.delete();
            count  = 4;
            movieChoiceEmbed(movies, message, count);
        }
        return;
    });
}
 

Вместо этого я попытался удалить последнее сообщение с тем же результатом:

 await message.channel.lastMessage.delete();
 

Есть какие-нибудь зацепки? Я здесь совсем заблудился.

Редактировать:

Проблема, по-видимому, в том, что событие messagereactionadd находится внутри функции. Если поместить его снаружи, это устранит проблему.

Комментарии:

1. Вы уверены, что не удаляли его раньше? Возможно, в другом случае или, возможно, у вас открыто несколько оболочек

2. Спасибо за ваш комментарий, это сообщение нигде не затрагивается за пределами этой функции.

3. Будет ли сообщение удалено в любом случае?

4. Да, последнее сообщение всегда удаляется, поэтому программа технически работает. Проблема в том, что, поскольку количество ошибок удваивается каждый раз, возникает огромная задержка после четвертого удаления и далее.

5. Вы удаляете его несколько раз

Ответ №1:

ваша ошибка в том, что вы получаете обещание, которое не поймано. У вас есть несколько асинхронных вызовов, возвращающих обещания, один или несколько из которых вызывают ошибку. Я бы добавил к ним блоки catch, и тогда это поможет вам определить, в чем заключается ваша проблема. Например:

 await reaction.message.delete();
 

может быть изменен на:

 await reaction.message.delete()
     .then(() { /* do something if interested */ })
     .catch(err => { console.error(err); });
 

добавьте это ко всем вашим обещанным функциям, и вы будете знать, где у вас возникли проблемы.

Теперь, что касается самой ошибки, вы пытаетесь удалить сообщение, потенциально уже удаленное. Вы хотели удалить реакцию или сообщение? Если вы удалили сообщение, а затем попытались что-то сделать с сообщением в последующих звонках, то в этом и проблема.

Комментарии:

1. thx @MrMythical, я пропустил комментарий…печатаю слишком быстро. 🙂

2. Спасибо за ваш комментарий, я добавил эту часть и теперь могу подтвердить, что проблема возникла из-за удаления сообщения. Ошибка возникает, когда нажата реакция, поэтому, если она не пытается удалить ранее удаленное сообщение, для меня это не имеет особого смысла. И даже тогда я попытался удалить последнее сообщение вместо этого с тем же результатом.