diff --git a/commands/interaction/slash/tts.js b/commands/interaction/slash/tts.js new file mode 100644 index 0000000..9d380a8 --- /dev/null +++ b/commands/interaction/slash/tts.js @@ -0,0 +1,11 @@ +module.exports = { + description: 'Text to Speech commands', + name: 'tts', + options: [ + require('../subcommands/tts/tiktok'), + require('../subcommands/tts/microsoft'), + require('../subcommands/tts/moonbase'), + require('../subcommands/tts/playht'), + require('../subcommands/tts/imtranslator') + ] +}; \ No newline at end of file diff --git a/commands/interaction/tts/texttospeech.js b/commands/interaction/subcommands/tts/imtranslator.js similarity index 73% rename from commands/interaction/tts/texttospeech.js rename to commands/interaction/subcommands/tts/imtranslator.js index c786da9..dd6ac27 100644 --- a/commands/interaction/tts/texttospeech.js +++ b/commands/interaction/subcommands/tts/imtranslator.js @@ -1,15 +1,16 @@ const { Constants } = require('detritus-client'); const { InteractionCallbackTypes, ApplicationCommandOptionTypes } = Constants; -const { imtranslator } = require('../../../labscore/api'); -const { IMTRANSLATOR_VOICES } = require('../../../labscore/constants'); +const { imtranslator } = require('../../../../labscore/api'); +const { IMTRANSLATOR_VOICES } = require('../../../../labscore/constants'); -const { createEmbed } = require('../../../labscore/utils/embed'); -const { icon, highlight } = require('../../../labscore/utils/markdown'); +const { createEmbed } = require('../../../../labscore/utils/embed'); +const { icon, highlight } = require('../../../../labscore/utils/markdown'); module.exports = { - description: 'Text to Speech', - name: 'texttospeech', + description: 'Text to Speech with imtranslator voices', + name: 'imtranslator', + type: ApplicationCommandOptionTypes.SUB_COMMAND, options: [ { name: 'voice', diff --git a/commands/interaction/tts/microsoft.js b/commands/interaction/subcommands/tts/microsoft.js similarity index 77% rename from commands/interaction/tts/microsoft.js rename to commands/interaction/subcommands/tts/microsoft.js index b9bfc45..dd82394 100644 --- a/commands/interaction/tts/microsoft.js +++ b/commands/interaction/subcommands/tts/microsoft.js @@ -1,15 +1,16 @@ const { Constants } = require('detritus-client'); const { InteractionCallbackTypes, ApplicationCommandOptionTypes } = Constants; -const { sapi4 } = require('../../../labscore/api'); -const { MICROSOFT_VOICES, MICROSOFT_VOICE_CONFIG } = require('../../../labscore/constants'); +const { sapi4 } = require('../../../../labscore/api'); +const { MICROSOFT_VOICES, MICROSOFT_VOICE_CONFIG } = require('../../../../labscore/constants'); -const { createEmbed } = require('../../../labscore/utils/embed'); -const { icon, highlight } = require('../../../labscore/utils/markdown'); +const { createEmbed } = require('../../../../labscore/utils/embed'); +const { icon, highlight } = require('../../../../labscore/utils/markdown'); module.exports = { - description: 'Microsoft Sam Text to Speech', - name: 'mstts', + description: 'Text to Speech with microsoft voices', + name: 'microsoft', + type: ApplicationCommandOptionTypes.SUB_COMMAND, options: [ { name: 'voice', diff --git a/commands/interaction/subcommands/tts/moonbase.js b/commands/interaction/subcommands/tts/moonbase.js new file mode 100644 index 0000000..bb3406c --- /dev/null +++ b/commands/interaction/subcommands/tts/moonbase.js @@ -0,0 +1,40 @@ +const { Constants } = require('detritus-client'); +const { InteractionCallbackTypes, ApplicationCommandOptionTypes } = Constants; + +const { moonbase } = require('../../../../labscore/api'); + +const { createEmbed } = require('../../../../labscore/utils/embed'); +const { icon, highlight } = require('../../../../labscore/utils/markdown'); + +module.exports = { + description: 'Moonbase Alpha text to speech voices', + name: 'moonbase', + type: ApplicationCommandOptionTypes.SUB_COMMAND, + options: [ + { + name: 'text', + description: 'Text', + type: ApplicationCommandOptionTypes.STRING, + required: true, + maxLength: 1024 + } + ], + run: async (context, args) => { + try { + await context.respond({ data: {}, type: InteractionCallbackTypes.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE }) + + let audio = await moonbase(context, args.text, args.voice) + + await context.editOrRespond({ + embeds: [createEmbed("defaultNoFooter", context, { description: `${icon("audio")} Audio Generated in ${highlight(audio.timings + "s")}.` })], + file: { value: audio.response.body, filename: "moonbase.wav" } + }) + + } catch (e) { + console.log(e) + await context.editOrRespond({ + embeds: [createEmbed("error", context, "Unable to generate audio file.")] + }) + } + }, +}; \ No newline at end of file diff --git a/commands/interaction/tts/texttospeech2.js b/commands/interaction/subcommands/tts/playht.js similarity index 73% rename from commands/interaction/tts/texttospeech2.js rename to commands/interaction/subcommands/tts/playht.js index ad58a9b..c812107 100644 --- a/commands/interaction/tts/texttospeech2.js +++ b/commands/interaction/subcommands/tts/playht.js @@ -1,15 +1,16 @@ const { Constants } = require('detritus-client'); const { InteractionCallbackTypes, ApplicationCommandOptionTypes } = Constants; -const { playht } = require('../../../labscore/api'); -const { PLAYHT_VOICES } = require('../../../labscore/constants'); +const { playht } = require('../../../../labscore/api'); +const { PLAYHT_VOICES } = require('../../../../labscore/constants'); -const { createEmbed } = require('../../../labscore/utils/embed'); -const { icon, highlight } = require('../../../labscore/utils/markdown'); +const { createEmbed } = require('../../../../labscore/utils/embed'); +const { icon, highlight } = require('../../../../labscore/utils/markdown'); module.exports = { - description: 'Text to Speech with different voices', - name: 'tts2', + description: 'Text to Speech with playht voices', + name: 'playht', + type: ApplicationCommandOptionTypes.SUB_COMMAND, options: [ { name: 'voice', diff --git a/commands/interaction/tts/tiktok.js b/commands/interaction/subcommands/tts/tiktok.js similarity index 78% rename from commands/interaction/tts/tiktok.js rename to commands/interaction/subcommands/tts/tiktok.js index cadd8f2..caf8899 100644 --- a/commands/interaction/tts/tiktok.js +++ b/commands/interaction/subcommands/tts/tiktok.js @@ -1,15 +1,16 @@ const { Constants } = require('detritus-client'); const { InteractionCallbackTypes, ApplicationCommandOptionTypes } = Constants; -const { tiktok } = require('../../../labscore/api'); -const { TIKTOK_VOICES } = require('../../../labscore/constants'); +const { tiktok } = require('../../../../labscore/api'); +const { TIKTOK_VOICES } = require('../../../../labscore/constants'); -const { createEmbed } = require('../../../labscore/utils/embed'); -const { icon, highlight } = require('../../../labscore/utils/markdown'); +const { createEmbed } = require('../../../../labscore/utils/embed'); +const { icon, highlight } = require('../../../../labscore/utils/markdown'); module.exports = { description: 'TikTok text to speech voices', name: 'tiktok', + type: ApplicationCommandOptionTypes.SUB_COMMAND, options: [ { name: 'voice', diff --git a/labscore/api/endpoints.js b/labscore/api/endpoints.js index f7d22e8..658b76c 100644 --- a/labscore/api/endpoints.js +++ b/labscore/api/endpoints.js @@ -44,11 +44,11 @@ const Api = Object.freeze({ SEARCH_YOUTUBE: '/search/youtube', TTS_IMTRANSLATOR: '/tts/imtranslator', + TTS_MOONBASE: '/tts/moonbase', TTS_PLAYHT: '/tts/playht', TTS_POLLY: '/tts/polly', TTS_SAPI4: '/tts/sapi4', - TTS_TIKTOK: '/tts/tiktok', - TTS_VOICEFORGE: '/tts/voiceforge', + TTS_TIKTOK: '/tts/tiktok' UTILS_EMOJIPEDIA: '/utils/emojipedia', UTILS_INFERKIT: '/utils/inferkit', diff --git a/labscore/api/index.js b/labscore/api/index.js index 24fe043..1abd54e 100644 --- a/labscore/api/index.js +++ b/labscore/api/index.js @@ -254,6 +254,12 @@ module.exports.imtranslator = async function(context, text, voice){ }) } +module.exports.moonbase = async function(context, text){ + return await request(Api.TTS_MOONBASE, "GET", {}, { + text + }) +} + module.exports.playht = async function(context, text, voice){ return await request(Api.TTS_PLAYHT, "GET", {}, { text: text, @@ -284,13 +290,6 @@ module.exports.tiktok = async function(context, text, voice){ }) } -module.exports.voiceforge = async function(context, text, voice){ - return await request(Api.TTS_VOICEFORGE, "GET", {}, { - text: text, - voice: voice - }) -} - module.exports.emojipedia = async function(context, emoji){ return await request(Api.UTILS_EMOJIPEDIA, "GET", {}, { emoji: emoji diff --git a/labscore/client.js b/labscore/client.js index 5233754..ae7beb7 100644 --- a/labscore/client.js +++ b/labscore/client.js @@ -97,6 +97,7 @@ commandClient.on('commandRunError', async ({context, error}) => { await commandClient.addMultipleIn('../commands/message/'); await commandClient.run() - await interactionClient.addMultipleIn('../commands/interaction/'); + await interactionClient.addMultipleIn('../commands/interaction/context'); + await interactionClient.addMultipleIn('../commands/interaction/slash'); await interactionClient.run(); })(); \ No newline at end of file