From 3d095676d3c274fde7745012c3f2f7e54d706312 Mon Sep 17 00:00:00 2001 From: Keyemail Date: Thu, 4 Jul 2024 02:14:01 -0700 Subject: [PATCH] Added music! --- README.md | 12 + commands/moderation/clear.js | 2 +- commands/music/pause.js | 31 ++ commands/music/play.js | 41 ++ commands/music/queue.js | 34 ++ commands/music/skip.js | 25 ++ commands/music/skiptrack.js | 0 commands/music/stop.js | 25 ++ main.js | 55 +-- package-lock.json | 846 ++++++++++++++++++++++++++++++++++- package.json | 5 +- 11 files changed, 1027 insertions(+), 49 deletions(-) create mode 100644 README.md create mode 100644 commands/music/pause.js create mode 100644 commands/music/play.js create mode 100644 commands/music/queue.js create mode 100644 commands/music/skip.js create mode 100644 commands/music/skiptrack.js create mode 100644 commands/music/stop.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..a0c08b9 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# MBot - Keyemail + +MBot is a Discord app developed by Keyemail. This bot is to be used for moderation or music under personal use. This bot is in beta, use at your own risk. + +## Features! + +- Music +- Moderation +- More comming soon! + +## Credits +Made possible via `Discord.js` and `discord-player`. Developed by `keyemail`. diff --git a/commands/moderation/clear.js b/commands/moderation/clear.js index 04243c3..6556ef7 100644 --- a/commands/moderation/clear.js +++ b/commands/moderation/clear.js @@ -11,7 +11,7 @@ module.exports = { .setName('clear') .setDescription('Clears a certain amount of text!') .addIntegerOption(option => - option.setName('amount') + option.setName('amount') .setDescription('Set the amount to clear!') .setMinValue(1) .setRequired(true)), diff --git a/commands/music/pause.js b/commands/music/pause.js new file mode 100644 index 0000000..5326156 --- /dev/null +++ b/commands/music/pause.js @@ -0,0 +1,31 @@ +const { SlashCommandBuilder, PermissionsBitField } = require('discord.js'); +const { useQueue } = require("discord-player"); + +const informationStatus = "[INFO]: "; +const warningStatus = "[WARNING]: "; +const errorStatus = "[ERROR]: "; + +module.exports = { + data: new SlashCommandBuilder() + .setName('pause') + .setDescription('Pauses/Unpauses the current music playing.'), + async execute(interaction) { + const queue = useQueue(interaction.guild.id); + + if(!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) return interaction.reply({ content: "<:xmark:1238963594758979736> You dont have permission to use this command", ephemeral: true }); + + try { + await queue.node.setPaused(!queue.node.isPaused()); + + if(queue.node.isPaused() === true){ + return interaction.reply("<:checkmark:1238964552482422844> Current song has been paused."); + } else { + return interaction.reply("<:checkmark:1238964552482422844> Current song has been unpaused."); + } + + } catch(error){ + interaction.reply({ content: "Something went wrong, try again later.", ephemeral: true }); + return console.log(error); + } + } +} diff --git a/commands/music/play.js b/commands/music/play.js new file mode 100644 index 0000000..dcb8f1a --- /dev/null +++ b/commands/music/play.js @@ -0,0 +1,41 @@ +const { SlashCommandBuilder, PermissionsBitField } = require('discord.js'); +const { useMainPlayer } = require('discord-player'); + +const informationStatus = "[INFO]: "; +const warningStatus = "[WARNING]: "; +const errorStatus = "[ERROR]: "; + +module.exports = { + data: new SlashCommandBuilder() + .setName('play') + .setDescription('Plays a video through a link!') + .addStringOption(option => + option + .setName('link') + .setDescription('The link to play the music.') + .setRequired(true)), + async execute(interaction) { + const player = useMainPlayer(); + const channel = interaction.member.voice.channel; + + if(!channel) return interaction.reply({ content: "You are not connected to a voice channel.", ephemeral: true }); + + const query = interaction.options.getString('link', true); + + await interaction.deferReply(); + + try { + const { track } = await player.play(channel, query, { + nodeOptions: { + metadata: interaction + } + }); + + console.log(`${informationStatus}Playing ${track.title} from ${track.author} in ${interaction.guildId}`); + return interaction.followUp(`<:checkmark:1238964552482422844> **${track.title}** from **${track.author}** has been added to the queued!`); + } catch (error) { + await interaction.followUp({content: "Something went wrong! Please try again later.", ephemeral: true }); + return console.log(error); + } + } +} diff --git a/commands/music/queue.js b/commands/music/queue.js new file mode 100644 index 0000000..93467a5 --- /dev/null +++ b/commands/music/queue.js @@ -0,0 +1,34 @@ +const { SlashCommandBuilder, PermissionsBitField } = require('discord.js'); +const { useQueue } = require("discord-player"); + +const informationStatus = "[INFO]: "; +const warningStatus = "[WARNING]: "; +const errorStatus = "[ERROR]: "; + +module.exports = { + data: new SlashCommandBuilder() + .setName('queue') + .setDescription('Shows the entire queue.'), + async execute(interaction) { + const queue = useQueue(interaction.guild.id); + const tracks = queue.tracks.toArray(); + + if(tracks.length === 0) return interaction.reply("There is nothing in the queue right now"); + try { + const queueEmbed = { + color: 0x0F3061, + title: 'Current Queue:' + } + + queueEmbed.fields = tracks.map((track, index) => ({ + name: `Song ${index + 1} - ${track.author}`, + value: `${track.title}`, + })); + + return interaction.reply({ embeds: [queueEmbed] }); + } catch(erorr) { + interaction.reply({ content: "Something went wrong, try again later.", ephemeral: true }); + return console.log(error); + } + } +} diff --git a/commands/music/skip.js b/commands/music/skip.js new file mode 100644 index 0000000..364c110 --- /dev/null +++ b/commands/music/skip.js @@ -0,0 +1,25 @@ +const { SlashCommandBuilder, PermissionsBitField } = require('discord.js'); +const { useQueue } = require("discord-player"); + +const informationStatus = "[INFO]: "; +const warningStatus = "[WARNING]: "; +const errorStatus = "[ERROR]: "; + +module.exports = { + data: new SlashCommandBuilder() + .setName('skip') + .setDescription('Skips the current track.'), + async execute(interaction) { + const queue = useQueue(interaction.guild.id); + + if(!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) return interaction.reply({ content: "<:xmark:1238963594758979736> You dont have permission to use this command", ephemeral: true }); + + try{ + await queue.node.skip(); + return interaction.reply("<:checkmark:1238964552482422844> Current song has been skipped."); + } catch(error) { + interaction.reply({ content: "Something went wrong, try again later.", ephemeral: true }); + return console.log(error); + } + } +} diff --git a/commands/music/skiptrack.js b/commands/music/skiptrack.js new file mode 100644 index 0000000..e69de29 diff --git a/commands/music/stop.js b/commands/music/stop.js new file mode 100644 index 0000000..9cfed46 --- /dev/null +++ b/commands/music/stop.js @@ -0,0 +1,25 @@ +const { SlashCommandBuilder, PermissionsBitField } = require('discord.js'); +const { useQueue } = require("discord-player"); + +const informationStatus = "[INFO]: "; +const warningStatus = "[WARNING]: "; +const errorStatus = "[ERROR]: "; + +module.exports = { + data: new SlashCommandBuilder() + .setName('stop') + .setDescription('Stops the music bot and clears queue.'), + async execute(interaction) { + const queue = useQueue(interaction.guild.id); + + if(!interaction.member.permissions.has(PermissionsBitField.Flags.ManageMessages)) return interaction.reply({ content: "<:xmark:1238963594758979736> You dont have permission to use this command", ephemeral: true }); + + try{ + await queue.delete(); + return interaction.reply("<:checkmark:1238964552482422844> Stopped music and got rid of the queue."); + } catch (error) { + interaction.reply({ content: "Something went wrong, try again later.", ephemeral: true }); + return console.log(error); + } + } +} diff --git a/main.js b/main.js index 3f0461a..d0cff18 100644 --- a/main.js +++ b/main.js @@ -2,18 +2,21 @@ const { Client, Collection, Events, EmbedBuilder, GatewayIntentBits, Partials } const { token } = require('./config.json'); const fs = require('node:fs'); const path = require('node:path'); +const { Player } = require('discord-player'); const informationStatus = "[INFO]: "; const warningStatus = "[WARNING]: "; const errorStatus = "[ERROR]: "; -const starChannelID = "1211566862148567091"; - const client = new Client({ - intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMessageReactions], + intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMessageReactions, 'GuildVoiceStates'], partials: [Partials.Message, Partials.Channel, Partials.Reaction], }); +const player = new Player(client); + +player.extractors.loadDefault(); + client.commands = new Collection(); const foldersPath = path.join(__dirname, 'commands'); @@ -75,49 +78,9 @@ client.on(Events.InteractionCreate, async interaction => { } }); -client.on(Events.MessageReactionAdd, async (reaction, user) => { - try { - await reaction.fetch(); - console.log(informationStatus + "Reaction noticed!"); - - const starChannel = client.channels.cache.get(starChannelID); - - if (reaction.emoji.name == '⭐') { - if (reaction.count <= 1) { - const starEmbed = { - color: 0x0F3061, - author: { - name: reaction.message.author.tag, - icon_url: reaction.message.author.displayAvatarURL(), - }, - footer: { - text: new Date().toLocaleString(), - }, - }; - - if(reaction.message.attachments.first()){ - starEmbed.image = { - url: reaction.message.attachments.first().url, - }; - } - - if(!reaction.message.content == '') { - starEmbed.description = reaction.message.content; - } - - starChannel.send({ embeds: [starEmbed] }); - console.log(informationStatus + "Star message has been added!"); - } else { - return; - } - } else { - return; - } - } catch(error) { - console.log(errorStatus + 'Something wrong happend while fetching reactions for message! Please use information below to debug.'); - console.error(error); - } +player.events.on('playerStart', (queue, track) => { + queue.metadata.channel.send(`Now playing: **${track.title}** from **${track.author}**`); + console.log(`${informationStatus}${track.title} from ${track.author} in ${queue.metadata.channel.guildId} is playing!`); }); - client.login(token); diff --git a/package-lock.json b/package-lock.json index 3bf2732..329593c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,53 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "discord-player": "^6.6.10", "discord.js": "^14.15.2", "fs": "^0.0.1-security", + "mediaplex": "^0.0.9", "path": "^0.12.7", "promises": "^0.2.5", - "timers": "^0.1.1" + "timers": "^0.1.1", + "ytdl-core": "^4.11.5" + } + }, + "node_modules/@discord-player/equalizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@discord-player/equalizer/-/equalizer-0.2.3.tgz", + "integrity": "sha512-71UAepYMbHTg2QQLXQAgyuXYHrgAYpJDxjg9dRWfTUNf+zfOAlyJEiRRk/WFhQyGu6m23iLR/H/JxgF4AW8Csg==" + }, + "node_modules/@discord-player/extractor": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@discord-player/extractor/-/extractor-4.4.7.tgz", + "integrity": "sha512-XHG9Y45rQVWk3quf0IJqAj1ybTqiRgAy6vr5hnlaDZeaxXlsHRlDSzmSYl+teFVw2G9bjzR0jIvm8a4BW9hCBw==", + "peer": true, + "dependencies": { + "file-type": "^16.5.4", + "genius-lyrics": "^4.4.6", + "isomorphic-unfetch": "^4.0.2", + "node-html-parser": "^6.1.4", + "reverbnation-scraper": "^2.0.0", + "soundcloud.ts": "^0.5.2", + "spotify-url-info": "^3.2.6", + "youtube-sr": "^4.3.9" + } + }, + "node_modules/@discord-player/ffmpeg": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@discord-player/ffmpeg/-/ffmpeg-0.1.0.tgz", + "integrity": "sha512-0kW6q4gMQN2B4Z4EzmUgXrKQSXXmyhjdZBBZ/6jSHZ9fh814oOu+JXP01VvtWHwTylI7qJHIctEWtSyjEubCJg==" + }, + "node_modules/@discord-player/opus": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@discord-player/opus/-/opus-0.1.2.tgz", + "integrity": "sha512-yF0m+pW7H9RCbRcgk/i6vv47tlWxaCHjp6/F0W4GXZMGZ0pcvZaxk8ic7aFPc3+IoDvrAHvWNomLq+JeFzdncA==" + }, + "node_modules/@discord-player/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@discord-player/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-UklWUT7BcZEkBgywM9Cmpo2nwj3SQ9Wmhu6ml1uy/YRQnY8IRdZEHD84T2kfjOg4LVZek0ej1VerIqq7a9PAHQ==", + "dependencies": { + "@discordjs/collection": "^1.1.0" } }, "node_modules/@discordjs/builders": { @@ -165,6 +207,12 @@ "npm": ">=7.0.0" } }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "peer": true + }, "node_modules/@types/node": { "version": "20.12.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", @@ -190,11 +238,99 @@ "npm": ">=7.0.0" } }, + "node_modules/@web-scrobbler/metadata-filter": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@web-scrobbler/metadata-filter/-/metadata-filter-3.2.0.tgz", + "integrity": "sha512-K2Wkq9AOJkgj4Hk9g0flKnNWYkJy1GTPpHTgpNLU5OXaXgqPKLyrtb62M1cIxMN3ESH6XGvPKM92VEl/Gc3Rog==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "peer": true + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "peer": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "peer": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "peer": true, + "engines": { + "node": ">= 12" + } + }, "node_modules/discord-api-types": { "version": "0.37.83", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz", "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" }, + "node_modules/discord-player": { + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/discord-player/-/discord-player-6.6.10.tgz", + "integrity": "sha512-AOZnJYXOoe2hF2OENwKUIaKJ2H5U8VfxcoMKDXE++9Rnbzd7qD8MQr9Am01T1UiiPf2BWjyHin97EUm1nrTJKA==", + "dependencies": { + "@discord-player/equalizer": "^0.2.3", + "@discord-player/ffmpeg": "^0.1.0", + "@discord-player/utils": "^0.2.2", + "@web-scrobbler/metadata-filter": "^3.1.0", + "discord-voip": "^0.1.3", + "ip": "^2.0.1", + "libsodium-wrappers": "^0.7.13" + }, + "funding": { + "url": "https://github.com/Androz2091/discord-player?sponsor=1" + }, + "peerDependencies": { + "@discord-player/extractor": "^4.4.7" + } + }, + "node_modules/discord-voip": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/discord-voip/-/discord-voip-0.1.3.tgz", + "integrity": "sha512-9DWY5/BLPXeldVwPr8/ggGjggTYOTw77aGQc3+4n5K54bRbbiJ9DUJc+mJzDiSLoHN3f286eRGACJYtrUu27xA==", + "dependencies": { + "@discord-player/ffmpeg": "^0.1.0", + "@discord-player/opus": "^0.1.2", + "@types/ws": "^8.5.5", + "discord-api-types": "^0.37.50", + "prism-media": "^1.3.5", + "tslib": "^2.6.1", + "ws": "^8.13.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/discord.js": { "version": "14.15.2", "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.15.2.tgz", @@ -220,21 +356,213 @@ "url": "https://github.com/discordjs/discord.js?sponsor" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "peer": true + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "peer": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "peer": true, + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "peer": true, + "dependencies": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "peer": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fs": { "version": "0.0.1-security", "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, + "node_modules/genius-lyrics": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/genius-lyrics/-/genius-lyrics-4.4.7.tgz", + "integrity": "sha512-cgO5nSeFqtLZAUyWB+8XWMRBIRzPUSUC42N3CoDGRgKX1anGAyDUhM6/RVIJXCNnQa6XHZHswKcKgHaRiyl+GQ==", + "peer": true, + "dependencies": { + "node-html-parser": "^6.1.13", + "undici": "^6.11.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "peer": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/himalaya": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/himalaya/-/himalaya-1.1.0.tgz", + "integrity": "sha512-LLase1dHCRMel68/HZTFft0N0wti0epHr3nNY7ynpLbyZpmrKMQ8YIpiOV77TM97cNpC8Wb2n6f66IRggwdWPw==", + "peer": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, + "node_modules/ip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==" + }, + "node_modules/isomorphic-unfetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-4.0.2.tgz", + "integrity": "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA==", + "peer": true, + "dependencies": { + "node-fetch": "^3.2.0", + "unfetch": "^5.0.0" + } + }, + "node_modules/libsodium": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.13.tgz", + "integrity": "sha512-mK8ju0fnrKXXfleL53vtp9xiPq5hKM0zbDQtcxQIsSmxNgSxqCj6R7Hl9PkrNe2j29T4yoDaF7DJLK9/i5iWUw==" + }, + "node_modules/libsodium-wrappers": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.13.tgz", + "integrity": "sha512-kasvDsEi/r1fMzKouIDv7B8I6vNmknXwGiYodErGuESoFTohGSKZplFtVxZqHaoQ217AynyIFgnOVRitpHs0Qw==", + "dependencies": { + "libsodium": "^0.7.13" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -245,11 +573,257 @@ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" }, + "node_modules/m3u8stream": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.6.tgz", + "integrity": "sha512-LZj8kIVf9KCphiHmH7sbFQTVe4tOemb202fWwvJwR9W5ENW/1hxJN6ksAWGhQgSBSa3jyWhnjKU1Fw1GaOdbyA==", + "dependencies": { + "miniget": "^4.2.2", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/magic-bytes.js": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" }, + "node_modules/mediaplex": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex/-/mediaplex-0.0.9.tgz", + "integrity": "sha512-D907iMYWey2RA5T0EtE82RgY3ufFYZ95/5jjty01SOSUOK8lIudjMpkaMwEewk1/tU1XpthR2/ca0U4MTGSIUw==", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "mediaplex-android-arm64": "0.0.9", + "mediaplex-darwin-arm64": "0.0.9", + "mediaplex-darwin-universal": "0.0.9", + "mediaplex-darwin-x64": "0.0.9", + "mediaplex-freebsd-x64": "0.0.9", + "mediaplex-linux-arm-gnueabihf": "0.0.9", + "mediaplex-linux-x64-gnu": "0.0.9", + "mediaplex-win32-arm64-msvc": "0.0.9", + "mediaplex-win32-ia32-msvc": "0.0.9", + "mediaplex-win32-x64-msvc": "0.0.9" + } + }, + "node_modules/mediaplex-android-arm64": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-android-arm64/-/mediaplex-android-arm64-0.0.9.tgz", + "integrity": "sha512-XAQlZwMcMO2Rk91CL4dK9OgsXa97Ahchd4bu3/DkzTxOXZQUmMZX4yEAN4FjjQctxMefBY9oh5ZdewBAffk+Fg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-darwin-arm64": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-darwin-arm64/-/mediaplex-darwin-arm64-0.0.9.tgz", + "integrity": "sha512-Q79D2jxlJ8vtdj5rlV2HgzSqINSMxZC+wpcHkGHZ/lEATh0fC5OlKdjk3wZRgfEEnY851TBuVvZoRJgJYEnKag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-darwin-universal": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-darwin-universal/-/mediaplex-darwin-universal-0.0.9.tgz", + "integrity": "sha512-hyptA3BKr8SgDbdop8kTS9xQ4rwnYiiwqG3cHCdHj2qaWRjMus6JF6ep27A9GTDs4rFSsSXKivZZ2IlOHEW9OA==", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-darwin-x64": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-darwin-x64/-/mediaplex-darwin-x64-0.0.9.tgz", + "integrity": "sha512-gSznB2pTt0QikrqwvNUYcFfUVkVkZiNijw5aaIZDTZfWvyFQk3HtenSQ82zwk4UKt7IfrChgh/7RLmQqOnym2g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-freebsd-x64": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-freebsd-x64/-/mediaplex-freebsd-x64-0.0.9.tgz", + "integrity": "sha512-fcCEMLTkyPNb8dYwv+3xKIGBgLKvyw/DX4KDAw0gWy378j8aB+D7HjVupI/XWZODrzkSvIiYabCx0oy4Nyz8dg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-linux-arm-gnueabihf": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-linux-arm-gnueabihf/-/mediaplex-linux-arm-gnueabihf-0.0.9.tgz", + "integrity": "sha512-ZmXcv81pxgM11/R4d5WVu0ss2Pgi2eTKR/uW9cz5wUHI5uAVsI1Wf8Gufv/h24JsvLDv2e31BUmls742WzvHIQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-linux-x64-gnu": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-linux-x64-gnu/-/mediaplex-linux-x64-gnu-0.0.9.tgz", + "integrity": "sha512-Qfzb5BcxX1N1J5ukns5DTruze/ivJJIbK0OuKCBLMoufctPMPlZKKUUJNrro088Lp0AtDXzbQoV4cVAK5nm4UQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-win32-arm64-msvc": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-win32-arm64-msvc/-/mediaplex-win32-arm64-msvc-0.0.9.tgz", + "integrity": "sha512-c3FDtvg2DAoe0EWSh0vIhPwfpHLgEmW8uGajtyON5W5/ygAslAuK9Q9CemHfLfUbeko2r0RlGm2gpygn1PAzLQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-win32-ia32-msvc": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-win32-ia32-msvc/-/mediaplex-win32-ia32-msvc-0.0.9.tgz", + "integrity": "sha512-ScmLR3wB6norxTXrD4JRYs9EhnbhimjXieDfmgy9DJIagxDiWQ3oxfoj8aUg1bdiS62MIiW78jQxtGUb7z8xkw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/mediaplex-win32-x64-msvc": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/mediaplex-win32-x64-msvc/-/mediaplex-win32-x64-msvc-0.0.9.tgz", + "integrity": "sha512-0H6d4AdciOam1k2iBROjePNE5FA1QkQZ2PqmODAO4ElVEBylgWzGheyAKEyZcmdjNrHORJLl2+XpIssAvsKxag==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/miniget": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.3.tgz", + "integrity": "sha512-SjbDPDICJ1zT+ZvQwK0hUcRY4wxlhhNpHL9nJOB2MEAXRGagTljsO8MEDzQMTFf0Q8g4QNi8P9lEm/g7e+qgzA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "peer": true, + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "peer": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "peer": true, + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "peer": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -259,6 +833,44 @@ "util": "^0.10.3" } }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/prism-media": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz", + "integrity": "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==", + "peerDependencies": { + "@discordjs/opus": ">=0.8.0 <1.0.0", + "ffmpeg-static": "^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0", + "node-opus": "^0.3.3", + "opusscript": "^0.0.8" + }, + "peerDependenciesMeta": { + "@discordjs/opus": { + "optional": true + }, + "ffmpeg-static": { + "optional": true + }, + "node-opus": { + "optional": true + }, + "opusscript": { + "optional": true + } + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -272,11 +884,184 @@ "resolved": "https://registry.npmjs.org/promises/-/promises-0.2.5.tgz", "integrity": "sha512-KHTer6YK1+aD2AcLiRuE3/ilZzw1UoX8v6DuTlDdF0oc5uOZlyWA+x2JwaO0bPB+E/JiRiUQmjfuNXiWlVD2tQ==" }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "peer": true, + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/reverbnation-scraper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reverbnation-scraper/-/reverbnation-scraper-2.0.0.tgz", + "integrity": "sha512-t1Mew5QC9QEVEry5DXyagvci2O+TgXTGoMHbNoW5NRz6LTOzK/DLHUpnrQwloX8CVX5z1a802vwHM3YgUVOvKg==", + "peer": true, + "dependencies": { + "node-fetch": "^2.6.0" + } + }, + "node_modules/reverbnation-scraper/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "peer": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, + "node_modules/soundcloud.ts": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/soundcloud.ts/-/soundcloud.ts-0.5.3.tgz", + "integrity": "sha512-ZMH6gG5e7WqJrIYXTv14MNArPhx3WzfrL1Ij/2qBDW8mVbNJc8lxOQOc4kLvrfvDl5TkCdZa7zXOiwD6ESXq+g==", + "peer": true, + "dependencies": { + "undici": "^6.17.0" + } + }, + "node_modules/soundcloud.ts/node_modules/undici": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.2.tgz", + "integrity": "sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==", + "peer": true, + "engines": { + "node": ">=18.17" + } + }, + "node_modules/spotify-uri": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/spotify-uri/-/spotify-uri-4.1.0.tgz", + "integrity": "sha512-SFpBt8pQqO7DOFBsdUjv3GxGZAKYP7UqcTflfE7h3YL1lynl/6Motq7NERoJJR8eF9kXQRSpcdMmV5ou84rbng==", + "peer": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/spotify-url-info": { + "version": "3.2.15", + "resolved": "https://registry.npmjs.org/spotify-url-info/-/spotify-url-info-3.2.15.tgz", + "integrity": "sha512-NlolD2mqZjvt91hq0XVy3db55FCL2li1XBivkf/i+zUW1K9RP9nIOK5Bpg82DmBf96sjl4TYRI3zPOS94LPulQ==", + "peer": true, + "dependencies": { + "himalaya": "~1.1.0", + "spotify-uri": "~4.1.0" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "peer": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "peer": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, "node_modules/timers": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/timers/-/timers-0.1.1.tgz", "integrity": "sha512-pkJC8uIP/gxDHxNQUBUbjHyl6oZfT+ofn7tbaHW+CFIUjI+Q2MBbHcx1JSBQfhDaTcO9bNg328q0i7Vk5PismQ==" }, + "node_modules/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "peer": true, + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "peer": true + }, "node_modules/ts-mixer": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", @@ -300,6 +1085,15 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, + "node_modules/unfetch": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-5.0.0.tgz", + "integrity": "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==", + "peer": true, + "workspaces": [ + "./packages/isomorphic-unfetch" + ] + }, "node_modules/util": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", @@ -308,6 +1102,37 @@ "inherits": "2.0.3" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "peer": true + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "peer": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "peer": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/ws": { "version": "8.17.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", @@ -327,6 +1152,25 @@ "optional": true } } + }, + "node_modules/youtube-sr": { + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/youtube-sr/-/youtube-sr-4.3.11.tgz", + "integrity": "sha512-3oHiS2x7PpMiDRW7Cq8nz1bkAIBOJHoOwkPl/oncM/+A9/3xxMDgMLGW2dsBEP1DHFyRXYTVABgfbdwHF8sXXQ==", + "peer": true + }, + "node_modules/ytdl-core": { + "version": "4.11.5", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.11.5.tgz", + "integrity": "sha512-27LwsW4n4nyNviRCO1hmr8Wr5J1wLLMawHCQvH8Fk0hiRqrxuIu028WzbJetiYH28K8XDbeinYW4/wcHQD1EXA==", + "dependencies": { + "m3u8stream": "^0.8.6", + "miniget": "^4.2.2", + "sax": "^1.1.3" + }, + "engines": { + "node": ">=12" + } } } } diff --git a/package.json b/package.json index eedc408..0a79a88 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,13 @@ }, "homepage": "https://github.com/Keyemail/mbot#readme", "dependencies": { + "discord-player": "^6.6.10", "discord.js": "^14.15.2", "fs": "^0.0.1-security", + "mediaplex": "^0.0.9", "path": "^0.12.7", "promises": "^0.2.5", - "timers": "^0.1.1" + "timers": "^0.1.1", + "ytdl-core": "^4.11.5" } }