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

discord.js报错:Cannot read properties of undefined (reading 'length') 首次正常二次失败

Discord.js机器人执行!id指令第二次报错的修复方案

问题根源

报错Cannot read properties of undefined (reading 'length')是因为data变量为undefined时尝试访问其length属性,大概率是以下两个原因:

  1. Roblox API返回了非成功状态码(比如请求限流的429),此时响应结构中没有预期的data字段,解构后data为undefined。
  2. 冗余代码client.users.cache.clear();完全没必要——这是清理Discord用户缓存的操作,和Roblox API请求毫无关联,反而可能破坏机器人的内部缓存逻辑。

修复方案

  1. 移除无意义的缓存清理代码
  2. 增加请求状态检查,确保API响应正常
  3. 对data的存在性和类型做前置校验
  4. 统一使用已引入的axios处理请求(比原生fetch更简洁,自动处理状态码)

修改后的完整代码

const { Client, GatewayIntentBits } = require('discord.js')
const client = new Client({
    intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent],
});
const axios = require('axios');
const PREFIX = "!";

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('messageCreate', async (message) => {
  if (message.content.startsWith(PREFIX)) {
    const [command, username] = message.content
      .substring(PREFIX.length)
      .split(' ');

    if (command === 'id') {
      // 检查用户是否提供了查询的用户名
      if (!username) {
        return message.channel.send('请提供要查询的Roblox用户名,格式:!id <用户名>');
      }

      try {
        const lowercaseUsername = username.toLowerCase();
        // 使用axios发送请求,自动处理非2xx状态码的错误
        const response = await axios.get(`https://users.roblox.com/v1/users/search?keyword=${encodeURIComponent(lowercaseUsername)}`);
        const data = response.data;

        // 确保data是数组且不为空
        if (!Array.isArray(data) || data.length === 0) {
          return message.channel.send(`找不到名为"${username}"的用户。`);
        }

        const { id } = data[0];
        console.log(`用户"${username}"的Roblox ID是${id}。`);
        message.channel.send(`用户"${username}"的Roblox ID是${id}。`);
      } catch (error) {
        console.error('查询出错:', error.response?.data || error.message);
        // 针对限流情况给出友好提示
        if (error.response?.status === 429) {
          return message.channel.send('请求过于频繁,请稍后再试。');
        }
        message.channel.send(`查询用户"${username}"时出错。`);
      }
    }
  }
});

client.login('Bot_Token');

额外优化说明

  • 新增了用户名参数校验,避免用户仅输入!id时的逻辑错误
  • 针对Roblox API的限流机制(429状态码)做了专门提示
  • 增强了错误日志的可读性,便于排查问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:53:16