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

Heroku部署Discord机器人新增斜杠命令后找不到模块报错

排查步骤及解决方案

  • 第一步:检查文件路径大小写匹配问题
    你本地如果运行在Windows或macOS系统上,文件系统对大小写不敏感,只要文件名字符对就能正常加载;但Heroku使用Linux系统,大小写严格匹配。请确认你代码中require('./messages/embed/Assertions')对应的实际文件路径,是否所有文件夹名称、文件名的大小写和require语句完全一致,比如是否实际文件为assertions.js、上级文件夹名为Embed而非embed这类情况,修正大小写后重新提交部署即可。

  • 第二步:确认目标文件已提交到Git仓库
    检查你项目的.gitignore文件,是否存在匹配messages文件夹、embed文件夹或Assertions.js文件的规则,导致本地存在该文件,但提交代码时被忽略,Heroku拉取的代码中缺少对应文件。你可以直接打开你的GitHub仓库,核对对应路径下是否存在该文件,若不存在,移除.gitignore中的对应规则,重新提交文件即可。

  • 第三步:修正package.json启动脚本
    你当前的start脚本配置为"start": "run index.js",该写法依赖全局安装的run模块,Heroku默认环境没有预装该模块,会导致启动时路径解析异常。将start脚本修改为标准写法:

"start": "node index.js"

重新提交配置后再次部署。

  • 第四步:核对相对路径是否正确
    若你新增斜杠命令后调整了代码文件的目录结构,需要确认写了require('./messages/embed/Assertions')语句的文件所在目录,是否和相对路径匹配。比如该语句如果是写在commands子文件夹下的文件中,相对路径就需要调整为../messages/embed/Assertions才能正确定位文件。

另外你给出的add.js代码存在异步逻辑问题:当前fetch请求未等待返回就直接回复用户,即使接口请求失败也会提示添加成功,且try/catch无法捕获fetch的异步异常,可调整为如下写法:

async execute(interaction) {
    const rsn = interaction.options.getString('rsn');
    try {
        const res = await fetch(`https://templeosrs.com/api/add_group_member.php?`, {
            method: 'POST',
            headers: {
                "Content-Type": "application/x-www-form-urlencoded"
            },
            body: `id=${groupID}&key=${groupKey}&players=${rsn}`
        });
        if (res.ok) {
            await interaction.reply(`**${rsn}**, 已成功添加到TempleOSRS组!`);
        } else {
            await interaction.reply('添加失败,接口请求返回异常');
        }
    } catch (error) {
        await interaction.reply('Oops, 调用API时出现错误');
        console.log(error);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:05