← back to browse
goat command

say

bot will make your text into voice.

2
views
0
likes
0
installs
raw source
const axios = require('axios');
const fs = require('fs-extra');

module.exports = {
  config: {
    name: "say",
    version: "1.7",
    author: "Samir Œ",
    countDown: 5,
    role: 0,
    category: "tts",
    description: "bot will make your text into voice.",
    guide: {
      en: "{pn} your text (default will be 'en') | {pn} your text | [use two words ISO 639-1 code, ex: English-en, Bangla-bn, Hindi-hi or more, search Google for your language code]"
    }
  },

  onStart: async function ({ api, args, message, event }) {
    const { getPrefix } = global.utils;
    const p = getPrefix(event.threadID);

    let text;
    let number = 'en';

    if (event.type === "message_reply") {
      text = event.messageReply.body;
    } else {
      if (args && args.length > 0) {
        if (args.includes("|")) {
          const splitArgs = args.join(" ").split("|").map(arg => arg.trim());
          text = splitArgs[0];
          number = splitArgs[1] || 'en';
        } else {
          text = args.join(" ");
        }
      } else {
        text = '';
      }
    }

    if (!text) {
      return message.reply(`Please provide some text. Example:\n${p}say hi there`);
    }

    const path = `${__dirname}/tmp/tts.mp3`;

    try {
      if (text.length <= 150) {
        const response = await axios({
          method: "get",
          url: `https://translate.google.com/translate_tts?ie=UTF-8&tl=${number}&client=tw-ob&q=${encodeURIComponent(text)}`,
          responseType: "stream"
        });

        const writer = fs.createWriteStream(path);
        response.data.pipe(writer);
        writer.on("finish", () => {
          message.reply({
            body: text,
            attachment: fs.createReadStream(path)
          }, () => {
            fs.remove(path);
          });
        });
      } else {
        const chunkSize = 150;
        const chunks = text.match(new RegExp(`.{1,${chunkSize}}`, 'g'));

        for (let i = 0; i < chunks.length; i++) {
          const response = await axios({
            method: "get",
            url: `https://translate.google.com/translate_tts?ie=UTF-8&tl=${number}&client=tw-ob&q=${encodeURIComponent(chunks[i])}`,
            responseType: "stream"
          });

          const writer = fs.createWriteStream(path, { flags: i === 0 ? 'w' : 'a' });
          response.data.pipe(writer);

          if (i === chunks.length - 1) {
            writer.on("finish", () => {
              message.reply({
                body: text,
                attachment: fs.createReadStream(path)
              }, () => {
                fs.remove(path);
              });
            });
          }
        }
      }
    } catch (err) {
      console.error(err);
      message.reply("An error occurred while trying to convert your text to speech or send it as an attachment. Please try again later.");
    }
  }
};

View raw file