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

discord.js v13 Eval斜杠命令无法读取Interaction Options参数问题求助

问题根源与解决方案

核心问题原因

  • 你修改了斜杠命令的本地定义后没有重新部署到Discord服务器,Discord侧存储的仍是旧版无code参数的eval命令配置,因此客户端不会显示参数输入框,提交命令时也不会传递code参数,导致你调用interaction.options.getString("code")拿到null,调用replace方法时报错。
  • 你手动输入/eval后跟代码块的操作不符合斜杠命令的使用逻辑,斜杠命令的参数必须通过客户端弹出的参数输入框提交,手动追加的内容不会被识别为命令参数。
  • 代码中存在未定义变量错误:两处msg.author调用都没有对应的msg变量,后续即使参数问题修复也会触发报错。

分步解决方案

第一步:重新部署斜杠命令到Discord

你需要运行配套的斜杠命令部署脚本,将更新后的带code参数的eval命令配置推送到Discord:

  1. 若用于单服务器测试,建议推送到公会级命令,部署后立即生效;若推送到全局命令,最长需要等待1小时完成全量同步。
  2. 部署前建议先调用Discord API删除已存在的同名eval命令,避免全局/公会命令重复导致的配置冲突。
    部署完成后输入/eval,即可看到Discord弹出code参数的输入框,直接在输入框中填写要执行的JS代码即可,不需要额外添加```js标记。

第二步:修复代码中的错误

  1. 将两处msg.author替换为interaction.user,修正未定义变量问题。
  2. 增加参数非空校验,避免空值报错:
const toEval = interaction.options.getString("code");
if (!toEval) {
    return interaction.reply({ content: "未获取到待执行代码,请检查命令参数后重试", ephemeral: true });
}

可选优化项

执行eval时建议用util.inspect处理返回结果,避免对象类型的返回值直接显示为[object Object]:

const { inspect } = require("util");
// 执行eval的部分改为
const evalled = eval(toEval.replace(toRemove, ''));
const formattedOutput = inspect(evalled, { depth: 0 });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:54:03