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

Discord彩虹六号查询Bot报错:TypeError: Cannot read property '0' of undefined

解决Discord机器人查询R6等级时的TypeError问题

你遇到的TypeError: Cannot read property '0' of undefined主要有两个原因:一是命令解析逻辑出错,导致传递给API的用户名可能无效;二是没有处理API返回无结果的情况,直接访问了json.results[0],而当查询不到用户时json.results会是undefined。

我帮你把代码修正并优化了,同时加上了错误处理逻辑:

client.on('message', async message => {
  const prefix = '!level';
  // 过滤机器人消息和非前缀开头的消息
  if (!message.content.startsWith(prefix) || message.author.bot) return;

  // 正确解析用户输入的用户名:去掉前缀后清理空格
  const targetUsername = message.content.slice(prefix.length).trim();
  // 如果用户没输入用户名,给出提示
  if (!targetUsername) {
    return message.channel.send('请输入要查询的Uplay用户名,格式:!level 你的用户名');
  }

  const fetch = require('node-fetch');
  try {
    // 用encodeURIComponent处理用户名,避免特殊字符破坏URL
    const res = await fetch(`https://r6tab.com/api/search.php?platform=uplay&search=${encodeURIComponent(targetUsername)}`);
    const json = await res.json();

    // 检查API返回的结果是否有效
    if (!json.results || json.results.length === 0) {
      return message.channel.send('找不到该用户,请检查用户名是否正确!');
    }

    // 成功获取到数据时发送等级
    message.channel.send(`Dein Level ist: ${json.results[0].p_level}`);
  } catch (error) {
    // 捕获网络请求或JSON解析错误
    console.error('查询R6等级时出错:', error);
    message.channel.send('查询失败,请稍后重试!');
  }
});

关键修改点说明:

  1. 修复命令解析:移除了无效的level.shift(level是字符串,不是数组,shift方法根本不生效),改用trim()清理输入的空格,确保用户名传递正确。
  2. 添加参数校验:当用户只输入!level没带用户名时,主动提示格式要求。
  3. URL安全处理:用encodeURIComponent()包裹用户名,避免用户名里的特殊字符(比如空格、点号)导致API请求失败。
  4. 结果有效性检查:先判断json.results是否存在且有内容,再访问索引0的属性,从根源避免undefined报错。
  5. 全局错误捕获:用try/catch处理网络请求失败、JSON解析失败等意外情况,给用户友好提示的同时方便你排查问题。

另外注意:确保你已经安装了node-fetch依赖(执行npm install node-fetch),如果你的Discord.js是v13及以上版本,需要安装node-fetch@2版本(因为v3是ESM模块,CommonJS环境下兼容性有问题)。

内容的提问来源于stack exchange,提问作者AroPix ツ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:24:51