← back to browse
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.");
 }
 }
};

View raw file