From 70cb11c0816f3cf38988434a8a0da891ce8821cf Mon Sep 17 00:00:00 2001 From: Date: Fri, 15 Dec 2017 01:03:23 -0600 Subject: [PATCH] ported code over from discord.io to discord.js --- .gitignore | 3 + bot.js | 261 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 264 insertions(+) create mode 100644 .gitignore create mode 100644 bot.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f448302 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +auth.json +node_modules +package-lock.json diff --git a/bot.js b/bot.js new file mode 100644 index 0000000..2416c1f --- /dev/null +++ b/bot.js @@ -0,0 +1,261 @@ +// requirements +const Discord = require('discord.js'); +const auth = require('./auth.json'); +const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; + +// 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))]; +} + +// 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); + returnText = json.data.children[getRandomInt(0,json.data.children.length-1)].data.url; + } + } + + 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; +} + +// 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 '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 'compute': + case 'convert': + if(message.content.substring(10).length > 0) + { + var response = calculate(message.content.substring(10)); + if(response == "") + { + response = stupidQuestion(); + } + message.channel.send(message.author + ' wants to compute: *' + message.content.substring(10) + '*\n' + + 'The result is: **' + response + '**') + } + else + { + message.reply(noQuestion()); + } + break; + case 'calculate': + if(message.content.substring(12).length > 0) + { + var response = calculate(message.content.substring(12)); + if(response == "") + { + response = stupidQuestion(); + } + message.channel.send(message.author + ' wants to compute: *' + message.content.substring(12) + '*\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; + + // SFW Anime Image commands + case 'meirl': + message.channel.send((Math.floor(Math.random() * 2) == 0) ? subredditRequest('anime_irl') : imgurRequest('anime_irl', 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(redditbooruRequest('bishounen')); + break; + case 'kgirls': + message.channel.send((Math.floor(Math.random() * 2) == 0) ? redditbooruRequest('kpics') : imgurRequest('kpics', 5)); + 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') : imgurRequest('ecchi', 5)); + break; + case 'hentai': + message.channel.send(imgurRequest('hentai', 5)); + break; + case 'yaoi': + message.channel.send(imgurRequest('yaoi', 5)); + break; + } + + } +}); + +// login +client.login(auth.token);