From 9ebd0d19063ab4e94052c531668cb0d7f5e90497 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 6 Mar 2022 18:18:05 +0100 Subject: [PATCH] Add music command --- init.js | 4 +- music.js | 26 +++++++ package-lock.json | 169 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 5 +- 4 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 music.js diff --git a/init.js b/init.js index 02f71b5..352591e 100644 --- a/init.js +++ b/init.js @@ -4,7 +4,7 @@ const copypasta = require("./copypasta.json") const copypastaTrigger = require("./copypasta.js") const client = module.exports = new Discord.Client({ - intents: [Discord.GatewayIntentBits.Guilds, Discord.GatewayIntentBits.GuildMessages] + intents: [Discord.GatewayIntentBits.Guilds, Discord.GatewayIntentBits.GuildMessages, Discord.GatewayIntentBits.GuildVoiceStates] }) client.login(process.env.DISCORD_TOKEN) @@ -40,7 +40,7 @@ client.on("messageCreate", msg => { } }) -const modules = ["basic", "bullshit", "marriage", "http", "roleplay", "death", "economy", "waifu", "operator", "nsfw", "random"] +const modules = ["basic", "bullshit", "marriage", "http", "roleplay", "death", "economy", "waifu", "operator", "nsfw", "random", "music"] for (let f of modules) { let m = require(`./${f}.js`) diff --git a/music.js b/music.js new file mode 100644 index 0000000..745c549 --- /dev/null +++ b/music.js @@ -0,0 +1,26 @@ +const ytdl = require("ytdl-core") +const voice = require("@discordjs/voice") + +module.exports = { + play: { + func: (msg, url) => { + const channel = msg.member.voice.channel + + if (! channel) + return msg.reply("Join a voice channel you fucking moron") + + const conn = voice.joinVoiceChannel({ + channelId: channel.id, + guildId: channel.guild.id, + adapterCreator: channel.guild.voiceAdapterCreator, + }) + + const stream = ytdl(url.join(" "), {filter: "audioonly"}) + const resource = voice.createAudioResource(stream, {inputType: voice.StreamType.Arbitrary}) + const player = voice.createAudioPlayer() + + player.play(resource) + conn.subscribe(player) + } + } +} diff --git a/package-lock.json b/package-lock.json index e0cb31f..4ade40c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,14 @@ "version": "1.0.0", "license": "GPL-3.0-or-later", "dependencies": { + "@discordjs/voice": "^0.9.0-dev.1646395401.6f7a366", "discord.js": "^14.0.0-dev.1646395406.6f7a366", "free-google-images": "^1.0.4", "node-fetch": "^2.0.0", "pseudo-random": "^0.6.0", - "sha1": "^1.1.1" + "sha1": "^1.1.1", + "sodium": "^3.0.2", + "ytdl-core": "^4.11.0" } }, "node_modules/@discordjs/builders": { @@ -58,6 +61,22 @@ "node": ">=16.9.0" } }, + "node_modules/@discordjs/voice": { + "version": "0.9.0-dev.1646395401.6f7a366", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.9.0-dev.1646395401.6f7a366.tgz", + "integrity": "sha512-ElWwzIwZaepyLcRIuv4BS7Z5oA002tO5Zw+muJVoR5U5n+iQsLhB20NBN/PyGwqLvEn9QVxiwvooWwA0rwxBEg==", + "dependencies": { + "@types/ws": "^8.2.2", + "discord-api-types": "^0.27.0", + "prism-media": "^1.3.2", + "tiny-typed-emitter": "^2.1.0", + "tslib": "^2.3.1", + "ws": "^8.5.0" + }, + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/@sapphire/async-queue": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.2.0.tgz", @@ -367,6 +386,18 @@ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=" }, + "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/mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", @@ -386,6 +417,19 @@ "node": ">= 0.6" } }, + "node_modules/miniget": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.2.tgz", + "integrity": "sha512-a7voNL1N5lDMxvTMExOkg+Fq89jM2vY8pAi9ZEWzZtfNmdfP6RXkvUtFnCAXoCv2T9k1v/fUJVaAEuepGcvLYA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -429,11 +473,41 @@ "parse5": "^6.0.1" } }, + "node_modules/prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "peerDependencies": { + "@discordjs/opus": "^0.5.0", + "ffmpeg-static": "^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/pseudo-random": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/pseudo-random/-/pseudo-random-0.6.0.tgz", "integrity": "sha1-c9AAwgaN0sYTzA/CPQvRp4XVcDY=" }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "node_modules/sha1": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", @@ -446,6 +520,20 @@ "node": "*" } }, + "node_modules/sodium": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz", + "integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "*" + } + }, + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -503,6 +591,19 @@ } } }, + "node_modules/ytdl-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.11.0.tgz", + "integrity": "sha512-Q3hCLiUA9AOGQXzPvno14GN+HgF9wsO1ZBHlj0COTcyxjIyFpWvMfii0UC4/cAbVaIjEdbWB71GdcGuc4J1Lmw==", + "dependencies": { + "m3u8stream": "^0.8.6", + "miniget": "^4.2.2", + "sax": "^1.1.3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/zod": { "version": "3.13.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.13.4.tgz", @@ -546,6 +647,19 @@ "tslib": "^2.3.1" } }, + "@discordjs/voice": { + "version": "0.9.0-dev.1646395401.6f7a366", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.9.0-dev.1646395401.6f7a366.tgz", + "integrity": "sha512-ElWwzIwZaepyLcRIuv4BS7Z5oA002tO5Zw+muJVoR5U5n+iQsLhB20NBN/PyGwqLvEn9QVxiwvooWwA0rwxBEg==", + "requires": { + "@types/ws": "^8.2.2", + "discord-api-types": "^0.27.0", + "prism-media": "^1.3.2", + "tiny-typed-emitter": "^2.1.0", + "tslib": "^2.3.1", + "ws": "^8.5.0" + } + }, "@sapphire/async-queue": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.2.0.tgz", @@ -776,6 +890,15 @@ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", "integrity": "sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40=" }, + "m3u8stream": { + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.6.tgz", + "integrity": "sha512-LZj8kIVf9KCphiHmH7sbFQTVe4tOemb202fWwvJwR9W5ENW/1hxJN6ksAWGhQgSBSa3jyWhnjKU1Fw1GaOdbyA==", + "requires": { + "miniget": "^4.2.2", + "sax": "^1.2.4" + } + }, "mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", @@ -789,6 +912,16 @@ "mime-db": "1.51.0" } }, + "miniget": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/miniget/-/miniget-4.2.2.tgz", + "integrity": "sha512-a7voNL1N5lDMxvTMExOkg+Fq89jM2vY8pAi9ZEWzZtfNmdfP6RXkvUtFnCAXoCv2T9k1v/fUJVaAEuepGcvLYA==" + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, "node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -818,11 +951,22 @@ "parse5": "^6.0.1" } }, + "prism-media": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==", + "requires": {} + }, "pseudo-random": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/pseudo-random/-/pseudo-random-0.6.0.tgz", "integrity": "sha1-c9AAwgaN0sYTzA/CPQvRp4XVcDY=" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "sha1": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", @@ -832,6 +976,19 @@ "crypt": ">= 0.0.1" } }, + "sodium": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sodium/-/sodium-3.0.2.tgz", + "integrity": "sha512-IsTwTJeoNBU97km3XkrbCGC/n/9aUQejgD3QPr2YY2gtbSPru3TI6nhCqgoez9Mv88frF9oVZS/jrXFbd6WXyA==", + "requires": { + "node-addon-api": "*" + } + }, + "tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -872,6 +1029,16 @@ "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "requires": {} }, + "ytdl-core": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.11.0.tgz", + "integrity": "sha512-Q3hCLiUA9AOGQXzPvno14GN+HgF9wsO1ZBHlj0COTcyxjIyFpWvMfii0UC4/cAbVaIjEdbWB71GdcGuc4J1Lmw==", + "requires": { + "m3u8stream": "^0.8.6", + "miniget": "^4.2.2", + "sax": "^1.1.3" + } + }, "zod": { "version": "3.13.4", "resolved": "https://registry.npmjs.org/zod/-/zod-3.13.4.tgz", diff --git a/package.json b/package.json index fa47dd6..ac7c3b8 100644 --- a/package.json +++ b/package.json @@ -17,10 +17,13 @@ }, "homepage": "https://github.com/EliasFleckenstein03/furrybot-discord#readme", "dependencies": { + "@discordjs/voice": "^0.9.0-dev.1646395401.6f7a366", "discord.js": "^14.0.0-dev.1646395406.6f7a366", "free-google-images": "^1.0.4", "node-fetch": "^2.0.0", "pseudo-random": "^0.6.0", - "sha1": "^1.1.1" + "sha1": "^1.1.1", + "sodium": "^3.0.2", + "ytdl-core": "^4.11.0" } } -- 2.44.0