【问题标题】:Error when accessing API with discord.js, but only on an embed?使用 discord.js 访问 API 时出错,但仅在嵌入时出错?
【发布时间】:2023-04-05 16:32:02
【问题描述】:

我正在制作一个 Discord 机器人,它从 Hypixel API(一个 Minecraft 服务器的 API)获取数据。我已经设法编写了一些成功获取数据的代码,但这是我遇到问题的地方。当我直接message.channel.send 数据时,它可以工作。但是,如果我在嵌入中使用数据,它就不起作用。

有效:

fetch(`https://api.hypixel.net/player?key=API_KEY&name=${args[1]}`)
      .then(result => result.json())
      .then(({ player }) => {

      message.channel.send(player.stats.Bedwars.coins)
})

不起作用:

fetch(`https://api.hypixel.net/player?key=API_KEY&name=${args[1]}`)
      .then(result => result.json())
      .then(({ player }) => {

      var bedwars_general_1 = new Discord.MessageEmbed()
      .addFields(
          { name: 'Coins', value: player.stats.Bedwars.coins, inline: true},
      )
      
      message.channel.send(bedwars_general_1)
})

在上面的例子中,它工作得很好,但是在下面的例子中,我每次都会收到这个错误消息:

UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'Bedwars' of undefined

当我添加这一行时,它也给了我这个错误 var bedwarsCoins = player.stats.Bedwars.coins,在嵌入之前,然后将变量添加到嵌入字段中。

我不明白为什么它只在某些时候有效?

【问题讨论】:

    标签: discord discord.js bots


    【解决方案1】:

    该错误表示playerstats 属性未定义或为空。

    API 可能找不到任何东西,在这种情况下,您应该尝试捕捉 stats 属性值的缺失。

    .then(player => {
      if (!player.stats) return console.log('Unable to find stats');
    });
    

    【讨论】:

    • 问题是,播放器有一个stats属性,使用API​​可以看到。 message.channel.send(player.stats.Bedwars.coins) 也有效这一事实也表明了这一点。只是由于某种原因它在嵌入中不起作用?
    • 尝试将 .addFields({ name: 'Coins', value: player.stats.Bedwars.coins, inline: true}) 更改为 .addField('Coins', player.stats.Bedwars.coins, true)
    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多