pandoapi
Version:
API interna para los bots de PandoTeam
81 lines (57 loc) • 3.13 kB
JavaScript
async function tts(client, str, message) {
const Discord = require('discord.js');
const { Readable } = require('stream');
require('ffmpeg-static');
require('opusscript');
if(!client || !str || !message) return ('Api-Error on(Parameters) : No ha proporcionado los parametros necesarios.');
if(!client.user) return ('Api-Error on(getClientUser) : No se pudo obtener el usuario del cliente.');
if(!client.user.id) return ('Api-Error on(getClientUserID) : No se pudo obtener la ID del cliente.');
const authorization = require('../authorized.js');
const authorize = await authorization.authorize(client);
if(authorize === false) return ('Api-Error on(Authorization) : El cliente no está autorizado para usar este servicio.');
if(typeof str !== 'string') return ('Api-Error on(validString) : Los argumentos tienen que ser de tipo string');
if (str.length >= 200) {
let array = Discord.Util.splitMessage(str, { char: '', maxLength: 190 }),
buffers = [];
for (let str of array) {
let link = `https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&textlen=64&client=tw-ob&q=${encodeURIComponent(str)}&tl=es`
const fetch = require('node-fetch');
let buffer = await (await fetch(link)).buffer()
buffers.push(buffer)
}
if (message.member.voice.channel && message.member.voice.channel.permissionsFor(message.client.user).has('CONNECT') && message.member.voice.channel.permissionsFor(message.client.user).has('SPEAK')){
message.member.voice.channel.join().then(async (voice) => {
await voice.play(bufferToStream(Buffer.concat(buffers)))
})
return 'Api-Message success(play), {type: 1} : Documento reproducido';
}else{
return message.channel.send({
files: [
{
attachment: Buffer.concat(buffers),
name: 'tts.mp3'
}
]
})
}
}else{
let link = `https://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=0&textlen=64&client=tw-ob&q=${encodeURIComponent(str)}&tl=es`;
if (message.member.voice.channel && message.member.voice.channel.permissionsFor(message.client.user).has('CONNECT') && message.member.voice.channel.permissionsFor(message.client.user).has('SPEAK')){
message.member.voice.channel.join().then(async (voice) => {
await voice.play(link)
})
return 'Api-Message success(play), {type: 2} : Documento reproducido';
}else{
let att = new Discord.MessageAttachment(link, 'tts.mp3');
return message.channel.send({ files: [att] })
}
}
}
function bufferToStream(buffer) {
const { Readable } = require('stream');
const stream = new Readable();
stream.push(buffer);
stream.push(null);
return stream;
}
module.exports = tts;