[英]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.