diff --git a/bot-o.js.bak b/bot-o.js.bak deleted file mode 100644 index 04a0e33..0000000 --- a/bot-o.js.bak +++ /dev/null @@ -1,478 +0,0 @@ -// requirements -const Discord = require('discord.js'); -const auth = require('./auth.json'); -const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; - -// addins -var craps = require('./games-craps.js'); - -// voice setup -var playQueue = []; -var playVolume = []; -var queueExists = false; -var channel = null; - -// available commands -function availableCommands() { - var commands = "Available commands: " + - "\n**[SFW]** b.<*coinflip, 8ball, roll, compute, bunny, dankmemes, meirl, animemes, moe, moe-boys, hotguys , kgirls, kboys*>" + - "\n**[NSFW]** b.<*lewd, ecchi, hentai, yaoi, yuri, neko, pokeporn, hgifs*>" + - "\nFor more information on a command, you may use: *b.help *"; - - return commands; -} - -// help commands -function commandsHelp(requestedCommand) { - var commands = {"coinflip": "**coinflip:** Returns a result of heads or tails.", - "8ball": "**8ball:** Shakes an 8 ball and returns a result.", - "roll": "**roll:** Rolls a number between 1-100 (or a specified range [ex: b.roll 50-100])", - "compute": "**compute:** Uses WolframAlpha to process the question asked.", - "bunny": "**bunny:** Posts a picture of different bunnies", - "dankmemes": "**dankmemes:** Posts a picture of some dank memes (r/dankmemes)", - "meirl": "**meirl:** Posts a picture of anime irl (r/anime_irl)", - "animemes": "**animemes:** Posts a picture of anime memes (r/animemes)", - "moe": "**moe:** Posts a picture of moe anime (r/awwnime)", - "moe-boys": "**moe-boys:** Posts a picture of moe anime boys (r/cuteanimeboys)", - "hotguys": "**hotguys:** Posts a picture of hot anime guys (r/bishounen)", - "kgirls": "**kgirls:** Posts a picture of k-pop girls (r/kpics or r/kpopfap)", - "kboys": "**kboys:** Posts a picture of k-pop guys (r/kfanservice, r/kpecs, or r/cutekboys)", - "lewd": "[NSFW] **lewd:** Posts a picture of lewd anime girls (r/pantsu)", - "ecchi": "[NSFW] **ecchi:** Posts a picture of ecchi anime girls (r/ecchi)", - "hentai": "[NSFW] **hentai:** Posts a picture of hentai (r/hentai or r/sukebei)", - "yaoi": "[NSFW] **yaoi:** Posts a picture of yaoi (r/yaoi)", - "yuru": "[NSFW] **yuri:** Post a picture of yuri (r/yuri)", - "neko": "[NSFW] **neko:** Posts a picture of cat girls (r/nekomimi)", - "pokeporn": "[NSFW] **pokeporn:** Posts a picture of pokemon hentai (r/pokeporn)", - "hgifs": "[NSFW] **hgifs:** Posts a gif of hentai (r/nsfwanimegifs)"}; - if (commands[requestedCommand] === undefined) - { - return "Command not found, try entering **b.commands** for a full list of commands"; - } - else - { - return commands[requestedCommand]; - } -} - -// coin flip -function coinFlip() { - return (Math.floor(Math.random() * 2) == 0) ? 'heads' : 'tails'; -} - -// 8 ball -function eightBall() { - var answers = [ - 'Maybe.', 'Certainly not.', 'I hope so.', 'Not in your wildest dreams.', - 'There is a good chance.', 'Quite likely.', 'I think so.', 'I hope not.', - 'I hope so.', 'Never!', 'Fuhgeddaboudit.', 'Ahaha! Really?!?', 'Pfft.', - 'Sorry, bucko.', 'Hell, yes.', 'Hell to the no.', 'The future is bleak.', - 'The future is uncertain.', 'I would rather not say.', 'Who cares?', - 'Possibly.', 'Never, ever, ever.', 'There is a small chance.', 'Yes!']; - - return answers[(Math.floor(Math.random() * answers.length))]; -} - -// number roll -function numberRoll(startingRange, endingRange) { - startingRange = Math.ceil(startingRange); - endingRange = Math.floor(endingRange); - return Math.floor(Math.random() * (endingRange-startingRange)) + startingRange; -} - -// stupid question response -function stupidQuestion() { - var answers = [ - 'What kind of dumb question is that?', 'A real question please.', - 'Is that supposed to be a question?', 'Who asked such a dumb question?', - 'How about a good question instead?', 'Only good questions please', - 'Oh god, is that a question?', 'Are you dumb because that\'s a dumb question.']; - - return answers[(Math.floor(Math.random() * answers.length))]; -} - -function noQuestion() { - var answers = ['it helps to ask a question...', 'question plz.', 'where is the question?']; - - return answers[(Math.floor(Math.random() * answers.length))]; -} - -// imgur request -function imgurRequest(subreddit, page_max) -{ - var multiSubreddit = subreddit.split(','); - - var request_url = 'https://api.imgur.com/3/gallery/r/' + multiSubreddit[getRandomInt(0, multiSubreddit.length-1)] + '/time/' + getRandomInt(1,page_max); - - var req = new XMLHttpRequest(); - var returnText = ""; - - req.onreadystatechange = function() - { - if (req.readyState == 4 && req.status == 200) - { - if(req.responseText != "Not found") - { - var json = JSON.parse(req.responseText); - returnText = json.data[getRandomInt(0,json.data.length-1)].link; - } - } - } - - req.open("GET", request_url, false); - req.setRequestHeader('Authorization', 'Client-ID ' + auth.imgur); - req.send(); - - return returnText; -} - -// subreddit request -function subredditRequest(subreddit) -{ - var multiSubreddit = subreddit.split(','); - - var redditURL = "https://www.reddit.com/r/" + multiSubreddit[getRandomInt(0, multiSubreddit.length-1)] + "/.json?show=all&count=25&limit=100"; - var req = new XMLHttpRequest(); - var returnText = ""; - - req.onreadystatechange = function() - { - if(req.readyState == 4 && req.status == 200) - { - - var json = JSON.parse(req.responseText); - while(true) - { - var i = getRandomInt(0,json.data.children.length-1); - try - { - if(json.data.children[i].data.post_hint === "image" || json.data.children[i].data.post_hint === "link" || json.data.children.data.post_hint === "rich:video") - { - returnText = json.data.children[i].data.url; - break; - } - } - catch (error) // error parsing json - { - continue; - } - } - } - } - - req.open("GET", redditURL, false); - req.send(); - - return returnText; -} - -// redditbooru request -function redditbooruRequest(subreddit) -{ - var multiSubreddit = subreddit.split(','); - - var url = "https://" + multiSubreddit[getRandomInt(0, multiSubreddit.length-1)] + ".redditbooru.com/images/?limit=1000"; - var req = new XMLHttpRequest(); - var returnText = ""; - - req.onreadystatechange = function() - { - if(req.readyState == 4 && req.status == 200) - { - var json = JSON.parse(req.responseText); - var imageID = getRandomInt(0, json.length); - returnText = json[imageID].cdnUrl; - } - } - - req.open("GET", url, false); - req.send(); - - return returnText; -} - -// wolframalpha computation -function calculate(message) -{ - var url = "http://api.wolframalpha.com/v1/result?appid=" + auth.wolframalpha + "&i=" + encodeURIComponent(message); - var req = new XMLHttpRequest(); - var returnText = ""; - - req.onreadystatechange = function() - { - if(req.readyState == 4 && req.status == 200) - { - returnText = req.responseText; - } - } - - req.open("GET", url, false); - req.send(); - - return returnText; -} - -// get random number with starting and ending number -function getRandomInt(min, max) -{ - return Math.floor(Math.random() * (max - min + 1)) + min; -} - -// voice setup -function setupVoice(file, volume, voice_channel) -{ - playQueue.unshift(file); - playVolume.unshift(volume); - - if(!channel) - { - channel = voice_channel; - } - if(channel instanceof Discord.VoiceChannel) - { - if(!queueExists) - { - queueExists = true; - channel.join().then(connection => - { - handlePlayQueue(connection); - }); - } - } - else - { - playQueue.pop(); - playVolume.pop(); - channel = null; - } -} - -// voice queue -function handlePlayQueue(connection) -{ - if (playQueue.length == 0) - { - return; - } - - currentCommand = playQueue[0]; - const dispatcher = connection.playFile(currentCommand) - dispatcher.on("end", () => - { - playQueue.pop(); - playVolume.pop(); - - if(playQueue.length == 0) - { - queueExists = false; - if(channel != null) - { - channel.leave(); - channel = null; - } - } - else - { - handlePlayQueue(connection); - } - }); - dispatcher.setVolume(playVolume[0]); -} - -// discord setup -const client = new Discord.Client(); - -client.on('ready', () => { - console.log('Bot is ready'); -}); - -// commands -client.on('message', message => { - if (message.content.substring(0, 2) == 'b.' || message.content.substring(0, 2) == 'B.') { - var args = message.content.substring(2).split(' '); - var cmd = args[0]; - - switch(cmd) - { - // Reply commands - case 'command': - case 'commands': - case 'help': - var message_content = message.content.substring(2).split(' '); - if(message_content[1] === undefined) - { - message.channel.send(availableCommands()); - } - else - { - message.channel.send(commandsHelp(message_content[1])); - } - break; - case 'coinflip': - case 'coin': - message.channel.send(message.author + ' flipped a coin, it landed on **' + coinFlip() + '!**'); - break; - case '8ball': - if(message.content.substring(8).length > 0) - { - message.channel.send(message.author + ' asked: *' + message.content.substring(8) + '*\n' + - 'The magic 8 ball says: **' + eightBall() + '**'); - } - else - { - message.reply(noQuestion()); - } - break; - case 'roll': - var message_content = message.content.substring(2).split(' '); - if(message_content[1] != undefined && message_content[1].length > 0) // ranged roll - { - var regex = /^[0-9]+-[0-9]+$/; - if(regex.test(message_content[1])) - { - var range_break = message_content[1].split('-'); - - message.channel.send(message.author + ' rolls a number between ' + range_break[0] + ' and ' + range_break[1] + '. They roll **' + numberRoll(range_break[0], range_break[1]) + '**.'); - } - else - { - message.channel.send('Unknown roll format. Use "**b.help roll**" for more information.'); - } - } - else // default roll (1-100) - { - message.channel.send(message.author + ' rolls a number between 1 and 100. They roll **' + numberRoll(1, 100) + '**.'); - } - break; - case 'compute': - case 'convert': - case 'calculate': - var message_content = message.content.substring(2).split(' '); - if(message_content[1] != undefined && message_content[1].length > 0) - { - var response = calculate(message.content.substring(message.content.indexOf(' ')+1)); - if(response == "") - { - response = stupidQuestion(); - } - message.channel.send(message.author + ' wants to compute: *' + message.content.substring(message.content.indexOf(' ')+1) + '*\n' + - 'The result is: **' + response + '**') - } - else - { - message.reply(noQuestion()); - } - break; - - // SFW Generic Image commands - case 'bun': - case 'bunny': - case 'bunnies': - message.channel.send(imgurRequest('rabbits',5)); - break; - case 'dankmeme': - case 'dankmemes': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? subredditRequest('dankmemes') : imgurRequest('dankmemes', 5)); - break; - case 'source': - message.channel.send("BunnyBot's source code: https://git.dtam.pw/daniel/discord-bot-js"); - break; - case 'testcommand': - //console.log(craps.craps(message.channel.id, message.channel.author, "start")); - craps.craps(message.channel.id, message.channel.author, "start").then(function(message) { - console.log(message); - }); - break; - - // SFW Anime Image commands - case 'meirl': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? subredditRequest('anime_irl') : imgurRequest('anime_irl', 5)); - break; - case 'animemes': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? subredditRequest('animemes') : imgurRequest('animemes', 5)); - break; - case 'moe': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? redditbooruRequest('awwnime') : imgurRequest('awwnime', 5)); - break; - case 'moe-boys': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? subredditRequest('cuteanimeboys') : imgurRequest('cuteanimeboys', 1)); - break; - case 'hotguys': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? redditbooruRequest('bishounen') : subredditRequest('bishounen')); - break; - case 'kgirls': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? redditbooruRequest('kpics') : ((Math.floor(Math.random() * 2) == 0) ? imgurRequest('kpics', 5) : subredditRequest('kpopfap'))); - break; - case 'kboys': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? imgurRequest('kfanservice',1) : ((Math.floor(Math.random() * 2) == 0) ? imgurRequest('kpecs',1) : imgurRequest('cutekboys', 1))); - break; - - // NSFW - case 'lewd': - message.channel.send(redditbooruRequest('pantsu')); - break; - case 'ecchi': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? subredditRequest('ecchi') : ((Math.floor(Math.random() * 2) == 0) ? redditbooruRequest('ecchi') : ((Math.floor(Math.random() * 2) == 0) ? redditbooruRequest('Sukebei') : imgurRequest('ecchi', 5)))); - break; - case 'hentai': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? imgurRequest('hentai', 5) : subredditRequest('hentai', 5)); - break; - case 'yaoi': - message.channel.send(imgurRequest('yaoi', 5)); - break; - case 'yuri': - message.channel.send(imgurRequest('yuri', 5)); - break; - case 'neko': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? imgurRequest('Nekomimi', 5) : subredditRequest('Nekomimi', 5)); - break; - case 'pokeporn': - message.channel.send((Math.floor(Math.random() * 2) == 0) ? subredditRequest('pokeporn') : redditbooruRequest('pokeporn')); - break; - case 'hgifs': - message.channel.send(subredditRequest('nsfwanimegifs', 5)); - break; - - // Voice commands - case 'join': - channel = message.member.voiceChannel; - channel.join(); - break; - case 'leave': - case 'stop': - case 'skip': - if(channel != null) - { - channel.leave(); - channel = null; - } - playQueue = []; - break; - case 'airhorn': - setupVoice('voice/mlg-airhorn.mp3', 0.4, message.member.voiceChannel); - break; - case 'quiethorn': - setupVoice('voice/mlg-airhorn.mp3', 0.03, message.member.voiceChannel); - break; - case 'weed': - setupVoice('voice/smoke-weed.mp3', 0.2, message.member.voiceChannel); - break; - case 'damnson': - setupVoice('voice/damnson.mp3', 0.35, message.member.voiceChannel); - break; - case 'wombo': - setupVoice('voice/wombocombo.mp3', 0.06, message.member.voiceChannel); - break; - case 'cena': - setupVoice('voice/cena.mp3', 0.10, message.member.voiceChannel); - break; - case 'triple': - setupVoice('voice/triple.mp3', 0.20, message.member.voiceChannel); - break; - } - - } -}); - -// login -client.login(auth.token);