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

Node.js错误捕获求助:Discord.js翻译命令异常处理

解决Discord.js翻译命令的语言不支持错误捕获问题

你遇到的崩溃核心原因是翻译操作属于异步逻辑,之前的try/catch没正确包裹异步代码,或是Promise抛出的错误未被处理。以下是具体的解决方法:


1. 用async/await + try/catch包裹异步翻译逻辑

如果你的翻译库支持Promise(绝大多数现代翻译库都支持),把命令处理函数改为async,在try块内await翻译操作,catch块精准捕获错误:

client.on('messageCreate', async (message) => {
  if (message.content.startsWith('!translate')) {
    // 解析参数:去除语言参数的引号,提取待翻译文本
    const args = message.content.split(' ');
    const targetLang = args[1].replace(/"/g, '');
    const text = args.slice(2).join(' ');

    try {
      // await异步调用,确保错误能被try/catch捕获
      const translationResult = await translate(text, { to: targetLang });
      message.reply(`翻译结果:${translationResult.text}`);
    } catch (err) {
      // 判断是否为语言不支持的错误,给用户友好提示
      if (err.message.includes('not supported')) {
        message.reply('抱歉,这个语言暂不支持,请输入有效的语言代码或名称!');
      } else {
        message.reply('翻译出错了,请稍后再试!');
        // 后台记录详细错误,方便排查问题
        console.error('翻译错误详情:', err);
      }
    }
  }
});

2. 用Promise的.then/.catch处理错误(不使用async/await的场景)

如果习惯用Promise链式调用,必须在链的末尾加上.catch来兜底所有错误:

client.on('messageCreate', (message) => {
  if (message.content.startsWith('!translate')) {
    const args = message.content.split(' ');
    const targetLang = args[1].replace(/"/g, '');
    const text = args.slice(2).join(' ');

    translate(text, { to: targetLang })
      .then(result => message.reply(`翻译结果:${result.text}`))
      .catch(err => {
        if (err.message.includes('not supported')) {
          message.reply('抱歉,这个语言暂不支持,请输入有效的语言代码或名称!');
        } else {
          message.reply('翻译出错了,请稍后再试!');
          console.error('翻译错误详情:', err);
        }
      });
  }
});

3. 全局兜底:监听未处理的Promise拒绝

为防止其他未被捕获的Promise错误导致程序崩溃,可在代码开头添加全局监听:

// 捕获所有未处理的Promise拒绝
process.on('unhandledRejection', (reason, promise) => {
  console.error('未处理的Promise错误:', reason);
  // 可在此添加日志记录、报警等扩展逻辑
});

4. 提前验证语言支持性(可选优化)

如果你的翻译库提供获取支持语言列表的方法(比如getLanguages()),可提前缓存支持的语言,在命令执行前先做校验,从根源避免触发错误:

// 缓存支持的语言列表
let supportedLangs = [];
// 初始化时获取支持语言
translate.getLanguages().then(langs => {
  supportedLangs = Object.keys(langs).map(lang => lang.toLowerCase());
});

client.on('messageCreate', async (message) => {
  if (message.content.startsWith('!translate')) {
    const args = message.content.split(' ');
    const targetLang = args[1].replace(/"/g, '').toLowerCase();
    const text = args.slice(2).join(' ');

    // 提前校验语言是否支持
    if (!supportedLangs.includes(targetLang)) {
      message.reply('抱歉,这个语言暂不支持,请输入有效的语言代码或名称!');
      return;
    }

    try {
      const result = await translate(text, { to: targetLang });
      message.reply(`翻译结果:${result.text}`);
    } catch (err) {
      message.reply('翻译出错了,请稍后再试!');
      console.error('翻译错误详情:', err);
    }
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:15:49