【问题标题】:How to check if .fetchMessage gets an actual message如何检查 .fetchMessage 是否收到实际消息
【发布时间】:2019-08-12 00:55:48
【问题描述】:

标题应该能快速表达出来;我正在研究如何检查机器人获取的消息是真的消息还是假 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)

预期结果

• Bot 可以判断获取的消息是否是在频道中发送的实际消息

实际结果

• Bot 继续将消息发送到不存在的通道以获取甚至不存在的消息;控制台出错。

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

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

    DiscordAPIError: Unknown Message

    您可以使用链接到您的fetchMessagecatch 来捕获它:

    message.channel.fetchMessage('invalid id')
      .then(d => console.log('no err', d))
      .catch(d => {
        console.log('err', d);
        // do what you want
      ); 
    

    您还可以在 try catch 放在“上方”中捕获错误。

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

    message.channel.fetchMessage(args).then(async (mmm) => {
      console.log(mmm);
      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('err', error);
      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));
    });
    

    应该这样做,但是您不会在每个 catch/then/if 分支中返回值,这意味着存在一些未定义的返回。如果您想中止其余的执行,只需到 return; 或将代码放在 if 分支中,而不使用 else 和代码。

    为了清晰起见,我还建议您将链接放在新闻行上

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 2019-12-04
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 2021-01-02
      • 2010-12-20
      • 1970-01-01
      相关资源
      最近更新 更多