问题描述
所以问题是我正在制作一个 CS:GO stats discord 机器人,每次您使用 !stats + Steam ID 时,它都会在嵌入中为您提供统计数据。第一次执行时,它运行良好,但之后使用该命令的每个人都会取回他的统计数据以及之前使用过该命令的其他所有人的统计数据。Example
基本代码:
if (command === "stats") {
let stats = [];
if (stats) {
stats = [];
let steamID = args[0];
if (!steamID) return message.channel.send("Negative! You haven't added your Steam ID");
axios
.get(
`http://api.steampowered.com/ISteamUserStats/GetUserStatsForGame/v0002/?appid=730&key=${steamWebApiKey}&steamid=${steamID}&format=json`
)
.then(async data => {
let stats = data.data.playerstats.stats;
let totalKills = stats[0].value;
let totalDeaths = stats[1].value;
let hsKills = stats[25].value;
let totalMVP = stats[95].value;
let KD = totalKills / totalDeaths;
let HS = totalKills / hsKills * 100;
let Knifekills = stats[10].value;
embedStats
.setTitle("CSGO Stats")
.setColor("#FF0000")
.addField("Total Kills",totalKills,true)
.addField("Total Deaths",totalDeaths,true)
.addField("Total HeadShot Kills",hsKills,true)
.addField("MVPS",totalMVP,true)
.addField("KD",KD.toFixed(2),true)
.addField("Knife kills",Knifekills,true)
})
.catch(e => {
if (e.response.status == "500") {
message.channel.send("Negative! I Couldn't find your stats,possible solution: set your game details as public on your Steam profile.");
}
});
axios
.get(
`http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${steamWebApiKey}&steamids=${steamID}&format=json`
)
.then(async data => {
let user = data.data.response.players;
embedStats
.setThumbnail(user[0].avatarmedium)
.setDescription(`[${user[0].personaname}](${user[0].profileurl})`)
await message.channel.send(embedStats);
})
}
}
解决方法
您的代码似乎没有最小的可重现示例,因为我找不到 embedStats
和 arg[0]
的定义,但似乎使用 addField()
方法,您只是在该 embedStats
变量中“插入”新信息,而不会根据您的 Discord 用户的新请求“重置”。我建议尝试在命令执行完成后“释放”变量,或者在所有 addField()
逻辑之前实例化一个新变量。
我已经找到了解决方案,我把我的统计变量“const embedStats = new Discord.MessageEmbed();”在代码的开头而不是命令本身,就是这么简单。