diff options
| author | Andrew Lee <alee14498@protonmail.com> | 2022-03-26 13:43:03 -0400 |
|---|---|---|
| committer | Andrew Lee <alee14498@protonmail.com> | 2022-03-26 13:43:03 -0400 |
| commit | d55e74693da3c7b2705d67aa1880baaa0dcd1790 (patch) | |
| tree | 2588b36a5510adf40295ad1389964e194cb9a742 | |
| parent | 9e2ba5ceb9e7d1e8a4305be36205dde3cfb5b0b9 (diff) | |
| download | DLAP-d55e74693da3c7b2705d67aa1880baaa0dcd1790.tar.gz DLAP-d55e74693da3c7b2705d67aa1880baaa0dcd1790.tar.bz2 DLAP-d55e74693da3c7b2705d67aa1880baaa0dcd1790.zip | |
New interaction handler; Merged git and about
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | bot.js | 30 | ||||
| -rw-r--r-- | commands/about.js | 28 | ||||
| -rw-r--r-- | commands/control.js | 22 | ||||
| -rw-r--r-- | commands/help.js | 20 | ||||
| -rw-r--r-- | commands/ping.js | 10 | ||||
| -rw-r--r-- | deploy-command.js | 18 | ||||
| -rw-r--r-- | package.json | 2 |
8 files changed, 128 insertions, 4 deletions
@@ -17,6 +17,8 @@ Make a new file called `config.json`. "botOwner": "your_user_id_here", "statusChannel": "channel_id", "voiceChannel": "voice_channel_id" + "guildID": "guild_id", + "clientID": "client_id", } ``` @@ -44,7 +44,7 @@ function voiceInit() { }); connection.on(VoiceConnectionStatus.Destroyed, () => { - console.log('Stopping music...'); + console.log('Destroying beats...'); }); player.on('idle', () => { @@ -58,7 +58,6 @@ function voiceInit() { } function playAudio() { - let files = fs.readdirSync(join(__dirname,'music')); while (true) { @@ -91,7 +90,15 @@ function playAudio() { } -bot.on('ready', () => { +bot.commands = new Discord.Collection(); +const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); + +for (const file of commandFiles) { + const command = require(`./commands/${file}`); + bot.commands.set(command.data.name, command); +} + +bot.once('ready', () => { console.log('Bot is ready!'); console.log(`Logged in as ${bot.user.tag}!`); console.log(`Running on Discord.JS ${Discord.version}`) @@ -104,7 +111,7 @@ bot.on('ready', () => { bot.user.setPresence({ activities: [{ - name: `Music | ${config.prefix}help`, + name: 'some beats', type: 'LISTENING' }], status: 'online', @@ -127,6 +134,21 @@ bot.on('ready', () => { }); +bot.on('interactionCreate', async interaction => { + if (!interaction.isCommand()) return; + + const command = bot.commands.get(interaction.commandName); + + if (!command) return; + + try { + await command.execute(interaction, bot); + } catch (error) { + console.error(error); + await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true }); + } +}); + bot.on('messageCreate', async msg => { if (msg.author.bot) return; if (!msg.guild) return; diff --git a/commands/about.js b/commands/about.js new file mode 100644 index 0000000..033c44f --- /dev/null +++ b/commands/about.js @@ -0,0 +1,28 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); +const { MessageEmbed, version, MessageActionRow, MessageButton } = require("discord.js"); + +module.exports = { + data: new SlashCommandBuilder() + .setName('about') + .setDescription('Information about the bot'), + async execute(interaction, bot) { + const aboutEmbed = new MessageEmbed() + .setAuthor({name:`About ${bot.user.username}`, iconURL:bot.user.avatarURL()}) + .addField('Information', 'A Discord bot that plays local mp3 audio tracks.') + .addField('Original Creator', 'Andrew Lee (Alee#4277)') + .addField('Frameworks', `Discord.JS ${version} + Voice`) + .addField('License', 'GNU General Public License v3.0') + .setFooter({text:'© Copyright 2020-2022 Andrew Lee. Licensed with GPL-3.0.'}) + .setColor('#0066ff') + + const srcOrig = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('LINK') + .setLabel('Original Source Code') + .setURL('https://github.com/Alee14/DLMP3'), + ); + + return interaction.reply({ embeds:[aboutEmbed], components:[srcOrig] }); + }, +};
\ No newline at end of file diff --git a/commands/control.js b/commands/control.js new file mode 100644 index 0000000..aa07991 --- /dev/null +++ b/commands/control.js @@ -0,0 +1,22 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); +const { MessageEmbed, MessageActionRow, MessageButton} = require("discord.js"); + +module.exports = { + data: new SlashCommandBuilder() + .setName('control') + .setDescription('Controlling the music'), + async execute(interaction, bot) { + const controlEmbed = new MessageEmbed() + .setAuthor({name:`${bot.user.username} Control Panel`, iconURL:bot.user.avatarURL()}) + .addField('Currently Playing', 'audio file here') + .addField('Next Music', '(a possible feature?)') + const controlButtons = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('PRIMARY') + .setLabel('Pause/Play') + .setCustomId('soon') + ); + return interaction.reply({embeds:[controlEmbed], components:[controlButtons]}); + }, +};
\ No newline at end of file diff --git a/commands/help.js b/commands/help.js new file mode 100644 index 0000000..b4d2d86 --- /dev/null +++ b/commands/help.js @@ -0,0 +1,20 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); +const { MessageEmbed } = require("discord.js"); +const config = require("../config.json"); + +module.exports = { + data: new SlashCommandBuilder() + .setName('help') + .setDescription('Lists commands for the bot.'), + async execute(interaction, bot) { + const helpEmbed = new MessageEmbed() + .setAuthor({name:`${bot.user.username} Help`, iconURL:bot.user.avatarURL()}) + //.setDescription(`Currently playing \`${audio}\`.`) + .addField('Public Commands', `${config.prefix}help\n${config.prefix}ping\n${config.prefix}git\n${config.prefix}playing\n${config.prefix}about\n`, true) + .addField('Bot Owner Only', `${config.prefix}join\n${config.prefix}resume\n${config.prefix}pause\n${config.prefix}skip\n${config.prefix}leave\n${config.prefix}stop\n`, true) + .setFooter({text:'© Copyright 2020-2022 Andrew Lee. Licensed with GPL-3.0.'}) + .setColor('#0066ff') + + return interaction.reply({ embeds: [helpEmbed]}); + }, +};
\ No newline at end of file diff --git a/commands/ping.js b/commands/ping.js new file mode 100644 index 0000000..c5b4885 --- /dev/null +++ b/commands/ping.js @@ -0,0 +1,10 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); + +module.exports = { + data: new SlashCommandBuilder() + .setName('ping') + .setDescription('Replies with Pong!'), + async execute(interaction) { + return interaction.reply('Pong!'); + }, +};
\ No newline at end of file diff --git a/deploy-command.js b/deploy-command.js new file mode 100644 index 0000000..e11458a --- /dev/null +++ b/deploy-command.js @@ -0,0 +1,18 @@ +const fs = require('node:fs'); +const { REST } = require('@discordjs/rest'); +const { Routes } = require('discord-api-types/v9'); +const config = require('./config.json'); + +const commands = []; +const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); + +for (const file of commandFiles) { + const command = require(`./commands/${file}`); + commands.push(command.data.toJSON()); +} + +const rest = new REST({ version: '9' }).setToken(config.token); + +rest.put(Routes.applicationGuildCommands(config.clientID, config.guildID), { body: commands }) + .then(() => console.log('Successfully registered application commands.')) + .catch(console.error); diff --git a/package.json b/package.json index ccbd29d..b15340d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,9 @@ }, "dependencies": { "@discordjs/opus": "^0.3.2", + "@discordjs/rest": "^0.3.0", "@discordjs/voice": "^0.5.5", + "discord-api-types": "^0.30.0", "discord.js": "^13.6.0", "ffmpeg-static": "^4.2.5", "libsodium-wrappers": "^0.7.9" |
