如何提取Paladins API数据并嵌入Discord.js RichEmbed?
解决Paladins统计Discord机器人提取API数据并填充RichEmbed的问题
看起来你已经走完了大半流程,问题主要出在代码结构和数据访问方式上,我帮你梳理下解决步骤:
首先修正代码结构的核心问题
你原来的代码里,if(!err)后面没有加花括号,导致创建Embed的逻辑不在pal.getPlayer的回调函数内部——这意味着当你尝试访问data时,它还没被异步请求的结果赋值,自然取不到数据。先把代码块用花括号包裹,确保所有处理API返回数据的逻辑都在回调函数里。
正确提取API返回字段
首先你已经能在console.log看到数据,那先把console.log(data)放到回调里,明确返回的data结构(注意JavaScript是大小写敏感的,比如Created_Datetime和created_datetime是完全不同的键)。
提取字段时直接用对象的点语法或方括号语法即可,不需要value()方法。比如如果返回数据里有Created_Datetime字段,直接写data.Created_Datetime或者data['Created_Datetime']就行。
修正后的完整代码示例
var platform = args[1].toUpperCase(); var player = args[2]; var sessionId; pal.connect('PC', (err, res) => { if (!err) { sessionId = res; // 在getPlayer的回调内处理数据,确保异步请求完成后再操作 pal.getPlayer(sessionId, platform, player, (err, data) => { if (!err) { // 打印数据确认结构,方便调试字段名 console.log('API返回的玩家数据:', data); // 提取你需要的字段,替换成实际存在的键名 const createdDatetime = data.Created_Datetime; const playerName = data.Name; const playerLevel = data.Level; const playerAvatar = data.Avatar_URL; // 假设API返回头像地址字段 // 创建并填充RichEmbed const embed = new Discord.RichEmbed() .setAuthor(playerName, playerAvatar) .setTitle(`${playerName}的Paladins个人统计`) .addField('账号创建时间', createdDatetime, true) .addField('当前等级', playerLevel, true) .setColor('#2ecc71') // 设置Embed主题色 .setFooter('数据来源:Paladins API'); // 发送Embed到对应频道,这里假设你有可用的message对象 message.channel.send(embed); } else { // 处理获取数据失败的情况 console.error('获取玩家数据出错:', err); message.channel.send('抱歉,获取玩家数据失败,请检查平台和用户名是否正确!'); } }); } else { // 处理连接API失败的情况 console.error('连接Paladins API出错:', err); message.channel.send('无法连接到Paladins API,请稍后重试!'); } });
几个关键注意点
- 所有依赖
data的逻辑必须放在pal.getPlayer的回调内部,因为API请求是异步的,回调外的代码会在数据返回前执行,导致data未定义。 - 字段名必须和API返回的完全一致,大小写不能出错,拿不准就看
console.log的输出结构。 - 别忘了添加错误处理,避免机器人崩溃的同时,给用户友好的反馈提示。
内容的提问来源于stack exchange,提问作者Cinah
相关产品推荐
相关产品推荐

