forked from Talon/tardis-bot
		
	fuck
This commit is contained in:
		| @@ -1,6 +0,0 @@ | ||||
| TOKEN=<BOT TOKEN> | ||||
| GUILD=<Guild ID> | ||||
| CHANNEL=<Main voice channel> | ||||
| VOICE_TMP_PATH=./voice_tmp/ | ||||
| DB_FILE=./database/tardis.db | ||||
| PREFIX=! | ||||
							
								
								
									
										35
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								index.js
									
									
									
									
									
								
							| @@ -1,6 +1,5 @@ | ||||
| const Discord = require('discord.js'); | ||||
| require('dotenv').config(); | ||||
| const tts = require('google-tts-api'); | ||||
| const fetch = require('node-fetch'); | ||||
| const fs = require('fs'); | ||||
| const sha1 = require('sha1'); | ||||
| @@ -16,7 +15,19 @@ const db = new sqlite.Database(process.env.DB_FILE); | ||||
|  | ||||
| const api = { | ||||
|     db: db, | ||||
|      | ||||
|     ttsEngines: (() => { | ||||
| 		let engines={}; | ||||
| 	    console.log(`Registering TTS engines...`); | ||||
| 	    const engineDirectories = fs.readdirSync('./tts'); | ||||
| 	    engineDirectories.forEach((dir) => { | ||||
| 			if(dir.startsWith('.')) return; | ||||
| 	        eng=require(`./tts/${dir}/index.js`); | ||||
| 			engines[dir]=new eng; | ||||
| 	        console.log(`Loading ./tts/${dir}/index.js`) | ||||
| 	    }) | ||||
|     	return engines; | ||||
|     })(), | ||||
| 	 | ||||
|     isInVoiceChannel: (channel) => { | ||||
|         return joinedVoiceChannels.includes(channel); | ||||
|     }, | ||||
| @@ -25,16 +36,11 @@ const api = { | ||||
|         return bot.voice.connections.find((conn) => conn.channel === channel); | ||||
|     }, | ||||
|  | ||||
|     generateVoice: async (string) => { | ||||
|         const hash = sha1(string); | ||||
|         const filepath = process.env.VOICE_TMP_PATH + hash + ".mp3"; | ||||
|     generateVoice: async (string, engine, voice, params) => { | ||||
|         const hash = sha1(voice+string); | ||||
|         const filepath = process.env.VOICE_TMP_PATH + hash + '.' + engine.fileExtension; | ||||
|         if (!fs.existsSync(filepath)) { | ||||
|             const url = tts.getAudioUrl(string, {lang: "en-us"}); | ||||
|             console.log("Generated url: " + url); | ||||
|             const data = await fetch(url); | ||||
|             const contents = await data.arrayBuffer(); | ||||
|             const buf = Buffer.from(contents); | ||||
|             fs.writeFileSync(filepath, buf); | ||||
|             await engine.getSpeechFile(string, filepath, voice, params); | ||||
|         } | ||||
|         return filepath; | ||||
|     }, | ||||
| @@ -53,9 +59,9 @@ const api = { | ||||
|         } | ||||
|     }, | ||||
|  | ||||
|     speak: async (channel, message) => { | ||||
|     speak: async (channel, message, engine=api.ttsEngines.gtranslate, voice='en-us', params={}) => { | ||||
|         const conn = api.getConnectionForVoiceChannel(channel); | ||||
|         const filepath = await api.generateVoice(message); | ||||
|         const filepath = await api.generateVoice(message, engine, voice, params); | ||||
|         if (conn) conn.play(filepath); | ||||
|     }, | ||||
|  | ||||
| @@ -65,9 +71,10 @@ const api = { | ||||
| } | ||||
|  | ||||
| function registerModules() { | ||||
|     console.log(`Registering modules...`); | ||||
| 	console.log(`Registering modules...`); | ||||
|     const moduleDirectories = fs.readdirSync('./modules'); | ||||
|     moduleDirectories.forEach((dir) => { | ||||
| 		if(dir.startsWith('.')) return; | ||||
|         modules.push(require(`./modules/${dir}/index.js`)); | ||||
|         console.log(`Loading ./modules/${dir}/index.js`) | ||||
|     }) | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								modules/.DS_Store
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								modules/.DS_Store
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -5,6 +5,6 @@ module.exports = function(bot, api) { | ||||
|         const channel = await bot.channels.fetch(process.env.CHANNEL); | ||||
|         await api.joinChannel(channel); | ||||
|          | ||||
|         api.speak(channel, `Hi! I'm alive. It is now ${new Date().toLocaleTimeString()} on ${new Date().toLocaleDateString()}`); | ||||
|         api.speak(channel, `Hi! I'm alive. It is now ${new Date().toLocaleTimeString()} on ${new Date().toLocaleDateString()}`,api.ttsEngines.watson); | ||||
|     })    | ||||
| } | ||||
							
								
								
									
										1
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										1
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @@ -1046,7 +1046,6 @@ | ||||
|       "hasInstallScript": true, | ||||
|       "dependencies": { | ||||
|         "node-addon-api": "^3.0.0", | ||||
|         "node-gyp": "3.x", | ||||
|         "node-pre-gyp": "^0.11.0" | ||||
|       }, | ||||
|       "optionalDependencies": { | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								tts/.DS_Store
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								tts/.DS_Store
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										16
									
								
								tts/BaseEngine/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								tts/BaseEngine/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| const fs=require('fs'); | ||||
|  | ||||
| module.exports=class { | ||||
| 	constructor(longName, fileExtension, supportedParameters=[]) { | ||||
| 		this.longName=longName; | ||||
| 		this.fileExtension=fileExtension; | ||||
| 	} | ||||
| 	async getSpeech(text, voice, params) {} | ||||
| 	async getSpeechFile(text, filepath, voice, params) { | ||||
| 		const data = await this.getSpeech(text, voice, params); | ||||
|         const contents = await data.arrayBuffer(); | ||||
|         const buf = Buffer.from(contents); | ||||
|         fs.writeFileSync(filepath, buf); | ||||
| 		return filepath; | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										11
									
								
								tts/espeak/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tts/espeak/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| const BaseEngine=require('../BaseEngine') | ||||
| const {spawn} = require('child_process') | ||||
|  | ||||
| module.exports=class extends BaseEngine { | ||||
| 	constructor() { | ||||
| 		super('ESpeak','wav') | ||||
| 	} | ||||
| 	async getSpeechFile(text, filepath, voice='en', params={}) { | ||||
| 		await spawn('espeak', ['-v', voice, '-w',filepath, text]); | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										13
									
								
								tts/gtranslate/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								tts/gtranslate/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| const BaseEngine=require('../BaseEngine'); | ||||
| const fetch = require('node-fetch'); | ||||
| const tts = require('google-tts-api'); | ||||
|  | ||||
| module.exports= class extends BaseEngine { | ||||
| 	constructor() { | ||||
| 		super("Google Translate TTS","mp3"); | ||||
| 	} | ||||
| 	async getSpeech(text, voice='en-us', params={}) { | ||||
| 		const url = tts.getAudioUrl(text, {lang: voice}); | ||||
| 		return fetch(url); | ||||
| 	} | ||||
| }; | ||||
							
								
								
									
										26
									
								
								tts/watson/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								tts/watson/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| const BaseEngine=require('../BaseEngine'); | ||||
| const fetch = require('node-fetch'); | ||||
| const querystring = require('querystring'); | ||||
|  | ||||
| module.exports= class extends BaseEngine { | ||||
| 	constructor() { | ||||
| 		super("IBM Watson TTS","ogg"); | ||||
| 	} | ||||
| 	async getSpeech(text, voice='en-us', params={}) { | ||||
| 		const url = process.env.watsonURL+"/v1/synthesize"; | ||||
| 		let buff=new Buffer('apikey:'+process.env.watsonAPIKey); | ||||
| 		let b64auth=buff.toString('base64'); | ||||
| 		const authorization='Basic '+b64auth; | ||||
| 		const opts={ | ||||
| 			method: "post", | ||||
| 			headers: { | ||||
| 				'Content-Type': 'application/json', | ||||
| 				'Authorization': authorization | ||||
| 			}, | ||||
| 			body: { | ||||
| 				text: text | ||||
| 			} | ||||
| 		}; | ||||
| 		return fetch(url); | ||||
| 	} | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user