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

Discord Bot使用discord-tts的TTS命令无法运行,遗漏了什么内容?

问题排查与修正方案

现有代码核心问题

  • 变量未定义:代码中使用的bot没有声明,你导出的类继承自Command,传入的客户端实例是client,应该通过this.client调用客户端相关方法
  • 定义的tts函数从未执行:你在run方法内声明了tts函数,但没有触发调用的逻辑,自然不会有任何执行效果
  • 缺少必要的前置校验:没有判断触发命令的用户是否已经加入语音频道,直接获取channelID会直接抛出空值错误
  • 参数类型错误:discordTTS.getVoiceStream需要传入字符串类型的文本内容,你传入的args是命令参数数组,需要拼接为字符串
  • 版本兼容问题:如果你使用discord.js v13及以上版本,createBroadcast方法已经被废弃,同时需要额外开启语音相关的网关意图,单独安装@discordjs/voice依赖才能正常使用语音功能

修正后的可运行代码(适配discord.js v12版本,更高版本可自行调整语音API)

const discordTTS = require("discord-tts");
const Command = require('../Command.js');

module.exports = class SpeakCommand extends Command {
    constructor(client) {
        super(client, {
            name: 'speak',
            usage: 'speak <message>',
            description: 'Speaks TTS message.',
            type: client.types.FUN
        });
    }

    async run(message, args) {
        // 前置校验:用户是否在语音频道
        if (!message.member.voice.channel) return message.reply("你需要先加入一个语音频道才能使用该命令");
        // 前置校验:是否有输入文本
        if (!args.length) return message.reply("请输入要朗读的文本内容");

        const voiceChannel = message.member.voice.channel;
        const text = args.join(' ');

        const broadcast = this.client.voice.createBroadcast();
        voiceChannel.join().then(connection => {
            broadcast.play(discordTTS.getVoiceStream(text));
            const dispatcher = connection.play(broadcast);
            // 可选:播放结束自动退出频道
            dispatcher.on('finish', () => {
                voiceChannel.leave();
            });
        }).catch(err => {
            console.error("加入语音频道失败:", err);
            message.reply("无法加入你所在的语音频道,请检查我的权限");
        });
    }
}

额外需要确认的配置

  • 你需要在Discord开发者后台给Bot开启CONNECT、SPEAK两个语音权限
  • 如果使用discord.js v13及以上版本,初始化客户端时需要开启GUILD_VOICE_STATES意图,同时替换语音逻辑为@discordjs/voice的相关API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 21:54:01