Javascript 如何检查.fetchMessage是否获取实际消息
标题应该能很快地把单词写出来;我正在研究如何检查bot获取的消息实际上是消息还是假ID 我试过了 •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
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
我还建议你把你的链接放在新闻栏上,以保持清晰