From 605390bfe2bf9113f460325fed85aebf06e2e60d Mon Sep 17 00:00:00 2001 From: Supositware Date: Fri, 23 Sep 2022 19:41:18 +0200 Subject: [PATCH] dectalk! --- commands/voice/dectalk.js | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 commands/voice/dectalk.js diff --git a/commands/voice/dectalk.js b/commands/voice/dectalk.js new file mode 100644 index 0000000..65b9b7f --- /dev/null +++ b/commands/voice/dectalk.js @@ -0,0 +1,43 @@ +import { SlashCommandBuilder } from 'discord.js'; +import { rand } from '../../utils/rand.js'; +import { execFile } from 'node:child_process'; + +export default { + data: new SlashCommandBuilder() + .setName('dectalk') + .setDescription('Send a .wav sound file of what you wrote with dectalk') + .addStringOption(option => + option.setName('message') + .setDescription('Write something so I can talk it back with dectalk.') + .setRequired(true)), + category: 'voice', + async execute(interaction, args) { + args.message = rand(args.message, interaction); + const output = `${interaction.id}_dectalk.wav`; + const message = '[:phoneme on]' + args.message; + await interaction.deferReply({ ephemeral: false }); + + if (process.platform === 'win32') { + // Untested, most likely do not work. + execFile('say.exe', ['-w', output, `${message}`], { cwd: './bin/dectalk/' }, (error, stdout, stderr) => { + sendMessage(output, error, stdout, stderr); + }); + } + else if (process.platform === 'linux' || process.platform === 'darwin') { + execFile('wine', ['say.exe', '-w', output, `${message}`], { cwd: './bin/dectalk/' }, (error, stdout, stderr) => { + sendMessage(`./bin/dectalk/${output}`, error, stdout, stderr); + }); + } + + async function sendMessage(file, error, stdout, stderr) { + if (error) { + console.error(stderr); + console.error(error); + return interaction.editReply('Oh no! an error has occurred!'); + } + + return interaction.editReply({ files: [file] }); + } + + }, +};