Javascript 如何检查.fetchMessage是否获取实际消息

Javascript 如何检查.fetchMessage是否获取实际消息,javascript,discord.js,Javascript,Discord.js,标题应该能很快地把单词写出来;我正在研究如何检查bot获取的消息实际上是消息还是假ID 我试过了 •if(!mmm) •if(mmm.deleted!==true) 没用 if (!args.length) return await message.channel.send(`You didn't provide a ID!`).then(msg => {msg.delete(30000)}).then(message.delete(50)).catch(error => conso

标题应该能很快地把单词写出来;我正在研究如何检查bot获取的消息实际上是消息还是假ID

我试过了

if(!mmm)

if(mmm.deleted!==true)

没用

if (!args.length) return await message.channel.send(`You didn't provide a ID!`).then(msg => {msg.delete(30000)}).then(message.delete(50)).catch(error => console.log(error));
else
if (isNaN(args)) {
  return message.reply('that doesn\'t seem to be a valid number.').then(msg => {msg.delete(30000)}).then(message.delete(50)).catch(error => console.log(error));
}
else message.channel.send(`Fetching: ${args}`).then(msg => {msg.delete(30000)}).then(message.delete(50)).catch(error => console.log(error));

message.channel.fetchMessage(args).then(async (mmm) => {

console.log(mmm)

if(mmm) return await message.reply(`it appears that the ID you sent was invalid.`).then(msg => {msg.delete(30000)}).then(message.delete(50)).catch(error => console.log(error));
else

await mmm.channel.send(`hi`)
/**
 * @ending for .then((mmm) => {`code`})
 */

await message.channel.send('<:Approve:596458828011405334> Finished processes.').then(msg => {msg.delete(5000)}).then(message.delete(50)).catch(error => console.log(error))
}).catch(async (error) => {console.log(error)
if(!args.length)返回wait message.channel.send(`您没有提供ID!`)。然后(msg=>{msg.delete(30000)})。然后(message.delete(50)).catch(error=>console.log(error));
其他的
if(isNaN(args)){
返回message.reply('这似乎不是一个有效的数字')。然后(msg=>{msg.delete(30000)})。然后(message.delete(50)).catch(error=>console.log(error));
}
else message.channel.send(`Fetching:${args}`)。然后(msg=>{msg.delete(30000)})。然后(message.delete(50)).catch(error=>console.log(error));
message.channel.fetchMessage(args).then(异步(mmm)=>{
console.log(mmm)
如果(mmm)返回wait message.reply(`您发送的ID似乎无效。`)。然后(msg=>{msg.delete(30000)})。然后(message.delete(50)).catch(error=>console.log(error));
其他的
等待mmm.channel.send(`hi`)
/**
*@end for.then((mmm)=>{`code`})
*/
等待message.channel.send('Finished processes.')。然后(msg=>{msg.delete(5000)})。然后(message.delete(50))。catch(error=>console.log(error))
}).catch(异步(错误)=>{console.log(错误)
预期结果

•如果获取的消息是在通道中发送的实际消息,则Bot可以判断该消息是否已获取

实际结果


•对于不存在的消息,Bot继续向不存在的通道发送消息;控制台出错。

如果试图获取不存在的消息,则会引发以下错误

DiscordAPIError:未知消息

您可以通过链接到
fetchMessage
catch
捕捉它:

message.channel.fetchMessage('invalid id'))
.then(d=>console.log('no err',d))
.catch(d=>{
console.log('err',d);
//做你想做的
); 
您还可以在放置在“上方”的
try
catch
中捕获错误

因此,与其尝试在then中检查消息是否正确,不如只在消息已发送时执行您应该执行的操作,并在catch中发送警告/错误消息:

message.channel.fetchMessage(args).then(异步(mmm)=>{
控制台日志(mmm);
等待mmm.channel.send(`hi`);
/**
*@end for.then((mmm)=>{`code`})
*/
wait message.channel.send('Finished processes'))
。然后(msg=>{msg.delete(5000);})
。然后(信息。删除(50))
.catch(错误=>console.log(错误));
}).catch(异步(错误)=>{
console.log('err',error);
return wait message.reply(`您发送的ID似乎无效。`)
。然后(msg=>msg.delete(30000))
。然后(信息。删除(50))
.catch(错误=>console.log(错误));
});
这应该可以做到,但是您没有在每个catch/then/if分支中返回值,这意味着存在一些未定义的返回。如果您想中止其余的执行,只需返回;或将代码放入
if
分支中,而不使用else和code

我还建议你把你的链接放在新闻栏上,以保持清晰