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

Discord.js注册斜杠命令时遇「Expected a string primitive」错误求助

问题分析与修复方案

核心错误原因

你遇到的「Expected a string primitive Received: | undefined」错误,主要由以下代码问题导致:

1. 对象属性语法错误

导出的对象中,data属性定义后缺少逗号分隔符,导致JavaScript解析时无法识别后续的do方法,模块导出结构异常,命令加载器无法读取正确的命令属性。

2. SlashCommandBuilder构建不完整

data赋值语句未正确结束,且缺少命令描述(discord.js v14要求所有斜杠命令必须设置描述),导致命令注册时缺少必填的字符串属性。

3. Embed颜色参数错误

setColor([40,40,38,255])使用了RGBA四元数组,但discord.js的EmbedBuilder仅支持RGB三元数组或十六进制颜色字符串,RGBA值会被解析错误。

修复后的完整代码

const { SlashCommandBuilder, EmbedBuilder, Client, CommandInteraction, CommandInteractionOptionResolver } = require("discord.js");

module.exports = {
  name: "ping",
  data: new SlashCommandBuilder()
    .setName("ping")
    .setDescription("查看机器人与API的延迟"), // 必须添加命令描述
  async do(client, interaction, options) {
    const check = await interaction.reply({ content: "Pinging...", fetchReply: true });
    const latency = check.createdTimestamp - interaction.createdTimestamp;

    const pingEmbed = new EmbedBuilder()
      .setTitle(":ping_pong: Pong!")
      .setColor([40, 40, 38]) // 修改为RGB三元数组
      .setTimestamp()
      .addFields(
        { name: "Bot Latency", value: `${latency}ms`, inline: true },
        { name: "API Latency", value: `${client.ws.ping}ms`, inline: true }
      );

    await interaction.editReply({ content: "", embeds: [pingEmbed] });
  }
};

额外验证点

  • 确认命令加载器正确遍历commands文件夹,读取每个模块的name和data属性,将data.toJSON()作为命令注册的payload发送到Discord API。
  • 检查加载器是否依赖name属性,若模块因语法错误导致name未被正确读取,也会触发该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:15:25