首页 > 解决方案 > discord.js DiscordAPIError:未知消息

问题描述

我有数组,我正在通过嵌入上的反应循环。当按下反应时,应删除该消息并再次循环该功能。在第二反应新闻中,我收到此错误:

(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 事件似乎是问题所在。把它放在外面可以解决问题。

标签: javascriptdiscorddiscord.js

解决方案


你的错误是因为你得到了一个没有被抓住的承诺。您有几个异步调用并返回承诺,其中一个或多个导致错误。我会向它们添加 catch 块,然后这将帮助您找出问题所在。例如:

await reaction.message.delete();

可以改为:

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

将此添加到您承诺的所有功能中,您就会知道问题出在哪里。

现在至于错误本身,您正在尝试删除一条可能已被删除的消息。您是要删除反应还是消息?如果您删除了一条消息,然后在随后的通话中尝试对这条消息进行处理,那就是问题所在。


推荐阅读