From a7f32e593035ded3dd67bdd8cc1a25f08de49330 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lo=C3=AFc=20Bersier?= <supositware@loics-macbook-pro.home>
Date: Sat, 18 May 2019 03:02:04 +0200
Subject: [PATCH] Microsoft sam

---
 commands/fun/tts/sam.js   | 45 +++++++++++++++++++++++++++++++
 commands/fun/tts/samvc.js | 57 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 102 insertions(+)
 create mode 100644 commands/fun/tts/sam.js
 create mode 100644 commands/fun/tts/samvc.js

diff --git a/commands/fun/tts/sam.js b/commands/fun/tts/sam.js
new file mode 100644
index 00000000..94948db6
--- /dev/null
+++ b/commands/fun/tts/sam.js
@@ -0,0 +1,45 @@
+const { Command } = require('discord-akairo');
+const axios = require('axios');
+const fs = require('fs');
+
+class samCommand extends Command {
+	constructor() {
+		super('sam', {
+			aliases: ['sam'],
+			category: 'fun',
+			args: [
+				{
+					id: 'samMessage',
+					type: 'string',
+					match: 'rest'
+				}
+			],
+			description: {
+				content: 'Send a mp3 of what you wrote in Microsoft Sam tts',
+				usage: '[text]',
+				examples: ['Here comes the roflcopter soisoisoisoisoi']
+			}
+		});
+	}
+
+	async exec(message, args) {
+		args.samMessage = args.samMessage.replace('\n', ' ');
+		args.samMessage = encodeURI(args.samMessage);
+
+		return axios.request({
+			responseType: 'arraybuffer',
+			url: `https://tetyys.com/SAPI4/SAPI4?text=${args.samMessage}&voice=Sam&pitch=100&speed=100`,
+			method: 'get',
+			headers: {
+				'Content-Type': 'audio/mpeg',
+			},
+		}).then((result) => {
+			const outputFilename = './sam.mp3';
+			fs.writeFileSync(outputFilename, result.data);
+			return message.channel.send({files: ['./sam.mp3']});
+		});
+
+	}
+}
+
+module.exports = samCommand;
\ No newline at end of file
diff --git a/commands/fun/tts/samvc.js b/commands/fun/tts/samvc.js
new file mode 100644
index 00000000..8decad91
--- /dev/null
+++ b/commands/fun/tts/samvc.js
@@ -0,0 +1,57 @@
+const { Command } = require('discord-akairo');
+const axios = require('axios');
+const fs = require('fs');
+
+class samvcCommand extends Command {
+	constructor() {
+		super('samvc', {
+			aliases: ['samvc'],
+			category: 'fun',
+			args: [
+				{
+					id: 'samMessage',
+					type: 'string',
+					match: 'rest'
+				}
+			],
+			description: {
+				content: 'Repeat what you said in voice chat with Microsoft Sam tts',
+				usage: '[text]',
+				examples: ['Here comes the roflcopter soisoisoisoisoi']
+			}
+		});
+	}
+
+	async exec(message, args) {
+		args.samMessage = args.samMessage.replace('\n', ' ');
+		args.samMessage = encodeURI(args.samMessage);
+
+		return axios.request({
+			responseType: 'arraybuffer',
+			url: `https://tetyys.com/SAPI4/SAPI4?text=${args.samMessage}&voice=Sam&pitch=100&speed=100`,
+			method: 'get',
+			headers: {
+				'Content-Type': 'audio/mpeg',
+			},
+		}).then(async (result) => {
+			const outputFilename = './samvc.mp3';
+			fs.writeFileSync(outputFilename, result.data);
+
+			const voiceChannel = message.member.voice.channel;
+			if (!voiceChannel) return message.say('Please enter a voice channel first.');
+			try {
+				const connection = await voiceChannel.join();
+				const dispatcher = connection.play('./samvc.wav');
+				dispatcher.once('finish', () => voiceChannel.leave());
+				dispatcher.once('error', () => voiceChannel.leave());
+				return null;
+			} catch (err) {
+				voiceChannel.leave();
+				return message.reply(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
+			}
+		});
+
+	}
+}
+
+module.exports = samvcCommand;
\ No newline at end of file