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

Discord机器人执行命令崩溃:Cannot read properties of null问题排查

问题原因

报错Cannot read properties of null (reading 'data')的核心原因是:当机器人在数据库中找不到当前服务器(interaction.guild.id)的配置记录时,guild_settings.findOne()会返回null,此时直接访问findLang.data就会触发空值读取错误。

解决方案

1. 紧急修复:添加空值判断

修改代码,先检查findLang是否存在,再读取语言配置,同时保留默认语言en的 fallback:

const guild_settings = require('../database/models/guild-settings.js');
const findLang = await guild_settings.findOne({ guild: interaction.guild.id });
// 用可选链操作符规避空值,不存在则用默认语言en
const langCode = findLang?.data?.language || "en";
const lang = require(`../langs/${langCode}.js`);

这里的**可选链操作符?.**会在findLang或findLang.data为null/undefined时直接返回undefined,进而触发后面的默认值"en",避免报错。

2. 彻底优化:自动初始化服务器配置

为了从根源解决问题,可以在找不到对应服务器配置时,自动创建一条带默认语言的配置记录:

const guild_settings = require('../database/models/guild-settings.js');
let findLang = await guild_settings.findOne({ guild: interaction.guild.id });

// 无配置时自动创建默认记录
if (!findLang) {
  findLang = await guild_settings.create({
    guild: interaction.guild.id,
    data: {
      language: "en"
    }
  });
}

const lang = require(`../langs/${findLang.data.language}.js`);

这样后续执行命令时,就不会再出现findLang为null的情况。

内容的提问来源于stack exchange,提问作者Space Logic C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:02:02