diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2022-04-22 23:01:50 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2022-04-22 23:01:50 -0400 |
| commit | 219b64b51b0297469c7a0401767d7f533c8ac7c3 (patch) | |
| tree | 8fda370a9b32226399ba2a40be17857470c5cca6 | |
| parent | a555449001cbe87503e5ffe9b311aceb59592c63 (diff) | |
| download | DLAP-219b64b51b0297469c7a0401767d7f533c8ac7c3.tar.gz DLAP-219b64b51b0297469c7a0401767d7f533c8ac7c3.tar.bz2 DLAP-219b64b51b0297469c7a0401767d7f533c8ac7c3.zip | |
Buttons can now be disabled from control
| -rw-r--r-- | AudioBackend.js | 3 | ||||
| -rw-r--r-- | commands/control.js | 203 | ||||
| -rw-r--r-- | commands/list.js | 6 |
3 files changed, 115 insertions, 97 deletions
diff --git a/AudioBackend.js b/AudioBackend.js index b5d5be6..f552a67 100644 --- a/AudioBackend.js +++ b/AudioBackend.js @@ -29,7 +29,6 @@ import { import { MessageEmbed } from 'discord.js' import config from './config.json' assert {type: 'json'} import { readdirSync, writeFile } from 'node:fs' -import {controlEmbed} from "./commands/control.js"; export const player = createAudioPlayer(); export let audio; @@ -146,7 +145,7 @@ export async function stopBot(bot, interaction) { if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); await statusChannel.send({embeds: [statusEmbed]}); - console.log('Powering off...'); + console.log(`Powering off ${bot.user.username}...`); await destroyAudio(interaction); bot.destroy(); return process.exit(0); diff --git a/commands/control.js b/commands/control.js index bac86d0..6007dcc 100644 --- a/commands/control.js +++ b/commands/control.js @@ -25,6 +25,9 @@ import { audio, player, destroyAudio, voiceInit, stopBot, searchAudio, playerSta import config from '../config.json' assert {type: 'json'} export let controlEmbed +export let controlButtons +export let controlButtons2 + let runOnce = false export default { @@ -33,105 +36,119 @@ export default { .setDescription('Controlling the music'), async execute(interaction, bot) { if (![config.botOwner].includes(interaction.user.id)) return await interaction.reply({ content: "You do not have permissions to execute this command.", ephemeral: true }); - if (runOnce === false) { - 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') + if (runOnce === true) return await interaction.reply({content:'You already executed this command', ephemeral:true}) - const controlButtons = new MessageActionRow() - .addComponents( - new MessageButton() - .setStyle('SUCCESS') - .setLabel('Join') - .setCustomId('join'), - new MessageButton() - .setStyle('PRIMARY') - .setLabel('Play') - .setCustomId('play'), - new MessageButton() - .setStyle('PRIMARY') - .setLabel('Pause') - .setCustomId('pause'), - new MessageButton() - .setStyle('SECONDARY') - .setLabel('Skip') - .setCustomId('skip'), - new MessageButton() - .setStyle('SECONDARY') - .setLabel('>>') - .setCustomId('next'), - ); + 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') - const controlButtons2 = new MessageActionRow() - .addComponents( - new MessageButton() - .setStyle('SECONDARY') - .setLabel('<<') - .setCustomId('back'), - new MessageButton() - .setStyle('DANGER') - .setLabel('Leave') - .setCustomId('leave'), - new MessageButton() - .setStyle('DANGER') - .setLabel('Power Off') - .setCustomId('stop') - ) + controlButtons = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('SUCCESS') + .setLabel('Join') + .setCustomId('join') + .setDisabled(true), + new MessageButton() + .setStyle('SECONDARY') + .setLabel('Play') + .setCustomId('play') + .setDisabled(true), + new MessageButton() + .setStyle('SECONDARY') + .setLabel('Pause') + .setCustomId('pause'), + new MessageButton() + .setStyle('SECONDARY') + .setLabel('Skip') + .setCustomId('skip'), + new MessageButton() + .setStyle('PRIMARY') + .setLabel('>>') + .setCustomId('next'), + ); - const filter = i => i.user.id === config.botOwner; + controlButtons2 = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('PRIMARY') + .setLabel('<<') + .setCustomId('back'), + new MessageButton() + .setStyle('DANGER') + .setLabel('Leave') + .setCustomId('leave'), + new MessageButton() + .setStyle('DANGER') + .setLabel('Power Off') + .setCustomId('stop') + ) - const collector = interaction.channel.createMessageComponentCollector({filter}); + const filter = i => i.user.id === config.botOwner; - collector.on('collect', async ctlButton => { - if (ctlButton.customId === 'join') { - await ctlButton.reply({content:'Joining voice channel', ephemeral:true}); - return await voiceInit(bot); - } - if (ctlButton.customId === 'play') { - await ctlButton.reply({content:'Resuming music', ephemeral:true}); - audioState(); - return player.unpause(); - } - if (ctlButton.customId === 'pause') { - await ctlButton.reply({content:'Pausing music', ephemeral:true}); - audioState(); - return player.pause(); - } - if (ctlButton.customId === 'skip') { - await ctlButton.reply({content:`Skipping ${audio}`, ephemeral:true}); - player.stop(); - return await searchAudio(bot, interaction); - } - 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') { - await ctlButton.reply({content:'Leaving voice channel', ephemeral:true}); - console.log('Leaving voice channel...'); - runOnce = false - await interaction.deleteReply(); - return await destroyAudio(interaction); - } - if (ctlButton.customId === 'stop') { - await ctlButton.reply({content:`Powering off ${bot.user.username}...`, ephemeral:true}); - runOnce = false - await interaction.deleteReply(); - return await stopBot(bot, interaction); - } - }); + const collector = interaction.channel.createMessageComponentCollector({filter}); - collector.on('end', collected => console.log(`Collected ${collected.size} items`)); + collector.on('collect', async ctlButton => { + if (ctlButton.customId === 'join') { + await ctlButton.reply({content:'Joining voice channel', ephemeral:true}); + 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]}); + return await voiceInit(bot); + } + if (ctlButton.customId === 'play') { + controlButtons.components[2].setDisabled(false); + controlButtons.components[1].setDisabled(true); + await interaction.editReply({components:[controlButtons]}); + await ctlButton.reply({content:'Resuming music', ephemeral:true}); + audioState(); + return player.unpause(); + } + if (ctlButton.customId === 'pause') { + controlButtons.components[2].setDisabled(true); + controlButtons.components[1].setDisabled(false); + await interaction.editReply({components:[controlButtons]}); + await ctlButton.reply({content:'Pausing music', ephemeral:true}); + audioState(); + return player.pause(); + } + if (ctlButton.customId === 'skip') { + await ctlButton.reply({content:`Skipping ${audio}`, ephemeral:true}); + player.stop(); + return await searchAudio(bot, interaction); + } + 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') { + await ctlButton.reply({content:'Leaving voice channel', ephemeral:true}); + 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]}); + return await destroyAudio(interaction); + } + if (ctlButton.customId === 'stop') { + await ctlButton.reply({content:`Powering off ${bot.user.username}...`, ephemeral:true}); + await interaction.deleteReply(); + return await stopBot(bot, interaction); + } + }); - runOnce = true - return await interaction.reply({embeds:[controlEmbed], components:[controlButtons]}); - } else { - return await interaction.reply({content:'You already executed this command', ephemeral:true}) - } + collector.on('end', collected => console.log(`Collected ${collected.size} items`)); + runOnce = true + return await interaction.reply({embeds:[controlEmbed], components:[controlButtons]}); }, };
\ No newline at end of file diff --git a/commands/list.js b/commands/list.js index 2d7c5aa..b95d46d 100644 --- a/commands/list.js +++ b/commands/list.js @@ -20,7 +20,7 @@ ***************************************************************************/ import { SlashCommandBuilder } from '@discordjs/builders' -import { readdirSync } from 'fs' +import { readdirSync, readdir } from 'fs' const musicFolder = './music'; @@ -32,6 +32,8 @@ export default { //If someone figures out how to either split the list or make pages when the max character reaches, please do so and make a pull request. const beats = readdirSync(musicFolder).join('\n'); - await interaction.reply(`Listing the available audio tracks...\n\`\`\`\n${beats}\n\`\`\``); + readdir(musicFolder, async (err, files) => { + await interaction.reply(`Listing ${files.length} audio tracks...\n\`\`\`\n${beats}\n\`\`\``); + }); }, };
\ No newline at end of file |
