簡體   English   中英

如何檢查消息是否存在? (discord.js)

[英]How to check if a message exists? (discord.js)

我這里有一個嵌入管理器,我想檢查嵌入是否存在。 我在發送后刪除它,如果其他人在此之前刪除它,我會收到 DiscordAPI 錯誤。 我嘗試了幾件事,但從未得到解決方案。 你能幫我嗎?

這是我的代碼:

    error(channel, title, content) {
        var message
        var embed = new MessageEmbed() 
            .setColor(COLORS.red)
            .setDescription(content)
        if(title) {
            embed.setTitle(title)
        }
        channel.send(' ', embed).then((m) => {
            message = m
            try {
                setTimeout(function() {
                    if(MESSAGE EXISTS) {
                        m.delete()
                    } else {
                        return;
                    }
                }, 5500);
            } catch(e) {
            }

        })
        return message

    },

編輯:

    error(channel, title, content) {
        var message
        var embed = new MessageEmbed() 
            .setColor(COLORS.red)
            .setDescription(content)
        if(title) {
            embed.setTitle(title)
        }
        channel.send(' ', embed).then((m) => {
            message = m
            try {
                setTimeout(function() {
                    try {
                        channel.messages.fetch(m.id)
                      .then(m => console.log(m.content)) //it fetched the message - good
                    } catch (error) {
                        console.log(error)
                    }
                }, 5500);
            } catch(e) {
            }

        })
        return message

    },

堆棧跟蹤:

DiscordAPIError: Unknown Message
    at RequestHandler.execute (D:\Discord Bot\node_modules\discord.js\src\rest\RequestHandler.js:154:13)
    at processTicksAndRejections (node:internal/process/task_queues:93:5)
    at async RequestHandler.push (D:\Discord Bot\node_modules\discord.js\src\rest\RequestHandler.js:39:14)
    at async MessageManager._fetchId (D:\Discord Bot\node_modules\discord.js\src\managers\MessageManager.js:135:18) {
  method: 'get',
  path: '/channels/797648418104934470/messages/798863571924418562',
  code: 10008,
  httpStatus: 404
}
npm ERR! code 1
npm ERR! path D:\Discord Bot
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node main.js debug

API 錯誤是由 discord 試圖刪除不存在的消息(您已經刪除它)引起的。 嘗試通過在 try catch 語句中獲取嵌入的 id 來解決 promise,然后從那里開始 - 這樣可以避免 API 錯誤。

try {
    channel.messages.fetch(message.id)
  .then(message => console.log(message.content)) //it fetched the message - good
} catch (error) {
    return; //the message no longer exists and will be ignored
}

不要讓它比需要的更困難。 .send.fetch.delete都返回 promise。 這意味着您可以(並且應該)使用catch方法來捕獲任何錯誤。 您不需要使用 try-catch 塊,除非您想使用async/await而不是.then/catch

檢查下面的代碼,我已經添加了所有的catch 檢查當消息不存在時(檢查err.httpStatus )或由於任何其他原因無法刪除消息時它如何捕獲錯誤。

channel.send(embed)
  .then((sentMessage) => {
    setTimeout(() => {
      channel.messages
        .fetch(sentMessage.id)
        .then((fetchedMessage) => {
          console.log('Message exists');

          fetchedMessage
            .delete()
            .then(() => console.log('Message deleted successfully'))
            .catch((err) => console.log('Could not delete the message', err));
        })
        .catch((err) => {
          if (err.httpStatus === 404) {
            console.log('Message already deleted');
          } else {
            console.log(err);
          }
        });
    }, 5000);
  });

所以我遇到了類似的問題,我認為我的解決方案可能適用於您的問題。

 function msgExists(channelID, messageID){


/*get channel*/
const channel = client.channels.cache.get(channelID); //(get channel)

/*get channel messages*/
channel.messages.fetch({ limit: 100 }).then(messages => {
    let count = 0;
    let max = (messages.length - 1);
    //Iterate through the messages.
    messages.forEach(message => {                                   
                                    
                                    if (messageID === message.id){
                                        console.log("message found");
                                    }
                                    if (count == (max)){
                                        console.log("message could not be found");
                                    }
                                    
                                    count++;
                                });
    

  });  

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM