diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2022-07-05 18:16:06 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2022-07-05 18:16:06 -0400 |
| commit | a8ec9fe1b8e25af4e1faa6548ee74bfa0643831f (patch) | |
| tree | 70960f5366f1a8542cb58b1e5a181ae4a4d306f7 /AudioBackend.js | |
| parent | 219b64b51b0297469c7a0401767d7f533c8ac7c3 (diff) | |
| download | DLAP-a8ec9fe1b8e25af4e1faa6548ee74bfa0643831f.tar.gz DLAP-a8ec9fe1b8e25af4e1faa6548ee74bfa0643831f.tar.bz2 DLAP-a8ec9fe1b8e25af4e1faa6548ee74bfa0643831f.zip | |
The start of scrapping the control panel feature
Diffstat (limited to 'AudioBackend.js')
| -rw-r--r-- | AudioBackend.js | 134 |
1 files changed, 132 insertions, 2 deletions
diff --git a/AudioBackend.js b/AudioBackend.js index f552a67..bf4210f 100644 --- a/AudioBackend.js +++ b/AudioBackend.js @@ -26,7 +26,7 @@ import { joinVoiceChannel, VoiceConnectionStatus } from '@discordjs/voice' -import { MessageEmbed } from 'discord.js' +import { MessageActionRow, MessageButton, MessageEmbed } from 'discord.js' import config from './config.json' assert {type: 'json'} import { readdirSync, writeFile } from 'node:fs' @@ -35,6 +35,7 @@ export let audio; export let files = readdirSync('music'); let fileData; +let runOnce = false export let playerState; let isAudioStatePaused; @@ -51,7 +52,7 @@ export async function voiceInit(bot) { }); connection.on(VoiceConnectionStatus.Destroyed, () => { - console.log('Destroying beats...'); + console.log('Destroyed the beats...'); }); player.on('idle', () => { @@ -64,6 +65,135 @@ export async function voiceInit(bot) { }).catch(e => { console.error(e) }) } +export async function controlPanel(interaction, bot) { + let controlEmbed + let controlButtons + let controlButtons2 + + if (runOnce === true) return await interaction.reply({content:'You already executed this command', ephemeral:true}) + + controlEmbed = new MessageEmbed() + .setAuthor({name: `${bot.user.username} Control Panel`, iconURL: bot.user.avatarURL()}) + .addField('State', playerState) + .addField('Currently Playing', audio) + //.addField('Next Music', '(a possible feature when queue system is implemented?)') + .setColor('#0066ff') + + controlButtons = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('SUCCESS') + .setLabel('Join') + .setCustomId('join') + .setEmoji('⬆️') + .setDisabled(true), + new MessageButton() + .setStyle('SECONDARY') + .setLabel('Play') + .setCustomId('play') + .setEmoji('▶️') + .setDisabled(true), + new MessageButton() + .setStyle('SECONDARY') + .setLabel('Pause') + .setCustomId('pause') + .setEmoji('⏸️'), + new MessageButton() + .setStyle('SECONDARY') + .setLabel('Skip') + .setCustomId('skip') + .setEmoji('⏭️'), + new MessageButton() + .setStyle('PRIMARY') + .setEmoji('⏩') + .setCustomId('next'), + ); + + controlButtons2 = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('PRIMARY') + .setEmoji('⏪') + .setCustomId('back'), + new MessageButton() + .setStyle('DANGER') + .setLabel('Leave') + .setCustomId('leave') + .setEmoji('⏏️'), + new MessageButton() + .setStyle('DANGER') + .setLabel('Power Off') + .setCustomId('stop') + .setEmoji('🛑') + ) + + const filter = i => i.user.id === config.botOwner; + + const collector = interaction.channel.createMessageComponentCollector({filter}); + + collector.on('collect', async ctlButton => { + if (ctlButton.customId === 'join') { + controlButtons.components[0].setDisabled(true); + controlButtons.components[1].setDisabled(true); + controlButtons.components[2].setDisabled(false); + controlButtons.components[3].setDisabled(false); + controlButtons2.components[1].setDisabled(false); + await interaction.editReply({components:[controlButtons]}); + await voiceInit(bot); + return await ctlButton.reply({content:'Joining voice channel', ephemeral:true}); + } + if (ctlButton.customId === 'play') { + controlButtons.components[2].setDisabled(false); + controlButtons.components[1].setDisabled(true); + await interaction.editReply({components:[controlButtons]}); + audioState(); + player.unpause(); + return await ctlButton.reply({content:'Resuming music', ephemeral:true}); + } + if (ctlButton.customId === 'pause') { + controlButtons.components[2].setDisabled(true); + controlButtons.components[1].setDisabled(false); + await interaction.editReply({components:[controlButtons]}); + audioState(); + player.pause(); + return await ctlButton.reply({content:'Pausing music', ephemeral:true}); + } + if (ctlButton.customId === 'skip') { + player.stop(); + await searchAudio(bot, interaction); + return await ctlButton.reply({content:`Skipping ${audio}`, ephemeral:true}); + } + if (ctlButton.customId === 'next') { + return await interaction.editReply({ components: [controlButtons2] }).then(ctlButton.deferUpdate()); + } + if (ctlButton.customId === 'back') { + return await interaction.editReply({ components: [controlButtons] }).then(ctlButton.deferUpdate()); + } + if (ctlButton.customId === 'leave') { + console.log('Leaving voice channel...'); + controlButtons.components[0].setDisabled(false); + controlButtons.components[1].setDisabled(true); + controlButtons.components[2].setDisabled(true); + controlButtons.components[3].setDisabled(true); + controlButtons2.components[1].setDisabled(true); + await interaction.editReply({components:[controlButtons2]}); + await destroyAudio(interaction); + return await ctlButton.reply({content:'Leaving voice channel', ephemeral:true}); + } + if (ctlButton.customId === 'stop') { + await ctlButton.reply({content:`Powering off ${bot.user.username}...`, ephemeral:true}); + await interaction.deleteReply(); + await collector.stop(); + return await stopBot(bot, interaction); + } + }); + + collector.on('end', collected => console.log(`Collected ${collected.size} items`)); + + runOnce = true + return await interaction.reply({embeds:[controlEmbed], components:[controlButtons]}); +} + export async function searchAudio(bot){ //TODO: Eventually this system will need a rework so it won't repeat the same files. |
