goat
command
speak
Text-to-speech using voice models
0
views
0
likes
0
installs
raw source
const axios = require("axios");
const fs = require("fs-extra");
const path = require("path");
const models = {
"1": { name: "Joey", desc: "๐ง Male voice (American English)" },
"2": { name: "Amy", desc: "๐ฉ Female voice (British English)" },
"3": { name: "Brian", desc: "๐งโโ๏ธ Male voice (British English)" },
"4": { name: "Mizuki", desc: "๐ง Female voice (Japanese)" }
};
module.exports = {
config: {
name: "speak",
version: "1.0",
author: "Chitron Bhattacharjee",
countDown: 5,
role: 0,
shortDescription: { en: "Text-to-speech using voice models" },
longDescription: { en: "Generate speech from text using selected voice models (no API key needed)" },
category: "media",
guide: {
en: `+speak Hello world
+speak Hello there -m2
+speak -m (list voice models)`
}
},
onStart: async function ({ message, args, event }) {
const input = args.join(" ");
if (!input) return message.reply("โ Please provide text. Example: `+speak Hello world`");
if (input.toLowerCase() === "-m") {
const listMsg = `
๐ค ๐๐๐ฎ๐ถ๐น๐ฎ๐ฏ๐น๐ฒ ๐ง๐ง๐ฆ ๐ ๐ผ๐ฑ๐ฒ๐น๐:
๐ข -m1: Joey
๐ง Male voice (American English)
๐ข -m2: Amy
๐ฉ Female voice (British English)
๐ข -m3: Brian
๐งโโ๏ธ Male voice (British English)
๐ข -m4: Mizuki
๐ง Female voice (Japanese)
๐ Use like: +speak Hello there -m2
`.trim();
return message.reply(listMsg);
}
// Extract model
const modelMatch = input.match(/-m(\d+)/);
const modelNum = modelMatch ? modelMatch[1] : "1";
const voice = models[modelNum]?.name;
if (!voice) return message.reply("โ Invalid model number. Use `+speak -m` to see list.");
// Remove -m flag from message
const content = input.replace(`-m${modelNum}`, "").trim();
if (!content) return message.reply("โ Text is empty after removing model flag.");
try {
const res = await axios.post("https://ttsmp3.com/makemp3_new.php", new URLSearchParams({
msg: content,
lang: voice,
source: "ttsmp3"
}).toString(), {
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
});
if (!res.data || !res.data.URL) return message.reply("โ ๏ธ Failed to generate audio.");
const fileName = `tts_${Date.now()}.mp3`;
const filePath = path.join(__dirname, "cache", fileName);
const audioRes = await axios.get(res.data.URL, { responseType: "stream" });
await fs.ensureDir(path.dirname(filePath));
const writer = fs.createWriteStream(filePath);
audioRes.data.pipe(writer);
writer.on("finish", () => {
message.reply({
body: `๐ฃ๏ธ *${content}*\n๐ค Voice: ${voice}`,
attachment: fs.createReadStream(filePath)
});
});
} catch (err) {
console.error(err);
return message.reply("โ Error occurred while generating speech.");
}
}
};