You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Discord皮肤查询机器人因输入错误报错?

解决Discord机器人皮肤查询拼写错误报错问题

你的问题核心在于:当输入的皮肤名称不存在时,find()方法会返回undefined,此时直接访问.name、.tier这类属性就会触发TypeError。而且你重复调用了四次Object.values(info.skins).find(...),既浪费性能也容易出现不一致的问题。

下面是修复后的完整代码,我做了这些针对性优化:

  1. 一次性完成皮肤匹配查找,避免重复遍历
  2. 新增皮肤存在性检查,不存在时给用户友好提示并终止流程
  3. 用解构赋值提取属性,让代码更简洁
  4. 优化输入处理,兼容用户输入前后带空格的情况
if (msg.content.startsWith('LB skin')) {
  if (msg.author.bot) return; // 防止机器人回复自身
  const inputSkinName = msg.content.slice(8).trim(); // 去除输入前后的多余空格
  if (!inputSkinName) return msg.reply('Please give me a valid skin!');
  
  const info = database; // 你的JSON文件数据
  // 仅执行一次查找,统一处理大小写匹配
  const matchedSkin = Object.values(info.skins).find(skin => 
    skin.name.toLowerCase() === inputSkinName.toLowerCase()
  );

  // 检查是否找到匹配的皮肤,没找到就提示用户
  if (!matchedSkin) {
    return msg.reply(`Sorry, I couldn't find a skin named "${inputSkinName}". Please check your spelling and try again!`);
  }

  // 从匹配到的皮肤对象中解构提取所需属性
  const { name: Name, tier: Tier, weapons: Weapons, event: Event, game_version: Game_version } = matchedSkin;

  const embed = new Discord.MessageEmbed()
    .setColor('#0099ff')
    .setTitle('Leak info:')
    .setAuthor('LeakBot#8631', 'https://cdn.discordapp.com/avatars/779616585001861120/d8c6dd64ac92ec5ee5a1a893578722c3.png?size=256', 'https://www.paypal.com/paypalme/LeakBot')
    .setDescription(inputSkinName)
    .addFields(
      { name: 'Name:', value: Name , inline: true },
      { name: 'Tier:', value: Tier, inline: true },
      { name: 'Weapons:', value: Weapons, inline: true },
      { name: 'Event:', value: Event, inline: true },
      { name: 'Game version:', value: Game_version, inline: true },
      { name: '\u200B', value: '\u200B', inline: true },
    )
    .setTimestamp()
    .setFooter('Created by pitched_mobile', 'https://cdn.discordapp.com/icons/539804475150434314/e22de33df46a9022b41817bfb732c9b3.jpg');
  
  msg.channel.send(embed);
}

关键改进细节:

  • 减少重复操作:只遍历一次皮肤数组完成匹配,比四次遍历的效率高很多
  • 容错处理:提前拦截不存在的皮肤输入,彻底避免属性访问报错
  • 输入兼容性:trim()处理能应对用户不小心输入的前后空格,减少不必要的匹配失败
  • 代码可读性:对象解构让属性提取的逻辑更清晰,后续维护也更方便

内容的提问来源于stack exchange,提问作者pitched mobile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:56:11