├── .gitignore ├── Examples ├── ConfigBen.json ├── ConfigJack.json ├── ConfigSammy.json └── settings.json ├── README.md ├── commands ├── 8ball.js ├── addrole.js ├── avatar.js ├── clear.js ├── codes.js ├── coin.js ├── commands.js ├── crosshair.js ├── csgo.js ├── dadjokes.js ├── dev.js ├── embed.js ├── float.js ├── fortnite.js ├── help.js ├── highlight.js ├── images.js ├── invite.js ├── kick.js ├── love.js ├── memes.js ├── messages.js ├── mute.js ├── notice.js ├── number.js ├── ping.js ├── removerole.js ├── rename.js ├── roles.js ├── rules.js ├── speak.js ├── test.js ├── timer.js ├── userinfo.js ├── viewmodel.js ├── vote.js ├── votekick.js └── xp.js ├── images ├── DAB.jpeg ├── MEAN.png ├── OOF.png ├── REE.gif ├── WHAT.png └── YEET.png ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | settingsConfig/ -------------------------------------------------------------------------------- /Examples/ConfigBen.json: -------------------------------------------------------------------------------- 1 | { 2 | "sharedSecret":"LOL NO WAY", 3 | "identitySecret":"LOL NO WAY" 4 | } 5 | -------------------------------------------------------------------------------- /Examples/ConfigJack.json: -------------------------------------------------------------------------------- 1 | { 2 | "sharedSecret":"LOL NO WAY", 3 | "identitySecret":"LOL NO WAY" 4 | } 5 | -------------------------------------------------------------------------------- /Examples/ConfigSammy.json: -------------------------------------------------------------------------------- 1 | { 2 | "sharedSecret":"LOL NO WAY", 3 | "identitySecret":"LOL NO WAY" 4 | } 5 | -------------------------------------------------------------------------------- /Examples/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "prefix": { 3 | "default": "m.", 4 | "server1 id here": "b.", 5 | "server2 id here": "tty." 6 | }, 7 | "TOKEN": "LOL No Way", 8 | "CSE": "LOL No Way", 9 | "API": "LOL No Way", 10 | "YT_API": "LOL No Way", 11 | "BOT_ID": "LOL No Way" 12 | } 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Advanced Discord Bot 2 | 3 | From kicking and banning people to giving roles for specific amounts of time, this Discord bot can be helpful for anyone who wants to learn how to make 4 | a discord.js bot, I made this so new users can also look at the methods used for certain commands and get some ideas for their Discord bot. 5 | 6 | ## Getting Started 7 | 8 | * You will need [FFmpeg](https://www.ffmpeg.org/) for the play, stop and skip commands, as ytdl-core package needs ffmpeg or it will not work. 9 | * Make a folder and git clone this repository: https://github.com/MrWall112/Advanced-Discord-Bot-js8.git 10 | * Then type "npm install" to get the needed packages for the bot 11 | * in The Examples folder, the ConfigSammy, ConfigJack and ConfigBen, are not needed, i use the files and steam totp to get my 2FA Code for each account 12 | 13 | ## Commands 14 | 15 | NOTE: ignore the [ ] that just shows what should be there when entering the command 16 | 17 | ``` 18 | ping - to get a simple pong response 19 | memes - This gets a random meme from Reddit, but there is alot of duplicates 20 | images [SEARCH TERM] - This gets a random image everytime based upon the search results 21 | codes - gets my steam authenticator codes you can get your if you know how to 22 | userinfo [@NAME] - This shows the authors profile info, it will also show the mentioned persons info 23 | float [INSPECT URL] - This gets the float for the given inspect link 24 | invite - this is a basic embed made that shows the user the Perm invite i made then put in the code 25 | timer [1s/1m/1h] - To start a timer for the given amount of time 26 | coin - This will flip a coin that can either get heads or tales 27 | 8ball [QUESTION] - This will get a random answer for the question asked 28 | embed - to show an example embed used for testing the positioning of the text 29 | notice - This is a basic command that shows how to reply to the person who used the command 30 | highlight [ANYTHING] This will make it look like the bot said 31 | speak [ANYTIHNG] - This will Make it look like the bot said 32 | crosshair - a simple embed that i put my CS:GO crosshair settings into 33 | test - this shows an example embed that shows collums vertically 34 | commands - this will show all the available commands to use for the bot 35 | rules - this shows the rules of the server 36 | roles - shows the roles of the server 37 | viewmodel - a simple embed that i put my CS:GO viewmodel settings into 38 | help - this will show help from the bot 39 | fortnite [USERNAME] [pc/xbl/psn] - to get fortnite stats of the requested player 40 | csgo [STEAMID64/CUSTOM STEAM URL] - to get certain csgo stats of the requested player 41 | avatar [MENTION] - gets the profile pic of the mentioned person if noone is mentiond it gets the authors 42 | xp [@NAME] - this shows the users current XP ammount or the authors if not mentioned 43 | messages [@NAME] - this shows the users current messages sent or the authors if not mentioned 44 | dadjoke - get a random awful dad joke that will make you cringe 45 | ``` 46 | 47 | ## Inside Index.js Commands: 48 | 49 | NOTE: ignore the [ ] that just shows what should be there when entering the command 50 | 51 | ``` 52 | play [YOUTUBE URL] - This adds and plays the youtube video in discord 53 | playlist [YOUTUBE URL] - This plays a youtube playlist in discord 54 | prefix [NEW PREFIX] - This changes the prefix for the server 55 | np - This shows the currently playing song 56 | stop - This instantly stops and disconnects the bot 57 | fuckoff - This instantly stops and disconnects the bot 58 | skip - this skips the currently playing song 59 | ``` 60 | 61 | ## Admin Commands: 62 | 63 | NOTE: ignore the [ ] that just shows what should be there when entering the command 64 | 65 | ``` 66 | addrole [@NAME] [ROLE] [LENGTH] - This adds the role of the mentioned person for certain time 67 | removerole [@NAME] [ROLE] - This removes the role mentioned from the person mentioned 68 | dev - This is just a simple reply to the user 69 | rename [NAME] - This renames the bot to whatever "name" is 70 | kick [@NAME] - To kick the mentioned user from the server. 71 | clear [NUMBER] - This purge deletes any amount of number of messages in a text channel 72 | ``` 73 | 74 | ## TO DO: 75 | 76 | * add more commands 77 | * add more functionality 78 | 79 | ## Built With: 80 | 81 | * [Discord.js](https://discord.js.org/#/) - The Discord Library 82 | * [Node JS](https://nodejs.org/en/) - Java Script Framework 83 | 84 | ## Authors: 85 | 86 | * **Ben Wall** - Main Coder 87 | * **Alen Kalac** - Assistant Coder 88 | * **James Broadberry** - Code Tester 89 | -------------------------------------------------------------------------------- /commands/8ball.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | var fortunes = [ 4 | "yes", 5 | "no", 6 | "maybe", 7 | "dont know, try again" 8 | ]; 9 | 10 | 11 | module.exports.run = async (bot, message, args) => { 12 | 13 | if(!args[0]){ 14 | return message.channel.send(":x: " + "| Please Enter A Question You Would Like Answered") 15 | } 16 | if (args[0]) message.channel.send(fortunes[Math.floor(Math.random() * fortunes.length)]); 17 | else message.channel.send(":x: " + "| I Wasnt Able To Read That :("); 18 | } 19 | 20 | module.exports.help = { 21 | name: "8ball" 22 | } 23 | -------------------------------------------------------------------------------- /commands/addrole.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | const ms = require('ms'); 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | 6 | if(message.member.hasPermission("ADMINISTRATOR")) { 7 | let member2 = message.mentions.members.first(); 8 | if(!member2) return message.reply(":x: " + "| You need to mention a user/member!"); 9 | 10 | let muteRole2 = message.mentions.roles.first(); 11 | if(!muteRole2) return message.reply(":x: " + `| There is no such role!`); 12 | 13 | let time2 = args[2]; 14 | if(!time2) { 15 | member2.addRole(muteRole2.id); 16 | message.channel.send(member2 + ` you have been given the permanent role: ` + muteRole2.name); 17 | }else { 18 | member2.addRole(muteRole2.id); 19 | message.channel.send(member2 + ` you have been given the role: ` + muteRole2.name + ` for: ${ms(ms(time2), {long: true})}`); 20 | 21 | setTimeout(function(){ 22 | member2.removeRole(muteRole2.id); 23 | message.channel.send(member2 + ` you role has been taken off of you your glory lasted: ${ms(ms(time2), {long: true})}`) 24 | 25 | }, ms(time2)); 26 | 27 | }; 28 | }else { 29 | return message.reply(":x: " + "| You need to have the \"ADMINISTRATOR\" Permission") 30 | }; 31 | } 32 | 33 | module.exports.help = { 34 | name: "addrole" 35 | } 36 | -------------------------------------------------------------------------------- /commands/avatar.js: -------------------------------------------------------------------------------- 1 | module.exports.run = async (bot, message, args) => { 2 | let msg = await message.channel.send("Generating avatar..."); 3 | let target = message.mentions.users.first() || message.author; 4 | 5 | await message.channel.send({files: [ 6 | { 7 | attachment: target.displayAvatarURL, 8 | name: "avatar.png" 9 | } 10 | ]}); 11 | 12 | msg.delete(); 13 | } 14 | 15 | module.exports.help = { 16 | name: "avatar" 17 | } 18 | -------------------------------------------------------------------------------- /commands/clear.js: -------------------------------------------------------------------------------- 1 | module.exports.run = async (bot, message, args) => { 2 | 3 | if(message.member.hasPermission("ADMINISTRATOR")) { 4 | let messagecount = parseInt(args[0]); 5 | 6 | if(isNaN(messagecount)) return message.channel.send(":x: " + "| Please Enter A Numeric Value!"); 7 | 8 | if(messagecount > 100){ 9 | message.channel.send(":x: " + "| Sorry, You can only clean upto 100 messages at a time!") 10 | }else if(messagecount < 2 ) { 11 | message.channel.send(":x: " + "| Sorry, You can only clean upto 100 messages at a time!") 12 | } else { 13 | 14 | }{ 15 | message.channel.fetchMessages({limit: messagecount}).then(messages => message.channel.bulkDelete(messages, true)); 16 | } 17 | } else { 18 | return message.reply(":x: " + "| You need to have the \"ADMINISTRATOR\" Permission") 19 | } 20 | } 21 | 22 | module.exports.help = { 23 | name: "clear" 24 | } 25 | -------------------------------------------------------------------------------- /commands/codes.js: -------------------------------------------------------------------------------- 1 | var settings = '../settingsConfig/settings.json'; 2 | var file = module.require(settings) 3 | const SteamTotp = module.require('steam-totp'); 4 | const Discord = module.require('discord.js'); 5 | const ms = require('ms'); 6 | 7 | const configS = module.require('../settingsConfig/ConfigSammy.json'); 8 | const configJ = module.require('../settingsConfig/ConfigJack.json'); 9 | const configB = module.require('../settingsConfig/ConfigBen.json'); 10 | 11 | module.exports.run = async (bot, message, args) => { 12 | var JackCode = SteamTotp.getAuthCode(configJ.sharedSecret); 13 | var BenCode = SteamTotp.getAuthCode(configB.sharedSecret); 14 | var SammyCode = SteamTotp.getAuthCode(configS.sharedSecret); 15 | 16 | let codess = new Discord.RichEmbed() 17 | .addField("__**Bens Code:**__", BenCode) 18 | .addField("__**Jacks Code:**__", JackCode) 19 | .addField("__**Sammys Code:**__", SammyCode) 20 | .setColor(0x00FF00) 21 | 22 | if(message.author.id === "103509994074312704" || message.author.id === "366979278237204491") { 23 | message.channel.send({embed: codess}); 24 | }else{ 25 | message.channel.send("You need to ben or sammy"); 26 | } 27 | 28 | setTimeout(function(){ 29 | message.channel.fetchMessages({limit: 2}).then(messages => message.channel.bulkDelete(messages, true)); 30 | 31 | }, ms("10s")); 32 | } 33 | 34 | module.exports.help = { 35 | name: "codes" 36 | } 37 | -------------------------------------------------------------------------------- /commands/coin.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | var hd = [ 4 | "Heads", 5 | "Tails" 6 | ]; 7 | 8 | module.exports.run = async (bot, message, args) => { 9 | 10 | message.channel.send(message.author.toString() + " You Flipped: " + (hd[Math.floor(Math.random() * hd.length)])); 11 | } 12 | 13 | module.exports.help = { 14 | name: "coin" 15 | } 16 | -------------------------------------------------------------------------------- /commands/commands.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args, prefix) => { 4 | 5 | 6 | message.channel.send("```" + "\n" + 7 | "Type " + prefix + "ping to get a simple pong response\n" + 8 | "Type " + prefix + "fortnite [USERNAME] [pc/xbl/psn] show stats of requested player\n" + 9 | "Type " + prefix + "speak [ANYTHING] to show text entered as the bot\n" + 10 | "Type " + prefix + "coin to flip a coin to get heads or tails \n" + 11 | "Type " + prefix + "8ball [QUESTION] to get a random answer \n" + 12 | "Type " + prefix + "embed to show a test version of a embed \n" + 13 | "Type " + prefix + "highlight [ANYTHING] to show text entered with black background \n" + 14 | "Type " + prefix + "timer [1s/1m/1h] to start a timer with the given amount of time \n" + 15 | "Type " + prefix + "notice to get noticed by the bot \n" + 16 | "Type " + prefix + "play [YOUTUBE URL] to play a song from YouTube \n" + 17 | "Type " + prefix + "playlist [YOUTUBE PLAYLIST URL] to play a playlist from YouTube \n" + 18 | "Type " + prefix + "pause to pause the currently playing song \n" + 19 | "Type " + prefix + "test to get another embed type \n" + 20 | "Type " + prefix + "resume to continue the currently paused song \n" + 21 | "Type " + prefix + "skip to play the next song in the queue \n" + 22 | "Type " + prefix + "stop to stop the currently playing song \n" + 23 | "Type " + prefix + "code to get steam auth codes [BEN AND SAMMY ONLY] \n" + 24 | "Type " + prefix + "love [ANYTHING] to see if you love what was entered in [] \n" + 25 | "Type " + prefix + "fuckoff to instantly make the bot leave the voice channel \n" + 26 | "Type " + prefix + "number [min] [max] to get a random number between min and max \n" + 27 | "Type " + prefix + "crosshair to get the Developers CS:GO Crosshair\n" + "```"); 28 | 29 | message.channel.send("```" + "\n" + 30 | "Type " + prefix + "viewmodel to get the Developers CS:GO Viewmodel\n" + 31 | "Type " + prefix + "invite to get the perminent invite link for the server\n" + 32 | "Type " + prefix + "userinfo [@NAME] to show your profile info or mentioned info \n" + 33 | "Type " + prefix + "images [SEARCH TERM] to get a random image from google\n" + 34 | "Type " + prefix + "memes to get a random meme from reddit\n" + 35 | "Type " + prefix + "float [INSPECT URL] to get the float of the given inspect link\n" + 36 | "Type " + prefix + "np to get the currently playing song\n" + 37 | "Type " + prefix + "csgo [STEAMID64/CUSTOM URL NAME] show stats of requested player\n" + 38 | "Type " + prefix + "rules to show the rules of the server\n" + 39 | "Type " + prefix + "roles to see all the roles in the server \n" + 40 | "Type " + prefix + "help to show the main help page \n" + 41 | "Type " + prefix + "commands to see all the commands for this bot in the server \n" + 42 | "Type " + prefix + "xp to see you or the mentioned persons total XP \n" + 43 | "Type " + prefix + "avatar to see you or the mentioned persons avatar \n" + 44 | "Type " + prefix + "messages to see you or the mentioned persons message count \n" + 45 | "Type " + prefix + "dadjoke to randomly get a awful dad joke\n" + 46 | "Type " + prefix + "dev to get test if the bots working \n" + 47 | "Type " + prefix + "prefix [NEW PREFIX] to change old prefix \n" + 48 | "Type " + prefix + "rename [NAME] to rename to bot \n" + 49 | "Type " + prefix + "clear [NUMBER] to delete a certain number of messages \n" + 50 | "Type " + prefix + "addrole [MENTION] [ROLE] [LENGTH] to add a role to the mentioned \n" + 51 | "Type " + prefix + "removerole [MENTION] [ROLE] to remove the person mentioned role\n" + 52 | "Type " + prefix + "kick [@NAME] to kick the mentioned user \n" + "```"); 53 | 54 | } 55 | 56 | module.exports.help = { 57 | name: "commands" 58 | } 59 | -------------------------------------------------------------------------------- /commands/crosshair.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | var cross = new Discord.RichEmbed() 4 | .addField("Crosshair:", "cl_crosshair_drawoutline \"0\" \n" + 5 | "cl_crosshair_dynamic_maxdist_splitratio \"0.35\" \n" + 6 | "cl_crosshair_dynamic_splitalpha_innermod \"1\" \n" + 7 | "cl_crosshair_dynamic_splitalpha_outermod \"0.5\" \n" + 8 | "cl_crosshair_dynamic_splitdist \"7\" \n" + 9 | "cl_crosshair_outlinethickness \"1\" \n" + 10 | "cl_crosshair_sniper_width \"1\" \n" + 11 | "cl_crosshairalpha \"255\" \n" + 12 | "cl_crosshaircolor \"1\" \n" + 13 | "cl_crosshaircolor_b \"0\" \n" + 14 | "cl_crosshaircolor_g \"0\" \n" + 15 | "cl_crosshaircolor_r \"255\" \n" + 16 | "cl_crosshairdot \"0\" \n" + 17 | "cl_crosshairgap \"-3\" \n" + 18 | "cl_crosshairgap_useweaponvalue \"0\" \n" + 19 | "cl_crosshairscale \"0\" \n" + 20 | "cl_crosshairsize \"2\" \n" + 21 | "cl_crosshairstyle \"4\" \n" + 22 | "cl_crosshairthickness \"1\" \n" + 23 | "cl_crosshairusealpha \"1\" \n" + 24 | "cl_fixedcrosshairgap \"-4.5\" \n", true) 25 | 26 | .addField("Copy Part 1:", "cl_crosshair_drawoutline 0; cl_crosshair_dynamic_maxdist_splitratio 0.35; cl_crosshair_dynamic_splitalpha_innermod 1; cl_crosshair_dynamic_splitalpha_outermod 0.5; cl_crosshair_dynamic_splitdist 7; cl_crosshair_outlinethickness 1", true) 27 | .addField("Copy Part 2:", "cl_crosshaircolor_r 255; cl_crosshairdot 0; cl_crosshairgap -3; cl_crosshairgap_useweaponvalue 0; cl_crosshairscale 0; cl_crosshairsize 2; cl_crosshairstyle 4; cl_crosshairthickness 1; cl_crosshairusealpha 1", true) 28 | .addField("Copy Part 3:", "cl_fixedcrosshairgap -4.5; cl_crosshair_sniper_width 1; cl_crosshairalpha 255; cl_crosshaircolor 1; cl_crosshaircolor_b 0; cl_crosshaircolor_g 0", true) 29 | 30 | .setColor("0x#FF0000") 31 | .setFooter("ENTER PART 1 INTO CONSOLE THEN PRESS ENTER, THEN ENTER PART 2 INTO CONSOLE THEN PRESS ENTER, THEN COPY AND PASTE PART 3 INTO CONSOLE AND PRESS ENTER!") 32 | 33 | 34 | module.exports.run = async (bot, message, args) => { 35 | 36 | //console.log(args[0]);// user 37 | //console.log(args[1]);// role 38 | //console.log(args[2]);//time 39 | 40 | message.delete().then(() => { 41 | 42 | message.channel.send(cross) 43 | 44 | .then(function (message) { 45 | message.react("viewmodel:358741579374264321").then(() => { 46 | message.react("crosshair:358741278109859842").then(() => { 47 | message.react("%E2%9D%93").then(() => { 48 | message.react("%F0%9F%97%91") 49 | }) 50 | }) 51 | }) 52 | 53 | }).catch(function() { 54 | }); 55 | }) 56 | } 57 | 58 | module.exports.help = { 59 | name: "crosshair" 60 | } 61 | -------------------------------------------------------------------------------- /commands/csgo.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | var request = require('request'); 3 | var cheerio = require('cheerio'); 4 | var fortnite = require('fortnite'); 5 | 6 | function getStatData(location , $){ 7 | 8 | var selector = $('.stats-stat .value').eq(location).text(); 9 | 10 | var stat_array = $.parseHTML(selector); 11 | 12 | var stat = 0; 13 | 14 | if(stat_array == null || stat_array.lengh == 0){ 15 | return -1; 16 | 17 | }else{ 18 | stat = stat_array[0].data; 19 | } 20 | 21 | return stat; 22 | } 23 | 24 | module.exports.run = async (bot, message, args) => { 25 | 26 | var UR_L = "http://csgo.tracker.network/profile/" + args[0]; 27 | 28 | if(!args[0]){ 29 | return message.channel.send("Please Enter a valid STEAMID64 or custom url"); 30 | } 31 | 32 | request(UR_L, function(err, resp, body){ 33 | 34 | $ = cheerio.load(body); 35 | 36 | var KD = getStatData(0, $); 37 | if(KD == -1){ 38 | message.channel.send("Invalid, make sure your profile is not private and you have entered a valid STEAMID64 or Custom URL!"); 39 | return; 40 | } 41 | 42 | var WIN = getStatData(1, $); 43 | var HS = getStatData(4, $); 44 | var MONEY = getStatData(5, $); 45 | var SCORE = getStatData(6, $); 46 | var KILLS = getStatData(7, $); 47 | var DEATHS = getStatData(8, $); 48 | var MVP = getStatData(9, $); 49 | var BS = getStatData(13, $); 50 | var BD = getStatData(14, $); 51 | var HR = getStatData(15, $); 52 | 53 | var STAT = new Discord.RichEmbed() 54 | 55 | .setTitle("__***CSGO Stats***__") 56 | .setURL(UR_L) 57 | 58 | .addField("------------------------------------", 59 | "Total KD: " + "__**" + KD + "**__" + "\n" + 60 | "Total Win%: " + "__**" + WIN + "**__" + "\n" + 61 | "Total MVPs: " + "__**" + MVP + "**__" + "\n" + 62 | "Total Score: " + "__**" + SCORE + "**__" + "\n" + 63 | "Total Kills: " + "__**" + KILLS + "**__" + "\n" + 64 | "Total Deaths: " + "__**" + DEATHS + "**__" + "\n" + 65 | "Total Bombs Set: " + "__**" + BS + "**__" + "\n" + 66 | "Total Bombs Defused: " + "__**" + BD + "**__" + "\n" + 67 | "Total Headshots: " + "__**" + HS + "**__" + "\n" + 68 | "Total Money Earned: " + "__**" + MONEY + "**__" + "\n" + 69 | "Total Hostages Rescued: " + "__**" + HR + "**__" + "\n" + 70 | "------------------------------------\n", true) 71 | 72 | .setColor("0x#FF0000") 73 | message.channel.send(STAT); 74 | 75 | }) 76 | } 77 | 78 | module.exports.help = { 79 | name: "csgo" 80 | } 81 | -------------------------------------------------------------------------------- /commands/dadjokes.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | var jokes = [ 4 | "What time did the man go to the dentist? Tooth hurt-y", 5 | "I'm reading a book about anti-gravity. It's impossible to put down!", 6 | "Want to hear a joke about a piece of paper? Never mind... it's tearable.", 7 | "I just watched a documentary about beavers. It was the best dam show I ever saw!", 8 | "If you see a robbery at an Apple Store does that make you an iWitness?", 9 | "Spring is here! I got so excited I wet my plants!", 10 | "A ham sandwich walks into a bar and orders a beer. The bartender says, \"Sorry we don’t serve food here.\"", 11 | "What’s Forrest Gump’s password? 1forrest1", 12 | "I bought some shoes from a drug dealer. I don't know what he laced them with, but I was tripping all day!", 13 | "Why do chicken coops only have two doors? Because if they had four, they would be chicken sedans!", 14 | "What do you call a factory that sells passable products? A satisfactory.", 15 | "A termite walks into a bar and asks, \"Is the bar tender here?\"", 16 | "When a dad drives past a graveyard: Did you know that's a popular cemetery? Yep, people are just dying to get in there!", 17 | "Two peanuts were walking down the street. One was a salted.", 18 | "Why did the invisible man turn down the job offer? He couldn't see himself doing it.", 19 | "I used to have a job at a calendar factory but I got the sack because I took a couple of days off.", 20 | "How do you make holy water? You boil the hell out of it.", 21 | "A three-legged dog walks into a bar and says to the bartender, \"I’m looking for the man who shot my paw.\"", 22 | "When you ask a dad if he's alright: \"No, I’m half left.\"", 23 | "I had a dream that I was a muffler last night. I woke up exhausted!", 24 | "How do you tell the difference between a frog and a horny toad? A frog says, \"Ribbit, ribbit\" and a horny toad says, \"Rub it, rub it.\"", 25 | "Did you hear the news? FedEx and UPS are merging. They’re going to go by the name Fed-Up from now on.", 26 | "5/4 of people admit that they’re bad with fractions.", 27 | "MOM: \"How do I look?\" DAD: \"With your eyes.\"", 28 | "What is Beethoven’s favorite fruit? A ba-na-na-na.", 29 | "What did the horse say after it tripped? \"Help! I’ve fallen and I can’t giddyup!\”", 30 | "Did you hear about the circus fire? It was in tents!", 31 | "Don't trust atoms. They make up everything!", 32 | "What do you get when you cross an elephant with a rhino? Elephino.", 33 | "How many tickles does it take to make an octopus laugh? Ten-tickles.", 34 | "What's the best part about living in Switzerland? I don't know, but the flag is a big plus.", 35 | "What do prisoners use to call each other? Cell phones.", 36 | "Why couldn't the bike standup by itself? It was two tired.", 37 | "What do you call a dog that can do magic? A Labracadabrador.", 38 | "Why didn't the vampire attack Taylor Swift? She had bad blood.", 39 | "NURSE: \"Blood type?\" DAD: \"Red.\"", 40 | "SERVER: \"Sorry about your wait.\" DAD: \"Are you saying I’m fat?\”", 41 | "What do you call a fish with two knees? A “two-knee” fish.", 42 | "I was interrogated over the theft of a cheese toastie. Man, they really grilled me.", 43 | "What do you get when you cross a snowman with a vampire? Frostbite.", 44 | "Can February March? No, but April May!", 45 | "When you ask a dad if they got a haircut: \"No, I got them all cut!\"", 46 | "What does a zombie vegetarian eat? “GRRRAAAAAIIIINNNNS!”", 47 | "What does an angry pepper do? It gets jalapeño your face.", 48 | "Why wasn't the woman happy with the velcro she bought? It was a total ripoff.", 49 | "What did the buffalo say to his son when he dropped him off at school? Bison.", 50 | "What do you call someone with no body and no nose? Nobody knows.", 51 | "Where did the college-aged vampire like to shop? Forever 21.", 52 | "You heard of that new band 1023MB? They're good but they haven't got a gig yet.", 53 | "Why did the crab never share? Because he's shellfish." 54 | ]; 55 | 56 | module.exports.run = async (bot, message, args) => { 57 | 58 | var DAD = new Discord.RichEmbed() 59 | .setDescription(jokes[Math.floor(Math.random() * jokes.length)]) 60 | 61 | .setColor("0x#FF0000") 62 | 63 | message.channel.send(DAD); 64 | 65 | } 66 | 67 | module.exports.help = { 68 | name: "dadjoke" 69 | } 70 | -------------------------------------------------------------------------------- /commands/dev.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args) => { 4 | 5 | //console.log(args[0]);// user 6 | //console.log(args[1]);// role 7 | //console.log(args[2]);//time 8 | 9 | if(message.member.hasPermission("ADMINISTRATOR")) { 10 | message.channel.send("this is working Mr Developer!"); 11 | } else { 12 | return message.reply(":x: " + "| You need to have the \"ADMINISTRATOR\" Permission") 13 | } 14 | } 15 | 16 | module.exports.help = { 17 | name: "dev" 18 | } 19 | -------------------------------------------------------------------------------- /commands/embed.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | var getJSON = require('get-json'); 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | 6 | var embed = new Discord.RichEmbed() 7 | .addField("Test Title 1", "Test Description 1", true) 8 | .addField("Test Title 2", "Test Description 2", true) 9 | .addField("Test Title 3", "Test Description 3", true) 10 | .addField("Test Title 4", "Test Description 4") 11 | .setColor("0x#FF0000") 12 | .setFooter("THIS IS THE EMBED FOOTER") 13 | 14 | message.channel.send({embed: embed}); 15 | } 16 | 17 | module.exports.help = { 18 | name: "embed" 19 | } 20 | -------------------------------------------------------------------------------- /commands/float.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | var getJSON = require('get-json'); 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | 6 | if(!args){ 7 | return message.channel.send(":x: " + "| Please enter an inspect link for your awesome skin/weapon"); 8 | }else{ 9 | getJSON("https://api.csgofloat.com:1738/?url=" + args, function(error, data){ 10 | 11 | if(data == undefined){ 12 | return message.channel.send(":x: " + "| Please enter a valid inspect link for your awesome skin/weapon"); 13 | } 14 | 15 | var float = new Discord.RichEmbed() 16 | .addField("Weapon Name: ", data.iteminfo.weapon_type, true) 17 | .addField("Weapon Skin Name: ", data.iteminfo.item_name, false) 18 | .addField("Float Value: ", data.iteminfo.floatvalue, true) 19 | .addField("Requested By: ", message.author.username) 20 | .setThumbnail(data.iteminfo.imageurl) 21 | 22 | .setColor("0x#FF0000") 23 | message.channel.send(float); 24 | }) 25 | } 26 | } 27 | 28 | module.exports.help = { 29 | name: "float" 30 | } 31 | -------------------------------------------------------------------------------- /commands/fortnite.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | var fortnite = require('fortnite'); 3 | var request = require('request'); 4 | 5 | module.exports.run = async (bot, message, args, prefix, con, file) => { 6 | 7 | var headers = { 8 | 'TRN-Api-Key': file.FORTNITE_API_KEY 9 | } 10 | 11 | var options = { 12 | url: `https://api.fortnitetracker.com/v1/profile/` + `pc` + "/" + `${args[0]}`, 13 | method: 'GET', 14 | headers: headers 15 | } 16 | 17 | request(options, function (error, response, body) { 18 | var info = JSON.parse(body); 19 | 20 | var LifeTime = ""; 21 | var Solo = ""; 22 | var Duo = ""; 23 | var Squad = ""; 24 | 25 | for(var currentStatIndex = 0; currentStatIndex < info.lifeTimeStats.length; currentStatIndex++) { 26 | LifeTime += info.lifeTimeStats[currentStatIndex].key + ": " + info.lifeTimeStats[currentStatIndex].value + "\n"; 27 | } 28 | 29 | for(var STATS in info.stats.p2){ 30 | Solo += info.stats.p2[STATS].label + ": " + info.stats.p2[STATS].displayValue + "\n"; 31 | } 32 | 33 | for(var STATS_1 in info.stats.p10){ 34 | Duo += info.stats.p10[STATS_1].label + ": " + info.stats.p10[STATS_1].displayValue + "\n"; 35 | } 36 | 37 | for(var STATS_2 in info.stats.p9){ 38 | Squad += info.stats.p9[STATS_2].label + ": " + info.stats.p9[STATS_2].displayValue + "\n"; 39 | } 40 | 41 | message.channel.send("```" + "\n" + 42 | "----------------------------------" + "\n" + 43 | "Account Username: " + info.epicUserHandle + "\n" + 44 | "Account Platform: " + info.platformNameLong + "\n" + 45 | "----------LIFETIME STATS----------" + "\n" + 46 | LifeTime + "\n" + 47 | 48 | "------------SOLO STATS------------" + "\n" + 49 | Solo + "\n" + 50 | 51 | "------------DUO STATS-------------" + "\n" + 52 | Duo + "\n" + 53 | 54 | "------------SQUAD STATS-----------" + "\n" + 55 | Squad + "\n"+ "```"); 56 | }) 57 | } 58 | 59 | module.exports.help = { 60 | name: "fortnite" 61 | } 62 | -------------------------------------------------------------------------------- /commands/help.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args, prefix) => { 4 | 5 | message.delete().then(() => { 6 | let help = new Discord.RichEmbed() 7 | .addField("Help:", "----------------------------------------------------------------------------\n" + 8 | "Type " + prefix + "commands to view all the commands \n" + 9 | "Type " + prefix + "rules to view all the rules for the server \n" + 10 | "Type " + prefix + "roles to view all the roles for the server \n" + 11 | "----------------------------------------------------------------------------\n" + 12 | "Click the bin reaction to delete this message \n" + 13 | "----------------------------------------------------------------------------", true) 14 | 15 | .setColor("0x#FF0000") 16 | 17 | message.channel.send(help) 18 | 19 | .then(function (message) { 20 | message.react("%F0%9F%97%91") 21 | }) 22 | }) 23 | } 24 | 25 | module.exports.help = { 26 | name: "help" 27 | } 28 | -------------------------------------------------------------------------------- /commands/highlight.js: -------------------------------------------------------------------------------- 1 | module.exports.run = async (bot, message, args) => { 2 | 3 | //console.log(args[0]);// user 4 | //console.log(args[1]);// role 5 | //console.log(args[2]);//time 6 | 7 | message.delete(); 8 | 9 | if(!args.join(" ")){ 10 | return message.channel.send(":x: " + "| Please Enter Something For The Bot To Highligh With Syntax") 11 | } 12 | message.channel.send("```" + args.join(" ") + "```"); 13 | } 14 | 15 | module.exports.help = { 16 | name: "highlight" 17 | } 18 | -------------------------------------------------------------------------------- /commands/images.js: -------------------------------------------------------------------------------- 1 | var settings = '../settingsConfig/settings.json'; 2 | var file = require(settings) 3 | const GoogleImages = require('google-images'); 4 | 5 | module.exports.run = async (bot, message, args) => { 6 | var prefix = (file.prefix[message.guild.id] == undefined) ? file.prefix["default"] : file.prefix[message.guild.id]; 7 | 8 | const client = new GoogleImages(file.CSE, file.API); 9 | var search = client.search(args.join(" ")).then(function(images) { 10 | message.channel.send(images[Math.floor(Math.random() * images.length)].url); 11 | }); 12 | 13 | } 14 | 15 | module.exports.help = { 16 | name: "images" 17 | } 18 | -------------------------------------------------------------------------------- /commands/invite.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | var getJSON = require('get-json'); 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | 6 | var invite = new Discord.RichEmbed() 7 | 8 | .addField("__**" + "INVITE LINK: " + "**__", "https://discord.gg/TyM8AkG", true) 9 | .addField("__**" + "Bot Invite Link: " + "**__", "https://discordapp.com/oauth2/authorize?client_id=353154808078794752&scope=bot&permissions=2146958591", false) 10 | 11 | 12 | .setColor("0x#FF0000") 13 | 14 | message.channel.send({embed: invite}); 15 | } 16 | 17 | module.exports.help = { 18 | name: "invite" 19 | } 20 | -------------------------------------------------------------------------------- /commands/kick.js: -------------------------------------------------------------------------------- 1 | module.exports.run = async (bot, message, args) => { 2 | 3 | //console.log(args[0]);// user 4 | //console.log(args[1]);// role 5 | //console.log(args[2]);//time 6 | 7 | if(!message.member.hasPermission("ADMINISTRATOR")){ 8 | return message.reply(":x: " + "| You Need The \"ADMIN\" role to kick people").catch(console.error); 9 | } 10 | if (message.mentions.users.size === 0){ 11 | return message.reply(":x: " + "| Please Mention A User To Kick Next Time").catch(console.error); 12 | } 13 | let kickmember = message.guild.member(message.mentions.users.first()); 14 | if(!kickmember){ 15 | message.reply(":x: " + "| That User Does Not Seem Valid!"); 16 | } 17 | if(!message.guild.member(bot.user).hasPermission("KICK_MEMBERS")){ 18 | return message.reply(":x: " + "| i need the \"KICK_MEMBERS\" permission!").catch(console.error); 19 | } 20 | kickmember.kick().then(member => { 21 | message.reply(`${member.user.username} was succesfully kicked`).catch(console.error); 22 | }).catch(console.error) 23 | 24 | } 25 | 26 | module.exports.help = { 27 | name: "kick" 28 | } 29 | -------------------------------------------------------------------------------- /commands/love.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | var Responses = [ 4 | "yes", 5 | "no", 6 | "maybe", 7 | "dont know, try again", 8 | "Of course no, try again maybe", 9 | "i mean, i guess so", 10 | "if you say so", 11 | "im not saying anything but you know the answer", 12 | "definately not", 13 | "its a possibility", 14 | "a huge chance", 15 | "a small chance", 16 | "you better hope so", 17 | "you better not hope so" 18 | ]; 19 | 20 | module.exports.run = async (bot, message, args) => { 21 | 22 | if(!args[0]){ 23 | return message.channel.send(":x: " + "| Please Enter A person/object") 24 | } 25 | 26 | if (args[0]) { 27 | message.channel.send(Responses[Math.floor(Math.random() * Responses.length)]); 28 | } 29 | 30 | } 31 | module.exports.help = { 32 | name: "love" 33 | } 34 | -------------------------------------------------------------------------------- /commands/memes.js: -------------------------------------------------------------------------------- 1 | var settings = '../settingsConfig/settings.json'; 2 | var file = require(settings) 3 | var memes = require('dankmemes'); 4 | 5 | module.exports.run = async (bot, message, args) => { 6 | var prefix = (file.prefix[message.guild.id] == undefined) ? file.prefix["default"] : file.prefix[message.guild.id]; 7 | 8 | console.log(`${message.author.username}` + " " + "Used The Command " + prefix + "memes"); 9 | memes('all', 100, function(err, data) { 10 | var rand = Math.floor(Math.random() * 100); 11 | var test = data[rand]; 12 | message.channel.send(test); 13 | }); 14 | 15 | } 16 | 17 | module.exports.help = { 18 | name: "memes" 19 | } 20 | -------------------------------------------------------------------------------- /commands/messages.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args, prefix, con) => { 4 | let target = message.mentions.users.first() || message.guild.members.get(args[1]) || message.author; 5 | 6 | con.query(`SELECT * FROM messagecount WHERE id = '${target.id}'`, (err, rows) => { 7 | if(err) throw err; 8 | 9 | if(!rows[0]) return message.channel.send("This user has not sent any messages on record!"); 10 | 11 | let msgCnt = rows[0].msgCnt 12 | 13 | var MSG = new Discord.RichEmbed() 14 | .setTitle("__***Total Message Count***__") 15 | 16 | .addField("------------------------------------------", 17 | "Total Ammount of messages: " + "__**" + msgCnt + "**__" + "\n" + 18 | "-----------------------------------------", true) 19 | 20 | .setColor("0x#FF0000") 21 | 22 | message.channel.send(MSG); 23 | 24 | }); 25 | } 26 | 27 | module.exports.help = { 28 | name: "messages" 29 | } 30 | -------------------------------------------------------------------------------- /commands/mute.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | const ms = require('ms'); 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | 6 | //console.log(args[0]);// user 7 | //console.log(args[1]);// role 8 | //console.log(args[2]);//time 9 | 10 | if(message.member.hasPermission("ADMINISTRATOR")) { 11 | let member2 = message.mentions.members.first(); 12 | if(!member2) return message.reply(":x: " + "| You need to mention a user/member!"); 13 | 14 | let muteRole2 = message.mentions.roles.first(); 15 | if(!muteRole2) return message.reply(":x: " + `| There is no such role!`); 16 | 17 | let time2 = args[2]; 18 | if(!time2) { 19 | member2.addRole(muteRole2.id); 20 | message.channel.send(member2 + ` you have been given the permanent role: ` + muteRole2.name); 21 | }else { 22 | member2.addRole(muteRole2.id); 23 | message.channel.send(member2 + ` you have been given the role: ` + muteRole2.name + ` for: ${ms(ms(time2), {long: true})}`); 24 | 25 | setTimeout(function(){ 26 | member2.removeRole(muteRole2.id); 27 | message.channel.send(member2 + ` you role has been taken off of you your glory lasted: ${ms(ms(time2), {long: true})}`) 28 | 29 | }, ms(time2)); 30 | 31 | }; 32 | }else { 33 | return message.reply(":x: " + "| You need to have the \"ADMINISTRATOR\" Permission") 34 | }; 35 | } 36 | 37 | module.exports.help = { 38 | name: "mute" 39 | } -------------------------------------------------------------------------------- /commands/notice.js: -------------------------------------------------------------------------------- 1 | module.exports.run = async (bot, message, args) => { 2 | 3 | message.channel.send(message.author.toString() + " I Have Noticed You, Feel Proud!"); 4 | 5 | } 6 | 7 | module.exports.help = { 8 | name: "notice" 9 | } 10 | -------------------------------------------------------------------------------- /commands/number.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args) => { 4 | 5 | let min = parseInt(args[0]); 6 | let max = parseInt(args[1]); 7 | 8 | if(min > max){ 9 | let temp = max; 10 | max = min; 11 | min = temp; 12 | } 13 | 14 | var Result = Math.floor(Math.random() * (max - min + 1)) + min; 15 | 16 | if(isNaN(Result)){ 17 | return message.channel.send("Please enter a min and a max number") 18 | }else{ 19 | message.channel.send(Result); 20 | } 21 | 22 | } 23 | 24 | module.exports.help = { 25 | name: "number" 26 | } 27 | -------------------------------------------------------------------------------- /commands/ping.js: -------------------------------------------------------------------------------- 1 | var settings = '../settingsConfig/settings.json'; 2 | var file = require(settings) 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | var prefix = (file.prefix[message.guild.id] == undefined) ? file.prefix["default"] : file.prefix[message.guild.id]; 6 | 7 | console.log(`${message.author.username}` + " " + "Used The Command " + prefix + "ping"); 8 | 9 | message.channel.send(message.author.toString() + " " + "Pong!"); 10 | 11 | } 12 | 13 | module.exports.help = { 14 | name: "ping" 15 | } 16 | -------------------------------------------------------------------------------- /commands/removerole.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | const ms = require('ms'); 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | 6 | if(message.member.hasPermission("ADMINISTRATOR")) { 7 | let member3 = message.mentions.members.first(); 8 | if(!member3) return message.reply(":x: " + "| You need to mention a user/member!"); 9 | 10 | let muteRole3 = message.mentions.roles.first(); 11 | if(!muteRole3) return message.reply(":x: " + `| There is no such thing as a \"${muteRole3.name}\" role!`); 12 | 13 | member3.removeRole(muteRole3.id); 14 | message.channel.send(member3 + ` you have lost the role: ` + muteRole3.name + `!`); 15 | 16 | }else { 17 | return message.reply(":x: " + "| You need to have the \"ADMINISTRATOR\" Permission") 18 | }; 19 | } 20 | 21 | module.exports.help = { 22 | name: "removerole" 23 | } 24 | -------------------------------------------------------------------------------- /commands/rename.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args) => { 4 | 5 | //console.log(args[0]);// user 6 | //console.log(args[1]);// role 7 | //console.log(args[2]);//time 8 | 9 | if(message.member.hasPermission("ADMINISTRATOR")) { 10 | 11 | if(!args){ 12 | return message.channel.send(":x: " + "| Please enter a new name for the bot"); 13 | } 14 | message.guild.member(bot.user).setNickname(args.join(" ")).then(user => message.channel.send("My New NickName is " + args.join(" ") + "!")).catch(console.error); 15 | } else { 16 | return message.reply(":x: " + "| You need to have the \"ADMINISTRATOR\" Permission") 17 | } 18 | } 19 | 20 | module.exports.help = { 21 | name: "rename" 22 | } 23 | -------------------------------------------------------------------------------- /commands/roles.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args) => { 4 | 5 | ROLEZZ = message.guild.roles.array() 6 | 7 | var ROLES = ""; 8 | 9 | ROLEZZ.forEach(function(element){ 10 | ROLES += element.name + "\n" 11 | }); 12 | 13 | message.channel.send("```" + "\n" + 14 | "---------------------------------" + "\n" + 15 | "ALL SERVER ROLES" + "\n" + 16 | "---------------------------------" + "\n" + 17 | `${ROLES}` + "```"); 18 | 19 | } 20 | 21 | module.exports.help = { 22 | name: "roles" 23 | } 24 | -------------------------------------------------------------------------------- /commands/rules.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | var rules1 = new Discord.RichEmbed() 4 | .addField("Rules (1/2):", "---------------------------------------------------------------------------------------\n" + 5 | "__**1.**__ No spamming or flooding the chat with messages, symbols or pictures etc. \n" + 6 | "__**2.**__ Do not type in all Caps, Bold, Italic or other formats unless you're a Admin. \n" + 7 | "__**3.**__ adult (18+), explicit images etc, go to the NSFW channel \n" + 8 | "__**4.**__ No racist or degrading content.\n" + 9 | "__**5.**__ No excessively cursing. \n" + 10 | "__**6.**__ No advertising other sites/discord servers without permission. \n" + 11 | "__**7.**__ No posting external links other than direct links to youtube\n", true) 12 | 13 | .setColor("0xFF0000") 14 | 15 | var rules2 = new Discord.RichEmbed() 16 | .addField("Rules (2/2):", "__**8.**__ No using peoples usernames and/or posing as them. \n" + 17 | "__**9.**__ No begging or repeatedly asking for permissions in the chat. \n" + 18 | "__**10.**__. No offensive names or names which contain swear words. \n" + 19 | "__**11.**__ Do not argue with staff there decisions are final. \n" + 20 | "__**12.**__ Do not repeatedly message Moderators or Admins without permission \n" + 21 | "__**13.**__ Do not message people, Moderators or Admins with \"Stupid\" questions \n" + 22 | "---------------------------------------------------------------------------------------\n", true) 23 | 24 | .setColor("0xFF0000") 25 | 26 | module.exports.run = async (bot, message, args) => { 27 | 28 | //console.log(args[0]);// user 29 | //console.log(args[1]);// role 30 | //console.log(args[2]);//time 31 | 32 | 33 | message.channel.send(rules1) 34 | message.channel.send(rules2) 35 | 36 | .then(function (message) { 37 | message.react("Bin2:362263530424107009") 38 | }) 39 | 40 | } 41 | 42 | module.exports.help = { 43 | name: "rules" 44 | } 45 | -------------------------------------------------------------------------------- /commands/speak.js: -------------------------------------------------------------------------------- 1 | module.exports.run = async (bot, message, args) => { 2 | 3 | //console.log(args[0]);// user 4 | //console.log(args[1]);// role 5 | //console.log(args[2]);//time 6 | 7 | message.delete(); 8 | 9 | if(!args.join(" ")){ 10 | return message.channel.send(":x: " + "| Please Enter Something For The Bot To Say") 11 | } 12 | message.channel.send(args.join(" ")); 13 | } 14 | 15 | module.exports.help = { 16 | name: "speak" 17 | } 18 | -------------------------------------------------------------------------------- /commands/test.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args, prefix) => { 4 | 5 | //console.log(args[0]);// user 6 | //console.log(args[1]);// role 7 | //console.log(args[2]);//time 8 | 9 | 10 | var test = new Discord.RichEmbed() 11 | .addField("MEMBER:", "ping\n" + 12 | "dev\n" + 13 | "coin\n" + 14 | "8ball\n" + 15 | "embed\n" + 16 | "notice\n" + 17 | "play\n" + 18 | "skip\n" + 19 | "stop\n" + 20 | "crosshair\n" + 21 | "viewmodel\n" + 22 | "help\n", true) 23 | 24 | .addField("ADMIN:", "prefix\n" + 25 | "rename\n" + 26 | "clean\n" + 27 | "kick\n", true) 28 | 29 | .setColor("0x#FF0000") 30 | .setFooter("FOR MORE INFO TYPE " + prefix + "help [COMMAND] FOR MORE INFO ON THE COMMAND") 31 | 32 | message.channel.send(test) 33 | 34 | } 35 | 36 | module.exports.help = { 37 | name: "test" 38 | } 39 | -------------------------------------------------------------------------------- /commands/timer.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | const ms = require('ms'); 3 | 4 | module.exports.run = async (bot, message, args) => { 5 | 6 | let Timer = args[0]; 7 | 8 | if(!args[0]){ 9 | return message.channel.send(":x: " + "| Please Enter a time period followed by \"s or m or h\""); 10 | } 11 | 12 | if(args[0] <= 0){ 13 | return message.channel.send(":x: " + "| Please Enter a time period followed by \"s or m or h\""); 14 | } 15 | 16 | message.channel.send(":white_check_mark: " + "| Timer Started for: " + `${ms(ms(Timer), {long: true})}`) 17 | 18 | setTimeout(function(){ 19 | message.channel.send(message.author.toString() + ` The Timer Has FINISHED!, it lasted: ${ms(ms(Timer), {long: true})}`) 20 | 21 | }, ms(Timer)); 22 | } 23 | 24 | module.exports.help = { 25 | name: "timer" 26 | } 27 | -------------------------------------------------------------------------------- /commands/userinfo.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args) => { 4 | let memberInfo = message.mentions.members.first(); 5 | 6 | if(!memberInfo){ 7 | var userinf = new Discord.RichEmbed() 8 | .setAuthor(message.author.username) 9 | .setThumbnail(message.author.avatarURL) 10 | .setDescription("This is the user's info!") 11 | .setColor(0x00FF00) 12 | .addField("Full Username:", `${message.author.username}#${message.author.discriminator}`) 13 | .addField("ID:", message.author.id) 14 | .addField("Created At:", message.author.createdAt) 15 | 16 | message.channel.send(userinf); 17 | 18 | }else{ 19 | 20 | var userinfoo = new Discord.RichEmbed() 21 | .setAuthor(memberInfo.displayName) 22 | .setThumbnail(memberInfo.user.avatarURL) 23 | .setDescription("This is the user's info!") 24 | .setColor(0x00FF00) 25 | .addField("Full Username:", `${memberInfo.user.username}#${memberInfo.user.discriminator}`) 26 | .addField("ID:", memberInfo.id) 27 | .addField("Created At:", memberInfo.user.createdAt) 28 | 29 | message.channel.send(userinfoo); 30 | } 31 | } 32 | 33 | module.exports.help = { 34 | name: "userinfo" 35 | } 36 | -------------------------------------------------------------------------------- /commands/viewmodel.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | var view = new Discord.RichEmbed() 4 | .addField("Viewmodel:", "viewmodel_fov \"68\" \n" + 5 | "viewmodel_offset_x \"2.500000\" \n" + 6 | "viewmodel_offset_y \"2.0\" \n" + 7 | "viewmodel_offset_z \"-2.000000\" \n" + 8 | "viewmodel_presetpos \"0\" \n", true) 9 | 10 | .addField("Copy & Paste:", "viewmodel_fov 68; viewmodel_offset_x 2.500000; viewmodel_offset_y 2.0; viewmodel_offset_z -2.000000; viewmodel_presetpos 0", true) 11 | 12 | .setColor("0x#FF0000") 13 | .setFooter("COPY AND PASTE THE LINE OF COMMANDS INTO CONSOLE AND HIT ENTER TO GET BENS VIEWMODEL!") 14 | 15 | module.exports.run = async (bot, message, args) => { 16 | 17 | //console.log(args[0]);// user 18 | //console.log(args[1]);// role 19 | //console.log(args[2]);//time 20 | 21 | message.delete().then(() => { 22 | 23 | message.channel.send(view) 24 | 25 | .then(function (message) { 26 | message.react("viewmodel:358741579374264321").then(() => { 27 | message.react("crosshair:358741278109859842").then(() => { 28 | message.react("%F0%9F%97%91") 29 | }) 30 | }) 31 | }).catch(function() { 32 | }); 33 | }) 34 | } 35 | 36 | module.exports.help = { 37 | name: "viewmodel" 38 | } 39 | -------------------------------------------------------------------------------- /commands/vote.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | const agree = "✅"; 4 | const disagree = "❎"; 5 | 6 | module.exports.run = async (bot, message, args) => { 7 | 8 | let msg = await message.channel.send("Vote now! (10 Seconds)"); 9 | await msg.react(agree); 10 | await msg.react(disagree); 11 | 12 | const reactions = await msg.awaitReactions(reaction => reaction.emoji.name === agree || reaction.emoji.name === disagree, {time: 10000}); 13 | msg.delete(); 14 | 15 | var NO_Count = reactions.get(disagree).count; 16 | var YES_Count = reactions.get(agree); 17 | 18 | if(YES_Count == undefined){ 19 | var YES_Count = 1; 20 | }else{ 21 | var YES_Count = reactions.get(agree).count; 22 | } 23 | 24 | var sumsum = new Discord.RichEmbed() 25 | 26 | .addField("Voting Finished:", "----------------------------------------\n" + 27 | "Total votes (NO): " + `${NO_Count-1}\n` + 28 | "Total votes (Yes): " + `${YES_Count-1}\n` + 29 | "----------------------------------------", true) 30 | 31 | .setColor("0x#FF0000") 32 | 33 | await message.channel.send({embed: sumsum}); 34 | 35 | } 36 | 37 | module.exports.help = { 38 | name: "vote" 39 | } 40 | -------------------------------------------------------------------------------- /commands/votekick.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | const agree = "✅"; 4 | const disagree = "❎"; 5 | 6 | module.exports.run = async (bot, message, args) => { 7 | 8 | if (message.mentions.users.size === 0){ 9 | return message.reply(":x: " + "| Please Mention A User To Kick Next Time"); 10 | } 11 | 12 | let kickmember = message.guild.member(message.mentions.users.first()); 13 | if(!kickmember){ 14 | message.reply(":x: " + "| That User Does Not Seem Valid!"); 15 | } 16 | 17 | if(!message.guild.member(bot.user).hasPermission("KICK_MEMBERS")){ 18 | return message.reply(":x: " + "| i need the \"KICK_MEMBERS\" permission!").catch(console.error); 19 | } 20 | 21 | let msg = await message.channel.send("Vote now! (10 Seconds)"); 22 | await msg.react(agree); 23 | await msg.react(disagree); 24 | 25 | const reactions = await msg.awaitReactions(reaction => reaction.emoji.name === agree || reaction.emoji.name === disagree, {time: 10000}); 26 | msg.delete(); 27 | 28 | var NO_Count = reactions.get(disagree).count; 29 | var YES_Count = reactions.get(agree); 30 | 31 | if(YES_Count == undefined){ 32 | var YES_Count = 1; 33 | }else{ 34 | var YES_Count = reactions.get(agree).count; 35 | } 36 | 37 | var sumsum = new Discord.RichEmbed() 38 | 39 | .addField("Voting Finished:", "----------------------------------------\n" + 40 | "Total votes (NO): " + `${NO_Count-1}\n` + 41 | "Total votes (Yes): " + `${YES_Count-1}\n` + 42 | "----------------------------------------\n" + 43 | "NOTE: Votes needed to kick (3+)\n" + 44 | "----------------------------------------", true) 45 | 46 | .setColor("0x#FF0000") 47 | 48 | await message.channel.send({embed: sumsum}); 49 | 50 | if(YES_Count >= 4 && YES_Count > NO_Count){ 51 | 52 | kickmember.kick().then(member => { 53 | message.reply(`${member.user.username} was succesfully kicked`) 54 | }) 55 | }else{ 56 | 57 | message.channel.send("\n" + "SAFE..... FOR NOW"); 58 | } 59 | 60 | } 61 | 62 | module.exports.help = { 63 | name: "votekick" 64 | } 65 | -------------------------------------------------------------------------------- /commands/xp.js: -------------------------------------------------------------------------------- 1 | const Discord = module.require('discord.js'); 2 | 3 | module.exports.run = async (bot, message, args, prefix, con) => { 4 | let target = message.mentions.users.first() || message.guild.members.get(args[1]) || message.author; 5 | 6 | con.query(`SELECT * FROM xp WHERE id = '${target.id}'`, (err, rows) => { 7 | if(err) throw err; 8 | 9 | if(!rows[0]) return message.channel.send("This user has no XP on record!"); 10 | 11 | let xp = rows[0].xp 12 | 13 | var XPEE = new Discord.RichEmbed() 14 | .setTitle("__***Total XP***__") 15 | 16 | .addField("------------------------------------------", 17 | "Total Ammount of XP: " + "__**" + xp + "**__" + "\n" + 18 | "-----------------------------------------", true) 19 | 20 | .setColor("0x#FF0000") 21 | 22 | message.channel.send(XPEE); 23 | }); 24 | } 25 | 26 | module.exports.help = { 27 | name: "xp" 28 | } 29 | -------------------------------------------------------------------------------- /images/DAB.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benjamin-Wall/Advanced-Discord-Bot-js8/4f3444ab79ea5df38ae6868f40f34eb2184abc82/images/DAB.jpeg -------------------------------------------------------------------------------- /images/MEAN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benjamin-Wall/Advanced-Discord-Bot-js8/4f3444ab79ea5df38ae6868f40f34eb2184abc82/images/MEAN.png -------------------------------------------------------------------------------- /images/OOF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benjamin-Wall/Advanced-Discord-Bot-js8/4f3444ab79ea5df38ae6868f40f34eb2184abc82/images/OOF.png -------------------------------------------------------------------------------- /images/REE.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benjamin-Wall/Advanced-Discord-Bot-js8/4f3444ab79ea5df38ae6868f40f34eb2184abc82/images/REE.gif -------------------------------------------------------------------------------- /images/WHAT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benjamin-Wall/Advanced-Discord-Bot-js8/4f3444ab79ea5df38ae6868f40f34eb2184abc82/images/WHAT.png -------------------------------------------------------------------------------- /images/YEET.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Benjamin-Wall/Advanced-Discord-Bot-js8/4f3444ab79ea5df38ae6868f40f34eb2184abc82/images/YEET.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | const ms = require('ms'); 3 | var YTDL = require('ytdl-core'); 4 | var memes = require('dankmemes'); 5 | const chalk = require('chalk'); 6 | var getJSON = require('get-json'); 7 | const Discord = require('discord.js'); 8 | const SteamTotp = require('steam-totp'); 9 | const GoogleImages = require('google-images'); 10 | const mysql = require('mysql'); 11 | 12 | const configS = require('./settingsConfig/ConfigSammy.json'); 13 | const configJ = require('./settingsConfig/ConfigJack.json'); 14 | const configB = require('./settingsConfig/ConfigBen.json'); 15 | 16 | var settings = './settingsConfig/settings.json'; 17 | var file = require(settings) 18 | 19 | const TOKEN = file.TOKEN; 20 | const GreenStyle = chalk.green; 21 | 22 | function generateXp() { 23 | let min = 2; 24 | let max = 20; 25 | 26 | return Math.floor(Math.random() * (max - min + 1)) + min; 27 | 28 | } 29 | 30 | function GenerateHex(){ 31 | return "#" + Math.floor(Math.random() * 16777215).toString(16); 32 | } 33 | 34 | function getDateTime() { 35 | 36 | var date = new Date(); 37 | 38 | var hour = date.getHours(); 39 | hour = (hour < 10 ? "0" : "") + hour; 40 | 41 | var min = date.getMinutes(); 42 | min = (min < 10 ? "0" : "") + min; 43 | 44 | var sec = date.getSeconds(); 45 | sec = (sec < 10 ? "0" : "") + sec; 46 | 47 | var year = date.getFullYear(); 48 | 49 | var month = date.getMonth() + 1; 50 | month = (month < 10 ? "0" : "") + month; 51 | 52 | var day = date.getDate(); 53 | day = (day < 10 ? "0" : "") + day; 54 | 55 | var Total_Time = day + "/" + month + "/" + year + " - " + hour + ":" + min + ":" + sec; 56 | 57 | return Total_Time; 58 | 59 | } 60 | 61 | function play(connection, message){ 62 | var server = servers[message.guild.id]; 63 | 64 | const streamOptions = { volume : 0.50} 65 | const stream = YTDL(server.queue[0], {filter: "audioonly"}); 66 | 67 | server.dispatcher = connection.playStream(stream, streamOptions); 68 | 69 | NOW_PLAYING = server.queue[0]; 70 | 71 | server.queue.shift(); 72 | 73 | if(server.queue[0] != undefined) 74 | getYTinfo(server.queue[0], function(res){ 75 | NEXT_PLAYING = res.title; 76 | }); 77 | else 78 | NEXT_PLAYING = "Nothing"; 79 | 80 | server.dispatcher.on("end", function(){ 81 | if(server.queue[0]) play(connection, message); 82 | else{ 83 | connection.disconnect(); 84 | NOW_PLAYING = "Nothing"; 85 | } 86 | 87 | }); 88 | } 89 | 90 | function getYTinfo(yturl, response) { 91 | 92 | let domains = ['youtu.be', 'youtube.com']; 93 | 94 | let key = file.YT_API; 95 | 96 | let id = ""; 97 | 98 | if(yturl.indexOf(domains[0]) > 0) { 99 | id = yturl.substring(yturl.lastIndexOf("/") + 1 ); 100 | } 101 | else if(yturl.indexOf(domains[1]) > 0) { 102 | let lastPos = yturl.indexOf("&") > 0 ? yturl.indexOf("&") : 0; 103 | 104 | if(lastPos == 0) id = yturl.substring(yturl.indexOf("v=") +2); 105 | else id = yturl.substring(yturl.indexOf("v=") +2, lastPos); 106 | } 107 | else { 108 | return "Invalid URL"; 109 | } 110 | 111 | let api_url = "https://www.googleapis.com/youtube/v3/videos?part=contentDetails%2C+snippet&id=" + id + "&fields=etag%2CeventId%2Citems%2Ckind%2CnextPageToken%2CpageInfo%2CprevPageToken%2CtokenPagination%2CvisitorId&key=" + key; 112 | 113 | getJSON(api_url, function(err, data){ 114 | var return_data = []; 115 | return_data['title'] = data.items[0].snippet.title; 116 | return_data['thumbnail'] = data.items[0].snippet.thumbnails.medium.url; 117 | return_data['channelTitle'] = data.items[0].snippet.channelTitle; 118 | let dur = data.items[0].contentDetails.duration; 119 | dur = dur.replace("PT", ""); 120 | dur = dur.replace("H", ":"); 121 | dur = dur.replace("M", ":"); 122 | dur = dur.replace("S", ""); 123 | return_data['duration'] = dur; 124 | 125 | response(return_data); 126 | }); 127 | } 128 | 129 | var bot = new Discord.Client(); 130 | bot.commands = new Discord.Collection(); 131 | 132 | var servers = {}; 133 | 134 | fs.readdir("./commands/", (err, files) => { 135 | if(err) console.error(err); 136 | 137 | let jsfiles = files.filter(f => f.split(".").pop() === "js"); 138 | if(jsfiles.length <= 0){ 139 | console.log("No comannds to load!"); 140 | return; 141 | } 142 | 143 | console.log(`Loading ${jsfiles.length} commands!`); 144 | 145 | jsfiles.forEach((f, i) => { 146 | let props = require(`./commands/${f}`); 147 | console.log(`${i + 1}: ${f} loaded!`) 148 | bot.commands.set(props.help.name, props); 149 | }); 150 | 151 | }) 152 | 153 | bot.on("guildMemberAdd", function(member) { 154 | member.guild.channels.find("name", "general").send(member.toString() + ` Welcome to ${member.guild.name}`); 155 | 156 | member.addRole(member.guild.roles.find("name", "Members")).then(() => { 157 | console.log("joined and has been given The Member Role"); 158 | }) 159 | }); 160 | 161 | bot.on("guildMemberRemove", function(member){ 162 | member.guild.channels.find("name", "general").send(`Goodbye!` + member.toString()); 163 | 164 | }); 165 | 166 | bot.on("ready", async () => { 167 | 168 | console.log(GreenStyle("----------------------------------------")); 169 | console.log(GreenStyle(" BOT PAGE ")); 170 | console.log(GreenStyle(" BOT NOW ACTIVE ")); 171 | console.log(GreenStyle("----------------------------------------")); 172 | console.log(GreenStyle("Logging Woll Now Start... ")); 173 | console.log(GreenStyle("----------------------------------------")); 174 | 175 | var channel = bot.channels.get("353164129021984778"); 176 | 177 | var ONLINE = new Discord.RichEmbed() 178 | .addField("Online: ", getDateTime(),true) 179 | .setColor(GenerateHex()); 180 | 181 | channel.send(ONLINE); 182 | }); 183 | 184 | var con = mysql.createConnection({ 185 | host: file.SQL_host, 186 | user: file.SQL_user, 187 | port: file.SQL_port, 188 | password: file.SQL_password, 189 | database: file.SQL_database 190 | 191 | }); 192 | 193 | con.connect(err => { 194 | if(err) throw err; 195 | console.log(GreenStyle("Connected to database!")); 196 | 197 | }); 198 | 199 | bot.on("message", async message => { 200 | 201 | var timer = setInterval(function () { 202 | var TET = message.guild.roles.find("name", "Owner").setColor(GenerateHex()); //REPLACE OWNER WITH ROLE NAME 203 | var TET_1 = message.guild.roles.find("name", "ADMIN").setColor(GenerateHex()); //REPLACE/DELETE THIS LINE 204 | }, 2000); 205 | 206 | if(message.author.bot) return; 207 | 208 | con.query(`SELECT * FROM xp WHERE id = '${message.author.id}'`, (err, rows) => { 209 | if(err) throw err; 210 | 211 | if(message.author.bot) return; 212 | 213 | con.query(`SELECT * FROM xp WHERE id = '${message.author.id}'`, (err, rows) => { 214 | if(err) throw err; 215 | 216 | let sql; 217 | 218 | if(rows.length < 1){ 219 | sql = `INSERT INTO xp (id, xp) VALUES ('${message.author.id}', ${generateXp()})` 220 | } else{ 221 | let xp = rows[0].xp; 222 | sql = `UPDATE xp SET xp = ${xp + generateXp()} WHERE id = '${message.author.id}'`; 223 | } 224 | 225 | con.query(sql); 226 | }); 227 | 228 | con.query(`SELECT * FROM messagecount WHERE id = '${message.author.id}'`, (err, rows) => { 229 | if(err) throw err; 230 | 231 | let sql; 232 | 233 | if(rows.length < 1){ 234 | sql = `INSERT INTO messagecount (id, msgCnt) VALUES ('${message.author.id}', 1)` 235 | }else{ 236 | let msgcount = rows[0].msgCnt; 237 | sql = `UPDATE messagecount SET msgCnt = ${msgcount + 1} WHERE id = '${message.author.id}'`; 238 | } 239 | 240 | con.query(sql) 241 | }); 242 | 243 | var prefix = (file.prefix[message.guild.id] == undefined) ? file.prefix["default"] : file.prefix[message.guild.id]; 244 | 245 | if(message.content.indexOf(file.BOT_ID) >= 0) { 246 | message.channel.send("The Preifx For this Server Is: " + prefix); 247 | } 248 | 249 | if(message.content.toLowerCase().indexOf("dab") >= 0){ 250 | message.channel.send({files: [ 251 | { 252 | attachment: 'images/DAB.jpeg', 253 | name: "DAB.jpeg" 254 | } 255 | ]}); 256 | } 257 | if(message.content.toLowerCase().indexOf("ree") >= 0){ 258 | message.channel.send({files: [ 259 | { 260 | attachment: 'images/REE.gif', 261 | name: "REE.gif" 262 | } 263 | ]}); 264 | } 265 | if(message.content.toLowerCase().indexOf("??") >= 0){ 266 | message.channel.send({files: [ 267 | { 268 | attachment: 'images/WHAT.png', 269 | name: "WHAT.PNG" 270 | } 271 | ]}); 272 | } 273 | if(message.content.toLowerCase().indexOf("oof") >= 0){ 274 | message.channel.send({files: [ 275 | { 276 | attachment: 'images/OOF.png', 277 | name: "OOF.png" 278 | } 279 | ]}); 280 | } 281 | if(message.content.toLowerCase().indexOf("yeet") >= 0){ 282 | message.channel.send({files: [ 283 | { 284 | attachment: 'images/YEET.png', 285 | name: "YEET.png" 286 | } 287 | ]}); 288 | } 289 | if(message.content.toLowerCase().indexOf("i mean") >= 0){ 290 | message.channel.send({files: [ 291 | { 292 | attachment: 'images/MEAN.png', 293 | name: "MEAN.png" 294 | } 295 | ]}); 296 | } 297 | 298 | if(!message.content.startsWith(prefix)) return; 299 | 300 | let messageArray = message.content.split(" "); 301 | let command = messageArray[0]; 302 | let args = messageArray.slice(1); 303 | var args1 = message.content.substring(prefix.length).split(" "); 304 | 305 | let cmd = bot.commands.get(command.slice(prefix.length).toLowerCase()); 306 | if(cmd) cmd.run(bot, message, args, prefix, con, file); 307 | 308 | switch(args1[0].toLowerCase()) { 309 | 310 | case "play": 311 | 312 | if (!args1[1]){ 313 | message.channel.send(":x: " + "| Please Provide A Link (YouTube link)"); 314 | return; 315 | } 316 | 317 | if (!message.member.voiceChannel){ 318 | message.channel.send(":x: " + "| You Must Be In A Voice Channel!"); 319 | return; 320 | } 321 | 322 | if(!servers[message.guild.id]) servers[message.guild.id] = { 323 | queue: [] 324 | }; 325 | 326 | var server = servers[message.guild.id]; 327 | var ytlink = args1[1]; 328 | var re = /(http(s)?:\/\/)?(www\.)?youtu(be|\.be)(\.com)?\/(watch\?v=)?[a-zA-Z0-9_-]{11}/gi; 329 | 330 | var found = ytlink.match(re); 331 | 332 | if(found == null){ 333 | message.channel.send(":x: " + "| Please Enter A YouTube Link!"); 334 | }else{ 335 | server.queue.push(found[0]); 336 | if (!message.guild.voiceConnection) message.member.voiceChannel.join().then(function(connection){ 337 | 338 | var server = servers[message.guild.id]; 339 | var song = server.queue.length; 340 | 341 | message.channel.send(":white_check_mark: " + "| Added " + song + " song to the queue!"); 342 | play(connection, message); 343 | }); 344 | } 345 | 346 | break; 347 | 348 | case "fuckoff": 349 | console.log(`${message.author.username}` + " " + "Used The Command " + prefix + "fuckoff"); 350 | var server = servers[message.guild.id]; 351 | 352 | if (message.guild.voiceConnection) 353 | { 354 | for (var i = server.queue.length - 1; i >= 0; i--) 355 | { 356 | server.queue.splice(i, 1); 357 | } 358 | server.dispatcher.end(); 359 | NOW_PLAYING = "Nothing"; 360 | //console.log("[" + new Date().toLocaleString() + "] Stopped the queue."); 361 | } 362 | break; 363 | 364 | case "prefix": 365 | if(message.member.hasPermission("ADMINISTRATOR")) { 366 | if(!args[0]){ 367 | return message.channel.send(":x: " + "| Please Enter a prefix ¯\\_(ツ)_/¯") 368 | } 369 | 370 | var prefix_val = args[0]; 371 | file.prefix[message.guild.id] = prefix_val; 372 | 373 | fs.writeFile(settings, JSON.stringify(file, null, 2), function (err) { 374 | 375 | message.channel.send(":white_check_mark: " + "| The NEW Prefix for this bot is: " + prefix_val); 376 | }); 377 | 378 | } else { 379 | return message.reply(":x: " + "| You need to have the \"ADMINISTRATOR\" Permission").then(() => { 380 | }); 381 | } 382 | break; 383 | 384 | case "np": 385 | 386 | if(!servers[message.guild.id]) servers[message.guild.id] = { 387 | queue: [] 388 | }; 389 | 390 | var server = servers[message.guild.id]; 391 | 392 | if(server.queue[0] != undefined) 393 | getYTinfo(server.queue[0], function(res){ 394 | NEXT_PLAYING = res.title; 395 | }); 396 | else 397 | NEXT_PLAYING = "Nothing"; 398 | 399 | 400 | if(NOW_PLAYING == "Nothing"){ 401 | 402 | message.channel.send("Nothing is playing idiot!"); 403 | 404 | }else{ 405 | getYTinfo(NOW_PLAYING, function(res){ 406 | 407 | var np = new Discord.RichEmbed() 408 | .addField("Song Name: ", res.title, true) 409 | .addField("Uploaded By: ", res.channelTitle, false) 410 | .addField("Duration: ", res.duration, true) 411 | .addField("Up Next: ", NEXT_PLAYING, false) 412 | 413 | .setThumbnail(res.thumbnail) 414 | 415 | .setColor("0x#FF0000") 416 | 417 | message.channel.send(np) 418 | 419 | }); 420 | } 421 | 422 | break; 423 | 424 | case "playlist": 425 | if (!message.member.voiceChannel){ 426 | message.channel.send(":x: " + "| You Must Be In A Voice Channel!"); 427 | return; 428 | } 429 | 430 | if(!args1[1]){ 431 | return message.channel.send(":x: " + "| Please Enter a YouTube Playlist Url"); 432 | } 433 | 434 | if(args1[1].indexOf("youtube.com") == -1){ 435 | return message.channel.send(":x: " + "| Invalid Youtube Playlist Link!!"); 436 | } 437 | 438 | var ytlink = args1[1]; 439 | var re = /(http(s)?:\/\/)?(w{3}\.)?youtube\.com\/(watch|playlist)\?(v=|list=)[a-zA-Z0-9-_]+(&)?(list=)?[a-zA-Z0-9-_]+/gi; 440 | 441 | var found = ytlink.match(re); 442 | 443 | if(found == null) 444 | return message.channel.send(":x: " + "| Please Enter A YouTube Playlist Link!"); 445 | 446 | PLAYID = found[0].substring(found[0].lastIndexOf("list=") + 5 ); 447 | 448 | var url = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=50&playlistId=" + PLAYID + "&key=" + file.YT_API; 449 | 450 | var json = getJSON(url, function(err, data){ 451 | var data = data.items; 452 | data.forEach(function(element) { 453 | if(!servers[message.guild.id]) servers[message.guild.id] = { 454 | queue: [] 455 | }; 456 | 457 | var server = servers[message.guild.id]; 458 | server.queue.push("https://www.youtube.com/watch?v=" + element.snippet.resourceId.videoId); 459 | 460 | }, this); 461 | }); 462 | 463 | if (!message.guild.voiceConnection) message.member.voiceChannel.join().then(function(connection){ 464 | var server = servers[message.guild.id]; 465 | var songs = server.queue.length; 466 | 467 | message.channel.send(":white_check_mark: " + "| Added " + songs + " songs to the queue!"); 468 | play(connection, message); 469 | }); 470 | break; 471 | 472 | case "stop": 473 | var server = servers[message.guild.id]; 474 | 475 | if (message.guild.voiceConnection) 476 | { 477 | for (var i = server.queue.length - 1; i >= 0; i--) 478 | { 479 | server.queue.splice(i, 1); 480 | } 481 | server.dispatcher.end(); 482 | NOW_PLAYING = "Nothing"; 483 | } 484 | break; 485 | 486 | case "skip": 487 | var server = servers[message.guild.id]; 488 | 489 | try { 490 | if (server.dispatcher) { 491 | server.dispatcher.end(); 492 | }else{ 493 | return message.channel.send(":x: " + "| Cannot Do that!"); 494 | } 495 | } catch(e) { 496 | NOW_PLAYING = "Nothing"; 497 | return message.channel.send(":x: " + "| Noting To skip my man"); 498 | } 499 | 500 | break; 501 | } 502 | }); 503 | 504 | bot.login(TOKEN); 505 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "musicmanv2", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@doctormckay/proxy-agent": { 8 | "version": "1.0.0", 9 | "resolved": "https://registry.npmjs.org/@doctormckay/proxy-agent/-/proxy-agent-1.0.0.tgz", 10 | "integrity": "sha512-hRTwpPYRBjEEiOz1FMOPL8NNo73sczXVIibGV+M9b56qL7uSu87gwIRqgjfc0Ebmli0qbltohtWfDy4ZStZosg==" 11 | }, 12 | "@doctormckay/stats-reporter": { 13 | "version": "1.0.3", 14 | "resolved": "https://registry.npmjs.org/@doctormckay/stats-reporter/-/stats-reporter-1.0.3.tgz", 15 | "integrity": "sha512-OtT0/t6QcfH1Db7KJBM/1zXX9L5IhdiS2fYdiQq1oe+K5X/YVsWkHPS0vA90JQjnwVDK71eov9KZsQbblatLMA==" 16 | }, 17 | "@doctormckay/steam-crypto": { 18 | "version": "1.2.0", 19 | "resolved": "https://registry.npmjs.org/@doctormckay/steam-crypto/-/steam-crypto-1.2.0.tgz", 20 | "integrity": "sha1-KxI8HpgDTzyMa5AQnjX8QnbghrA=" 21 | }, 22 | "@sindresorhus/is": { 23 | "version": "0.6.0", 24 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.6.0.tgz", 25 | "integrity": "sha1-OD9Faya8lseInwMyB59DWLFsWNw=" 26 | }, 27 | "@types/node": { 28 | "version": "8.0.51", 29 | "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.51.tgz", 30 | "integrity": "sha512-El3+WJk2D/ppWNd2X05aiP5l2k4EwF7KwheknQZls+I26eSICoWRhRIJ56jGgw2dqNGQ5LtNajmBU2ajS28EvQ==" 31 | }, 32 | "adm-zip": { 33 | "version": "0.4.7", 34 | "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", 35 | "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=" 36 | }, 37 | "ajv": { 38 | "version": "5.3.0", 39 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", 40 | "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", 41 | "requires": { 42 | "co": "4.6.0", 43 | "fast-deep-equal": "1.0.0", 44 | "fast-json-stable-stringify": "2.0.0", 45 | "json-schema-traverse": "0.3.1" 46 | } 47 | }, 48 | "ansi-regex": { 49 | "version": "2.1.1", 50 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 51 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 52 | }, 53 | "ansi-styles": { 54 | "version": "3.2.0", 55 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 56 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 57 | "requires": { 58 | "color-convert": "1.9.0" 59 | } 60 | }, 61 | "appdirectory": { 62 | "version": "0.1.0", 63 | "resolved": "https://registry.npmjs.org/appdirectory/-/appdirectory-0.1.0.tgz", 64 | "integrity": "sha1-62yBYyDnsqsW9e2ZfyjYIF31Y3U=" 65 | }, 66 | "ascli": { 67 | "version": "1.0.1", 68 | "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", 69 | "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", 70 | "requires": { 71 | "colour": "0.7.1", 72 | "optjs": "3.2.2" 73 | } 74 | }, 75 | "asn1": { 76 | "version": "0.2.3", 77 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 78 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 79 | }, 80 | "assert-plus": { 81 | "version": "0.2.0", 82 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 83 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" 84 | }, 85 | "async": { 86 | "version": "2.5.0", 87 | "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", 88 | "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", 89 | "requires": { 90 | "lodash": "4.17.4" 91 | } 92 | }, 93 | "async-limiter": { 94 | "version": "1.0.0", 95 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 96 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" 97 | }, 98 | "asynckit": { 99 | "version": "0.4.0", 100 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 101 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 102 | }, 103 | "aws-sign2": { 104 | "version": "0.6.0", 105 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 106 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" 107 | }, 108 | "aws4": { 109 | "version": "1.6.0", 110 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 111 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 112 | }, 113 | "balanced-match": { 114 | "version": "1.0.0", 115 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 116 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 117 | }, 118 | "bcrypt-pbkdf": { 119 | "version": "1.0.1", 120 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 121 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 122 | "optional": true, 123 | "requires": { 124 | "tweetnacl": "0.14.5" 125 | } 126 | }, 127 | "bignumber.js": { 128 | "version": "4.0.4", 129 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.4.tgz", 130 | "integrity": "sha512-LDXpJKVzEx2/OqNbG9mXBNvHuiRL4PzHCGfnANHMJ+fv68Ads3exDVJeGDJws+AoNEuca93bU3q+S0woeUaCdg==" 131 | }, 132 | "binarykvparser": { 133 | "version": "2.2.0", 134 | "resolved": "https://registry.npmjs.org/binarykvparser/-/binarykvparser-2.2.0.tgz", 135 | "integrity": "sha512-mGBKngQF9ui53THcMjgjd0LrBH/HsI2Vywfjq52udSAmRGG87h0vjhkqun0kF+iC4rQ2jLZqldwJE7YN2ueiWw==", 136 | "requires": { 137 | "long": "3.2.0" 138 | }, 139 | "dependencies": { 140 | "long": { 141 | "version": "3.2.0", 142 | "bundled": true 143 | } 144 | } 145 | }, 146 | "bl": { 147 | "version": "1.1.2", 148 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", 149 | "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", 150 | "requires": { 151 | "readable-stream": "2.0.6" 152 | } 153 | }, 154 | "boolbase": { 155 | "version": "1.0.0", 156 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 157 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" 158 | }, 159 | "boom": { 160 | "version": "2.10.1", 161 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 162 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 163 | "requires": { 164 | "hoek": "2.16.3" 165 | } 166 | }, 167 | "brace-expansion": { 168 | "version": "1.1.8", 169 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 170 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 171 | "requires": { 172 | "balanced-match": "1.0.0", 173 | "concat-map": "0.0.1" 174 | } 175 | }, 176 | "buffer-crc32": { 177 | "version": "0.2.13", 178 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 179 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" 180 | }, 181 | "bytebuffer": { 182 | "version": "5.0.1", 183 | "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", 184 | "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", 185 | "requires": { 186 | "long": "3.2.0" 187 | } 188 | }, 189 | "cacheable-request": { 190 | "version": "2.1.4", 191 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", 192 | "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", 193 | "requires": { 194 | "clone-response": "1.0.2", 195 | "get-stream": "3.0.0", 196 | "http-cache-semantics": "3.8.1", 197 | "keyv": "3.0.0", 198 | "lowercase-keys": "1.0.0", 199 | "normalize-url": "2.0.1", 200 | "responselike": "1.0.2" 201 | } 202 | }, 203 | "camelcase": { 204 | "version": "2.1.1", 205 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 206 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" 207 | }, 208 | "capture-stack-trace": { 209 | "version": "1.0.0", 210 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", 211 | "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=" 212 | }, 213 | "caseless": { 214 | "version": "0.11.0", 215 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", 216 | "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=" 217 | }, 218 | "chalk": { 219 | "version": "2.3.0", 220 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", 221 | "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", 222 | "requires": { 223 | "ansi-styles": "3.2.0", 224 | "escape-string-regexp": "1.0.5", 225 | "supports-color": "4.5.0" 226 | } 227 | }, 228 | "cheerio": { 229 | "version": "1.0.0-rc.2", 230 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", 231 | "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", 232 | "requires": { 233 | "css-select": "1.2.0", 234 | "dom-serializer": "0.1.0", 235 | "entities": "1.1.1", 236 | "htmlparser2": "3.9.2", 237 | "lodash": "4.17.4", 238 | "parse5": "3.0.3" 239 | } 240 | }, 241 | "cliui": { 242 | "version": "3.2.0", 243 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 244 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 245 | "requires": { 246 | "string-width": "1.0.2", 247 | "strip-ansi": "3.0.1", 248 | "wrap-ansi": "2.1.0" 249 | } 250 | }, 251 | "clone-response": { 252 | "version": "1.0.2", 253 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 254 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", 255 | "requires": { 256 | "mimic-response": "1.0.0" 257 | } 258 | }, 259 | "co": { 260 | "version": "4.6.0", 261 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 262 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 263 | }, 264 | "code-point-at": { 265 | "version": "1.1.0", 266 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 267 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 268 | }, 269 | "color-convert": { 270 | "version": "1.9.0", 271 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", 272 | "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", 273 | "requires": { 274 | "color-name": "1.1.3" 275 | } 276 | }, 277 | "color-name": { 278 | "version": "1.1.3", 279 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 280 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" 281 | }, 282 | "colors": { 283 | "version": "1.1.2", 284 | "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", 285 | "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=" 286 | }, 287 | "colour": { 288 | "version": "0.7.1", 289 | "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", 290 | "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" 291 | }, 292 | "combined-stream": { 293 | "version": "1.0.5", 294 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 295 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 296 | "requires": { 297 | "delayed-stream": "1.0.0" 298 | } 299 | }, 300 | "commander": { 301 | "version": "2.11.0", 302 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", 303 | "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" 304 | }, 305 | "concat-map": { 306 | "version": "0.0.1", 307 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 308 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 309 | }, 310 | "core-util-is": { 311 | "version": "1.0.2", 312 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 313 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 314 | }, 315 | "create-error-class": { 316 | "version": "3.0.2", 317 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 318 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 319 | "requires": { 320 | "capture-stack-trace": "1.0.0" 321 | } 322 | }, 323 | "cryptiles": { 324 | "version": "2.0.5", 325 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 326 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 327 | "requires": { 328 | "boom": "2.10.1" 329 | } 330 | }, 331 | "csgo-market": { 332 | "version": "1.5.2", 333 | "resolved": "https://registry.npmjs.org/csgo-market/-/csgo-market-1.5.2.tgz", 334 | "integrity": "sha1-YABE5w6HzR87tOND+NzQCxowfu4=", 335 | "requires": { 336 | "get-closest": "0.0.2", 337 | "levenshtein": "1.0.5", 338 | "q": "1.5.1", 339 | "request": "2.73.0" 340 | } 341 | }, 342 | "css-select": { 343 | "version": "1.2.0", 344 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", 345 | "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", 346 | "requires": { 347 | "boolbase": "1.0.0", 348 | "css-what": "2.1.0", 349 | "domutils": "1.5.1", 350 | "nth-check": "1.0.1" 351 | } 352 | }, 353 | "css-what": { 354 | "version": "2.1.0", 355 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", 356 | "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" 357 | }, 358 | "cuid": { 359 | "version": "1.2.5", 360 | "resolved": "https://registry.npmjs.org/cuid/-/cuid-1.2.5.tgz", 361 | "integrity": "sha1-SzYXaYf5BjzgXuCTTonM7kud6KY=" 362 | }, 363 | "cuint": { 364 | "version": "0.2.2", 365 | "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", 366 | "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=" 367 | }, 368 | "dankmemes": { 369 | "version": "1.0.0", 370 | "resolved": "https://registry.npmjs.org/dankmemes/-/dankmemes-1.0.0.tgz", 371 | "integrity": "sha1-V54f3cRLc9qcN4QiEe1zoIbWM+k=", 372 | "requires": { 373 | "request": "2.73.0" 374 | } 375 | }, 376 | "dashdash": { 377 | "version": "1.14.1", 378 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 379 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 380 | "requires": { 381 | "assert-plus": "1.0.0" 382 | }, 383 | "dependencies": { 384 | "assert-plus": { 385 | "version": "1.0.0", 386 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 387 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 388 | } 389 | } 390 | }, 391 | "debug": { 392 | "version": "3.1.0", 393 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 394 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 395 | "requires": { 396 | "ms": "2.0.0" 397 | } 398 | }, 399 | "decamelize": { 400 | "version": "1.2.0", 401 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 402 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 403 | }, 404 | "decode-uri-component": { 405 | "version": "0.2.0", 406 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 407 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" 408 | }, 409 | "decompress-response": { 410 | "version": "3.3.0", 411 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 412 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", 413 | "requires": { 414 | "mimic-response": "1.0.0" 415 | } 416 | }, 417 | "delayed-stream": { 418 | "version": "1.0.0", 419 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 420 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 421 | }, 422 | "discord.js": { 423 | "version": "11.2.1", 424 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-11.2.1.tgz", 425 | "integrity": "sha512-8Mor+IREVWHinjRd6Bu6OwRfT+ET/WEoLWMl8crFvBVcTFmaO/TSwP39C8QIGCB2YMVMYMdljjX/w17AUMemqg==", 426 | "requires": { 427 | "long": "3.2.0", 428 | "prism-media": "0.0.1", 429 | "snekfetch": "3.5.8", 430 | "tweetnacl": "1.0.0", 431 | "ws": "3.2.0" 432 | }, 433 | "dependencies": { 434 | "tweetnacl": { 435 | "version": "1.0.0", 436 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", 437 | "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" 438 | } 439 | } 440 | }, 441 | "dom-serializer": { 442 | "version": "0.1.0", 443 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", 444 | "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", 445 | "requires": { 446 | "domelementtype": "1.1.3", 447 | "entities": "1.1.1" 448 | }, 449 | "dependencies": { 450 | "domelementtype": { 451 | "version": "1.1.3", 452 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", 453 | "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" 454 | } 455 | } 456 | }, 457 | "domelementtype": { 458 | "version": "1.3.0", 459 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", 460 | "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" 461 | }, 462 | "domhandler": { 463 | "version": "2.4.1", 464 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", 465 | "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", 466 | "requires": { 467 | "domelementtype": "1.3.0" 468 | } 469 | }, 470 | "domutils": { 471 | "version": "1.5.1", 472 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", 473 | "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", 474 | "requires": { 475 | "dom-serializer": "0.1.0", 476 | "domelementtype": "1.3.0" 477 | } 478 | }, 479 | "duplexer3": { 480 | "version": "0.1.4", 481 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 482 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" 483 | }, 484 | "ecc-jsbn": { 485 | "version": "0.1.1", 486 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 487 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 488 | "optional": true, 489 | "requires": { 490 | "jsbn": "0.1.1" 491 | } 492 | }, 493 | "entities": { 494 | "version": "1.1.1", 495 | "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", 496 | "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" 497 | }, 498 | "escape-string-regexp": { 499 | "version": "1.0.5", 500 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 501 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 502 | }, 503 | "extend": { 504 | "version": "3.0.1", 505 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 506 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 507 | }, 508 | "extsprintf": { 509 | "version": "1.3.0", 510 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 511 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 512 | }, 513 | "fast-deep-equal": { 514 | "version": "1.0.0", 515 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", 516 | "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" 517 | }, 518 | "fast-json-stable-stringify": { 519 | "version": "2.0.0", 520 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 521 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" 522 | }, 523 | "file-manager": { 524 | "version": "1.0.1", 525 | "resolved": "https://registry.npmjs.org/file-manager/-/file-manager-1.0.1.tgz", 526 | "integrity": "sha1-yZySdeSoyNr13vFR9rUUBVIegXo=", 527 | "requires": { 528 | "async": "1.5.2" 529 | }, 530 | "dependencies": { 531 | "async": { 532 | "version": "1.5.2", 533 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 534 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" 535 | } 536 | } 537 | }, 538 | "find-youtube-urls": { 539 | "version": "0.0.2", 540 | "resolved": "https://registry.npmjs.org/find-youtube-urls/-/find-youtube-urls-0.0.2.tgz", 541 | "integrity": "sha1-NDfg8IUbG0rPxCSbAw4K5CHdoX4=" 542 | }, 543 | "forever-agent": { 544 | "version": "0.6.1", 545 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 546 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 547 | }, 548 | "form-data": { 549 | "version": "1.0.1", 550 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz", 551 | "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", 552 | "requires": { 553 | "async": "2.5.0", 554 | "combined-stream": "1.0.5", 555 | "mime-types": "2.1.17" 556 | } 557 | }, 558 | "fortnite": { 559 | "version": "2.0.1", 560 | "resolved": "https://registry.npmjs.org/fortnite/-/fortnite-2.0.1.tgz", 561 | "integrity": "sha512-f7gAfhNyDhZ+BssyFrevE4+I8Cn0lF0bGKXbXl6KbA2vuL3sDlDPPOop/5kO2rc5OGNoSaNz0mkIlSFmlwGWdQ==", 562 | "requires": { 563 | "cheerio": "1.0.0-rc.2", 564 | "snekfetch": "3.5.8" 565 | } 566 | }, 567 | "from2": { 568 | "version": "2.3.0", 569 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 570 | "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", 571 | "requires": { 572 | "inherits": "2.0.3", 573 | "readable-stream": "2.0.6" 574 | } 575 | }, 576 | "fs.realpath": { 577 | "version": "1.0.0", 578 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 579 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 580 | }, 581 | "generate-function": { 582 | "version": "2.0.0", 583 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", 584 | "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" 585 | }, 586 | "generate-object-property": { 587 | "version": "1.2.0", 588 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", 589 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", 590 | "requires": { 591 | "is-property": "1.0.2" 592 | } 593 | }, 594 | "get-closest": { 595 | "version": "0.0.2", 596 | "resolved": "https://registry.npmjs.org/get-closest/-/get-closest-0.0.2.tgz", 597 | "integrity": "sha1-YlVAJvuIM1T0x1PuQVKgNKbnZ0Q=" 598 | }, 599 | "get-json": { 600 | "version": "1.0.0", 601 | "resolved": "https://registry.npmjs.org/get-json/-/get-json-1.0.0.tgz", 602 | "integrity": "sha512-hrKUsgCR/UYJ4u+g1ImS2GyQy6GbE5hXd5C8zwZvwzPaEf8M1C+dTi2WKDtwaCevy2Z1wepK0+hErZGXEQr6hA==", 603 | "requires": { 604 | "is-node": "0.0.0", 605 | "jsonp": "0.0.4", 606 | "phin": "2.4.18" 607 | } 608 | }, 609 | "get-stream": { 610 | "version": "3.0.0", 611 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 612 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 613 | }, 614 | "getpass": { 615 | "version": "0.1.7", 616 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 617 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 618 | "requires": { 619 | "assert-plus": "1.0.0" 620 | }, 621 | "dependencies": { 622 | "assert-plus": { 623 | "version": "1.0.0", 624 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 625 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 626 | } 627 | } 628 | }, 629 | "glob": { 630 | "version": "7.1.2", 631 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 632 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 633 | "requires": { 634 | "fs.realpath": "1.0.0", 635 | "inflight": "1.0.6", 636 | "inherits": "2.0.3", 637 | "minimatch": "3.0.4", 638 | "once": "1.4.0", 639 | "path-is-absolute": "1.0.1" 640 | } 641 | }, 642 | "google-images": { 643 | "version": "2.1.0", 644 | "resolved": "https://registry.npmjs.org/google-images/-/google-images-2.1.0.tgz", 645 | "integrity": "sha1-EnSuQEgll4Jk06T48tUmuI0L8Cw=", 646 | "requires": { 647 | "got": "6.7.1" 648 | } 649 | }, 650 | "got": { 651 | "version": "6.7.1", 652 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", 653 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", 654 | "requires": { 655 | "create-error-class": "3.0.2", 656 | "duplexer3": "0.1.4", 657 | "get-stream": "3.0.0", 658 | "is-redirect": "1.0.0", 659 | "is-retry-allowed": "1.1.0", 660 | "is-stream": "1.1.0", 661 | "lowercase-keys": "1.0.0", 662 | "safe-buffer": "5.1.1", 663 | "timed-out": "4.0.1", 664 | "unzip-response": "2.0.1", 665 | "url-parse-lax": "1.0.0" 666 | } 667 | }, 668 | "har-schema": { 669 | "version": "2.0.0", 670 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 671 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 672 | }, 673 | "har-validator": { 674 | "version": "2.0.6", 675 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", 676 | "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", 677 | "requires": { 678 | "chalk": "1.1.3", 679 | "commander": "2.11.0", 680 | "is-my-json-valid": "2.16.1", 681 | "pinkie-promise": "2.0.1" 682 | }, 683 | "dependencies": { 684 | "ansi-styles": { 685 | "version": "2.2.1", 686 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 687 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 688 | }, 689 | "chalk": { 690 | "version": "1.1.3", 691 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 692 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 693 | "requires": { 694 | "ansi-styles": "2.2.1", 695 | "escape-string-regexp": "1.0.5", 696 | "has-ansi": "2.0.0", 697 | "strip-ansi": "3.0.1", 698 | "supports-color": "2.0.0" 699 | } 700 | }, 701 | "supports-color": { 702 | "version": "2.0.0", 703 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 704 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 705 | } 706 | } 707 | }, 708 | "has-ansi": { 709 | "version": "2.0.0", 710 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 711 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 712 | "requires": { 713 | "ansi-regex": "2.1.1" 714 | } 715 | }, 716 | "has-flag": { 717 | "version": "2.0.0", 718 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 719 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" 720 | }, 721 | "has-symbol-support-x": { 722 | "version": "1.4.1", 723 | "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz", 724 | "integrity": "sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA==" 725 | }, 726 | "has-to-string-tag-x": { 727 | "version": "1.4.1", 728 | "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", 729 | "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", 730 | "requires": { 731 | "has-symbol-support-x": "1.4.1" 732 | } 733 | }, 734 | "hashish": { 735 | "version": "0.0.4", 736 | "resolved": "https://registry.npmjs.org/hashish/-/hashish-0.0.4.tgz", 737 | "integrity": "sha1-bWC8b/r3Ebav1g5CbQd5iAFOZVQ=", 738 | "requires": { 739 | "traverse": "0.6.6" 740 | } 741 | }, 742 | "hawk": { 743 | "version": "3.1.3", 744 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 745 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 746 | "requires": { 747 | "boom": "2.10.1", 748 | "cryptiles": "2.0.5", 749 | "hoek": "2.16.3", 750 | "sntp": "1.0.9" 751 | } 752 | }, 753 | "hh-mm-ss": { 754 | "version": "1.2.0", 755 | "resolved": "https://registry.npmjs.org/hh-mm-ss/-/hh-mm-ss-1.2.0.tgz", 756 | "integrity": "sha512-f4I9Hz1dLpX/3mrEs7yq30+FiuO3tt5NWAqAGeBTaoeoBfB8vhcQ3BphuDc5DjZb/K809agqrAaFlP0jhEU/8w==", 757 | "requires": { 758 | "zero-fill": "2.2.3" 759 | } 760 | }, 761 | "hoek": { 762 | "version": "2.16.3", 763 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 764 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 765 | }, 766 | "html-entities": { 767 | "version": "1.2.1", 768 | "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", 769 | "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" 770 | }, 771 | "htmlparser2": { 772 | "version": "3.9.2", 773 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", 774 | "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", 775 | "requires": { 776 | "domelementtype": "1.3.0", 777 | "domhandler": "2.4.1", 778 | "domutils": "1.5.1", 779 | "entities": "1.1.1", 780 | "inherits": "2.0.3", 781 | "readable-stream": "2.0.6" 782 | } 783 | }, 784 | "http-cache-semantics": { 785 | "version": "3.8.1", 786 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", 787 | "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" 788 | }, 789 | "http-signature": { 790 | "version": "1.1.1", 791 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 792 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 793 | "requires": { 794 | "assert-plus": "0.2.0", 795 | "jsprim": "1.4.1", 796 | "sshpk": "1.13.1" 797 | } 798 | }, 799 | "inflight": { 800 | "version": "1.0.6", 801 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 802 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 803 | "requires": { 804 | "once": "1.4.0", 805 | "wrappy": "1.0.2" 806 | } 807 | }, 808 | "inherits": { 809 | "version": "2.0.3", 810 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 811 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 812 | }, 813 | "into-stream": { 814 | "version": "3.1.0", 815 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 816 | "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", 817 | "requires": { 818 | "from2": "2.3.0", 819 | "p-is-promise": "1.1.0" 820 | } 821 | }, 822 | "invert-kv": { 823 | "version": "1.0.0", 824 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 825 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" 826 | }, 827 | "is-fullwidth-code-point": { 828 | "version": "1.0.0", 829 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 830 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 831 | "requires": { 832 | "number-is-nan": "1.0.1" 833 | } 834 | }, 835 | "is-my-json-valid": { 836 | "version": "2.16.1", 837 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", 838 | "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", 839 | "requires": { 840 | "generate-function": "2.0.0", 841 | "generate-object-property": "1.2.0", 842 | "jsonpointer": "4.0.1", 843 | "xtend": "4.0.1" 844 | } 845 | }, 846 | "is-node": { 847 | "version": "0.0.0", 848 | "resolved": "https://registry.npmjs.org/is-node/-/is-node-0.0.0.tgz", 849 | "integrity": "sha1-h91lC4f7ajnFDKr+4On2g17BXkE=" 850 | }, 851 | "is-object": { 852 | "version": "1.0.1", 853 | "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", 854 | "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" 855 | }, 856 | "is-plain-obj": { 857 | "version": "1.1.0", 858 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 859 | "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" 860 | }, 861 | "is-property": { 862 | "version": "1.0.2", 863 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", 864 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" 865 | }, 866 | "is-redirect": { 867 | "version": "1.0.0", 868 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 869 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" 870 | }, 871 | "is-retry-allowed": { 872 | "version": "1.1.0", 873 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", 874 | "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" 875 | }, 876 | "is-stream": { 877 | "version": "1.1.0", 878 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 879 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 880 | }, 881 | "is-typedarray": { 882 | "version": "1.0.0", 883 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 884 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 885 | }, 886 | "isarray": { 887 | "version": "1.0.0", 888 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 889 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 890 | }, 891 | "isstream": { 892 | "version": "0.1.2", 893 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 894 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 895 | }, 896 | "isurl": { 897 | "version": "1.0.0", 898 | "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", 899 | "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", 900 | "requires": { 901 | "has-to-string-tag-x": "1.4.1", 902 | "is-object": "1.0.1" 903 | } 904 | }, 905 | "jsbn": { 906 | "version": "0.1.1", 907 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 908 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 909 | "optional": true 910 | }, 911 | "json-buffer": { 912 | "version": "3.0.0", 913 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 914 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" 915 | }, 916 | "json-schema": { 917 | "version": "0.2.3", 918 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 919 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 920 | }, 921 | "json-schema-traverse": { 922 | "version": "0.3.1", 923 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", 924 | "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" 925 | }, 926 | "json-stringify-safe": { 927 | "version": "5.0.1", 928 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 929 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 930 | }, 931 | "jsonp": { 932 | "version": "0.0.4", 933 | "resolved": "https://registry.npmjs.org/jsonp/-/jsonp-0.0.4.tgz", 934 | "integrity": "sha1-lGZaS3caq+y4qshBNbmVlHVpGL0=", 935 | "requires": { 936 | "debug": "3.1.0" 937 | } 938 | }, 939 | "jsonpointer": { 940 | "version": "4.0.1", 941 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", 942 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" 943 | }, 944 | "jsprim": { 945 | "version": "1.4.1", 946 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 947 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 948 | "requires": { 949 | "assert-plus": "1.0.0", 950 | "extsprintf": "1.3.0", 951 | "json-schema": "0.2.3", 952 | "verror": "1.10.0" 953 | }, 954 | "dependencies": { 955 | "assert-plus": { 956 | "version": "1.0.0", 957 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 958 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 959 | } 960 | } 961 | }, 962 | "keyv": { 963 | "version": "3.0.0", 964 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", 965 | "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", 966 | "requires": { 967 | "json-buffer": "3.0.0" 968 | } 969 | }, 970 | "lcid": { 971 | "version": "1.0.0", 972 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 973 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 974 | "requires": { 975 | "invert-kv": "1.0.0" 976 | } 977 | }, 978 | "levenshtein": { 979 | "version": "1.0.5", 980 | "resolved": "https://registry.npmjs.org/levenshtein/-/levenshtein-1.0.5.tgz", 981 | "integrity": "sha1-ORFzepy1baNF0Aj1V4LG8TiXm6M=" 982 | }, 983 | "lodash": { 984 | "version": "4.17.4", 985 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 986 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 987 | }, 988 | "long": { 989 | "version": "3.2.0", 990 | "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", 991 | "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" 992 | }, 993 | "lowercase-keys": { 994 | "version": "1.0.0", 995 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", 996 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" 997 | }, 998 | "lzma": { 999 | "version": "2.3.2", 1000 | "resolved": "https://registry.npmjs.org/lzma/-/lzma-2.3.2.tgz", 1001 | "integrity": "sha1-N4OySFi5wOdHoN88vx+1/KqSxEE=" 1002 | }, 1003 | "m3u8stream": { 1004 | "version": "0.1.3", 1005 | "resolved": "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.1.3.tgz", 1006 | "integrity": "sha1-/8un9PN1E8mCzEV4XooNfXRIw50=", 1007 | "requires": { 1008 | "miniget": "1.1.0" 1009 | } 1010 | }, 1011 | "mime-db": { 1012 | "version": "1.30.0", 1013 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 1014 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 1015 | }, 1016 | "mime-types": { 1017 | "version": "2.1.17", 1018 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 1019 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", 1020 | "requires": { 1021 | "mime-db": "1.30.0" 1022 | } 1023 | }, 1024 | "mimic-response": { 1025 | "version": "1.0.0", 1026 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", 1027 | "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" 1028 | }, 1029 | "miniget": { 1030 | "version": "1.1.0", 1031 | "resolved": "https://registry.npmjs.org/miniget/-/miniget-1.1.0.tgz", 1032 | "integrity": "sha512-ICBPQWEoz19eyPHbXLkvjPi62xLhz2irltks35NCYqzYHO0/35IbAaBP3Bbc4VgAwmloIPEpK7CO4/omOiUfDg==" 1033 | }, 1034 | "minimatch": { 1035 | "version": "3.0.4", 1036 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1037 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1038 | "requires": { 1039 | "brace-expansion": "1.1.8" 1040 | } 1041 | }, 1042 | "minimist": { 1043 | "version": "0.0.8", 1044 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1045 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1046 | }, 1047 | "mkdirp": { 1048 | "version": "0.5.1", 1049 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1050 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1051 | "requires": { 1052 | "minimist": "0.0.8" 1053 | } 1054 | }, 1055 | "ms": { 1056 | "version": "2.0.0", 1057 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1058 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1059 | }, 1060 | "mysql": { 1061 | "version": "2.15.0", 1062 | "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.15.0.tgz", 1063 | "integrity": "sha512-C7tjzWtbN5nzkLIV+E8Crnl9bFyc7d3XJcBAvHKEVkjrYjogz3llo22q6s/hw+UcsE4/844pDob9ac+3dVjQSA==", 1064 | "requires": { 1065 | "bignumber.js": "4.0.4", 1066 | "readable-stream": "2.3.3", 1067 | "safe-buffer": "5.1.1", 1068 | "sqlstring": "2.3.0" 1069 | }, 1070 | "dependencies": { 1071 | "readable-stream": { 1072 | "version": "2.3.3", 1073 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1074 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1075 | "requires": { 1076 | "core-util-is": "1.0.2", 1077 | "inherits": "2.0.3", 1078 | "isarray": "1.0.0", 1079 | "process-nextick-args": "1.0.7", 1080 | "safe-buffer": "5.1.1", 1081 | "string_decoder": "1.0.3", 1082 | "util-deprecate": "1.0.2" 1083 | } 1084 | }, 1085 | "string_decoder": { 1086 | "version": "1.0.3", 1087 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1088 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1089 | "requires": { 1090 | "safe-buffer": "5.1.1" 1091 | } 1092 | } 1093 | } 1094 | }, 1095 | "node-uuid": { 1096 | "version": "1.4.8", 1097 | "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", 1098 | "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" 1099 | }, 1100 | "normalize-url": { 1101 | "version": "2.0.1", 1102 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", 1103 | "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", 1104 | "requires": { 1105 | "prepend-http": "2.0.0", 1106 | "query-string": "5.0.1", 1107 | "sort-keys": "2.0.0" 1108 | }, 1109 | "dependencies": { 1110 | "prepend-http": { 1111 | "version": "2.0.0", 1112 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1113 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" 1114 | } 1115 | } 1116 | }, 1117 | "nth-check": { 1118 | "version": "1.0.1", 1119 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", 1120 | "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", 1121 | "requires": { 1122 | "boolbase": "1.0.0" 1123 | } 1124 | }, 1125 | "number-is-nan": { 1126 | "version": "1.0.1", 1127 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1128 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 1129 | }, 1130 | "oauth-sign": { 1131 | "version": "0.8.2", 1132 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 1133 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 1134 | }, 1135 | "object-assign": { 1136 | "version": "4.1.1", 1137 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1138 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1139 | }, 1140 | "once": { 1141 | "version": "1.4.0", 1142 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1143 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1144 | "requires": { 1145 | "wrappy": "1.0.2" 1146 | } 1147 | }, 1148 | "optjs": { 1149 | "version": "3.2.2", 1150 | "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", 1151 | "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" 1152 | }, 1153 | "opusscript": { 1154 | "version": "0.0.3", 1155 | "resolved": "https://registry.npmjs.org/opusscript/-/opusscript-0.0.3.tgz", 1156 | "integrity": "sha1-zkZxf8jW+QHFGR5pSFyImgNqhnQ=" 1157 | }, 1158 | "os-locale": { 1159 | "version": "1.4.0", 1160 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", 1161 | "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", 1162 | "requires": { 1163 | "lcid": "1.0.0" 1164 | } 1165 | }, 1166 | "p-cancelable": { 1167 | "version": "0.3.0", 1168 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", 1169 | "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" 1170 | }, 1171 | "p-finally": { 1172 | "version": "1.0.0", 1173 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1174 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 1175 | }, 1176 | "p-is-promise": { 1177 | "version": "1.1.0", 1178 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 1179 | "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" 1180 | }, 1181 | "p-map": { 1182 | "version": "1.2.0", 1183 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", 1184 | "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" 1185 | }, 1186 | "p-timeout": { 1187 | "version": "2.0.1", 1188 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", 1189 | "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", 1190 | "requires": { 1191 | "p-finally": "1.0.0" 1192 | } 1193 | }, 1194 | "parse5": { 1195 | "version": "3.0.3", 1196 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", 1197 | "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", 1198 | "requires": { 1199 | "@types/node": "8.0.51" 1200 | } 1201 | }, 1202 | "path": { 1203 | "version": "0.12.7", 1204 | "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", 1205 | "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", 1206 | "requires": { 1207 | "process": "0.11.10", 1208 | "util": "0.10.3" 1209 | } 1210 | }, 1211 | "path-is-absolute": { 1212 | "version": "1.0.1", 1213 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1214 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 1215 | }, 1216 | "performance-now": { 1217 | "version": "2.1.0", 1218 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1219 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 1220 | }, 1221 | "permessage-deflate": { 1222 | "version": "0.1.6", 1223 | "resolved": "https://registry.npmjs.org/permessage-deflate/-/permessage-deflate-0.1.6.tgz", 1224 | "integrity": "sha1-WB8c7fvUQPrEfQd3vohjM4a5kt4=" 1225 | }, 1226 | "phin": { 1227 | "version": "2.4.18", 1228 | "resolved": "https://registry.npmjs.org/phin/-/phin-2.4.18.tgz", 1229 | "integrity": "sha512-2/18cxAwR+Tj6aXPppGF/PQjrEO+v+paSNkL5B3FD8IWRluqfxnuE7gdMmOMuU7LzJuS/1BsB0A8SDc8tmapnA==" 1230 | }, 1231 | "pify": { 1232 | "version": "3.0.0", 1233 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1234 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" 1235 | }, 1236 | "pinkie": { 1237 | "version": "2.0.4", 1238 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1239 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" 1240 | }, 1241 | "pinkie-promise": { 1242 | "version": "2.0.1", 1243 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1244 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1245 | "requires": { 1246 | "pinkie": "2.0.4" 1247 | } 1248 | }, 1249 | "prepend-http": { 1250 | "version": "1.0.4", 1251 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 1252 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" 1253 | }, 1254 | "prism-media": { 1255 | "version": "0.0.1", 1256 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-0.0.1.tgz", 1257 | "integrity": "sha1-o0JcnKvVDRxsAuVDlBoRiVZnvRA=" 1258 | }, 1259 | "process": { 1260 | "version": "0.11.10", 1261 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", 1262 | "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" 1263 | }, 1264 | "process-nextick-args": { 1265 | "version": "1.0.7", 1266 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1267 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 1268 | }, 1269 | "protobufjs": { 1270 | "version": "5.0.2", 1271 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.2.tgz", 1272 | "integrity": "sha1-WXSNfc8D0tsiwT2p/rAk4Wq4DJE=", 1273 | "requires": { 1274 | "ascli": "1.0.1", 1275 | "bytebuffer": "5.0.1", 1276 | "glob": "7.1.2", 1277 | "yargs": "3.32.0" 1278 | } 1279 | }, 1280 | "punycode": { 1281 | "version": "1.4.1", 1282 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 1283 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 1284 | }, 1285 | "q": { 1286 | "version": "1.5.1", 1287 | "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", 1288 | "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" 1289 | }, 1290 | "qs": { 1291 | "version": "6.2.3", 1292 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", 1293 | "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=" 1294 | }, 1295 | "query-string": { 1296 | "version": "5.0.1", 1297 | "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.0.1.tgz", 1298 | "integrity": "sha512-aM+MkQClojlNiKkO09tiN2Fv8jM/L7GWIjG2liWeKljlOdOPNWr+bW3KQ+w5V/uKprpezC7fAsAMsJtJ+2rLKA==", 1299 | "requires": { 1300 | "decode-uri-component": "0.2.0", 1301 | "object-assign": "4.1.1", 1302 | "strict-uri-encode": "1.1.0" 1303 | } 1304 | }, 1305 | "random-number-between": { 1306 | "version": "1.0.3", 1307 | "resolved": "https://registry.npmjs.org/random-number-between/-/random-number-between-1.0.3.tgz", 1308 | "integrity": "sha512-LY1sxZwhYUAlI5NWTYb9ApYX7U/q/z7uzPfsygir9H3dm6ZG7xAw6rgKNX4LRw7DGOVSeRgIoIBj51AX7aYEGw==" 1309 | }, 1310 | "random-url": { 1311 | "version": "1.0.0", 1312 | "resolved": "https://registry.npmjs.org/random-url/-/random-url-1.0.0.tgz", 1313 | "integrity": "sha1-WKXuRyD5ZCbRuxPo6jxhxToZzpw=", 1314 | "requires": { 1315 | "cuid": "1.2.5" 1316 | } 1317 | }, 1318 | "readable-stream": { 1319 | "version": "2.0.6", 1320 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", 1321 | "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", 1322 | "requires": { 1323 | "core-util-is": "1.0.2", 1324 | "inherits": "2.0.3", 1325 | "isarray": "1.0.0", 1326 | "process-nextick-args": "1.0.7", 1327 | "string_decoder": "0.10.31", 1328 | "util-deprecate": "1.0.2" 1329 | } 1330 | }, 1331 | "request": { 1332 | "version": "2.73.0", 1333 | "resolved": "https://registry.npmjs.org/request/-/request-2.73.0.tgz", 1334 | "integrity": "sha1-X3ip/eQ3CryP9kedeoSnGhS4eKI=", 1335 | "requires": { 1336 | "aws-sign2": "0.6.0", 1337 | "aws4": "1.6.0", 1338 | "bl": "1.1.2", 1339 | "caseless": "0.11.0", 1340 | "combined-stream": "1.0.5", 1341 | "extend": "3.0.1", 1342 | "forever-agent": "0.6.1", 1343 | "form-data": "1.0.1", 1344 | "har-validator": "2.0.6", 1345 | "hawk": "3.1.3", 1346 | "http-signature": "1.1.1", 1347 | "is-typedarray": "1.0.0", 1348 | "isstream": "0.1.2", 1349 | "json-stringify-safe": "5.0.1", 1350 | "mime-types": "2.1.17", 1351 | "node-uuid": "1.4.8", 1352 | "oauth-sign": "0.8.2", 1353 | "qs": "6.2.3", 1354 | "stringstream": "0.0.5", 1355 | "tough-cookie": "2.2.2", 1356 | "tunnel-agent": "0.4.3" 1357 | } 1358 | }, 1359 | "responselike": { 1360 | "version": "1.0.2", 1361 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 1362 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", 1363 | "requires": { 1364 | "lowercase-keys": "1.0.0" 1365 | } 1366 | }, 1367 | "safe-buffer": { 1368 | "version": "5.1.1", 1369 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1370 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 1371 | }, 1372 | "sax": { 1373 | "version": "1.2.4", 1374 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 1375 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 1376 | }, 1377 | "shuffle-array": { 1378 | "version": "1.0.1", 1379 | "resolved": "https://registry.npmjs.org/shuffle-array/-/shuffle-array-1.0.1.tgz", 1380 | "integrity": "sha1-xP88/nTRb5NzBZIwGyXmV3sSiYs=" 1381 | }, 1382 | "sleep-ms": { 1383 | "version": "2.0.1", 1384 | "resolved": "https://registry.npmjs.org/sleep-ms/-/sleep-ms-2.0.1.tgz", 1385 | "integrity": "sha1-PK28TG+15YfAxOJfdoXL8ON5Dbg=" 1386 | }, 1387 | "snekfetch": { 1388 | "version": "3.5.8", 1389 | "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.5.8.tgz", 1390 | "integrity": "sha512-osq7soqKBObV4u/WE9tGQT/m5JdqTU1PWVPcT0We3sKZ99h9QA7wSj7ZWrwEwgRbELeO5BrVCanYjDYtVYcwrQ==" 1391 | }, 1392 | "sntp": { 1393 | "version": "1.0.9", 1394 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 1395 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 1396 | "requires": { 1397 | "hoek": "2.16.3" 1398 | } 1399 | }, 1400 | "sort-keys": { 1401 | "version": "2.0.0", 1402 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", 1403 | "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", 1404 | "requires": { 1405 | "is-plain-obj": "1.1.0" 1406 | } 1407 | }, 1408 | "sqlstring": { 1409 | "version": "2.3.0", 1410 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.0.tgz", 1411 | "integrity": "sha1-UluKT9Jtb3GqYegipsr5dtMa0qg=" 1412 | }, 1413 | "sshpk": { 1414 | "version": "1.13.1", 1415 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 1416 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 1417 | "requires": { 1418 | "asn1": "0.2.3", 1419 | "assert-plus": "1.0.0", 1420 | "bcrypt-pbkdf": "1.0.1", 1421 | "dashdash": "1.14.1", 1422 | "ecc-jsbn": "0.1.1", 1423 | "getpass": "0.1.7", 1424 | "jsbn": "0.1.1", 1425 | "tweetnacl": "0.14.5" 1426 | }, 1427 | "dependencies": { 1428 | "assert-plus": { 1429 | "version": "1.0.0", 1430 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1431 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1432 | } 1433 | } 1434 | }, 1435 | "steam-client": { 1436 | "version": "2.5.5", 1437 | "resolved": "https://registry.npmjs.org/steam-client/-/steam-client-2.5.5.tgz", 1438 | "integrity": "sha512-fytlCecx3vyU7tbgkV6uyt/oWKV9bHfrZOLW7FOw7NCb/wphLqBz4zPVgz3swm9PbOAWu3TNHq5eNtwZZJqPEQ==", 1439 | "requires": { 1440 | "@doctormckay/proxy-agent": "1.0.0", 1441 | "@doctormckay/steam-crypto": "1.2.0", 1442 | "async": "2.5.0", 1443 | "buffer-crc32": "0.2.13", 1444 | "bytebuffer": "5.0.1", 1445 | "protobufjs": "5.0.2", 1446 | "websocket13": "1.7.0" 1447 | } 1448 | }, 1449 | "steam-market-pricing": { 1450 | "version": "2.0.0", 1451 | "resolved": "https://registry.npmjs.org/steam-market-pricing/-/steam-market-pricing-2.0.0.tgz", 1452 | "integrity": "sha512-QZjMBSEMovaWSf0DH6mJOzJaBEzIsDaz+Ot+xHbQ2Ix4fFsrGDHGBnxMw0ZMkYzTLMhnFTuL4j2NggU/iKPntg==", 1453 | "requires": { 1454 | "got": "8.0.1", 1455 | "p-map": "1.2.0" 1456 | }, 1457 | "dependencies": { 1458 | "got": { 1459 | "version": "8.0.1", 1460 | "resolved": "https://registry.npmjs.org/got/-/got-8.0.1.tgz", 1461 | "integrity": "sha1-bX+Ls+uZ5a+RLv4moQRHZEHgjn8=", 1462 | "requires": { 1463 | "@sindresorhus/is": "0.6.0", 1464 | "cacheable-request": "2.1.4", 1465 | "decompress-response": "3.3.0", 1466 | "duplexer3": "0.1.4", 1467 | "get-stream": "3.0.0", 1468 | "into-stream": "3.1.0", 1469 | "is-retry-allowed": "1.1.0", 1470 | "isurl": "1.0.0", 1471 | "lowercase-keys": "1.0.0", 1472 | "mimic-response": "1.0.0", 1473 | "p-cancelable": "0.3.0", 1474 | "p-timeout": "2.0.1", 1475 | "pify": "3.0.0", 1476 | "safe-buffer": "5.1.1", 1477 | "timed-out": "4.0.1", 1478 | "url-parse-lax": "3.0.0", 1479 | "url-to-options": "1.0.1" 1480 | } 1481 | }, 1482 | "prepend-http": { 1483 | "version": "2.0.0", 1484 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1485 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" 1486 | }, 1487 | "url-parse-lax": { 1488 | "version": "3.0.0", 1489 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 1490 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", 1491 | "requires": { 1492 | "prepend-http": "2.0.0" 1493 | } 1494 | } 1495 | } 1496 | }, 1497 | "steam-totp": { 1498 | "version": "2.0.1", 1499 | "resolved": "https://registry.npmjs.org/steam-totp/-/steam-totp-2.0.1.tgz", 1500 | "integrity": "sha512-akFCFNkkXgQEOy99JxF94S1zYutNmoNKFdJM1tSStVo+gHRrIUg8QR267umeEnNG7/UM/9l4qKadxx7z1N+oHw==", 1501 | "requires": { 1502 | "@doctormckay/stats-reporter": "1.0.3" 1503 | } 1504 | }, 1505 | "steam-user": { 1506 | "version": "3.24.0", 1507 | "resolved": "https://registry.npmjs.org/steam-user/-/steam-user-3.24.0.tgz", 1508 | "integrity": "sha512-Ib/zpwqwGC0diXQYqMmBD0sgdtg0G2LyA8amy5+acqZ3F+6rikR6Uw+unb0BDDui1BcXzzfZTOM7VfU7GsK9RQ==", 1509 | "requires": { 1510 | "@doctormckay/proxy-agent": "1.0.0", 1511 | "@doctormckay/stats-reporter": "1.0.3", 1512 | "@doctormckay/steam-crypto": "1.2.0", 1513 | "adm-zip": "0.4.7", 1514 | "appdirectory": "0.1.0", 1515 | "async": "2.5.0", 1516 | "binarykvparser": "2.2.0", 1517 | "buffer-crc32": "0.2.13", 1518 | "bytebuffer": "5.0.1", 1519 | "file-manager": "1.0.1", 1520 | "lzma": "2.3.2", 1521 | "protobufjs": "5.0.2", 1522 | "steam-client": "2.5.5", 1523 | "steam-totp": "1.4.1", 1524 | "steamid": "1.1.0", 1525 | "vdf": "0.0.2" 1526 | }, 1527 | "dependencies": { 1528 | "steam-totp": { 1529 | "version": "1.4.1", 1530 | "resolved": "https://registry.npmjs.org/steam-totp/-/steam-totp-1.4.1.tgz", 1531 | "integrity": "sha512-twKcFUYBvsV3DhStW1XavjMiQqa5ALmGJEcTAf45N8YeZyMqQS6W9w80CtxaJzlH04HnxzvLzKSFQULae6JrRw==", 1532 | "requires": { 1533 | "@doctormckay/stats-reporter": "1.0.3" 1534 | } 1535 | } 1536 | } 1537 | }, 1538 | "steamid": { 1539 | "version": "1.1.0", 1540 | "resolved": "https://registry.npmjs.org/steamid/-/steamid-1.1.0.tgz", 1541 | "integrity": "sha1-7M+/JFR/TpsdJ/y4PaYqakETmYY=", 1542 | "requires": { 1543 | "cuint": "0.2.2" 1544 | } 1545 | }, 1546 | "streamify": { 1547 | "version": "0.2.9", 1548 | "resolved": "https://registry.npmjs.org/streamify/-/streamify-0.2.9.tgz", 1549 | "integrity": "sha512-8pUxeLEef9UO1FxtTt5iikAiyzGI4SZRnGuJ3sz8axZ5Xk+/7ezEV5kuJQsMEFxw7AKYw3xp0Ow+20mmSaJbQQ==", 1550 | "requires": { 1551 | "hashish": "0.0.4" 1552 | } 1553 | }, 1554 | "strict-uri-encode": { 1555 | "version": "1.1.0", 1556 | "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", 1557 | "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" 1558 | }, 1559 | "string-width": { 1560 | "version": "1.0.2", 1561 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1562 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1563 | "requires": { 1564 | "code-point-at": "1.1.0", 1565 | "is-fullwidth-code-point": "1.0.0", 1566 | "strip-ansi": "3.0.1" 1567 | } 1568 | }, 1569 | "string_decoder": { 1570 | "version": "0.10.31", 1571 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1572 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1573 | }, 1574 | "stringstream": { 1575 | "version": "0.0.5", 1576 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 1577 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 1578 | }, 1579 | "strip-ansi": { 1580 | "version": "3.0.1", 1581 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1582 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1583 | "requires": { 1584 | "ansi-regex": "2.1.1" 1585 | } 1586 | }, 1587 | "supports-color": { 1588 | "version": "4.5.0", 1589 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", 1590 | "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", 1591 | "requires": { 1592 | "has-flag": "2.0.0" 1593 | } 1594 | }, 1595 | "timed-out": { 1596 | "version": "4.0.1", 1597 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 1598 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" 1599 | }, 1600 | "tough-cookie": { 1601 | "version": "2.2.2", 1602 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz", 1603 | "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=" 1604 | }, 1605 | "traverse": { 1606 | "version": "0.6.6", 1607 | "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", 1608 | "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=" 1609 | }, 1610 | "tunnel-agent": { 1611 | "version": "0.4.3", 1612 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", 1613 | "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=" 1614 | }, 1615 | "tweetnacl": { 1616 | "version": "0.14.5", 1617 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1618 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 1619 | "optional": true 1620 | }, 1621 | "ultron": { 1622 | "version": "1.1.0", 1623 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz", 1624 | "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ=" 1625 | }, 1626 | "unzip-response": { 1627 | "version": "2.0.1", 1628 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", 1629 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" 1630 | }, 1631 | "url-parse-lax": { 1632 | "version": "1.0.0", 1633 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 1634 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 1635 | "requires": { 1636 | "prepend-http": "1.0.4" 1637 | } 1638 | }, 1639 | "url-to-options": { 1640 | "version": "1.0.1", 1641 | "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", 1642 | "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" 1643 | }, 1644 | "util": { 1645 | "version": "0.10.3", 1646 | "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", 1647 | "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", 1648 | "requires": { 1649 | "inherits": "2.0.1" 1650 | }, 1651 | "dependencies": { 1652 | "inherits": { 1653 | "version": "2.0.1", 1654 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", 1655 | "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" 1656 | } 1657 | } 1658 | }, 1659 | "util-deprecate": { 1660 | "version": "1.0.2", 1661 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1662 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1663 | }, 1664 | "vdf": { 1665 | "version": "0.0.2", 1666 | "resolved": "https://registry.npmjs.org/vdf/-/vdf-0.0.2.tgz", 1667 | "integrity": "sha1-ve6nvN3sf6/IzcWMMq6ExyXCfhQ=", 1668 | "requires": { 1669 | "util": "0.10.3" 1670 | } 1671 | }, 1672 | "verror": { 1673 | "version": "1.10.0", 1674 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1675 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 1676 | "requires": { 1677 | "assert-plus": "1.0.0", 1678 | "core-util-is": "1.0.2", 1679 | "extsprintf": "1.3.0" 1680 | }, 1681 | "dependencies": { 1682 | "assert-plus": { 1683 | "version": "1.0.0", 1684 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1685 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1686 | } 1687 | } 1688 | }, 1689 | "websocket-extensions": { 1690 | "version": "0.1.3", 1691 | "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", 1692 | "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" 1693 | }, 1694 | "websocket13": { 1695 | "version": "1.7.0", 1696 | "resolved": "https://registry.npmjs.org/websocket13/-/websocket13-1.7.0.tgz", 1697 | "integrity": "sha512-z9d8U2m5Ro4qjhixCvchrrckRGIOcRTHZTSnvLX1E6QXzqCUnr3IMj+krXhZgVtcOiwYDPWccHRE3nLYB8igKw==", 1698 | "requires": { 1699 | "@doctormckay/proxy-agent": "1.0.0", 1700 | "bytebuffer": "5.0.1", 1701 | "permessage-deflate": "0.1.6", 1702 | "websocket-extensions": "0.1.3" 1703 | } 1704 | }, 1705 | "window-size": { 1706 | "version": "0.1.4", 1707 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", 1708 | "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" 1709 | }, 1710 | "wrap-ansi": { 1711 | "version": "2.1.0", 1712 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 1713 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 1714 | "requires": { 1715 | "string-width": "1.0.2", 1716 | "strip-ansi": "3.0.1" 1717 | } 1718 | }, 1719 | "wrappy": { 1720 | "version": "1.0.2", 1721 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1722 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1723 | }, 1724 | "ws": { 1725 | "version": "3.2.0", 1726 | "resolved": "https://registry.npmjs.org/ws/-/ws-3.2.0.tgz", 1727 | "integrity": "sha512-hTS3mkXm/j85jTQOIcwVz3yK3up9xHgPtgEhDBOH3G18LDOZmSAG1omJeXejLKJakx+okv8vS1sopgs7rw0kVw==", 1728 | "requires": { 1729 | "async-limiter": "1.0.0", 1730 | "safe-buffer": "5.1.1", 1731 | "ultron": "1.1.0" 1732 | } 1733 | }, 1734 | "xtend": { 1735 | "version": "4.0.1", 1736 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 1737 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 1738 | }, 1739 | "y18n": { 1740 | "version": "3.2.1", 1741 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 1742 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" 1743 | }, 1744 | "yargs": { 1745 | "version": "3.32.0", 1746 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", 1747 | "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", 1748 | "requires": { 1749 | "camelcase": "2.1.1", 1750 | "cliui": "3.2.0", 1751 | "decamelize": "1.2.0", 1752 | "os-locale": "1.4.0", 1753 | "string-width": "1.0.2", 1754 | "window-size": "0.1.4", 1755 | "y18n": "3.2.1" 1756 | } 1757 | }, 1758 | "youtube-dl": { 1759 | "version": "1.12.2", 1760 | "resolved": "https://registry.npmjs.org/youtube-dl/-/youtube-dl-1.12.2.tgz", 1761 | "integrity": "sha512-TDGmUxzEsQCp1Ux3IEkEhJ2LfRlUjBo5AaaGmW5Hqm8uX8jd2sB+Rq37S9vy505qnFhpy05uUSQsBtpvBuQBYA==", 1762 | "requires": { 1763 | "hh-mm-ss": "1.2.0", 1764 | "mkdirp": "0.5.1", 1765 | "request": "2.83.0", 1766 | "streamify": "0.2.9" 1767 | }, 1768 | "dependencies": { 1769 | "assert-plus": { 1770 | "version": "1.0.0", 1771 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1772 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1773 | }, 1774 | "aws-sign2": { 1775 | "version": "0.7.0", 1776 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 1777 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 1778 | }, 1779 | "boom": { 1780 | "version": "4.3.1", 1781 | "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", 1782 | "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", 1783 | "requires": { 1784 | "hoek": "4.2.0" 1785 | } 1786 | }, 1787 | "caseless": { 1788 | "version": "0.12.0", 1789 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 1790 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 1791 | }, 1792 | "cryptiles": { 1793 | "version": "3.1.2", 1794 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", 1795 | "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", 1796 | "requires": { 1797 | "boom": "5.2.0" 1798 | }, 1799 | "dependencies": { 1800 | "boom": { 1801 | "version": "5.2.0", 1802 | "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", 1803 | "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", 1804 | "requires": { 1805 | "hoek": "4.2.0" 1806 | } 1807 | } 1808 | } 1809 | }, 1810 | "form-data": { 1811 | "version": "2.3.1", 1812 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", 1813 | "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", 1814 | "requires": { 1815 | "asynckit": "0.4.0", 1816 | "combined-stream": "1.0.5", 1817 | "mime-types": "2.1.17" 1818 | } 1819 | }, 1820 | "har-validator": { 1821 | "version": "5.0.3", 1822 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", 1823 | "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", 1824 | "requires": { 1825 | "ajv": "5.3.0", 1826 | "har-schema": "2.0.0" 1827 | } 1828 | }, 1829 | "hawk": { 1830 | "version": "6.0.2", 1831 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", 1832 | "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", 1833 | "requires": { 1834 | "boom": "4.3.1", 1835 | "cryptiles": "3.1.2", 1836 | "hoek": "4.2.0", 1837 | "sntp": "2.1.0" 1838 | } 1839 | }, 1840 | "hoek": { 1841 | "version": "4.2.0", 1842 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", 1843 | "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" 1844 | }, 1845 | "http-signature": { 1846 | "version": "1.2.0", 1847 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1848 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1849 | "requires": { 1850 | "assert-plus": "1.0.0", 1851 | "jsprim": "1.4.1", 1852 | "sshpk": "1.13.1" 1853 | } 1854 | }, 1855 | "qs": { 1856 | "version": "6.5.1", 1857 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 1858 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 1859 | }, 1860 | "request": { 1861 | "version": "2.83.0", 1862 | "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", 1863 | "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", 1864 | "requires": { 1865 | "aws-sign2": "0.7.0", 1866 | "aws4": "1.6.0", 1867 | "caseless": "0.12.0", 1868 | "combined-stream": "1.0.5", 1869 | "extend": "3.0.1", 1870 | "forever-agent": "0.6.1", 1871 | "form-data": "2.3.1", 1872 | "har-validator": "5.0.3", 1873 | "hawk": "6.0.2", 1874 | "http-signature": "1.2.0", 1875 | "is-typedarray": "1.0.0", 1876 | "isstream": "0.1.2", 1877 | "json-stringify-safe": "5.0.1", 1878 | "mime-types": "2.1.17", 1879 | "oauth-sign": "0.8.2", 1880 | "performance-now": "2.1.0", 1881 | "qs": "6.5.1", 1882 | "safe-buffer": "5.1.1", 1883 | "stringstream": "0.0.5", 1884 | "tough-cookie": "2.3.3", 1885 | "tunnel-agent": "0.6.0", 1886 | "uuid": "3.1.0" 1887 | } 1888 | }, 1889 | "sntp": { 1890 | "version": "2.1.0", 1891 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", 1892 | "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", 1893 | "requires": { 1894 | "hoek": "4.2.0" 1895 | } 1896 | }, 1897 | "tough-cookie": { 1898 | "version": "2.3.3", 1899 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", 1900 | "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", 1901 | "requires": { 1902 | "punycode": "1.4.1" 1903 | } 1904 | }, 1905 | "tunnel-agent": { 1906 | "version": "0.6.0", 1907 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1908 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1909 | "requires": { 1910 | "safe-buffer": "5.1.1" 1911 | } 1912 | }, 1913 | "uuid": { 1914 | "version": "3.1.0", 1915 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 1916 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 1917 | } 1918 | } 1919 | }, 1920 | "ytdl-core": { 1921 | "version": "0.17.1", 1922 | "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.17.1.tgz", 1923 | "integrity": "sha512-dyJ4MbMnabmCuqWSh1zFnJa09TDJzq7sN12p9C+n48PRCxto0PHdy9TEG3jvYdeTXXvPAGznALlzozTLAo5SaQ==", 1924 | "requires": { 1925 | "html-entities": "1.2.1", 1926 | "m3u8stream": "0.1.3", 1927 | "miniget": "1.1.0", 1928 | "sax": "1.2.4" 1929 | } 1930 | }, 1931 | "zero-fill": { 1932 | "version": "2.2.3", 1933 | "resolved": "https://registry.npmjs.org/zero-fill/-/zero-fill-2.2.3.tgz", 1934 | "integrity": "sha1-o97wa6XjmuZEhQu0yirUEStIVek=" 1935 | } 1936 | } 1937 | } 1938 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "musicmanv2", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "Ben Wall", 10 | "license": "ISC", 11 | "dependencies": { 12 | "chalk": "^2.2.0", 13 | "colors": "^1.1.2", 14 | "csgo-market": "^1.5.2", 15 | "dankmemes": "^1.0.0", 16 | "discord.js": "^11.2.1", 17 | "find-youtube-urls": "0.0.2", 18 | "fortnite": "^2.0.1", 19 | "get-json": "^1.0.0", 20 | "google-images": "^2.1.0", 21 | "ms": "^2.0.0", 22 | "mysql": "^2.15.0", 23 | "opusscript": "0.0.3", 24 | "path": "^0.12.7", 25 | "random-number-between": "^1.0.3", 26 | "random-url": "^1.0.0", 27 | "shuffle-array": "^1.0.1", 28 | "sleep-ms": "^2.0.1", 29 | "steam-market-pricing": "^2.0.0", 30 | "steam-totp": "^2.0.1", 31 | "youtube-dl": "^1.12.2", 32 | "ytdl-core": "^0.17.1" 33 | } 34 | } 35 | --------------------------------------------------------------------------------