【发布时间】: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