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

如何解决Discord TTS机器人朗读时连带播报语言代码的问题

问题根因

你的代码存在两处逻辑错误,直接导致语言代码被混入朗读内容:

  • 变量声明顺序混乱:在未声明text变量前就做了非空判断,会触发JS语法层面的引用错误,导致校验逻辑完全失效
  • 文本截取逻辑错误:你将args[0]单独作为语言代码提取后,拼接朗读文本时用了全量args数组做join操作,第一个位置的语言代码自然会被拼入待朗读文本
修复后完整代码
const { getAudioUrl } = require('google-tts-api')

// 提取数组第一个元素作为语言代码
const language = args[0]
// 截取数组从索引1开始的所有元素(即排除第一个语言参数),拼接为朗读文本
const text = args.slice(1).join(" ")
 
if(!language) return message.reply("请指定语言代码")     
if(!text) return message.reply("请输入需要朗读的文本内容")
if(text.length > 200) return message.reply('输入的文本长度不能超过200字符')
const voiceChannel = message.member.voice.channel
if(!voiceChannel) return message.reply("请先加入语音频道") 
                                    
const audioURL = await getAudioUrl(text, {
 lang: language, 
 slow: false, 
 host: 'https://translate.google.com', 
 timeout: '150000'
})

try {
  voiceChannel.join().then(connection => {
    const dispatcher = connection.play(audioURL)
    dispatcher.on('finish', () => {
      voiceChannel.leave()
    })
  })
} catch (err) {
  console.error('TTS播放异常:', err)
  message.reply('语音播放出错,请稍后重试')
}
核心改动点
  • 调整变量声明顺序:先完成text变量的定义,再执行非空校验,避免语法报错和逻辑异常
  • 修正文本拼接规则:使用args.slice(1)跳过数组首位的语言参数,仅拼接后续正文内容,从根源避免语言代码被朗读
  • 补全try块对应的catch错误捕获逻辑,避免运行时异常直接导致进程崩溃

内容的提问来源于stack exchange,提问作者Taf not a coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:57:51