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小时完成全量同步。
- 部署前建议先调用Discord API删除已存在的同名eval命令,避免全局/公会命令重复导致的配置冲突。
部署完成后输入/eval,即可看到Discord弹出code参数的输入框,直接在输入框中填写要执行的JS代码即可,不需要额外添加```js标记。
第二步:修复代码中的错误
- 将两处
msg.author替换为interaction.user,修正未定义变量问题。 - 增加参数非空校验,避免空值报错:
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
相关产品推荐
相关产品推荐

