【问题标题】:Is there a way to loop through all the fields in a Discord embed?有没有办法遍历 Discord 嵌入中的所有字段?
【发布时间】:2020-11-27 03:53:52
【问题描述】:

所以我正在编写一个 Discord 机器人,它从 Hypixel API(一个流行的 Minecraft 服务器的 API)获取并显示一堆数据。我已经对其进行了编码,以便它将以 emebds 的形式显示某些玩家统计数据。但是,API 不会将数据存储在没有值(即 0)的统计数据上。这意味着当用户尝试查看嵌入该机器人时会出错,因为它无法发送没有值的字段。

最初我有一个想法,将 API 的每个变量存储在一个数组中并循环遍历它。这样,我可以检查其中是否有任何 undefined 并在嵌入中将它们替换为 0 或 N/A。然而,这是一个非常漫长和混乱的过程,所以我想知道是否可以遍历现有嵌入的字段值并以这种方式检查。

这是我作为示例的代码:

var bedwars_solos = new Discord.MessageEmbed()
        .setTitle(rank + ' ' + player.displayname + ' | Solo Bedwars')
        .setDescription('If a stat says `undefined`, the Hypixel API is currently not detecting it.')
        .addFields(
          { name: 'Games Played', value: (player.stats.Bedwars.eight_one_games_played_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Wins', value: (player.stats.Bedwars.eight_one_wins_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Winstreak', value: (player.stats.Bedwars.eight_one_winstreak).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Kills', value: (player.stats.Bedwars.eight_one_kills_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Void Kills', value: (player.stats.Bedwars.eight_one_void_kills_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Final Kills', value: (player.stats.Bedwars.eight_one_final_kills_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Deaths', value: (player.stats.Bedwars.eight_one_deaths_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Void Deaths', value: (player.stats.Bedwars.eight_one_void_deaths_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'Final Deaths', value: (player.stats.Bedwars.eight_one_final_deaths_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
          { name: 'K/D', value: (player.stats.Bedwars.eight_one_kills_bedwars / player.stats.Bedwars.eight_one_deaths_bedwars).toFixed(2), inline: true},
          { name: 'Final K/D', value: (player.stats.Bedwars.eight_one_final_kills_bedwars / player.stats.Bedwars.eight_one_final_deaths_bedwars).toFixed(2), inline: true},
          { name: 'Beds Broken', value: (player.stats.Bedwars.eight_one_beds_broken_bedwars).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","), inline: true},
        )
        .setColor(0xFF5100)
        .setTimestamp()
        .setThumbnail('./thumbnails/BedWars.png')
        .setFooter('HypStats by SirArchibald')

机器人在 API 中找不到值时会出错,因为它无法在任何内容上使用 .toString()

【问题讨论】:

    标签: discord.js


    【解决方案1】:

    而不是做:

    value: (player.stats.Bedwars.eight_one_games_played_bedwars).toString()
    

    你可以这样做:

    value: (player.stats.Bedwars.eight_one_games_played_bedwars || 0).toString()
    

    注意|| 0 部分,因为0 将是用于.toString 的值,当前一个字段未定义或等效于 false 时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 2010-09-14
      • 2021-11-02
      相关资源
      最近更新 更多