commit 3feaf2a99b7d9b79214e7e84322329b012aea58d Author: Daniel Odendahl Date: Thu Mar 2 18:23:16 2017 -0500 Initial Commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b512c09d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/Procfile b/Procfile new file mode 100644 index 00000000..973094b6 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +worker: node index.js \ No newline at end of file diff --git a/clevusers.json b/clevusers.json new file mode 100644 index 00000000..88b411c6 --- /dev/null +++ b/clevusers.json @@ -0,0 +1,12 @@ +{ + "allowed": { + "242699360352206850": "242699360352206850", + "228313559329669120": "228313559329669120", + "219199801177145345": "219199801177145345", + "163774631952646144": "163774631952646144", + "234318196893548545": "234318196893548545", + "223639379594313728": "223639379594313728", + "252755193739870208": "252755193739870208", + "235218353579491328": "235218353579491328" + } +} \ No newline at end of file diff --git a/commands/avataredit/3000years.js b/commands/avataredit/3000years.js new file mode 100644 index 00000000..2344e220 --- /dev/null +++ b/commands/avataredit/3000years.js @@ -0,0 +1,49 @@ +const commando = require('discord.js-commando'); +const Jimp = require("jimp"); + +class YearsCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: '3000years', + group: 'avataredit', + memberName: '3000years', + description: "It's been 3000 years... (;3000years @User)", + examples: [';3000years @user'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + if (message.mentions.users.size !== 1) { + message.reply(':x: Either too many or no members, only mention one person!'); + } else { + if(message.mentions.users.first().avatarURL === null) { + message.reply(":x: This person has no avatar!"); + } else { + let avatarurl = message.mentions.users.first().avatarURL; + avatarurl = avatarurl.replace(".jpg", ".png"); + avatarurl = avatarurl.replace(".gif", ".png"); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage("It's been 3000 years " + username + "..."); + let images = []; + images.push(Jimp.read(avatarurl)); + images.push(Jimp.read("./images/3000years.png")); + Promise.all(images).then(([avatar, years]) => { + avatar.resize(200, 200); + years.blit(avatar, 461, 127); + years.getBuffer(Jimp.MIME_PNG, (err, buff) => { + if (err) throw err; + message.channel.sendFile(buff); + }); + }); + } + } + } +} + +module.exports = YearsCommand; \ No newline at end of file diff --git a/commands/avataredit/beautiful.js b/commands/avataredit/beautiful.js new file mode 100644 index 00000000..110ea0f3 --- /dev/null +++ b/commands/avataredit/beautiful.js @@ -0,0 +1,51 @@ +const commando = require('discord.js-commando'); +const Jimp = require("jimp"); + +class BeautifulCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'beautiful', + group: 'avataredit', + memberName: 'beautiful', + description: 'Oh, this? This is beautiful. (;beautiful @User)', + examples: [';beautiful @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + if (message.mentions.users.size !== 1) { + message.reply(':x: Either too many or no members, only mention one person!'); + } else { + if(message.mentions.users.first().avatarURL === null) { + message.reply(":x: This person has no avatar!"); + } else { + let avatarurl = message.mentions.users.first().avatarURL; + avatarurl = avatarurl.replace(".jpg", ".png"); + avatarurl = avatarurl.replace(".gif", ".png"); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage('This? ' + username + " is beautiful."); + let images = []; + images.push(Jimp.read(avatarurl)); + images.push(Jimp.read("./images/beautiful.jpg")); + Promise.all(images).then(([avatar, beautiful]) => { + avatar.resize(200, 200); + beautiful.blit(avatar, 432, 42); + avatar.resize(190, 190); + beautiful.blit(avatar, 451, 434); + beautiful.getBuffer(Jimp.MIME_PNG, (err, buff) => { + if (err) throw err; + message.channel.sendFile(buff); + }); + }); + } + } + } +} + +module.exports = BeautifulCommand; \ No newline at end of file diff --git a/commands/avataredit/bobross.js b/commands/avataredit/bobross.js new file mode 100644 index 00000000..a3f80a3b --- /dev/null +++ b/commands/avataredit/bobross.js @@ -0,0 +1,52 @@ +const commando = require('discord.js-commando'); +const Jimp = require("jimp"); + +class BobRossCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'bobross', + group: 'avataredit', + memberName: 'bobross', + description: "Make Bob Ross draw your avatar. (;bobross @User)", + examples: [';bobross @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + if (message.mentions.users.size !== 1) { + message.reply(':x: Either too many or no members, only mention one person!'); + } else { + if(message.mentions.users.first().avatarURL === null) { + message.reply(":x: This person has no avatar!"); + } else { + let avatarurl = message.mentions.users.first().avatarURL; + avatarurl = avatarurl.replace(".jpg", ".png"); + avatarurl = avatarurl.replace(".gif", ".png"); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(username + "..."); + let images = []; + images.push(Jimp.read(avatarurl)); + images.push(Jimp.read("./images/BobRoss.png")); + images.push(Jimp.read("./images/BlankWhite.png")); + Promise.all(images).then(([avatar, bob, nothing]) => { + avatar.rotate(2); + avatar.resize(300, 300); + nothing.composite(avatar, 44, 85); + nothing.composite(bob, 0, 0); + nothing.getBuffer(Jimp.MIME_PNG, (err, buff) => { + if (err) throw err; + message.channel.sendFile(buff); + }); + }); + } + } + } +} + +module.exports = BobRossCommand; \ No newline at end of file diff --git a/commands/avataredit/rip.js b/commands/avataredit/rip.js new file mode 100644 index 00000000..35ef702d --- /dev/null +++ b/commands/avataredit/rip.js @@ -0,0 +1,49 @@ +const commando = require('discord.js-commando'); +const Jimp = require("jimp"); + +class RIPCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'rip', + group: 'avataredit', + memberName: 'rip', + description: 'Puts a profile picture over a gravestone. (;rip @User)', + examples: [';rip @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + if (message.mentions.users.size !== 1) { + message.reply(':x: Either too many or no members, only mention one person!'); + } else { + if(message.mentions.users.first().avatarURL === null) { + message.reply(":x: This person has no avatar!"); + } else { + let avatarurl = message.mentions.users.first().avatarURL; + avatarurl = avatarurl.replace(".jpg", ".png"); + avatarurl = avatarurl.replace(".gif", ".png"); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage('RIP ' + username + "..."); + let images = []; + images.push(Jimp.read(avatarurl)); + images.push(Jimp.read("./images/gravestone.jpg")); + Promise.all(images).then(([avatar, gravestone]) => { + avatar.resize(200, 200); + gravestone.blit(avatar, 60, 65); + gravestone.getBuffer(Jimp.MIME_PNG, (err, buff) => { + if (err) throw err; + message.channel.sendFile(buff); + }); + }); + } + } + } +} + +module.exports = RIPCommand; \ No newline at end of file diff --git a/commands/botinfo/banlist.json b/commands/botinfo/banlist.json new file mode 100644 index 00000000..06e9f474 --- /dev/null +++ b/commands/botinfo/banlist.json @@ -0,0 +1,5 @@ +{ + "banned": { + "155112606661607425": "155112606661607425" + } +} \ No newline at end of file diff --git a/commands/botinfo/contact.js b/commands/botinfo/contact.js new file mode 100644 index 00000000..efbc6684 --- /dev/null +++ b/commands/botinfo/contact.js @@ -0,0 +1,31 @@ +const commando = require('discord.js-commando'); +const banlist = require('./banlist.json'); + +class ContactCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'contact', + group: 'botinfo', + memberName: 'contact', + description: 'Report bugs or request new features. (;contact Fix this command!)', + examples: [';contact Fix this command!'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let banid = message.author.id; + if (message.author.id === banlist.banned[banid]) { + message.reply("Sorry, you've been banned from using this command."); + } else { + this.client.users.get('242699360352206850').sendMessage("**" + message.author.username + '#' + message.author.discriminator + " (" + message.author.id + ")" + ":**\n" + message.content.split(" ").slice(1).join(" ")); + message.reply('Message Sent! Thanks for your support!'); + } + } +} + +module.exports = ContactCommand; \ No newline at end of file diff --git a/commands/botinfo/info.js b/commands/botinfo/info.js new file mode 100644 index 00000000..2120ff65 --- /dev/null +++ b/commands/botinfo/info.js @@ -0,0 +1,73 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); +const config = require("../../config.json"); + +class InfoCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'info', + group: 'botinfo', + memberName: 'info', + description: 'Gives some bot info. (;info)', + examples: [';info'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + } + console.log("[Command] " + message.content); + const toHHMMSS = seconds => { + let secNum = parseInt(seconds, 10); + let hours = Math.floor(secNum / 3600); + let minutes = Math.floor((secNum - (hours * 3600)) / 60); + seconds = secNum - (hours * 3600) - (minutes * 60); + if (hours < 10) hours = "0" + hours; + if (minutes < 10) minutes = "0" + minutes; + if (seconds < 10) seconds = "0" + seconds; + return hours + ":" + minutes + ":" + seconds; + }; + const embed = new Discord.RichEmbed() + .setTitle('Welcome to XiaoBot!') + .setAuthor(this.client.user.username, this.client.user.avatarURL) + .setColor(0x00AE86) + .setDescription('XiaoBot is your personal companion for your Discord Server!') + .setFooter('©2017 dragonfire535', this.client.user.avatarURL) + .setThumbnail(this.client.user.avatarURL) + .setURL('http://dragonfire535.tk') + .addField('Commands', + "There are a variety of commands XiaoBot can use! Use ';help' to view a list of all commands!") + .addField('Servers', + this.client.guilds.size, true) + .addField('Users', + this.client.users.size, true) + .addField('Commands', + config.commandcount, true) + .addField('Owner', + "dragonfire535#8081", true) + .addField('Uptime', + toHHMMSS(process.uptime()), true) + .addField('Node Version', + "7.6.0", true) + .addField('Host', + "[Heroku](https://www.heroku.com/)", true) + .addField('Source Code', + "[View Here](https://github.com/dragonfire535/xiaobot)", true) + .addField('Lib', + "[discord.js](https://discord.js.org/#/) (master)", true) + .addField('Packages', + "[Commando](https://github.com/Gawdl3y/discord.js-commando) (0.9.0), [cleverbot-node](https://github.com/fojas/cleverbot-node) (0.3.3), [pirate-speak](https://github.com/mikewesthad/pirate-speak) (1.0.1), [JIMP](https://github.com/oliver-moran/jimp) (0.2.27), [google-translate-api](https://github.com/matheuss/google-translate-api) (2.2.2)") + .addField('Other Credit', + "[Cleverbot API](https://www.cleverbot.com/api/)") + .addField('My Server', + "[Click Here to Join!](https://discord.gg/fqQF8mc)") + .addField('Invite Link:', + "[Click Here to Add Me to Your Server!](https://discordapp.com/oauth2/authorize?client_id=278305350804045834&scope=bot&permissions=519238)"); + message.channel.sendEmbed(embed).catch(console.error); + } +} + +module.exports = InfoCommand; \ No newline at end of file diff --git a/commands/botinfo/invite.js b/commands/botinfo/invite.js new file mode 100644 index 00000000..5d8ddf9c --- /dev/null +++ b/commands/botinfo/invite.js @@ -0,0 +1,24 @@ +const commando = require('discord.js-commando'); + +class InviteCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'invite', + group: 'botinfo', + memberName: 'invite', + description: 'Sends you an invite for the bot, or an invite to my server, Heroes of Dreamland. (;invite)', + examples: [';invite'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + message.reply("\nAdd me to your server with this link:\n" + "https://discordapp.com/oauth2/authorize?client_id=278305350804045834&scope=bot&permissions=519238" + "\nOr, come to my server with this link:\n" + "https://discord.gg/fqQF8mc"); + } +} + +module.exports = InviteCommand; \ No newline at end of file diff --git a/commands/botinfo/uptime.js b/commands/botinfo/uptime.js new file mode 100644 index 00000000..e5ac7b86 --- /dev/null +++ b/commands/botinfo/uptime.js @@ -0,0 +1,35 @@ +const commando = require('discord.js-commando'); + +class UptimeCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'uptime', + group: 'botinfo', + memberName: 'uptime', + description: 'Displays how long the bot has been active. (;uptime)', + examples: [';uptime'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + const toHHMMSS = seconds => { + let secNum = parseInt(seconds, 10); + let hours = Math.floor(secNum / 3600); + let minutes = Math.floor((secNum - (hours * 3600)) / 60); + seconds = secNum - (hours * 3600) - (minutes * 60); + if (hours < 10) hours = "0" + hours; + if (minutes < 10) minutes = "0" + minutes; + if (seconds < 10) seconds = "0" + seconds; + return hours + ":" + minutes + ":" + seconds; + }; + let guilds = this.client.guilds.array().length; + message.channel.sendMessage("**Uptime: " + toHHMMSS(process.uptime()) + "** in " + guilds + " Servers."); + } +} + +module.exports = UptimeCommand; \ No newline at end of file diff --git a/commands/guildinfo/guildinfo.js b/commands/guildinfo/guildinfo.js new file mode 100644 index 00000000..b8c1f1e4 --- /dev/null +++ b/commands/guildinfo/guildinfo.js @@ -0,0 +1,47 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); + +class GuildInfoCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'server', + group: 'guildinfo', + memberName: 'server', + description: 'Gives some info on the current server. (;server)', + examples: [';server'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + } + console.log("[Command] " + message.content); + if (message.channel.type === 'dm') { + message.reply(":x: This is a DM!"); + } else { + const embed = new Discord.RichEmbed() + .setColor(0x00AE86) + .setThumbnail(message.guild.iconURL) + .addField('**Name:**', + message.guild.name, true) + .addField('**ID:**', + message.guild.id, true) + .addField('**Created On:**', + message.guild.createdAt, true) + .addField('**Default Channel:**', + message.guild.defaultChannel, true) + .addField('**Region:**', + message.guild.region, true) + .addField('**Owner:**', + message.guild.owner.user.username + '#' + message.guild.owner.user.discriminator, true) + .addField("**Users:**", + message.guild.memberCount, true); + message.channel.sendEmbed(embed).catch(console.error); + } + } +} + +module.exports = GuildInfoCommand; \ No newline at end of file diff --git a/commands/moderation/ban.js b/commands/moderation/ban.js new file mode 100644 index 00000000..edceee30 --- /dev/null +++ b/commands/moderation/ban.js @@ -0,0 +1,60 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); + +class BanCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'ban', + group: 'moderation', + memberName: 'ban', + description: 'Bans a user. (;ban @User being a jerk. **Note: You must have a channel called "mod_logs!"**)', + examples: [";ban @User being a jerk. **Note: You must have a channel called 'mod_logs!**"] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('KICK_MEMBERS')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('BAN_MEMBERS')) return; + } + console.log("[Command] " + message.content); + if (message.channel.type === 'dm') { + message.reply(":x: This is a DM!"); + } else { + let username = message.mentions.users.first(); + let member = message.guild.member(message.mentions.users.first()); + let reason = message.content.split(" ").slice(2).join(" "); + if (message.mentions.users.size !== 1) { + message.reply(":x: Either too many or no members, only mention one person!"); + } else { + if(message.member.hasPermission('BAN_MEMBERS')) { + if(member.bannable === true) { + message.channel.sendMessage(":ok_hand:"); + message.guild.member(username).ban(); + if(message.guild.channels.exists("name", "mod_logs")) { + const embed = new Discord.RichEmbed() + .setAuthor(message.author.username + '#' + message.author.discriminator, message.author.avatarURL) + .setColor(0xFF0000) + .setFooter('XiaoBot Moderation', this.client.user.avatarURL) + .setTimestamp() + .addField('Information', + '**Member:** ' + username.username + '#' + username.discriminator + ' (' + username.id + ')\n**Action:** Ban\n**Reason:** ' + reason); + message.guild.channels.find('name', 'mod_logs').sendEmbed(embed).catch(console.error); + } else { + message.reply("**Note: No log will be sent, as there is not a channel named 'mod_logs'. Please create it to use the logging feature.**"); + } + } else { + message.reply(":x: This member cannot be banned!"); + } + } else { + message.channel.sendMessage(":x: You don't have the Ban Members Permission!"); + } + } + } + } +} + +module.exports = BanCommand; \ No newline at end of file diff --git a/commands/moderation/kick.js b/commands/moderation/kick.js new file mode 100644 index 00000000..8c392f85 --- /dev/null +++ b/commands/moderation/kick.js @@ -0,0 +1,60 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); + +class KickCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'kick', + group: 'moderation', + memberName: 'kick', + description: 'Kicks a user. (;kick @User being a jerk **Note: You must have a channel called "mod_logs!"**)', + examples: [";kick @User being a jerk. **Note: You must have a channel called 'mod_logs!**"] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('KICK_MEMBERS')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('BAN_MEMBERS')) return; + } + console.log("[Command] " + message.content); + if (message.channel.type === 'dm') { + message.reply(":x: This is a DM!"); + } else { + let username = message.mentions.users.first(); + let member = message.guild.member(message.mentions.users.first()); + let reason = message.content.split(" ").slice(2).join(" "); + if (message.mentions.users.size !== 1) { + message.reply(":x: Either too many or no members, only mention one person!"); + } else { + if(message.member.hasPermission('KICK_MEMBERS')) { + if(member.kickable === true) { + message.channel.sendMessage(":ok_hand:"); + message.guild.member(username).kick(); + if(message.guild.channels.exists("name", "mod_logs")) { + const embed = new Discord.RichEmbed() + .setAuthor(message.author.username + '#' + message.author.discriminator, message.author.avatarURL) + .setColor(0xFFA500) + .setFooter('XiaoBot Moderation', this.client.user.avatarURL) + .setTimestamp() + .addField('Information', + '**Member:** ' + username.username + '#' + username.discriminator + ' (' + username.id + ')\n**Action:** Kick\n**Reason:** ' + reason); + message.guild.channels.find('name', 'mod_logs').sendEmbed(embed).catch(console.error); + } else { + message.reply("**Note: No log will be sent, as there is not a channel named 'mod_logs'. Please create it to use the logging feature.**"); + } + } else { + message.reply(":x: This member cannot be kicked!"); + } + } else { + message.reply(":x: You don't have the Kick Members Permission!"); + } + } + } + } +} + +module.exports = KickCommand; \ No newline at end of file diff --git a/commands/moderation/warn.js b/commands/moderation/warn.js new file mode 100644 index 00000000..191abdb6 --- /dev/null +++ b/commands/moderation/warn.js @@ -0,0 +1,54 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); + +class WarnCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'warn', + group: 'moderation', + memberName: 'warn', + description: 'Warns a user. (;warn @User being a jerk **Note: You must have a channel called "mod_logs!"**)', + examples: [";warn @User being a jerk. **Note: You must have a channel called 'mod_logs!**"] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('KICK_MEMBERS')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('BAN_MEMBERS')) return; + } + console.log("[Command] " + message.content); + if (message.channel.type === 'dm') { + message.reply(":x: This is a DM!"); + } else { + let username = message.mentions.users.first(); + let reason = message.content.split(" ").slice(2).join(" "); + if (message.mentions.users.size !== 1) { + message.reply(":x: Either too many or no members, only mention one person!"); + } else { + if(message.member.hasPermission('KICK_MEMBERS')) { + message.channel.sendMessage(":ok_hand:"); + if(message.guild.channels.exists("name", "mod_logs")) { + const embed = new Discord.RichEmbed() + .setAuthor(message.author.username + '#' + message.author.discriminator, message.author.avatarURL) + .setColor(0xFFFF00) + .setFooter('XiaoBot Moderation', this.client.user.avatarURL) + .setTimestamp() + .addField('Information', + '**Member:** ' + username.username + '#' + username.discriminator + ' (' + username.id + ')\n**Action:** Warn\n**Reason:** ' + reason); + message.guild.channels.find('name', 'mod_logs').sendEmbed(embed).catch(console.error); + } else { + message.reply("**Note: No log will be sent, as there is not a channel named 'mod_logs'. Please create it to use the logging feature.**"); + } + } else { + message.channel.sendMessage(":x: You don't have the Kick Members Permission!"); + } + } + } + } +} + +module.exports = WarnCommand; \ No newline at end of file diff --git a/commands/pokemon/pkdex.json b/commands/pokemon/pkdex.json new file mode 100644 index 00000000..fa1c3283 --- /dev/null +++ b/commands/pokemon/pkdex.json @@ -0,0 +1,1528 @@ +{ + "dexicon": "http://cdn.bulbagarden.net/upload/thumb/3/36/479Rotom-Pokédex.png/250px-479Rotom-Pokédex.png", + "dexname": "Pokédex", + "name": { + "bulbasaur": "#001 Bulbasaur", + "ivysaur": "#002 Ivysaur", + "venusaur": "#003 Venusaur", + "charmander": "#004 Charmander", + "charmeleon": "#005 Charmeleon", + "charizard": "#006 Charizard", + "squirtle": "#007 Squirtle", + "wartortle": "#008 Wartortle", + "blastoise": "#009 Blastoise", + "caterpie": "#010 Caterpie", + "metapod": "#011 Metapod", + "butterfree": "#012 Butterfree", + "weedle": "#013 Weedle", + "kakuna": "#014 Kakuna", + "beedrill": "#015 Beedrill", + "pidgey": "#016 Pidgey", + "pidgeotto": "#017 Pidgeotto", + "pidgeot": "#018 Pidgeot", + "rattata": "#019 Rattata", + "raticate": "#020 Raticate", + "spearow": "#021 Spearow", + "fearow": "#022 Fearow", + "ekans": "#023 Ekans", + "arbok": "#024 Arbok", + "pikachu": "#025 Pikachu", + "raichu": "#026 Raichu", + "sandshrew": "#027 Sandshrew", + "sandslash": "#028 Sandslash", + "nidoranf": "#029 NidoranF", + "nidorina": "#030 Nidorina", + "nidoqueen": "#031 Nidoqueen", + "nidoranm": "#032 NidoranM", + "nidorino": "#033 Nidorino", + "nidoking": "#034 Nidoking", + "clefairy": "#035 Clefairy", + "clefable": "#036 Clefable", + "vulpix": "#037 Vulpix", + "ninetales": "#038 Ninetales", + "jigglypuff": "#039 Jigglypuff", + "wigglytuff": "#040 Wigglytuff", + "zubat": "#041 Zubat", + "golbat": "#042 Golbat", + "oddish": "#043 Oddish", + "gloom": "#044 Gloom", + "vileplume": "#045 Vileplume", + "paras": "#046 Paras", + "parasect": "#047 Parasect", + "venonat": "#048 Venonat", + "venomoth": "#049 Venomoth", + "diglett": "#050 Diglett", + "dugtrio": "#051 Dugtrio", + "meowth": "#052 Meowth", + "persian": "#053 Persian", + "psyduck": "#054 Psyduck", + "golduck": "#055 Golduck", + "mankey": "#056 Mankey", + "primeape": "#057 Primeape", + "growlithe": "#058 Growlithe", + "arcanine": "#059 Arcanine", + "poliwag": "#060 Poliwag", + "poliwhirl": "#061 Poliwhirl", + "poliwrath": "#062 Poliwrath", + "abra": "#063 Abra", + "kadabra": "#064 Kadabra", + "alakazam": "#065 Alakazam", + "machop": "#066 Machop", + "machoke": "#067 Machoke", + "machamp": "#068 Machamp", + "bellsprout": "#069 Bellsprout", + "weepinbell": "#070 Weepinbell", + "victreebel": "#071 Victreebel", + "tentacool": "#072 Tentacool", + "tentacruel": "#073 Tentacruel", + "geodude": "#074 Geodude", + "graveler": "#075 Graveler", + "golem": "#076 Golem", + "ponyta": "#077 Ponyta", + "rapidash": "#078 Rapidash", + "slowpoke": "#079 Slowpoke", + "slowbro": "#080 Slowbro", + "magnemite": "#081 Magnemite", + "magneton": "#082 Magneton", + "farfetch'd": "#083 Farfetch'd", + "doduo": "#084 Doduo", + "dodrio": "#085 Dodrio", + "seel": "#086 Seel", + "dewgong": "#087 Dewgong", + "grimer": "#088 Grimer", + "muk": "#089 Muk", + "shellder": "#090 Shellder", + "cloyster": "#091 Cloyster", + "gastly": "#092 Gastly", + "haunter": "#093 Haunter", + "gengar": "#094 Gengar", + "onix": "#095 Onix", + "drowzee": "#096 Drowzee", + "hypno": "#097 Hypno", + "krabby": "#098 Krabby", + "kingler": "#099 Kingler", + "voltorb": "#100 Voltorb", + "electrode": "#101 Electrode", + "exeggcute": "#102 Exeggcute", + "exeggutor": "#103 Exeggutor", + "cubone": "#104 Cubone", + "marowak": "#105 Marowak", + "hitmonlee": "#106 Hitmonlee", + "hitmonchan": "#107 Hitmonchan", + "lickitung": "#108 Lickitung", + "koffing": "#109 Koffing", + "weezing": "#110 Weezing", + "rhyhorn": "#111 Rhyhorn", + "rhydon": "#112 Rhydon", + "chansey": "#113 Chansey", + "tangela": "#114 Tangela", + "kangaskhan": "#115 Kangaskhan", + "horsea": "#116 Horsea", + "seadra": "#117 Seadra", + "goldeen": "#118 Goldeen", + "seaking": "#119 Seaking", + "staryu": "#120 Staryu", + "starmie": "#121 Starmie", + "mr. mime": "#122 Mr. Mime", + "scyther": "#123 Scyther", + "jynx": "#124 Jynx", + "electabuzz": "#125 Electabuzz", + "magmar": "#126 Magmar", + "pinsir": "#127 Pinsir", + "tauros": "#128 Tauros", + "magikarp": "#129 Magikarp", + "gyarados": "#130 Gyarados", + "lapras": "#131 Lapras", + "ditto": "#132 Ditto", + "eevee": "#133 Eevee", + "vaporeon": "#134 Vaporeon", + "jolteon": "#135 Jolteon", + "flareon": "#136 Flareon", + "porygon": "#137 Porygon", + "omanyte": "#138 Omanyte", + "omastar": "#139 Omastar", + "kabuto": "#140 Kabuto", + "kabutops": "#141 Kabutops", + "aerodactyl": "#142 Aerodactyl", + "snorlax": "#143 Snorlax", + "articuno": "#144 Articuno", + "zapdos": "#145 Zapdos", + "moltres": "#146 Moltres", + "dratini": "#147 Dratini", + "dragonair": "#148 Dragonair", + "dragonite": "#149 Dragonite", + "mewtwo": "#150 Mewtwo", + "mew": "#151 Mew", + "missingno.": "#??? MISSINGNO.", + "chikorita": "#152 Chikorita", + "bayleef": "#153 Bayleef", + "meganium": "#154 Meganium", + "cyndaquil": "#155 Cyndaquil", + "quilava": "#156 Quilava", + "typhlosion": "#157 Typhlosion", + "totodile": "#158 Totodile", + "croconaw": "#159 Croconaw", + "feraligatr": "#160 Feraligatr", + "sentret": "#161 Sentret", + "furret": "#162 Furret", + "hoothoot": "#163 Hoothoot", + "noctowl": "#164 Noctowl", + "ledyba": "#165 Ledyba", + "ledian": "#166 Ledian", + "spinarak": "#167 Spinarak", + "ariados": "#168 Ariados", + "crobat": "#169 Crobat", + "chinchou": "#170 Chinchou", + "lanturn": "#171 Lanturn", + "pichu": "#172 Pichu", + "cleffa": "#173 Cleffa", + "igglybuff": "#174 Igglybuff", + "togepi": "#175 Togepi", + "togetic": "#176 Togetic", + "natu": "#177 Natu", + "xatu": "#178 Xatu", + "mareep": "#179 Mareep", + "flaaffy": "#180 Flaaffy", + "ampharos": "#181 Ampharos", + "bellossom": "#182 Bellossom", + "marill": "#183 Marill", + "azumarill": "#184 Azumarill", + "sudowoodo": "#185 Sudowoodo", + "politoed": "#186 Politoed", + "hoppip": "#187 Hoppip", + "skiploom": "#188 Skiploom", + "jumpluff": "#189 Jumpluff", + "aipom": "#190 Aipom", + "sunkern": "#191 Sunkern", + "sunflora": "#192 Sunflora", + "yanma": "#193 Yanma", + "wooper": "#194 Wooper", + "quagsire": "#195 Quagsire", + "espeon": "#196 Espeon", + "umbreon": "#197 Umbreon", + "murkrow": "#198 Murkrow", + "slowking": "#199 Slowking", + "misdreavus": "#200 Misdreavus", + "unown": "#201 Unown", + "wobbuffet": "#202 Wobbuffet", + "girafarig": "#203 Girafarig", + "pineco": "#204 Pineco", + "forretress": "#205 Forretress", + "dunsparce": "#206 Dunsparce", + "gligar": "#207 Gligar", + "steelix": "#208 Steelix", + "snubbull": "#209 Snubbull", + "granbull": "#210 Granbull", + "qwilfish": "#211 Qwilfish", + "scizor": "#212 Scizor", + "shuckle": "#213 Shuckle", + "heracross": "#214 Heracross", + "sneasel": "#215 Sneasel", + "teddiursa": "#216 Teddiursa", + "ursaring": "#217 Ursaring", + "slugma": "#218 Slugma", + "magcargo": "#219 Magcargo", + "swinub": "#220 Swinub", + "piloswine": "#221 Piloswine", + "corsola": "#222 Corsola", + "remoraid": "#223 Remoraid", + "octillery": "#224 Octillery", + "delibird": "#225 Delibird", + "mantine": "#226 Mantine", + "skarmory": "#227 Skarmory", + "houndour": "#228 Houndour", + "houndoom": "#229 Houndoom", + "kingdra": "#230 Kingdra", + "phanpy": "#231 Phanpy", + "donphan": "#232 Donphan", + "porygon2": "#233 Porygon2", + "stantler": "#234 Stantler", + "smeargle": "#235 Smeargle", + "tyrogue": "#236 Tyrogue", + "hitmontop": "#237 Hitmontop", + "smoochum": "#238 Smoochum", + "elekid": "#239 Elekid", + "magby": "#240 Magby", + "miltank": "#241 Miltank", + "blissey": "#242 Blissey", + "raikou": "#243 Raikou", + "entei": "#244 Entei", + "suicune": "#245 Suicune", + "larvitar": "#246 Larvitar", + "pupitar": "#247 Pupitar", + "tyranitar": "#248 Tyranitar", + "lugia": "#249 Lugia", + "ho-oh": "#250 Ho-Oh", + "celebi": "#251 Celebi" + }, + "entry": { + "bulbasaur": "A strange seed was planted on its back at birth. The plant sprouts and grows with this Pokémon.", + "ivysaur": "When the bulb on its back grows large, it appears to lose the ability to stand on its hind legs.", + "venusaur": "The plant blooms when it is absorbing solar energy. It stays on the move to seek sunlight.", + "charmander": "Obviously prefers hot places. When it rains, steam is said to spout from the tip of its tail.", + "charmeleon": "When it swings its burning tail, it elevates the temperature to unbearably high levels.", + "charizard": "Spits fire that is hot enough to melt boulders. Known to cause forest fires unintentionally.", + "squirtle": "After birth, its back swells and hardens into a shell. Powerfully sprays foam from its mouth.", + "wartortle": "Often hides in water to stalk unwary prey. For swimming fast, it moves its ears to maintain balance.", + "blastoise": "A brutal Pokémon with pressurized water jets on its shell. They are used for high speed tackles.", + "caterpie": "Its short feet are tipped with suction pads that enable it to tirelessly climb slopes and walls.", + "metapod": "This Pokémon is vulnerable to attack while its shell is soft, exposing its weak and tender body.", + "butterfree": "In battle, it flaps its wings at high speed to release highly toxic dust into the air.", + "weedle": "Often found in forests, eating leaves. It has a sharp venomous stinger on its head.", + "kakuna": "Almost incapable of moving, this Pokémon can only harden its shell to protect itself from predators.", + "beedrill": "Flies at high speed and attacks using its large venomous stingers on its forelegs and tail.", + "pidgey": "A common sight in forests and woods. It flaps its wings at ground level to kick up blinding sand.", + "pidgeotto": "Very protective of its sprawling territorial area, this Pokémon will fiercely peck at any intruder.", + "pidgeot": "When hunting, it skims the surface of water at high speed to pick off unwary prey such as Magikarp.", + "rattata": "Bites anything when it attacks. Small and very quick, it is a common sight in many places.", + "raticate": "It uses its whiskers to maintain its balance. It apparently slows down if they are cut off.", + "spearow": "Eats bugs in grassy areas. It has to flap its short wings at high speed to stay airborne.", + "fearow": "With its huge and magnificent wings, it can keep aloft without ever having to land for rest.", + "ekans": "Moves silently and stealthily. Eats the eggs of birds, such as Pidgey and Spearow, whole.", + "arbok": "It is rumored that the ferocious warning markings on its belly differ from area to area.", + "pikachu": "When several of these Pokémon gather, their electricity could build and cause lightning storms.", + "raichu": "Its long tail serves as a ground to protect itself from its own high voltage power.", + "sandshrew": "Burrows deep underground in arid locations far from water. It only emerges to hunt for food.", + "sandslash": "Curls up into a spiny ball when threatened. It can roll while curled up to attack or escape.", + "nidoranf": "Although small, its venomous barbs render this Pokémon dangerous. The female has smaller horns.", + "nidorina": "The female's horn develops slowly. Prefers physical attacks such as clawing and biting.", + "nidoqueen": "Its hard scales provide strong protection. It uses its hefty bulk to execute powerful moves.", + "nidoranm": "Stiffens its ears to sense danger. The larger its horns, the more powerful its secreted venom.", + "nidorino": "An aggressive Pokémon that is quick to attack. The horn on its head secretes a powerful venom.", + "nidoking": "It uses its powerful tail in battle to smash, constrict, then break the prey's bones.", + "clefairy": "Its magical and cute appeal has many admirers. It is rare and found only in certain areas.", + "clefable": "A timid fairy Pokémon that is rarely seen. It will run and hide the moment it senses people.", + "vulpix": "At the time of birth, it has just one tail. The tail splits from its tip as it grows older.", + "ninetales": "Very smart and very vengeful. Grabbing one of its many tails could result in a 1000-year curse.", + "jigglypuff": "When its huge eyes light up, it sings a mysteriously soothing melody that lulls its enemies to sleep.", + "wigglytuff": "The body is soft and rubbery. When angered, it will suck in air and inflate itself to an enormous size.", + "zubat": "Forms colonies in perpetually dark places. Uses ultrasonic waves to identify and approach targets.", + "golbat": "Once it strikes, it will not stop draining energy from the victim even if it gets too heavy to fly.", + "oddish": "During the day, it keeps its face buried in the ground. At night, it wanders around sowing its seeds.", + "gloom": "The fluid that oozes from its mouth isn't drool. It is a nectar that is used to attract prey.", + "vileplume": "The larger its petals, the more toxic pollen it contains. Its big head is heavy and hard to hold up.", + "paras": "Burrows to suck tree roots. The mushrooms on its back grow by drawing nutrients from the bug host.", + "parasect": "A host-parasite pair in which the parasite mushroom has taken over the host bug. Prefers damp places.", + "venonat": "Lives in the shadows of tall trees where it eats insects. It is attracted by light at night.", + "venomoth": "The dust-like scales covering its wings are color coded to indicate the kinds of poison it has.", + "diglett": "Lives about one yard underground where it feeds on plant roots. It sometimes appears above ground.", + "dugtrio": "A team of Diglett triplets. It triggers huge earthquakes by burrowing 60 miles underground.", + "meowth": "Adores circular objects. Wanders the streets on a nightly basis to look for dropped loose change.", + "persian": "Although its fur has many admirers, it is tough to raise as a pet because of its fickle meanness.", + "psyduck": "While lulling its enemies with its vacant look, this wily Pokémon will use psychokinetic powers.", + "golduck": "Often seen swimming elegantly by lake shores. It is often mistaken for the Japanese monster, Kappa.", + "mankey": "Extremely quick to anger. It could be docile one moment then thrashing away the next instant.", + "primeape": "Always furious and tenacious to boot. It will not abandon chasing its quarry until it is caught.", + "growlithe": "Very protective of its territory. It will bark and bite to repel intruders from its space.", + "arcanine": "A Pokémon that has been admired since the past for its beauty. It runs agilely as if on wings.", + "poliwag": "Its newly grown legs prevent it from running. It appears to prefer swimming than trying to stand.", + "poliwhirl": "Capable of living in or out of water. When out of water, it sweats to keep its body slimy.", + "poliwrath": "An adept swimmer at both the front crawl and breast stroke. Easily overtakes the best human swimmers.", + "abra": "Using its ability to read minds, it will identify impending danger and Teleport to safety.", + "kadabra": "It emits special alpha waves from its body that induce headaches just by being close by.", + "alakazam": "Its brain can outperform a super-computer. Its intelligence quotient is said to be 5,000.", + "machop": "Loves to build its muscles. It trains in all styles of martial arts to become even stronger.", + "machoke": "Its muscular body is so powerful, it must wear a power save belt to be able to regulate its motions.", + "machamp": "Using its heavy muscles, it throws powerful punches that can send the victim clear over the horizon.", + "bellsprout": "A carnivorous Pokémon that traps and eats bugs. It uses its root feet to soak up needed moisture.", + "weepinbell": "It spits out PoisonPowder to immobilize the enemy and then finishes it with a spray of Acid.", + "victreebel": "Said to live in huge colonies deep in jungles, although no one has ever returned from there.", + "tentacool": "Drifts in shallow seas. Anglers who hook them by accident are often punished by its stinging acid.", + "tentacruel": "The tentacles are normally kept short. On hunts, they are extended to ensnare and immobilize prey.", + "geodude": "Found in fields and mountains. Mistaking them for boulders, people often step or trip on them.", + "graveler": "Rolls down slopes to move. It rolls over any obstacle without slowing or changing its direction.", + "golem": "Its boulder-like body is extremely hard. It can easily withstand dynamite blasts without damage.", + "ponyta": "Its hooves are 10 times harder than diamonds. It can trample anything completely flat in little time.", + "rapidash": "Very competitive, this Pokémon will chase anything that moves fast in the hopes of racing it.", + "slowpoke": "Incredibly slow and dopey. It takes 5 seconds for it to feel pain when under attack.", + "slowbro": "The Shellder that is latched onto Slowpoke's tail is said to feed on the host's left over scraps.", + "magnemite": "Uses anti-gravity to stay suspended. Appears without warning and uses Thunder Wave and similar moves.", + "magneton": "Formed by several Magnemites linked together. They frequently appear when sunspots flare up.", + "farfetch'd": "The sprig of green onions it holds is its weapon. It is used much like a metal sword.", + "doduo": "A bird that makes up for its poor flying with its fast foot speed. Leaves giant footprints.", + "dodrio": "Uses its three brains to execute complex plans. While two heads sleep, one head stays awake.", + "seel": "The protruding horn on its head is very hard. It is used for bashing through thick ice.", + "dewgong": "Stores thermal energy in its body. Swims at a steady 8 knots even in intensely cold waters.", + "grimer": "Appears in filthy areas. Thrives by sucking up polluted sludge that is pumped out of factories.", + "muk": "Thickly covered with a filthy, vile sludge. It is so toxic, even its footprints contain poison.", + "shellder": "Its hard shell repels any kind of attack. It is vulnerable only when its shell is open.", + "cloyster": "When attacked, it launches its horns in quick volleys. Its innards have never been seen.", + "gastly": "Almost invisible, this gaseous Pokémon cloaks the target and puts it to sleep without notice.", + "haunter": "Because of its ability to slip through block walls, it is said to be from another dimension.", + "gengar": "Under a full moon, this Pokémon likes to mimic the shadows of people and laugh at their fright.", + "onix": "As it grows, the stone portions of its body harden to become similar to a diamond, but colored black.", + "drowzee": "Puts enemies to sleep then eats their dreams. Occasionally gets sick from eating bad dreams.", + "hypno": "When it locks eyes with an enemy, it will use a mix of PSI moves such as Hypnosis and Confusion.", + "krabby": "Its pincers are not only powerful weapons, they are used for balance when walking sideways.", + "kingler": "The large pincer has 10000 hp of crushing power. However, its huge size makes it unwieldy to use.", + "voltorb": "Usually found in power plants. Easily mistaken for a Poké Ball, they have zapped many people.", + "electrode": "It stores electric energy under very high pressure. It often explodes with little or no provocation.", + "exeggcute": "Often mistaken for eggs. When disturbed, they quickly gather and attack in swarms.", + "exeggutor": "Legend has it that on rare occasions, one of its heads will drop off and continue on as an Exeggcute.", + "cubone": "Because it never removes its skull helmet, no one has ever seen this Pokémon's real face.", + "marowak": "The bone it holds is its key weapon. It throws the bone skillfully like a boomerang to KO targets.", + "hitmonlee": "When in a hurry, its legs lengthen progressively. It runs smoothly with extra long, loping strides.", + "hitmonchan": "While apparently doing nothing, it fires punches in lightning fast volleys that are impossible to see.", + "lickitung": "Its tongue can be extended like a chameleon's. It leaves a tingling sensation when it licks enemies.", + "koffing": "Because it stores several kinds of toxic gases in its body, it is prone to exploding without warning.", + "weezing": "Where two kinds of poison gases meet, 2 Koffings can fuse into a Weezing over many years.", + "rhyhorn": "Its massive bones are 1000 times harder than human bones. It can easily knock a trailer flying.", + "rhydon": "Protected by an armor-like hide, it is capable of living in molten lava of 3,600 degrees.", + "chansey": "A rare and elusive Pokémon that is said to bring happiness to those who manage to get it.", + "tangela": "The whole body is swathed with wide vines that are similar to seaweed. Its vines shake as it walks.", + "kangaskhan": "The infant rarely ventures out of its mother's protective pouch until it is 3 years old.", + "horsea": "Known to shoot down flying bugs with precision blasts of ink from the surface of the water.", + "seadra": "Capable of swimming backwards by rapidly flapping its wing-like pectoral fins and stout tail.", + "goldeen": "Its tail fin billows like an elegant ballroom dress, giving it the nickname of the Water Queen.", + "seaking": "In the autumn spawning season, they can be seen swimming powerfully up rivers and creeks.", + "staryu": "An enigmatic Pokémon that can effortlessly regenerate any appendage it loses in battle.", + "starmie": "Its central core glows with the seven colors of the rainbow. Some people value the core as a gem.", + "mr. mime": "If interrupted while it is miming, it will slap around the offender with its broad hands.", + "scyther": "With ninja-like agility and speed, it can create the illusion that there is more than one.", + "jynx": "It seductively wiggles its hips as it walks. It can cause people to dance in unison with it.", + "electabuzz": "Normally found near power plants, they can wander away and cause major blackouts in cities.", + "magmar": "Its body always burns with an orange glow that enables it to hide perfectly among flames.", + "pinsir": "If it fails to crush the victim in its pincers, it will swing it around and toss it hard.", + "tauros": "When it targets an enemy, it charges furiously while whipping its body with its long tails.", + "magikarp": "In the distant past, it was somewhat stronger than the horribly weak descendants that exist today.", + "gyarados": "Rarely seen in the wild. Huge and vicious, it is capable of destroying entire cities in a rage.", + "lapras": "A Pokémon that has been overhunted almost to extinction. It can ferry people across the water.", + "ditto": "Capable of copying an enemy's genetic code to instantly transform itself into a duplicate of the enemy.", + "eevee": "Its genetic code is irregular. It may mutate if it is exposed to radiation from element Stones.", + "vaporeon": "Lives close to water. Its long tail is ridged with a fin which is often mistaken for a mermaid's.", + "jolteon": "It accumulates negative ions in the atmosphere to blast out 10000-volt lightning bolts.", + "flareon": "When storing thermal energy in its body, its temperature could soar to over 1600 degrees.", + "porygon": "A Pokémon that consists entirely of programming code. Capable of moving freely in cyberspace.", + "omanyte": "Although long extinct, in rare cases, it can be genetically resurrected from fossils.", + "omastar": "A prehistoric Pokémon that died out when its heavy shell made it impossible to catch prey.", + "kabuto": "A Pokémon that was resurrected from a fossil found in what was once the ocean floor eons ago.", + "kabutops": "Its sleek shape is perfect for swimming. It slashes prey with its claws and drains the body fluids.", + "aerodactyl": "A ferocious, prehistoric Pokémon that goes for the enemy's throat with its serrated saw-like fangs.", + "snorlax": "Very lazy. Just eats and sleeps. As its rotund bulk builds, it becomes steadily more slothful.", + "articuno": "A legendary bird Pokémon that is said to appear to doomed people who are lost in icy mountains.", + "zapdos": "A legendary bird Pokémon that is said to appear from clouds while dropping enormous lightning bolts.", + "moltres": "Known as the legendary bird of fire. Every flap of its wings creates a dazzling flash of flames.", + "dratini": "Long considered a mythical Pokémon until recently when a small colony was found living underwater.", + "dragonair": "A mystical Pokémon that exudes a gentle aura. Has the ability to change climate conditions.", + "dragonite": "An extremely rarely seen marine Pokémon. Its intelligence is said to match that of humans.", + "mewtwo": "It was created by a scientist after years of horrific gene splicing and DNA engineering experiments.", + "mew": "So rare that it is still said to be a mirage by many experts. Only a few people have seen it worldwide.", + "missingno.": "コメント さくせいちゅう", + "chikorita": "A sweet aroma gently wafts from the leaf on its head. It is docile and loves to soak up the sun's rays.", + "bayleef": "The scent of spices comes from around its neck. Somehow, sniffing it makes you want to fight.", + "meganium": "The aroma that rises from its petals contains a substance that calms aggressive feelings.", + "cyndaquil": "It is timid, and always curls itself up in a ball. If attacked, it flares up its back for protection.", + "quilava": "Be careful if it turns its back during battle. It means that it will attack with the fire on its back.", + "typhlosion": "If its rage peaks, it becomes so hot that anything that touches it will instantly go up in flames.", + "totodile": "Its well-developed jaws are powerful and capable of crushing anything. Even its trainer must be careful.", + "croconaw": "If it loses a fang, a new one grows back in its place. There are always 48 fangs lining its mouth.", + "feraligatr": "When it bites with its massive and powerful jaws, it shakes its head and savagely tears its victim up.", + "sentret": "A very cautious Pokémon, it raises itself up using its tail to get a better view of its surroundings.", + "furret": "It makes a nest to suit its long and skinny body. The nest is impossible for other Pokémon to enter.", + "hoothoot": "It always stands on one foot. It changes feet so fast, the movement can rarely be seen.", + "noctowl": "Its eyes are specially adapted. They concentrate even faint light and enable it to see in the dark.", + "ledyba": "It is very timid. It will be afraid to move if it is alone. But it will be active if it is in a group.", + "ledian": "When the stars flicker in the night sky, it flutters about, scattering a glowing powder.", + "spinarak": "It lies still in the same pose for days in its web, waiting for its unsuspecting prey to wander close.", + "ariados": "It spins string not only from its rear but also from its mouth. It is hard to tell which end is which.", + "crobat": "It flies so silently through the dark on its four wings that it may not be noticed even when nearby.", + "chinchou": "It shoots positive and negative electricity between the tips of its two antennae and zaps its enemies.", + "lanturn": "The light it emits is so bright that it can illuminate the sea's surface from a depth of over three miles.", + "pichu": "It is not yet skilled at storing electricity. It may send out a jolt if amused or startled.", + "cleffa": "Because of its unusual, star-like silhouette, people believe that it came here on a meteor.", + "igglybuff": "It has a very soft body. If it starts to roll, it will bounce all over and be impossible to stop.", + "togepi": "The shell seems to be filled with joy. It is said that it will share good luck when treated kindly.", + "togetic": "They say that it will appear before kindhearted, caring people and shower them with happiness.", + "natu": "Because its wings aren't yet fully grown, it has to hop to get around. It is always staring at something.", + "xatu": "They say that it stays still and quiet because it is seeing both the past and future at the same time.", + "mareep": "If static electricity builds in its body, its fleece doubles in volume. Touching it will shock you.", + "flaaffy": "As a result of storing too much electricity, it developed patches where even downy wool won't grow.", + "ampharos": "The tail's tip shines brightly and can be seen from far away. It acts as a beacon for lost people.", + "bellossom": "Bellossom gather at times and appear to dance. They say that the dance is a ritual to summon the sun.", + "marill": "The tip of its tail, which contains oil that is lighter than water, lets it swim without drowning.", + "azumarill": "By keeping still and listening intently, it can tell what is in even wild, fast-moving rivers.", + "sudowoodo": "Although it always pretends to be a tree, its composition appears to be closer to a rock than a plant.", + "politoed": "If Poliwag and Poliwhirl hear its echoing cry, they respond by gathering from far and wide.", + "hoppip": "To keep from being blown away by the wind, they gather in clusters. They do enjoy gentle breezes, though.", + "skiploom": "The bloom on top of its head opens and closes as the temperature fluctuates up and down.", + "jumpluff": "Once it catches the wind, it deftly controls its cotton-puff spores to float, even around the world.", + "aipom": "Its tail is so powerful that it can use it to grab a tree branch and hold itself up in the air.", + "sunkern": "It may drop out of the sky suddenly. If attacked by a Spearow, it will violently shake its leaves.", + "sunflora": "It converts sunlight into energy. In the darkness after sunset, it closes its petals and becomes still.", + "yanma": "If it flaps its wings really fast, it can generate shock waves that will shatter windows in the area.", + "wooper": "This Pokémon lives in cold water. It will leave the water to search for food when it gets cold outside.", + "quagsire": "This carefree Pokémon has an easy-going nature. While swimming, it always bumps into boat hulls.", + "espeon": "It uses the fine hair that covers its body to sense air currents and predict its enemy's actions.", + "umbreon": "When agitated, this Pokémon protects itself by spraying poisonous sweat from its pores.", + "murkrow": "Feared and loathed by many, it is believed to bring misfortune to all those who see it at night.", + "slowking": "It has incredible intellect and intuition. Whatever the situation, it remains calm and collected.", + "misdreavus": "It likes playing mischievous tricks such as screaming and wailing to startle people at night.", + "unown": "Their shapes look like hieroglyphs on ancient tablets. It is said that the two are somehow related.", + "wobbuffet": "It hates light and shock. If attacked, it inflates its body to pump up its counterstrike.", + "girafarig": "Its tail has a small brain of its own. Beware! If you get close, it may react to your scent and bite.", + "pineco": "It likes to make its shell thicker by adding layers of tree bark. The additional weight doesn't bother it.", + "forretress": "Its entire body is shielded by a steel-hard shell. What lurks inside the armor is a total mystery.", + "dunsparce": "When spotted, this Pokémon escapes backward by furiously boring into the ground with its tail.", + "gligar": "It flies straight at its target's face then clamps down on the startled victim to inject poison.", + "steelix": "Its body has been compressed deep under the ground. As a result, it is even harder than a diamond.", + "snubbull": "Although it looks frightening, it is actually kind and affectionate. It is very popular among women.", + "granbull": "It is actually timid and easily spooked. If attacked, it flails about to fend off its attacker.", + "qwilfish": "To fire its poison spikes, it must inflate its body by drinking over 2.6 gallons of water all at once.", + "scizor": "It swings its eye-patterned pincers up to scare its foes. This makes it look like it has three heads.", + "shuckle": "The Berries it stores in its vase-like shell decompose and become a gooey liquid.", + "heracross": "This powerful Pokémon thrusts its prized horn under its enemies' bellies then lifts and throws them.", + "sneasel": "Its paws conceal sharp claws. If attacked, it suddenly extends the claws and startles its enemy.", + "teddiursa": "If it finds honey, its crescent mark glows. It always licks its paws because they are soaked with honey.", + "ursaring": "Although it is a good climber, it prefers to snap trees with its forelegs and eat fallen Berries.", + "slugma": "It never sleeps. It has to keep moving because if it stopped, its magma body would cool and harden.", + "magcargo": "The shell on its back is just skin that has cooled and hardened. It breaks easily with a slight touch.", + "swinub": "It rubs its snout on the ground to find and dig up food. It sometimes discovers hot springs.", + "piloswine": "Because the long hair all over its body obscures its sight, it just keeps charging repeatedly.", + "corsola": "It continuously sheds and grows. The tip of its head is prized as a treasure for its beauty.", + "remoraid": "It has superb accuracy. The water it shoots out can strike even moving prey from more than 300 feet.", + "octillery": "It traps enemies with its suction-cupped tentacles then smashes them with its rock-hard head.", + "delibird": "It carries food all day long. There are tales about lost people who were saved by the food it had.", + "mantine": "As it majestically swims, it doesn't care if Remoraid attach to it for scavenging its leftovers.", + "skarmory": "Its sturdy wings look heavy, but they are actually hollow and light, allowing it to fly freely in the sky.", + "houndour": "It uses different kinds of cries for communicating with others of its kind and for pursuing its prey.", + "houndoom": "If you are burned by the flames it shoots from its mouth, the pain will never go away.", + "kingdra": "It is said that it usually hides in underwater caves. It can create whirlpools by yawning.", + "phanpy": "It swings its long snout around playfully, but because it is so strong, that can be dangerous.", + "donphan": "It has sharp, hard tusks and a rugged hide. Its Tackle is strong enough to knock down a house.", + "porygon2": "This upgraded version of Porygon is designed for space exploration. It can't fly, though.", + "stantler": "The curved antlers subtly change the flow of air to create a strange space where reality is distorted.", + "smeargle": "A special fluid oozes from the tip of its tail. It paints the fluid everywhere to mark its territory.", + "tyrogue": "It is always bursting with energy. To make itself stronger, it keeps on fighting even if it loses.", + "hitmontop": "If you become enchanted by its smooth, elegant, dance-like kicks, you may get drilled hard.", + "smoochum": "Its lips are the most sensitive parts on its body. It always uses its lips first to examine things.", + "elekid": "It rotates its arms to generate electricity, but it tires easily, so it charges up only a little bit.", + "magby": "Each and every time it inhales and exhales, hot embers dribble out of its mouth and nostrils.", + "miltank": "Its milk is packed with nutrition, making it the ultimate beverage for the sick or weary.", + "blissey": "Anyone who takes even one bite of Blissey's egg becomes unfailingly caring and pleasant to everyone.", + "raikou": "The rain clouds it carries let it fire thunderbolts at will. They say that it descended with lightning.", + "entei": "Volcanoes erupt when it barks. Unable to restrain its extreme power, it races headlong around the land.", + "suicune": "Said to be the reincarnation of north winds, it can instantly purify filthy, murky water.", + "larvitar": "It feeds on soil. After it has eaten a large mountain, it will fall asleep so it can grow.", + "pupitar": "Its shell is as hard as sheet rock, and it is also very strong. Its Thrashing can topple a mountain.", + "tyranitar": "Its body can't be harmed by any sort of attack, so it is very eager to make challenges against enemies.", + "lugia": "It is said that it quietly spends its time deep at the bottom of the sea because its powers are too strong.", + "ho-oh": "Legends claim this Pokémon flies the world's skies continuously on its magnificent seven-colored wings.", + "celebi": "This Pokémon wanders across time. Grass and trees flourish in the forests in which it has appeared." + }, + "sprite": { + "bulbasaur": "http://www.serebii.net/pokedex-sm/icon/001.png", + "ivysaur": "http://www.serebii.net/pokedex-sm/icon/002.png", + "venusaur": "http://www.serebii.net/pokedex-sm/icon/003.png", + "charmander": "http://www.serebii.net/pokedex-sm/icon/004.png", + "charmeleon": "http://www.serebii.net/pokedex-sm/icon/005.png", + "charizard": "http://www.serebii.net/pokedex-sm/icon/006.png", + "squirtle": "http://www.serebii.net/pokedex-sm/icon/007.png", + "wartortle": "http://www.serebii.net/pokedex-sm/icon/008.png", + "blastoise": "http://www.serebii.net/pokedex-sm/icon/009.png", + "caterpie": "http://www.serebii.net/pokedex-sm/icon/010.png", + "metapod": "http://www.serebii.net/pokedex-sm/icon/011.png", + "butterfree": "http://www.serebii.net/pokedex-sm/icon/012.png", + "weedle": "http://www.serebii.net/pokedex-sm/icon/013.png", + "kakuna": "http://www.serebii.net/pokedex-sm/icon/014.png", + "beedrill": "http://www.serebii.net/pokedex-sm/icon/015.png", + "pidgey": "http://www.serebii.net/pokedex-sm/icon/016.png", + "pidgeotto": "http://www.serebii.net/pokedex-sm/icon/017.png", + "pidgeot": "http://www.serebii.net/pokedex-sm/icon/018.png", + "rattata": "http://www.serebii.net/pokedex-sm/icon/019.png", + "raticate": "http://www.serebii.net/pokedex-sm/icon/020.png", + "spearow": "http://www.serebii.net/pokedex-sm/icon/021.png", + "fearow": "http://www.serebii.net/pokedex-sm/icon/022.png", + "ekans": "http://www.serebii.net/pokedex-sm/icon/023.png", + "arbok": "http://www.serebii.net/pokedex-sm/icon/024.png", + "pikachu": "http://www.serebii.net/pokedex-sm/icon/025.png", + "raichu": "http://www.serebii.net/pokedex-sm/icon/026.png", + "sandshrew": "http://www.serebii.net/pokedex-sm/icon/027.png", + "sandslash": "http://www.serebii.net/pokedex-sm/icon/028.png", + "nidoranf": "http://www.serebii.net/pokedex-sm/icon/029.png", + "nidorina": "http://www.serebii.net/pokedex-sm/icon/030.png", + "nidoqueen": "http://www.serebii.net/pokedex-sm/icon/031.png", + "nidoranm": "http://www.serebii.net/pokedex-sm/icon/032.png", + "nidorino": "http://www.serebii.net/pokedex-sm/icon/033.png", + "nidoking": "http://www.serebii.net/pokedex-sm/icon/034.png", + "clefairy": "http://www.serebii.net/pokedex-sm/icon/035.png", + "clefable": "http://www.serebii.net/pokedex-sm/icon/036.png", + "vulpix": "http://www.serebii.net/pokedex-sm/icon/037.png", + "ninetales": "http://www.serebii.net/pokedex-sm/icon/038.png", + "jigglypuff": "http://www.serebii.net/pokedex-sm/icon/039.png", + "wigglytuff": "http://www.serebii.net/pokedex-sm/icon/040.png", + "zubat": "http://www.serebii.net/pokedex-sm/icon/041.png", + "golbat": "http://www.serebii.net/pokedex-sm/icon/042.png", + "oddish": "http://www.serebii.net/pokedex-sm/icon/043.png", + "gloom": "http://www.serebii.net/pokedex-sm/icon/044.png", + "vileplume": "http://www.serebii.net/pokedex-sm/icon/045.png", + "paras": "http://www.serebii.net/pokedex-sm/icon/046.png", + "parasect": "http://www.serebii.net/pokedex-sm/icon/047.png", + "venonat": "http://www.serebii.net/pokedex-sm/icon/048.png", + "venomoth": "http://www.serebii.net/pokedex-sm/icon/049.png", + "diglett": "http://www.serebii.net/pokedex-sm/icon/050.png", + "dugtrio": "http://www.serebii.net/pokedex-sm/icon/051.png", + "meowth": "http://www.serebii.net/pokedex-sm/icon/052.png", + "persian": "http://www.serebii.net/pokedex-sm/icon/053.png", + "psyduck": "http://www.serebii.net/pokedex-sm/icon/054.png", + "golduck": "http://www.serebii.net/pokedex-sm/icon/055.png", + "mankey": "http://www.serebii.net/pokedex-sm/icon/056.png", + "primeape": "http://www.serebii.net/pokedex-sm/icon/057.png", + "growlithe": "http://www.serebii.net/pokedex-sm/icon/058.png", + "arcanine": "http://www.serebii.net/pokedex-sm/icon/059.png", + "poliwag": "http://www.serebii.net/pokedex-sm/icon/060.png", + "poliwhirl": "http://www.serebii.net/pokedex-sm/icon/061.png", + "poliwrath": "http://www.serebii.net/pokedex-sm/icon/062.png", + "abra": "http://www.serebii.net/pokedex-sm/icon/063.png", + "kadabra": "http://www.serebii.net/pokedex-sm/icon/064.png", + "alakazam": "http://www.serebii.net/pokedex-sm/icon/065.png", + "machop": "http://www.serebii.net/pokedex-sm/icon/066.png", + "machoke": "http://www.serebii.net/pokedex-sm/icon/067.png", + "machamp": "http://www.serebii.net/pokedex-sm/icon/068.png", + "bellsprout": "http://www.serebii.net/pokedex-sm/icon/069.png", + "weepinbell": "http://www.serebii.net/pokedex-sm/icon/070.png", + "victreebel": "http://www.serebii.net/pokedex-sm/icon/071.png", + "tentacool": "http://www.serebii.net/pokedex-sm/icon/072.png", + "tentacruel": "http://www.serebii.net/pokedex-sm/icon/073.png", + "geodude": "http://www.serebii.net/pokedex-sm/icon/074.png", + "graveler": "http://www.serebii.net/pokedex-sm/icon/075.png", + "golem": "http://www.serebii.net/pokedex-sm/icon/076.png", + "ponyta": "http://www.serebii.net/pokedex-sm/icon/077.png", + "rapidash": "http://www.serebii.net/pokedex-sm/icon/078.png", + "slowpoke": "http://www.serebii.net/pokedex-sm/icon/079.png", + "slowbro": "http://www.serebii.net/pokedex-sm/icon/080.png", + "magnemite": "http://www.serebii.net/pokedex-sm/icon/081.png", + "magneton": "http://www.serebii.net/pokedex-sm/icon/082.png", + "farfetch'd": "http://www.serebii.net/pokedex-sm/icon/083.png", + "doduo": "http://www.serebii.net/pokedex-sm/icon/084.png", + "dodrio": "http://www.serebii.net/pokedex-sm/icon/085.png", + "seel": "http://www.serebii.net/pokedex-sm/icon/086.png", + "dewgong": "http://www.serebii.net/pokedex-sm/icon/087.png", + "grimer": "http://www.serebii.net/pokedex-sm/icon/088.png", + "muk": "http://www.serebii.net/pokedex-sm/icon/089.png", + "shellder": "http://www.serebii.net/pokedex-sm/icon/090.png", + "cloyster": "http://www.serebii.net/pokedex-sm/icon/091.png", + "gastly": "http://www.serebii.net/pokedex-sm/icon/092.png", + "haunter": "http://www.serebii.net/pokedex-sm/icon/093.png", + "gengar": "http://www.serebii.net/pokedex-sm/icon/094.png", + "onix": "http://www.serebii.net/pokedex-sm/icon/095.png", + "drowzee": "http://www.serebii.net/pokedex-sm/icon/096.png", + "hypno": "http://www.serebii.net/pokedex-sm/icon/097.png", + "krabby": "http://www.serebii.net/pokedex-sm/icon/098.png", + "kingler": "http://www.serebii.net/pokedex-sm/icon/099.png", + "voltorb": "http://www.serebii.net/pokedex-sm/icon/100.png", + "electrode": "http://www.serebii.net/pokedex-sm/icon/101.png", + "exeggcute": "http://www.serebii.net/pokedex-sm/icon/102.png", + "exeggutor": "http://www.serebii.net/pokedex-sm/icon/103.png", + "cubone": "http://www.serebii.net/pokedex-sm/icon/104.png", + "marowak": "http://www.serebii.net/pokedex-sm/icon/105.png", + "hitmonlee": "http://www.serebii.net/pokedex-sm/icon/106.png", + "hitmonchan": "http://www.serebii.net/pokedex-sm/icon/107.png", + "lickitung": "http://www.serebii.net/pokedex-sm/icon/108.png", + "koffing": "http://www.serebii.net/pokedex-sm/icon/109.png", + "weezing": "http://www.serebii.net/pokedex-sm/icon/110.png", + "rhyhorn": "http://www.serebii.net/pokedex-sm/icon/111.png", + "rhydon": "http://www.serebii.net/pokedex-sm/icon/112.png", + "chansey": "http://www.serebii.net/pokedex-sm/icon/113.png", + "tangela": "http://www.serebii.net/pokedex-sm/icon/114.png", + "kangaskhan": "http://www.serebii.net/pokedex-sm/icon/115.png", + "horsea": "http://www.serebii.net/pokedex-sm/icon/116.png", + "seadra": "http://www.serebii.net/pokedex-sm/icon/117.png", + "goldeen": "http://www.serebii.net/pokedex-sm/icon/118.png", + "seaking": "http://www.serebii.net/pokedex-sm/icon/119.png", + "staryu": "http://www.serebii.net/pokedex-sm/icon/120.png", + "starmie": "http://www.serebii.net/pokedex-sm/icon/121.png", + "mr. mime": "http://www.serebii.net/pokedex-sm/icon/122.png", + "scyther": "http://www.serebii.net/pokedex-sm/icon/123.png", + "jynx": "http://www.serebii.net/pokedex-sm/icon/124.png", + "electabuzz": "http://www.serebii.net/pokedex-sm/icon/125.png", + "magmar": "http://www.serebii.net/pokedex-sm/icon/126.png", + "pinsir": "http://www.serebii.net/pokedex-sm/icon/127.png", + "tauros": "http://www.serebii.net/pokedex-sm/icon/128.png", + "magikarp": "http://www.serebii.net/pokedex-sm/icon/129.png", + "gyarados": "http://www.serebii.net/pokedex-sm/icon/130.png", + "lapras": "http://www.serebii.net/pokedex-sm/icon/131.png", + "ditto": "http://www.serebii.net/pokedex-sm/icon/132.png", + "eevee": "http://www.serebii.net/pokedex-sm/icon/133.png", + "vaporeon": "http://www.serebii.net/pokedex-sm/icon/134.png", + "jolteon": "http://www.serebii.net/pokedex-sm/icon/135.png", + "flareon": "http://www.serebii.net/pokedex-sm/icon/136.png", + "porygon": "http://www.serebii.net/pokedex-sm/icon/137.png", + "omanyte": "http://www.serebii.net/pokedex-sm/icon/138.png", + "omastar": "http://www.serebii.net/pokedex-sm/icon/139.png", + "kabuto": "http://www.serebii.net/pokedex-sm/icon/140.png", + "kabutops": "http://www.serebii.net/pokedex-sm/icon/141.png", + "aerodactyl": "http://www.serebii.net/pokedex-sm/icon/142.png", + "snorlax": "http://www.serebii.net/pokedex-sm/icon/143.png", + "articuno": "http://www.serebii.net/pokedex-sm/icon/144.png", + "zapdos": "http://www.serebii.net/pokedex-sm/icon/145.png", + "moltres": "http://www.serebii.net/pokedex-sm/icon/146.png", + "dratini": "http://www.serebii.net/pokedex-sm/icon/147.png", + "dragonair": "http://www.serebii.net/pokedex-sm/icon/148.png", + "dragonite": "http://www.serebii.net/pokedex-sm/icon/149.png", + "mewtwo": "http://www.serebii.net/pokedex-sm/icon/150.png", + "mew": "http://www.serebii.net/pokedex-sm/icon/151.png", + "missingno.": "http://cdn.bulbagarden.net/upload/1/1f/AniMS_Missingno_I.png", + "chikorita": "http://www.serebii.net/pokedex-sm/icon/152.png", + "bayleef": "http://www.serebii.net/pokedex-sm/icon/153.png", + "meganium": "http://www.serebii.net/pokedex-sm/icon/154.png", + "cyndaquil": "http://www.serebii.net/pokedex-sm/icon/155.png", + "quilava": "http://www.serebii.net/pokedex-sm/icon/156.png", + "typhlosion": "http://www.serebii.net/pokedex-sm/icon/157.png", + "totodile": "http://www.serebii.net/pokedex-sm/icon/158.png", + "croconaw": "http://www.serebii.net/pokedex-sm/icon/159.png", + "feraligatr": "http://www.serebii.net/pokedex-sm/icon/160.png", + "sentret": "http://www.serebii.net/pokedex-sm/icon/161.png", + "furret": "http://www.serebii.net/pokedex-sm/icon/162.png", + "hoothoot": "http://www.serebii.net/pokedex-sm/icon/163.png", + "noctowl": "http://www.serebii.net/pokedex-sm/icon/164.png", + "ledyba": "http://www.serebii.net/pokedex-sm/icon/165.png", + "ledian": "http://www.serebii.net/pokedex-sm/icon/166.png", + "spinarak": "http://www.serebii.net/pokedex-sm/icon/167.png", + "ariados": "http://www.serebii.net/pokedex-sm/icon/168.png", + "crobat": "http://www.serebii.net/pokedex-sm/icon/169.png", + "chinchou": "http://www.serebii.net/pokedex-sm/icon/170.png", + "lanturn": "http://www.serebii.net/pokedex-sm/icon/171.png", + "pichu": "http://www.serebii.net/pokedex-sm/icon/172.png", + "cleffa": "http://www.serebii.net/pokedex-sm/icon/173.png", + "igglybuff": "http://www.serebii.net/pokedex-sm/icon/174.png", + "togepi": "http://www.serebii.net/pokedex-sm/icon/175.png", + "togetic": "http://www.serebii.net/pokedex-sm/icon/176.png", + "natu": "http://www.serebii.net/pokedex-sm/icon/177.png", + "xatu": "http://www.serebii.net/pokedex-sm/icon/178.png", + "mareep": "http://www.serebii.net/pokedex-sm/icon/179.png", + "flaaffy": "http://www.serebii.net/pokedex-sm/icon/180.png", + "ampharos": "http://www.serebii.net/pokedex-sm/icon/181.png", + "bellossom": "http://www.serebii.net/pokedex-sm/icon/182.png", + "marill": "http://www.serebii.net/pokedex-sm/icon/183.png", + "azumarill": "http://www.serebii.net/pokedex-sm/icon/184.png", + "sudowoodo": "http://www.serebii.net/pokedex-sm/icon/185.png", + "politoed": "http://www.serebii.net/pokedex-sm/icon/186.png", + "hoppip": "http://www.serebii.net/pokedex-sm/icon/187.png", + "skiploom": "http://www.serebii.net/pokedex-sm/icon/188.png", + "jumpluff": "http://www.serebii.net/pokedex-sm/icon/189.png", + "aipom": "http://www.serebii.net/pokedex-sm/icon/190.png", + "sunkern": "http://www.serebii.net/pokedex-sm/icon/191.png", + "sunflora": "http://www.serebii.net/pokedex-sm/icon/192.png", + "yanma": "http://www.serebii.net/pokedex-sm/icon/193.png", + "wooper": "http://www.serebii.net/pokedex-sm/icon/194.png", + "quagsire": "http://www.serebii.net/pokedex-sm/icon/195.png", + "espeon": "http://www.serebii.net/pokedex-sm/icon/196.png", + "umbreon": "http://www.serebii.net/pokedex-sm/icon/197.png", + "murkrow": "http://www.serebii.net/pokedex-sm/icon/198.png", + "slowking": "http://www.serebii.net/pokedex-sm/icon/199.png", + "misdreavus": "http://www.serebii.net/pokedex-sm/icon/200.png", + "unown": "http://www.serebii.net/pokedex-sm/icon/201.png", + "wobbuffet": "http://www.serebii.net/pokedex-sm/icon/202.png", + "girafarig": "http://www.serebii.net/pokedex-sm/icon/203.png", + "pineco": "http://www.serebii.net/pokedex-sm/icon/204.png", + "forretress": "http://www.serebii.net/pokedex-sm/icon/205.png", + "dunsparce": "http://www.serebii.net/pokedex-sm/icon/206.png", + "gligar": "http://www.serebii.net/pokedex-sm/icon/207.png", + "steelix": "http://www.serebii.net/pokedex-sm/icon/208.png", + "snubbull": "http://www.serebii.net/pokedex-sm/icon/209.png", + "granbull": "http://www.serebii.net/pokedex-sm/icon/210.png", + "qwilfish": "http://www.serebii.net/pokedex-sm/icon/211.png", + "scizor": "http://www.serebii.net/pokedex-sm/icon/212.png", + "shuckle": "http://www.serebii.net/pokedex-sm/icon/213.png", + "heracross": "http://www.serebii.net/pokedex-sm/icon/214.png", + "sneasel": "http://www.serebii.net/pokedex-sm/icon/215.png", + "teddiursa": "http://www.serebii.net/pokedex-sm/icon/216.png", + "ursaring": "http://www.serebii.net/pokedex-sm/icon/217.png", + "slugma": "http://www.serebii.net/pokedex-sm/icon/218.png", + "magcargo": "http://www.serebii.net/pokedex-sm/icon/219.png", + "swinub": "http://www.serebii.net/pokedex-sm/icon/220.png", + "piloswine": "http://www.serebii.net/pokedex-sm/icon/221.png", + "corsola": "http://www.serebii.net/pokedex-sm/icon/222.png", + "remoraid": "http://www.serebii.net/pokedex-sm/icon/223.png", + "octillery": "http://www.serebii.net/pokedex-sm/icon/224.png", + "delibird": "http://www.serebii.net/pokedex-sm/icon/225.png", + "mantine": "http://www.serebii.net/pokedex-sm/icon/226.png", + "skarmory": "http://www.serebii.net/pokedex-sm/icon/227.png", + "houndour": "http://www.serebii.net/pokedex-sm/icon/228.png", + "houndoom": "http://www.serebii.net/pokedex-sm/icon/229.png", + "kingdra": "http://www.serebii.net/pokedex-sm/icon/230.png", + "phanpy": "http://www.serebii.net/pokedex-sm/icon/231.png", + "donphan": "http://www.serebii.net/pokedex-sm/icon/232.png", + "porygon2": "http://www.serebii.net/pokedex-sm/icon/233.png", + "stantler": "http://www.serebii.net/pokedex-sm/icon/234.png", + "smeargle": "http://www.serebii.net/pokedex-sm/icon/235.png", + "tyrogue": "http://www.serebii.net/pokedex-sm/icon/236.png", + "hitmontop": "http://www.serebii.net/pokedex-sm/icon/237.png", + "smoochum": "http://www.serebii.net/pokedex-sm/icon/238.png", + "elekid": "http://www.serebii.net/pokedex-sm/icon/239.png", + "magby": "http://www.serebii.net/pokedex-sm/icon/240.png", + "miltank": "http://www.serebii.net/pokedex-sm/icon/241.png", + "blissey": "http://www.serebii.net/pokedex-sm/icon/242.png", + "raikou": "http://www.serebii.net/pokedex-sm/icon/243.png", + "entei": "http://www.serebii.net/pokedex-sm/icon/244.png", + "suicune": "http://www.serebii.net/pokedex-sm/icon/245.png", + "larvitar": "http://www.serebii.net/pokedex-sm/icon/246.png", + "pupitar": "http://www.serebii.net/pokedex-sm/icon/247.png", + "tyranitar": "http://www.serebii.net/pokedex-sm/icon/248.png", + "lugia": "http://www.serebii.net/pokedex-sm/icon/249.png", + "ho-oh": "http://www.serebii.net/pokedex-sm/icon/250.png", + "celebi": "http://www.serebii.net/pokedex-sm/icon/251.png" + }, + "species": { + "bulbasaur": "Seed Pokémon", + "ivysaur": "Seed Pokémon", + "venusaur": "Seed Pokémon", + "charmander": "Lizard Pokémon", + "charmeleon": "Flame Pokémon", + "charizard": "Flame Pokémon", + "squirtle": "Tiny Turtle Pokémon", + "wartortle": "Turtle Pokémon", + "blastoise": "Shellfish Pokémon", + "caterpie": "Worm Pokémon", + "metapod": "Cocoon Pokémon", + "butterfree": "Butterfly Pokémon", + "weedle": "Hairy Bug Pokémon", + "kakuna": "Cocoon Pokémon", + "beedrill": "Poison Bee Pokémon", + "pidgey": "Tiny Bird Pokémon", + "pidgeotto": "Bird Pokémon", + "pidgeot": "Bird Pokémon", + "rattata": "Mouse Pokémon", + "raticate": "Mouse Pokémon", + "spearow": "Tiny Bird Pokémon", + "fearow": "Beak Pokémon", + "ekans": "Snake Pokémon", + "arbok": "Cobra Pokémon", + "pikachu": "Mouse Pokémon", + "raichu": "Mouse Pokémon", + "sandshrew": "Mouse Pokémon", + "sandslash": "Mouse Pokémon", + "nidoranf": "Poison Pin Pokémon", + "nidorina": "Poison Pin Pokémon", + "nidoqueen": "Drill Pokémon", + "nidoranm": "Poison Pin Pokémon", + "nidorino": "Poison Pin Pokémon", + "nidoking": "Drill Pokémon", + "clefairy": "Fairy Pokémon", + "clefable": "Fairy Pokémon", + "vulpix": "Fox Pokémon", + "ninetales": "Fox Pokémon", + "jigglypuff": "Balloon Pokémon", + "wigglytuff": "Balloon Pokémon", + "zubat": "Bat Pokémon", + "golbat": "Bat Pokémon", + "oddish": "Weed Pokémon", + "gloom": "Weed Pokémon", + "vileplume": "Flower Pokémon", + "paras": "Mushroom Pokémon", + "parasect": "Mushroom Pokémon", + "venonat": "Insect Pokémon", + "venomoth": "Poison Moth Pokémon", + "diglett": "Mole Pokémon", + "dugtrio": "Mole Pokémon", + "meowth": "Scratch Cat Pokémon", + "persian": "Classy Cat Pokémon", + "psyduck": "Duck Pokémon", + "golduck": "Duck Pokémon", + "mankey": "Pig Monkey Pokémon", + "primeape": "Pig Monkey Pokémon", + "growlithe": "Puppy Pokémon", + "arcanine": "Legendary Pokémon", + "poliwag": "Tadpole Pokémon", + "poliwhirl": "Tadpole Pokémon", + "poliwrath": "Tadpole Pokémon", + "abra": "Psi Pokémon", + "kadabra": "Psi Pokémon", + "alakazam": "Psi Pokémon", + "machop": "Superpower Pokémon", + "machoke": "Superpower Pokémon", + "machamp": "Superpower Pokémon", + "bellsprout": "Flower Pokémon", + "weepinbell": "Flycatcher Pokémon", + "victreebel": "Flycatcher Pokémon", + "tentacool": "Jellyfish Pokémon", + "tentacruel": "Jellyfish Pokémon", + "geodude": "Rock Pokémon", + "graveler": "Rock Pokémon", + "golem": "Megaton Pokémon", + "ponyta": "Fire Horse Pokémon", + "rapidash": "Fire Horse Pokémon", + "slowpoke": "Dopey Pokémon", + "slowbro": "Hermit Crab Pokémon", + "magnemite": "Magnet Pokémon", + "magneton": "Magnet Pokémon", + "farfetch'd": "Wild Duck Pokémon", + "doduo": "Twin Bird Pokémon", + "dodrio": "Triple Bird Pokémon", + "seel": "Sea Lion Pokémon", + "dewgong": "Sea Lion Pokémon", + "grimer": "Sludge Pokémon", + "muk": "Sludge Pokémon", + "shellder": "Bivalve Pokémon", + "cloyster": "Bivalve Pokémon", + "gastly": "Gas Pokémon", + "haunter": "Gas Pokémon", + "gengar": "Shadow Pokémon", + "onix": "Rock Snake Pokémon", + "drowzee": "Hypnosis Pokémon", + "hypno": "Hypnosis Pokémon", + "krabby": "River Crab Pokémon", + "kingler": "Pincer Pokémon", + "voltorb": "Ball Pokémon", + "electrode": "Ball Pokémon", + "exeggcute": "Egg Pokémon", + "exeggutor": "Coconut Pokémon", + "cubone": "Lonely Pokémon", + "marowak": "Bone Keeper Pokémon", + "hitmonlee": "Kicking Pokémon", + "hitmonchan": "Punching Pokémon", + "lickitung": "Licking Pokémon", + "koffing": "Poison Gas Pokémon", + "weezing": "Poison Gas Pokémon", + "rhyhorn": "Spikes Pokémon", + "rhydon": "Drill Pokémon", + "chansey": "Egg Pokémon", + "tangela": "Vine Pokémon", + "kangaskhan": "Parent Pokémon", + "horsea": "Dragon Pokémon", + "seadra": "Dragon Pokémon", + "goldeen": "Goldfish Pokémon", + "seaking": "Goldfish Pokémon", + "staryu": "Star Shape Pokémon", + "starmie": "Mysterious Pokémon", + "mr. mime": "Barrier Pokémon", + "scyther": "Mantis Pokémon", + "jynx": "Human Shape Pokémon", + "electabuzz": "Electric Pokémon", + "magmar": "Spitfire Pokémon", + "pinsir": "Stag Beetle Pokémon", + "tauros": "Wild Bull Pokémon", + "magikarp": "Fish Pokémon", + "gyarados": "Atrocious Pokémon", + "lapras": "Transport Pokémon", + "ditto": "Transform Pokémon", + "eevee": "Evolution Pokémon", + "vaporeon": "Bubble Jet Pokémon", + "jolteon": "Lightning Pokémon", + "flareon": "Flame Pokémon", + "porygon": "Virtual Pokémon", + "omanyte": "Spiral Pokémon", + "omastar": "Spiral Pokémon", + "kabuto": "Shellfish Pokémon", + "kabutops": "Shellfish Pokémon", + "aerodactyl": "Fossil Pokémon", + "snorlax": "Sleeping Pokémon", + "articuno": "Freeze Pokémon", + "zapdos": "Electric Pokémon", + "moltres": "Flame Pokémon", + "dratini": "Dragon Pokémon", + "dragonair": "Dragon Pokémon", + "dragonite": "Dragon Pokémon", + "mewtwo": "Genetic Pokémon", + "mew": "New Species Pokémon", + "missingno.": " ??? Pokémon", + "chikorita": "Leaf Pokémon", + "bayleef": "Leaf Pokémon", + "meganium": "Herb Pokémon", + "cyndaquil": "Fire Mouse Pokémon", + "quilava": "Volcano Pokémon", + "typhlosion": "Volcano Pokémon", + "totodile": "Big Jaw Pokémon", + "croconaw": "Big Jaw Pokémon", + "feraligatr": "Big Jaw Pokémon", + "sentret": "Scout Pokémon", + "furret": "Long Body Pokémon", + "hoothoot": "Owl Pokémon", + "noctowl": "Owl Pokémon", + "ledyba": "Five Star Pokémon", + "ledian": "Five Star Pokémon", + "spinarak": "String Spit Pokémon", + "ariados": "Long Leg Pokémon", + "crobat": "Bat Pokémon", + "chinchou": "Angler Pokémon", + "lanturn": "Light Pokémon", + "pichu": "Tiny Mouse Pokémon", + "cleffa": "Star Shape Pokémon", + "igglybuff": "Balloon Pokémon", + "togepi": "Spike Ball Pokémon", + "togetic": "Happiness Pokémon", + "natu": "Tiny Bird Pokémon", + "xatu": "Mystic Pokémon", + "mareep": "Wool Pokémon", + "flaaffy": "Wool Pokémon", + "ampharos": "Light Pokémon", + "bellossom": "Flower Pokémon", + "marill": "Aqua Mouse Pokémon", + "azumarill": "Aqua Rabbit Pokémon", + "sudowoodo": "Imitation Pokémon", + "politoed": "Frog Pokémon", + "hoppip": "Cottonweed Pokémon", + "skiploom": "Cottonweed Pokémon", + "jumpluff": "Cottonweed Pokémon", + "aipom": "Long Tail Pokémon", + "sunkern": "Seed Pokémon", + "sunflora": "Sun Pokémon", + "yanma": "Clear Wing Pokémon", + "wooper": "Water Fish Pokémon", + "quagsire": "Water Fish Pokémon", + "espeon": "Sun Pokémon", + "umbreon": "Moonlight Pokémon", + "murkrow": "Darkness Pokémon", + "slowking": "Royal Pokémon", + "misdreavus": "Screech Pokémon", + "unown": "Symbol Pokémon", + "wobbuffet": "Patient Pokémon", + "girafarig": "Long Neck Pokémon", + "pineco": "Bagworm Pokémon", + "forretress": "Bagworm Pokémon", + "dunsparce": "Land Snake Pokémon", + "gligar": "Fly Scorpion Pokémon", + "steelix": "Iron Snake Pokémon", + "snubbull": "Fairy Pokémon", + "granbull": "Fairy Pokémon", + "qwilfish": "Balloon Pokémon", + "scizor": "Pincer Pokémon", + "shuckle": "Mold Pokémon", + "heracross": "Single Horn Pokémon", + "sneasel": "Sharp Claw Pokémon", + "teddiursa": "Little Bear Pokémon", + "ursaring": "Hibernator Pokémon", + "slugma": "Lava Pokémon", + "magcargo": "Lava Pokémon", + "swinub": "Pig Pokémon", + "piloswine": "Swine Pokémon", + "corsola": "Coral Pokémon", + "remoraid": "Jet Pokémon", + "octillery": "Jet Pokémon", + "delibird": "Delivery Pokémon", + "mantine": "Kite Pokémon", + "skarmory": "Armor Bird Pokémon", + "houndour": "Dark Pokémon", + "houndoom": "Dark Pokémon", + "kingdra": "Dragon Pokémon", + "phanpy": "Long Nose Pokémon", + "donphan": "Armor Pokémon", + "porygon2": "Virtual Pokémon", + "stantler": "Big Horn Pokémon", + "smeargle": "Painter Pokémon", + "tyrogue": "Scuffle Pokémon", + "hitmontop": "Handstand Pokémon", + "smoochum": "Kiss Pokémon", + "elekid": "Electric Pokémon", + "magby": "Live Coal Pokémon", + "miltank": "Milk Cow Pokémon", + "blissey": "Happiness Pokémon", + "raikou": "Thunder Pokémon", + "entei": "Volcano Pokémon", + "suicune": "Aurora Pokémon", + "larvitar": "Rock Skin Pokémon", + "pupitar": "Hard Shell Pokémon", + "tyranitar": "Armor Pokémon", + "lugia": "Diving Pokémon", + "ho-oh": "Rainbow Pokémon", + "celebi": "Time Travel Pokémon" + }, + "picture": { + "bulbasaur": "http://cdn.bulbagarden.net/upload/thumb/2/21/001Bulbasaur.png/250px-001Bulbasaur.png", + "ivysaur": "http://cdn.bulbagarden.net/upload/thumb/7/73/002Ivysaur.png/250px-002Ivysaur.png", + "venusaur": "http://cdn.bulbagarden.net/upload/thumb/a/ae/003Venusaur.png/250px-003Venusaur.png", + "charmander": "http://cdn.bulbagarden.net/upload/thumb/7/73/004Charmander.png/250px-004Charmander.png", + "charmeleon": "http://cdn.bulbagarden.net/upload/thumb/4/4a/005Charmeleon.png/250px-005Charmeleon.png", + "charizard": "http://cdn.bulbagarden.net/upload/thumb/7/7e/006Charizard.png/250px-006Charizard.png", + "squirtle": "http://cdn.bulbagarden.net/upload/thumb/3/39/007Squirtle.png/250px-007Squirtle.png", + "wartortle": "http://cdn.bulbagarden.net/upload/thumb/0/0c/008Wartortle.png/250px-008Wartortle.png", + "blastoise": "http://cdn.bulbagarden.net/upload/thumb/0/02/009Blastoise.png/250px-009Blastoise.png", + "caterpie": "http://cdn.bulbagarden.net/upload/thumb/5/5d/010Caterpie.png/250px-010Caterpie.png", + "metapod": "http://cdn.bulbagarden.net/upload/thumb/c/cd/011Metapod.png/250px-011Metapod.png", + "butterfree": "http://cdn.bulbagarden.net/upload/thumb/d/d1/012Butterfree.png/250px-012Butterfree.png", + "weedle": "http://cdn.bulbagarden.net/upload/thumb/d/df/013Weedle.png/250px-013Weedle.png", + "kakuna": "http://cdn.bulbagarden.net/upload/thumb/f/f0/014Kakuna.png/250px-014Kakuna.png", + "beedrill": "http://cdn.bulbagarden.net/upload/thumb/6/61/015Beedrill.png/250px-015Beedrill.png", + "pidgey": "http://cdn.bulbagarden.net/upload/thumb/5/55/016Pidgey.png/250px-016Pidgey.png", + "pidgeotto": "http://cdn.bulbagarden.net/upload/thumb/7/7a/017Pidgeotto.png/250px-017Pidgeotto.png", + "pidgeot": "http://cdn.bulbagarden.net/upload/thumb/5/57/018Pidgeot.png/250px-018Pidgeot.png", + "rattata": "http://cdn.bulbagarden.net/upload/thumb/4/46/019Rattata.png/250px-019Rattata.png", + "raticate": "http://cdn.bulbagarden.net/upload/thumb/f/f4/020Raticate.png/250px-020Raticate.png", + "spearow": "http://cdn.bulbagarden.net/upload/thumb/8/8b/021Spearow.png/250px-021Spearow.png", + "fearow": "http://cdn.bulbagarden.net/upload/thumb/a/a0/022Fearow.png/250px-022Fearow.png", + "ekans": "http://cdn.bulbagarden.net/upload/thumb/f/fa/023Ekans.png/250px-023Ekans.png", + "arbok": "http://cdn.bulbagarden.net/upload/thumb/c/cd/024Arbok.png/250px-024Arbok.png", + "pikachu": "http://cdn.bulbagarden.net/upload/thumb/0/0d/025Pikachu.png/250px-025Pikachu.png", + "raichu": "http://cdn.bulbagarden.net/upload/thumb/8/88/026Raichu.png/250px-026Raichu.png", + "sandshrew": "http://cdn.bulbagarden.net/upload/thumb/9/9e/027Sandshrew.png/250px-027Sandshrew.png", + "sandslash": "http://cdn.bulbagarden.net/upload/thumb/0/0b/028Sandslash.png/250px-028Sandslash.png", + "nidoranf": "http://cdn.bulbagarden.net/upload/thumb/8/81/029Nidoran.png/250px-029Nidoran.png", + "nidorina": "http://cdn.bulbagarden.net/upload/thumb/c/cd/030Nidorina.png/250px-030Nidorina.png", + "nidoqueen": "http://cdn.bulbagarden.net/upload/thumb/b/bf/031Nidoqueen.png/250px-031Nidoqueen.png", + "nidoranm": "http://cdn.bulbagarden.net/upload/thumb/4/4a/032Nidoran.png/250px-032Nidoran.png", + "nidorino": "http://cdn.bulbagarden.net/upload/thumb/9/9f/033Nidorino.png/250px-033Nidorino.png", + "nidoking": "http://cdn.bulbagarden.net/upload/thumb/c/c6/034Nidoking.png/250px-034Nidoking.png", + "clefairy": "http://cdn.bulbagarden.net/upload/thumb/f/f4/035Clefairy.png/250px-035Clefairy.png", + "clefable": "http://cdn.bulbagarden.net/upload/thumb/a/a9/036Clefable.png/250px-036Clefable.png", + "vulpix": "http://cdn.bulbagarden.net/upload/thumb/6/60/037Vulpix.png/250px-037Vulpix.png", + "ninetales": "http://cdn.bulbagarden.net/upload/thumb/0/05/038Ninetales.png/250px-038Ninetales.png", + "jigglypuff": "http://cdn.bulbagarden.net/upload/thumb/3/3e/039Jigglypuff.png/250px-039Jigglypuff.png", + "wigglytuff": "http://cdn.bulbagarden.net/upload/thumb/9/92/040Wigglytuff.png/250px-040Wigglytuff.png", + "zubat": "http://cdn.bulbagarden.net/upload/thumb/d/da/041Zubat.png/250px-041Zubat.png", + "golbat": "http://cdn.bulbagarden.net/upload/thumb/0/0c/042Golbat.png/250px-042Golbat.png", + "oddish": "http://cdn.bulbagarden.net/upload/thumb/4/43/043Oddish.png/250px-043Oddish.png", + "gloom": "http://cdn.bulbagarden.net/upload/thumb/2/2a/044Gloom.png/250px-044Gloom.png", + "vileplume": "http://cdn.bulbagarden.net/upload/thumb/6/6a/045Vileplume.png/250px-045Vileplume.png", + "paras": "http://cdn.bulbagarden.net/upload/thumb/d/d4/046Paras.png/250px-046Paras.png", + "parasect": "http://cdn.bulbagarden.net/upload/thumb/8/80/047Parasect.png/250px-047Parasect.png", + "venonat": "http://cdn.bulbagarden.net/upload/thumb/a/ad/048Venonat.png/250px-048Venonat.png", + "venomoth": "http://cdn.bulbagarden.net/upload/thumb/d/d3/049Venomoth.png/250px-049Venomoth.png", + "diglett": "http://cdn.bulbagarden.net/upload/thumb/3/31/050Diglett.png/250px-050Diglett.png", + "dugtrio": "http://cdn.bulbagarden.net/upload/thumb/e/e5/051Dugtrio.png/250px-051Dugtrio.png", + "meowth": "http://cdn.bulbagarden.net/upload/thumb/d/d6/052Meowth.png/250px-052Meowth.png", + "persian": "http://cdn.bulbagarden.net/upload/thumb/1/13/053Persian.png/250px-053Persian.png", + "psyduck": "http://cdn.bulbagarden.net/upload/thumb/5/53/054Psyduck.png/250px-054Psyduck.png", + "golduck": "http://cdn.bulbagarden.net/upload/thumb/f/fe/055Golduck.png/250px-055Golduck.png", + "mankey": "http://cdn.bulbagarden.net/upload/thumb/4/41/056Mankey.png/250px-056Mankey.png", + "primeape": "http://cdn.bulbagarden.net/upload/thumb/9/9a/057Primeape.png/250px-057Primeape.png", + "growlithe": "http://cdn.bulbagarden.net/upload/thumb/3/3d/058Growlithe.png/250px-058Growlithe.png", + "arcanine": "http://cdn.bulbagarden.net/upload/thumb/b/b8/059Arcanine.png/250px-059Arcanine.png", + "poliwag": "http://cdn.bulbagarden.net/upload/thumb/4/49/060Poliwag.png/250px-060Poliwag.png", + "poliwhirl": "http://cdn.bulbagarden.net/upload/thumb/a/a9/061Poliwhirl.png/250px-061Poliwhirl.png", + "poliwrath": "http://cdn.bulbagarden.net/upload/thumb/2/2d/062Poliwrath.png/250px-062Poliwrath.png", + "abra": "http://cdn.bulbagarden.net/upload/thumb/6/62/063Abra.png/250px-063Abra.png", + "kadabra": "http://cdn.bulbagarden.net/upload/thumb/9/97/064Kadabra.png/250px-064Kadabra.png", + "alakazam": "http://cdn.bulbagarden.net/upload/thumb/c/cc/065Alakazam.png/250px-065Alakazam.png", + "machop": "http://cdn.bulbagarden.net/upload/thumb/8/85/066Machop.png/250px-066Machop.png", + "machoke": "http://cdn.bulbagarden.net/upload/thumb/8/8e/067Machoke.png/250px-067Machoke.png", + "machamp": "http://cdn.bulbagarden.net/upload/thumb/8/8f/068Machamp.png/250px-068Machamp.png", + "bellsprout": "http://cdn.bulbagarden.net/upload/thumb/a/a2/069Bellsprout.png/250px-069Bellsprout.png", + "weepinbell": "http://cdn.bulbagarden.net/upload/thumb/9/9f/070Weepinbell.png/250px-070Weepinbell.png", + "victreebel": "http://cdn.bulbagarden.net/upload/thumb/b/be/071Victreebel.png/250px-071Victreebel.png", + "tentacool": "http://cdn.bulbagarden.net/upload/thumb/4/4e/072Tentacool.png/250px-072Tentacool.png", + "tentacruel": "http://cdn.bulbagarden.net/upload/thumb/f/f6/073Tentacruel.png/250px-073Tentacruel.png", + "geodude": "http://cdn.bulbagarden.net/upload/thumb/9/98/074Geodude.png/250px-074Geodude.png", + "graveler": "http://cdn.bulbagarden.net/upload/thumb/7/75/075Graveler.png/250px-075Graveler.png", + "golem": "http://cdn.bulbagarden.net/upload/thumb/f/f2/076Golem.png/250px-076Golem.png", + "ponyta": "http://cdn.bulbagarden.net/upload/thumb/3/3b/077Ponyta.png/250px-077Ponyta.png", + "rapidash": "http://cdn.bulbagarden.net/upload/thumb/3/3f/078Rapidash.png/250px-078Rapidash.png", + "slowpoke": "http://cdn.bulbagarden.net/upload/thumb/7/70/079Slowpoke.png/250px-079Slowpoke.png", + "slowbro": "http://cdn.bulbagarden.net/upload/thumb/8/80/080Slowbro.png/250px-080Slowbro.png", + "magnemite": "http://cdn.bulbagarden.net/upload/thumb/6/6c/081Magnemite.png/250px-081Magnemite.png", + "magneton": "http://cdn.bulbagarden.net/upload/thumb/7/72/082Magneton.png/250px-082Magneton.png", + "farfetch'd": "http://cdn.bulbagarden.net/upload/thumb/f/f8/083Farfetch%27d.png/250px-083Farfetch%27d.png", + "doduo": "http://cdn.bulbagarden.net/upload/thumb/5/54/084Doduo.png/250px-084Doduo.png", + "dodrio": "http://cdn.bulbagarden.net/upload/thumb/9/93/085Dodrio.png/250px-085Dodrio.png", + "seel": "http://cdn.bulbagarden.net/upload/thumb/1/1f/086Seel.png/250px-086Seel.png", + "dewgong": "http://cdn.bulbagarden.net/upload/thumb/c/c7/087Dewgong.png/250px-087Dewgong.png", + "grimer": "http://cdn.bulbagarden.net/upload/thumb/a/a0/088Grimer.png/250px-088Grimer.png", + "muk": "http://cdn.bulbagarden.net/upload/thumb/7/7c/089Muk.png/250px-089Muk.png", + "shellder": "http://cdn.bulbagarden.net/upload/thumb/4/40/090Shellder.png/250px-090Shellder.png", + "cloyster": "http://cdn.bulbagarden.net/upload/thumb/1/1d/091Cloyster.png/250px-091Cloyster.png", + "gastly": "http://cdn.bulbagarden.net/upload/thumb/c/ca/092Gastly.png/250px-092Gastly.png", + "haunter": "http://cdn.bulbagarden.net/upload/thumb/6/62/093Haunter.png/250px-093Haunter.png", + "gengar": "http://cdn.bulbagarden.net/upload/thumb/c/c6/094Gengar.png/250px-094Gengar.png", + "onix": "http://cdn.bulbagarden.net/upload/thumb/9/9a/095Onix.png/250px-095Onix.png", + "drowzee": "http://cdn.bulbagarden.net/upload/thumb/3/3e/096Drowzee.png/250px-096Drowzee.png", + "hypno": "http://cdn.bulbagarden.net/upload/thumb/0/0a/097Hypno.png/250px-097Hypno.png", + "krabby": "http://cdn.bulbagarden.net/upload/thumb/a/a7/098Krabby.png/250px-098Krabby.png", + "kingler": "http://cdn.bulbagarden.net/upload/thumb/7/71/099Kingler.png/250px-099Kingler.png", + "voltorb": "http://cdn.bulbagarden.net/upload/thumb/d/da/100Voltorb.png/250px-100Voltorb.png", + "electrode": "http://cdn.bulbagarden.net/upload/thumb/8/84/101Electrode.png/250px-101Electrode.png", + "exeggcute": "http://cdn.bulbagarden.net/upload/thumb/a/af/102Exeggcute.png/250px-102Exeggcute.png", + "exeggutor": "http://cdn.bulbagarden.net/upload/thumb/2/24/103Exeggutor.png/250px-103Exeggutor.png", + "cubone": "http://cdn.bulbagarden.net/upload/thumb/2/2a/104Cubone.png/250px-104Cubone.png", + "marowak": "http://cdn.bulbagarden.net/upload/thumb/9/98/105Marowak.png/250px-105Marowak.png", + "hitmonlee": "http://cdn.bulbagarden.net/upload/thumb/3/32/106Hitmonlee.png/250px-106Hitmonlee.png", + "hitmonchan": "http://cdn.bulbagarden.net/upload/a/a3/107Hitmonchan.png", + "lickitung": "http://cdn.bulbagarden.net/upload/thumb/0/00/108Lickitung.png/250px-108Lickitung.png", + "koffing": "http://cdn.bulbagarden.net/upload/thumb/1/17/109Koffing.png/250px-109Koffing.png", + "weezing": "http://cdn.bulbagarden.net/upload/thumb/4/42/110Weezing.png/250px-110Weezing.png", + "rhyhorn": "http://cdn.bulbagarden.net/upload/thumb/9/9b/111Rhyhorn.png/250px-111Rhyhorn.png", + "rhydon": "http://cdn.bulbagarden.net/upload/thumb/4/47/112Rhydon.png/250px-112Rhydon.png", + "chansey": "http://cdn.bulbagarden.net/upload/thumb/c/cd/113Chansey.png/250px-113Chansey.png", + "tangela": "http://cdn.bulbagarden.net/upload/thumb/3/3e/114Tangela.png/250px-114Tangela.png", + "kangaskhan": "http://cdn.bulbagarden.net/upload/thumb/4/4e/115Kangaskhan.png/250px-115Kangaskhan.png", + "horsea": "http://cdn.bulbagarden.net/upload/thumb/5/5a/116Horsea.png/250px-116Horsea.png", + "seadra": "http://cdn.bulbagarden.net/upload/thumb/2/26/117Seadra.png/250px-117Seadra.png", + "goldeen": "http://cdn.bulbagarden.net/upload/thumb/7/7b/118Goldeen.png/250px-118Goldeen.png", + "seaking": "http://cdn.bulbagarden.net/upload/thumb/6/6a/119Seaking.png/250px-119Seaking.png", + "staryu": "http://cdn.bulbagarden.net/upload/thumb/4/4f/120Staryu.png/250px-120Staryu.png", + "starmie": "http://cdn.bulbagarden.net/upload/thumb/c/cd/121Starmie.png/250px-121Starmie.png", + "mr. mime": "http://cdn.bulbagarden.net/upload/thumb/e/ec/122Mr._Mime.png/250px-122Mr._Mime.png", + "scyther": "http://cdn.bulbagarden.net/upload/thumb/b/ba/123Scyther.png/250px-123Scyther.png", + "jynx": "http://cdn.bulbagarden.net/upload/thumb/7/7c/124Jynx.png/250px-124Jynx.png", + "electabuzz": "http://cdn.bulbagarden.net/upload/thumb/d/de/125Electabuzz.png/250px-125Electabuzz.png", + "magmar": "http://cdn.bulbagarden.net/upload/thumb/8/8c/126Magmar.png/250px-126Magmar.png", + "pinsir": "http://cdn.bulbagarden.net/upload/thumb/7/71/127Pinsir.png/250px-127Pinsir.png", + "tauros": "http://cdn.bulbagarden.net/upload/thumb/b/b8/128Tauros.png/250px-128Tauros.png", + "magikarp": "http://cdn.bulbagarden.net/upload/thumb/0/02/129Magikarp.png/250px-129Magikarp.png", + "gyarados": "http://cdn.bulbagarden.net/upload/thumb/4/41/130Gyarados.png/250px-130Gyarados.png", + "lapras": "http://cdn.bulbagarden.net/upload/thumb/a/ab/131Lapras.png/250px-131Lapras.png", + "ditto": "http://cdn.bulbagarden.net/upload/thumb/3/36/132Ditto.png/250px-132Ditto.png", + "eevee": "http://cdn.bulbagarden.net/upload/thumb/e/e2/133Eevee.png/250px-133Eevee.png", + "vaporeon": "http://cdn.bulbagarden.net/upload/thumb/f/fd/134Vaporeon.png/250px-134Vaporeon.png", + "jolteon": "http://cdn.bulbagarden.net/upload/thumb/b/bb/135Jolteon.png/250px-135Jolteon.png", + "flareon": "http://cdn.bulbagarden.net/upload/thumb/d/dd/136Flareon.png/250px-136Flareon.png", + "porygon": "http://cdn.bulbagarden.net/upload/thumb/6/6b/137Porygon.png/250px-137Porygon.png", + "omanyte": "http://cdn.bulbagarden.net/upload/thumb/7/79/138Omanyte.png/250px-138Omanyte.png", + "omastar": "http://cdn.bulbagarden.net/upload/thumb/4/43/139Omastar.png/250px-139Omastar.png", + "kabuto": "http://cdn.bulbagarden.net/upload/thumb/f/f9/140Kabuto.png/250px-140Kabuto.png", + "kabutops": "http://cdn.bulbagarden.net/upload/thumb/2/29/141Kabutops.png/250px-141Kabutops.png", + "aerodactyl": "http://cdn.bulbagarden.net/upload/thumb/e/e8/142Aerodactyl.png/250px-142Aerodactyl.png", + "snorlax": "http://cdn.bulbagarden.net/upload/thumb/f/fb/143Snorlax.png/250px-143Snorlax.png", + "articuno": "http://cdn.bulbagarden.net/upload/thumb/4/4e/144Articuno.png/250px-144Articuno.png", + "zapdos": "http://cdn.bulbagarden.net/upload/thumb/e/e3/145Zapdos.png/250px-145Zapdos.png", + "moltres": "http://cdn.bulbagarden.net/upload/thumb/1/1b/146Moltres.png/250px-146Moltres.png", + "dratini": "http://cdn.bulbagarden.net/upload/thumb/c/cc/147Dratini.png/250px-147Dratini.png", + "dragonair": "http://cdn.bulbagarden.net/upload/thumb/9/93/148Dragonair.png/250px-148Dragonair.png", + "dragonite": "http://cdn.bulbagarden.net/upload/thumb/8/8b/149Dragonite.png/250px-149Dragonite.png", + "mewtwo": "http://cdn.bulbagarden.net/upload/thumb/7/78/150Mewtwo.png/250px-150Mewtwo.png", + "mew": "http://cdn.bulbagarden.net/upload/thumb/b/b1/151Mew.png/250px-151Mew.png", + "missingno.": "http://cdn.bulbagarden.net/upload/9/98/Missingno_RB.png", + "chikorita": "http://cdn.bulbagarden.net/upload/thumb/b/bf/152Chikorita.png/250px-152Chikorita.png", + "bayleef": "http://cdn.bulbagarden.net/upload/thumb/c/ca/153Bayleef.png/250px-153Bayleef.png", + "meganium": "http://cdn.bulbagarden.net/upload/thumb/d/d1/154Meganium.png/250px-154Meganium.png", + "cyndaquil": "http://cdn.bulbagarden.net/upload/thumb/9/9b/155Cyndaquil.png/250px-155Cyndaquil.png", + "quilava": "http://cdn.bulbagarden.net/upload/thumb/b/b6/156Quilava.png/250px-156Quilava.png", + "typhlosion": "http://cdn.bulbagarden.net/upload/thumb/4/47/157Typhlosion.png/250px-157Typhlosion.png", + "totodile": "http://cdn.bulbagarden.net/upload/thumb/d/df/158Totodile.png/250px-158Totodile.png", + "croconaw": "http://cdn.bulbagarden.net/upload/thumb/a/a5/159Croconaw.png/250px-159Croconaw.png", + "feraligatr": "http://cdn.bulbagarden.net/upload/thumb/d/d5/160Feraligatr.png/250px-160Feraligatr.png", + "sentret": "http://cdn.bulbagarden.net/upload/thumb/c/c5/161Sentret.png/250px-161Sentret.png", + "furret": "http://cdn.bulbagarden.net/upload/thumb/4/4b/162Furret.png/250px-162Furret.png", + "hoothoot": "http://cdn.bulbagarden.net/upload/thumb/5/53/163Hoothoot.png/250px-163Hoothoot.png", + "noctowl": "http://cdn.bulbagarden.net/upload/thumb/f/fa/164Noctowl.png/250px-164Noctowl.png", + "ledyba": "http://cdn.bulbagarden.net/upload/thumb/b/bb/165Ledyba.png/250px-165Ledyba.png", + "ledian": "http://cdn.bulbagarden.net/upload/thumb/5/5b/166Ledian.png/250px-166Ledian.png", + "spinarak": "http://cdn.bulbagarden.net/upload/thumb/7/75/167Spinarak.png/250px-167Spinarak.png", + "ariados": "http://cdn.bulbagarden.net/upload/thumb/7/76/168Ariados.png/250px-168Ariados.png", + "crobat": "http://cdn.bulbagarden.net/upload/thumb/1/17/169Crobat.png/250px-169Crobat.png", + "chinchou": "http://cdn.bulbagarden.net/upload/thumb/d/d9/170Chinchou.png/250px-170Chinchou.png", + "lanturn": "http://cdn.bulbagarden.net/upload/thumb/9/9b/171Lanturn.png/250px-171Lanturn.png", + "pichu": "http://cdn.bulbagarden.net/upload/thumb/b/b9/172Pichu.png/250px-172Pichu.png", + "cleffa": "http://cdn.bulbagarden.net/upload/thumb/e/e4/173Cleffa.png/250px-173Cleffa.png", + "igglybuff": "http://cdn.bulbagarden.net/upload/thumb/4/4d/174Igglybuff.png/250px-174Igglybuff.png", + "togepi": "http://cdn.bulbagarden.net/upload/thumb/6/6b/175Togepi.png/250px-175Togepi.png", + "togetic": "http://cdn.bulbagarden.net/upload/thumb/1/11/176Togetic.png/250px-176Togetic.png", + "natu": "http://cdn.bulbagarden.net/upload/thumb/5/5b/177Natu.png/250px-177Natu.png", + "xatu": "http://cdn.bulbagarden.net/upload/thumb/f/f4/178Xatu.png/250px-178Xatu.png", + "mareep": "http://cdn.bulbagarden.net/upload/thumb/6/6b/179Mareep.png/250px-179Mareep.png", + "flaaffy": "http://cdn.bulbagarden.net/upload/thumb/6/6f/180Flaaffy.png/250px-180Flaaffy.png", + "ampharos": "http://cdn.bulbagarden.net/upload/thumb/4/47/181Ampharos.png/250px-181Ampharos.png", + "bellossom": "http://cdn.bulbagarden.net/upload/thumb/c/cd/182Bellossom.png/250px-182Bellossom.png", + "marill": "http://cdn.bulbagarden.net/upload/thumb/4/42/183Marill.png/250px-183Marill.png", + "azumarill": "http://cdn.bulbagarden.net/upload/thumb/a/a5/184Azumarill.png/250px-184Azumarill.png", + "sudowoodo": "http://cdn.bulbagarden.net/upload/thumb/1/1e/185Sudowoodo.png/250px-185Sudowoodo.png", + "politoed": "http://cdn.bulbagarden.net/upload/thumb/a/a4/186Politoed.png/250px-186Politoed.png", + "hoppip": "http://cdn.bulbagarden.net/upload/thumb/f/f8/187Hoppip.png/250px-187Hoppip.png", + "skiploom": "http://cdn.bulbagarden.net/upload/thumb/4/4f/188Skiploom.png/250px-188Skiploom.png", + "jumpluff": "http://cdn.bulbagarden.net/upload/thumb/5/5e/189Jumpluff.png/250px-189Jumpluff.png", + "aipom": "http://cdn.bulbagarden.net/upload/thumb/4/42/190Aipom.png/250px-190Aipom.png", + "sunkern": "http://cdn.bulbagarden.net/upload/thumb/9/95/191Sunkern.png/250px-191Sunkern.png", + "sunflora": "http://cdn.bulbagarden.net/upload/thumb/9/98/192Sunflora.png/250px-192Sunflora.png", + "yanma": "http://cdn.bulbagarden.net/upload/thumb/d/dd/193Yanma.png/250px-193Yanma.png", + "wooper": "http://cdn.bulbagarden.net/upload/thumb/7/78/194Wooper.png/250px-194Wooper.png", + "quagsire": "http://cdn.bulbagarden.net/upload/thumb/a/a4/195Quagsire.png/250px-195Quagsire.png", + "espeon": "http://cdn.bulbagarden.net/upload/thumb/a/a7/196Espeon.png/250px-196Espeon.png", + "umbreon": "http://cdn.bulbagarden.net/upload/thumb/3/3d/197Umbreon.png/250px-197Umbreon.png", + "murkrow": "http://cdn.bulbagarden.net/upload/thumb/3/33/198Murkrow.png/250px-198Murkrow.png", + "slowking": "http://cdn.bulbagarden.net/upload/thumb/e/e1/199Slowking.png/250px-199Slowking.png", + "misdreavus": "http://cdn.bulbagarden.net/upload/thumb/b/be/200Misdreavus.png/250px-200Misdreavus.png", + "unown": "http://cdn.bulbagarden.net/upload/thumb/7/77/201Unown.png/250px-201Unown.png", + "wobbuffet": "http://cdn.bulbagarden.net/upload/thumb/1/17/202Wobbuffet.png/250px-202Wobbuffet.png", + "girafarig": "http://cdn.bulbagarden.net/upload/thumb/1/11/203Girafarig.png/250px-203Girafarig.png", + "pineco": "http://cdn.bulbagarden.net/upload/thumb/0/0b/204Pineco.png/250px-204Pineco.png", + "forretress": "http://cdn.bulbagarden.net/upload/thumb/6/68/205Forretress.png/250px-205Forretress.png", + "dunsparce": "http://cdn.bulbagarden.net/upload/thumb/2/20/206Dunsparce.png/250px-206Dunsparce.png", + "gligar": "http://cdn.bulbagarden.net/upload/thumb/0/04/207Gligar.png/250px-207Gligar.png", + "steelix": "http://cdn.bulbagarden.net/upload/thumb/b/ba/208Steelix.png/250px-208Steelix.png", + "snubbull": "http://cdn.bulbagarden.net/upload/thumb/7/7f/209Snubbull.png/250px-209Snubbull.png", + "granbull": "http://cdn.bulbagarden.net/upload/thumb/b/b1/210Granbull.png/250px-210Granbull.png", + "qwilfish": "http://cdn.bulbagarden.net/upload/thumb/2/21/211Qwilfish.png/250px-211Qwilfish.png", + "scizor": "http://cdn.bulbagarden.net/upload/thumb/5/55/212Scizor.png/250px-212Scizor.png", + "shuckle": "http://cdn.bulbagarden.net/upload/thumb/c/c7/213Shuckle.png/250px-213Shuckle.png", + "heracross": "http://cdn.bulbagarden.net/upload/thumb/4/47/214Heracross.png/250px-214Heracross.png", + "sneasel": "http://cdn.bulbagarden.net/upload/thumb/7/71/215Sneasel.png/250px-215Sneasel.png", + "teddiursa": "http://cdn.bulbagarden.net/upload/thumb/e/e9/216Teddiursa.png/250px-216Teddiursa.png", + "ursaring": "http://cdn.bulbagarden.net/upload/thumb/e/e9/217Ursaring.png/250px-217Ursaring.png", + "slugma": "http://cdn.bulbagarden.net/upload/thumb/6/68/218Slugma.png/250px-218Slugma.png", + "magcargo": "http://cdn.bulbagarden.net/upload/thumb/6/65/219Magcargo.png/250px-219Magcargo.png", + "swinub": "http://cdn.bulbagarden.net/upload/thumb/b/b5/220Swinub.png/250px-220Swinub.png", + "piloswine": "http://cdn.bulbagarden.net/upload/thumb/4/49/221Piloswine.png/250px-221Piloswine.png", + "corsola": "http://cdn.bulbagarden.net/upload/thumb/f/fc/222Corsola.png/250px-222Corsola.png", + "remoraid": "http://cdn.bulbagarden.net/upload/thumb/9/95/223Remoraid.png/250px-223Remoraid.png", + "octillery": "http://cdn.bulbagarden.net/upload/thumb/c/cb/224Octillery.png/250px-224Octillery.png", + "delibird": "http://cdn.bulbagarden.net/upload/thumb/3/3f/225Delibird.png/250px-225Delibird.png", + "mantine": "http://cdn.bulbagarden.net/upload/thumb/c/c5/226Mantine.png/250px-226Mantine.png", + "skarmory": "http://cdn.bulbagarden.net/upload/thumb/3/35/227Skarmory.png/250px-227Skarmory.png", + "houndour": "http://cdn.bulbagarden.net/upload/thumb/5/53/228Houndour.png/250px-228Houndour.png", + "houndoom": "http://cdn.bulbagarden.net/upload/thumb/5/51/229Houndoom.png/250px-229Houndoom.png", + "kingdra": "http://cdn.bulbagarden.net/upload/thumb/3/3c/230Kingdra.png/250px-230Kingdra.png", + "phanpy": "http://cdn.bulbagarden.net/upload/thumb/d/d3/231Phanpy.png/250px-231Phanpy.png", + "donphan": "http://cdn.bulbagarden.net/upload/thumb/5/53/232Donphan.png/250px-232Donphan.png", + "porygon2": "http://cdn.bulbagarden.net/upload/thumb/9/99/233Porygon2.png/250px-233Porygon2.png", + "stantler": "http://cdn.bulbagarden.net/upload/thumb/5/50/234Stantler.png/250px-234Stantler.png", + "smeargle": "http://cdn.bulbagarden.net/upload/thumb/9/92/235Smeargle.png/250px-235Smeargle.png", + "tyrogue": "http://cdn.bulbagarden.net/upload/thumb/c/c7/236Tyrogue.png/250px-236Tyrogue.png", + "hitmontop": "http://cdn.bulbagarden.net/upload/thumb/9/94/237Hitmontop.png/250px-237Hitmontop.png", + "smoochum": "http://cdn.bulbagarden.net/upload/thumb/0/0e/238Smoochum.png/250px-238Smoochum.png", + "elekid": "http://cdn.bulbagarden.net/upload/thumb/5/5d/239Elekid.png/250px-239Elekid.png", + "magby": "http://cdn.bulbagarden.net/upload/thumb/c/cb/240Magby.png/250px-240Magby.png", + "miltank": "http://cdn.bulbagarden.net/upload/thumb/1/13/241Miltank.png/250px-241Miltank.png", + "blissey": "http://cdn.bulbagarden.net/upload/thumb/5/56/242Blissey.png/250px-242Blissey.png", + "raikou": "http://cdn.bulbagarden.net/upload/thumb/c/c1/243Raikou.png/250px-243Raikou.png", + "entei": "http://cdn.bulbagarden.net/upload/thumb/f/f9/244Entei.png/250px-244Entei.png", + "suicune": "http://cdn.bulbagarden.net/upload/thumb/d/da/245Suicune.png/250px-245Suicune.png", + "larvitar": "http://cdn.bulbagarden.net/upload/thumb/7/70/246Larvitar.png/250px-246Larvitar.png", + "pupitar": "http://cdn.bulbagarden.net/upload/thumb/a/a1/247Pupitar.png/250px-247Pupitar.png", + "tyranitar": "http://cdn.bulbagarden.net/upload/thumb/8/82/248Tyranitar.png/250px-248Tyranitar.png", + "lugia": "http://cdn.bulbagarden.net/upload/thumb/4/44/249Lugia.png/250px-249Lugia.png", + "ho-oh": "http://cdn.bulbagarden.net/upload/thumb/6/67/250Ho-Oh.png/250px-250Ho-Oh.png", + "celebi": "http://cdn.bulbagarden.net/upload/thumb/e/e7/251Celebi.png/250px-251Celebi.png" + }, + "type": { + "bulbasaur": "Grass/Poison", + "ivysaur": "Grass/Poison", + "venusaur": "Grass/Poison", + "charmander": "Fire", + "charmeleon": "Fire", + "charizard": "Fire/Flying", + "squirtle": "Water", + "wartortle": "Water", + "blastoise": "Water", + "caterpie": "Bug", + "metapod": "Bug", + "butterfree": "Bug/Flying", + "weedle": "Bug/Poison", + "kakuna": "Bug/Poison", + "beedrill": "Bug/Poison", + "pidgey": "Normal/Flying", + "pidgeotto": "Normal/Flying", + "pidgeot": "Normal/Flying", + "rattata": "Normal", + "raticate": "Normal", + "spearow": "Normal/Flying", + "fearow": "Normal/Flying", + "ekans": "Poison", + "arbok": "Poison", + "pikachu": "Electric", + "raichu": "Electric", + "sandshrew": "Ground", + "sandslash": "Ground", + "nidoranf": "Poison", + "nidorina": "Poison", + "nidoqueen": "Poison/Ground", + "nidoranm": "Poison", + "nidorino": "Poison", + "nidoking": "Poison/Ground", + "clefairy": "Fairy", + "clefable": "Fairy", + "vulpix": "Fire", + "ninetales": "Fire", + "jigglypuff": "Normal/Fairy", + "wigglytuff": "Normal/Fairy", + "zubat": "Poison/Flying", + "golbat": "Poison/Flying", + "oddish": "Grass/Poison", + "gloom": "Grass/Poison", + "vileplume": "Grass/Poison", + "paras": "Bug/Grass", + "parasect": "Bug/Grass", + "venonat": "Bug/Poison", + "venomoth": "Bug/Poison", + "diglett": "Ground", + "dugtrio": "Ground", + "meowth": "Normal", + "persian": "Normal", + "psyduck": "Water", + "golduck": "Water", + "mankey": "Fighting", + "primeape": "Fighting", + "growlithe": "Fire", + "arcanine": "Fire", + "poliwag": "Water", + "poliwhirl": "Water", + "poliwrath": "Water/Fighting", + "abra": "Psychic", + "kadabra": "Psychic", + "alakazam": "Psychic", + "machop": "Fighting", + "machoke": "Fighting", + "machamp": "Fighting", + "bellsprout": "Grass/Poison", + "weepinbell": "Grass/Poison", + "victreebel": "Grass/Poison", + "tentacool": "Water/Poison", + "tentacruel": "Water/Poison", + "geodude": "Rock/Ground", + "graveler": "Rock/Ground", + "golem": "Rock/Ground", + "ponyta": "Fire", + "rapidash": "Fire", + "slowpoke": "Water/Psychic", + "slowbro": "Water/Psychic", + "magnemite": "Electric/Steel", + "magneton": "Electric/Steel", + "farfetch'd": "Normal/Flying", + "doduo": "Normal/Flying", + "dodrio": "Normal/Flying", + "seel": "Water", + "dewgong": "Water/Ice", + "grimer": "Poison", + "muk": "Poison", + "shellder": "Water", + "cloyster": "Water/Ice", + "gastly": "Ghost/Poison", + "haunter": "Ghost/Poison", + "gengar": "Ghost/Poison", + "onix": "Rock/Ground", + "drowzee": "Psychic", + "hypno": "Psychic", + "krabby": "Water", + "kingler": "Water", + "voltorb": "Electric", + "electrode": "Electric", + "exeggcute": "Grass/Psychic", + "exeggutor": "Grass/Psychic", + "cubone": "Ground", + "marowak": "Ground", + "hitmonlee": "Fighting", + "hitmonchan": "Fighting", + "lickitung": "Normal", + "koffing": "Poison", + "weezing": "Poison", + "rhyhorn": "Ground/Rock", + "rhydon": "Ground/Rock", + "chansey": "Normal", + "tangela": "Grass", + "kangaskhan": "Normal", + "horsea": "Water", + "seadra": "Water", + "goldeen": "Water", + "seaking": "Water", + "staryu": "Water", + "starmie": "Water/Psychic", + "mr. mime": "Psychic/Fairy", + "scyther": "Bug/Flying", + "jynx": "Ice/Psychic", + "electabuzz": "Electric", + "magmar": "Fire", + "pinsir": "Bug", + "tauros": "Normal", + "magikarp": "Water", + "gyarados": "Water/Flying", + "lapras": "Water/Ice", + "ditto": "Normal", + "eevee": "Normal", + "vaporeon": "Water", + "jolteon": "Electric", + "flareon": "Fire", + "porygon": "Normal", + "omanyte": "Rock/Water", + "omastar": "Rock/Water", + "kabuto": "Rock/Water", + "kabutops": "Rock/Water", + "aerodactyl": "Rock/Flying", + "snorlax": "Normal", + "articuno": "Ice/Flying", + "zapdos": "Electric/Flying", + "moltres": "Fire/Flying", + "dratini": "Dragon", + "dragonair": "Dragon", + "dragonite": "Dragon/Flying", + "mewtwo": "Psychic", + "mew": "Psychic", + "missingno.": "Bird/Normal", + "chikorita": "Grass", + "bayleef": "Grass", + "meganium": "Grass", + "cyndaquil": "Fire", + "quilava": "Fire", + "typhlosion": "Fire", + "totodile": "Water", + "croconaw": "Water", + "feraligatr": "Water", + "sentret": "Normal", + "furret": "Normal", + "hoothoot": "Normal/Flying", + "noctowl": "Normal/Flying", + "ledyba": "Bug/Flying", + "ledian": "Bug/Flying", + "spinarak": "Bug/Poison", + "ariados": "Bug/Poison", + "crobat": "Poison/Flying", + "chinchou": "Water/Electric", + "lanturn": "Water/Electric", + "pichu": "Electric", + "cleffa": "Fairy", + "igglybuff": "Normal/Fairy", + "togepi": "Fairy", + "togetic": "Fairy/Flying", + "natu": "Psychic/Flying", + "xatu": "Psychic/Flying", + "mareep": "Electric", + "flaaffy": "Electric", + "ampharos": "Electric", + "bellossom": "Grass", + "marill": "Water/Fairy", + "azumarill": "Water/Fairy", + "sudowoodo": "Rock", + "politoed": "Water", + "hoppip": "Grass/Flying", + "skiploom": "Grass/Flying", + "jumpluff": "Grass/Flying", + "aipom": "Normal", + "sunkern": "Grass", + "sunflora": "Grass", + "yanma": "Bug/Flying", + "wooper": "Water/Ground", + "quagsire": "Water/Ground", + "espeon": "Psychic", + "umbreon": "Dark", + "murkrow": "Dark/Flying", + "slowking": "Water/Psychic", + "misdreavus": "Ghost", + "unown": "Psychic", + "wobbuffet": "Psychic", + "girafarig": "Normal/Psychic", + "pineco": "Bug", + "forretress": "Bug/Steel", + "dunsparce": "Normal", + "gligar": "Ground/Flying", + "steelix": "Steel/Ground", + "snubbull": "Fairy", + "granbull": "Fairy", + "qwilfish": "Water/Poison", + "scizor": "Bug/Steel", + "shuckle": "Bug/Rock", + "heracross": "Bug/Fighting", + "sneasel": "Dark/Ice", + "teddiursa": "Normal", + "ursaring": "Normal", + "slugma": "Fire", + "magcargo": "Fire/Rock", + "swinub": "Ice/Ground", + "piloswine": "Ice/Ground", + "corsola": "Water/Rock", + "remoraid": "Water", + "octillery": "Water", + "delibird": "Ice/Flying", + "mantine": "Water/Flying", + "skarmory": "Steel/Flying", + "houndour": "Dark/Fire", + "houndoom": "Dark/Fire", + "kingdra": "Water/Dragon", + "phanpy": "Ground", + "donphan": "Ground", + "porygon2": "Normal", + "stantler": "Normal", + "smeargle": "Normal", + "tyrogue": "Fighting", + "hitmontop": "Fighting", + "smoochum": "Ice/Psychic", + "elekid": "Electric", + "magby": "Fire", + "miltank": "Normal", + "blissey": "Normal", + "raikou": "Electric", + "entei": "Fire", + "suicune": "Water", + "larvitar": "Rock/Ground", + "pupitar": "Rock/Ground", + "tyranitar": "Rock/Dark", + "lugia": "Psychic/Flying", + "ho-oh": "Fire/Flying", + "celebi": "Psychic/Grass" + } +} \ No newline at end of file diff --git a/commands/pokemon/pokedex.js b/commands/pokemon/pokedex.js new file mode 100644 index 00000000..8ba4f787 --- /dev/null +++ b/commands/pokemon/pokedex.js @@ -0,0 +1,41 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); +const pokedex = require('./pkdex.json'); + +class PokedexCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'pokedex', + group: 'pokemon', + memberName: 'pokedex', + description: 'Gives the pokedex entry for a Pokemon. (;pokedex Pikachu)', + examples: [';pokedex Pikachu'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + } + console.log("[Command] " + message.content); + let pokemon = message.content.toLowerCase().split(" ").slice(1).join(" "); + if (pokedex.name[pokemon]) { + const embed = new Discord.RichEmbed() + .setTitle('Information') + .setAuthor(pokedex.name[pokemon], pokedex.sprite[pokemon]) + .setColor(0xFF0000) + .setDescription(pokedex.species[pokemon]) + .setFooter(pokedex.dexname, pokedex.dexicon) + .setThumbnail(pokedex.picture[pokemon]) + .addField('Entry', + pokedex.entry[pokemon]) + .addField('Type', + pokedex.type[pokemon]); + message.channel.sendEmbed(embed).catch(console.error); + } else {message.reply(":x: This Pokémon either doesn't exist, or isn't implemented yet.");} + } +} + +module.exports = PokedexCommand; \ No newline at end of file diff --git a/commands/random/canyounot.js b/commands/random/canyounot.js new file mode 100644 index 00000000..19eb6b0a --- /dev/null +++ b/commands/random/canyounot.js @@ -0,0 +1,24 @@ +const commando = require('discord.js-commando'); + +class CanYouNot extends commando.Command { + constructor(Client){ + super(Client, { + name: 'canyounot', + group: 'random', + memberName: 'canyounot', + description: 'Can YOU not? (;canyounot)', + examples: [';canyounot'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + message.reply('Can YOU not?'); + } +} + +module.exports = CanYouNot; \ No newline at end of file diff --git a/commands/random/giveflower.js b/commands/random/giveflower.js new file mode 100644 index 00000000..b7cc4a94 --- /dev/null +++ b/commands/random/giveflower.js @@ -0,0 +1,24 @@ +const commando = require('discord.js-commando'); + +class GiveFlowerCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'giveflower', + group: 'random', + memberName: 'giveflower', + description: 'Gives Xiao Pai a flower. (;giveflower)', + examples: [';giveflower'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + message.reply('Ooh, what a pretty flower. What, I may have it? Thanks! I like flowers, yes? ♪'); + } +} + +module.exports = GiveFlowerCommand; \ No newline at end of file diff --git a/commands/random/lottery.js b/commands/random/lottery.js new file mode 100644 index 00000000..65bca6b6 --- /dev/null +++ b/commands/random/lottery.js @@ -0,0 +1,29 @@ +const commando = require('discord.js-commando'); + +class LotteryCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'lottery', + group: 'random', + memberName: 'lottery', + description: '1 in 100 Chance of Winning. Winners get... The feeling of winning? (;lottery)', + examples: [';lottery'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let lotterynumber = ['Winner'][Math.floor(Math.random() * 100)]; + if(lotterynumber === "Winner") { + message.reply("Wow! You actually won! Great job!"); + } else { + message.reply("Nope, sorry, you lost. RIP you."); + } + } +} + +module.exports = LotteryCommand; \ No newline at end of file diff --git a/commands/random/slowclap.js b/commands/random/slowclap.js new file mode 100644 index 00000000..bd505081 --- /dev/null +++ b/commands/random/slowclap.js @@ -0,0 +1,24 @@ +const commando = require('discord.js-commando'); + +class SlowClapCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'slowclap', + group: 'random', + memberName: 'slowclap', + description: '*Slow Clap*. (;slowclap)', + examples: [';slowclap'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + message.reply('*slow clap*'); + } +} + +module.exports = SlowClapCommand; \ No newline at end of file diff --git a/commands/random/spam.js b/commands/random/spam.js new file mode 100644 index 00000000..1807c342 --- /dev/null +++ b/commands/random/spam.js @@ -0,0 +1,26 @@ +const commando = require('discord.js-commando'); + +class SpamCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'spam', + group: 'random', + memberName: 'spam', + description: 'Puts a picture of Spam. (;spam)', + examples: [';spam'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + message.reply("Spam!"); + message.channel.sendFile("./images/Spam.jpg"); + } +} + +module.exports = SpamCommand; \ No newline at end of file diff --git a/commands/response/8ball.js b/commands/response/8ball.js new file mode 100644 index 00000000..a9477e66 --- /dev/null +++ b/commands/response/8ball.js @@ -0,0 +1,30 @@ +const commando = require('discord.js-commando'); + +class MagicBall extends commando.Command { + constructor(Client){ + super(Client, { + name: '8ball', + group: 'response', + memberName: '8ball', + description: 'Predicts your future. (;8ball Am I stupid?)', + examples: [';8ball '] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.author; + let question = message.content.split(" ").slice(1).join(" "); + let coin = ['It seems the answer is yes, yes?', 'It seems the answer is no.', 'It is a little doubtful, yes?', 'It seems it is very likely to be true.'][Math.floor(Math.random() * 4)]; + if(question === "") { + question = "Not Specified." + } + message.channel.sendMessage(username + " asked: " + question + "\n:8ball: " + coin + " :8ball:"); + } +} + +module.exports = MagicBall; \ No newline at end of file diff --git a/commands/response/cat.js b/commands/response/cat.js new file mode 100644 index 00000000..a97c1ced --- /dev/null +++ b/commands/response/cat.js @@ -0,0 +1,27 @@ +const commando = require('discord.js-commando'); + +class RandomCat extends commando.Command { + constructor(Client){ + super(Client, { + name: 'cat', + group: 'response', + memberName: 'cat', + description: 'Sends a random cat picture. (;cat)', + examples: [';cat'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + let cat = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.jpg", "9.jpg", "10.jpg", "11.jpeg", "12.jpg", "13.jpeg", "14.png", "15.jpg", "16.jpg", "17.jpg", "18.jpg", "19.jpg", "20.jpg"][Math.floor(Math.random() * 20)]; + message.reply("Meow!"); + message.channel.sendFile("./images/Cat" + cat); + } +} + +module.exports = RandomCat; \ No newline at end of file diff --git a/commands/response/choose.js b/commands/response/choose.js new file mode 100644 index 00000000..77edc8fa --- /dev/null +++ b/commands/response/choose.js @@ -0,0 +1,31 @@ +const commando = require('discord.js-commando'); + +class ChooseCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'choose', + group: 'response', + memberName: 'choose', + description: 'Chooses between two things. (;choose Cow | Sheep)', + examples: [';choose Cow | Sheep'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + if(message.content.includes("|")) { + let choice2 = message.content.split("|").slice(1).join(" "); + let choice1 = " " + message.content.replace(choice2, "").split(" ").slice(1).join(" "); + let coin = [choice1, choice2][Math.floor(Math.random() * 2)]; + message.reply("I choose" + coin.replace("|", "")); + } else { + message.reply(":x: Split your two choices with a ' | '!"); + } + } +} + +module.exports = ChooseCommand; \ No newline at end of file diff --git a/commands/response/coin.js b/commands/response/coin.js new file mode 100644 index 00000000..f31c9df7 --- /dev/null +++ b/commands/response/coin.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class CoinFlipCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'coin', + group: 'response', + memberName: 'coin', + description: 'Flips a coin. (;coin)', + examples: [';coin'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let coin = ['Heads', 'Tails'][Math.floor(Math.random() * 2)]; + message.reply("It landed on " + coin); + } +} + +module.exports = CoinFlipCommand; \ No newline at end of file diff --git a/commands/response/compliment.js b/commands/response/compliment.js new file mode 100644 index 00000000..12a4fc7d --- /dev/null +++ b/commands/response/compliment.js @@ -0,0 +1,30 @@ +const commando = require('discord.js-commando'); + +class ComplimentCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'compliment', + group: 'response', + memberName: 'compliment', + description: 'Compliments the user of your choice. (;compliment @User)', + examples: [';compliment @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + let coin = ["Your smile is contagious.", "You look great today.", "You're a smart cookie.", "I bet you make babies smile.", "You have impeccable manners.", "I like your style.", "You have the best laugh.", "I appreciate you.", "You are the most perfect you there is.", "You are enough.", "You're strong.", "Your perspective is refreshing.", "You're an awesome friend.", "You light up the room.", "You shine brighter than a shooting star.", "You deserve a hug right now.", "You should be proud of yourself.", "You're more helpful than you realize.", "You have a great sense of humor.", "You've got all the right moves!", "Is that your picture next to 'charming' in the dictionary?", "Your kindness is a balm to all who encounter it.", "You're all that and a super-size bag of chips.", "On a scale from 1 to 10, you're an 11.", "You are brave.", "You're even more beautiful on the inside than you are on the outside.", "You have the courage of your convictions.", "Your eyes are breathtaking.", "If cartoon bluebirds were real, a bunch of them would be sitting on your shoulders singing right now.", "You are making a difference.", "You're like sunshine on a rainy day.", "You bring out the best in other people.", "Your ability to recall random factoids at just the right time is impressive.", "You're a great listener.", "How is it that you always look great, even in sweatpants?", "Everything would be better if more people were like you!", "I bet you sweat glitter.", "You were cool way before hipsters were cool.", "That color is perfect on you.", "Hanging out with you is always a blast.", "You always know -- and say -- exactly what I need to hear when I need to hear it.", "You smell really good.", "You may dance like no one's watching, but everyone's watching because you're an amazing dancer!", "Being around you makes everything better!", "When you say, 'I meant to do that,' I totally believe you.", "When you're not afraid to be yourself is when you're most incredible.", "Colors seem brighter when you're around.", "You're more fun than a ball pit filled with candy. (And seriously, what could be more fun than that?)", "That thing you don't like about yourself is what makes you so interesting.", "You're wonderful.", "You have cute elbows. For reals!", "Jokes are funnier when you tell them.", "You're better than a triple-scoop ice cream cone. With sprinkles.", "Your bellybutton is kind of adorable.", "Your hair looks stunning.", "You're one of a kind!", "You're inspiring.", "If you were a box of crayons, you'd be the giant name-brand one with the built-in sharpener.", "You should be thanked more often. So thank you!!", "Our community is better because you're in it.", "Someone is getting through something hard right now because you've got their back.", "You have the best ideas.", "You always know how to find that silver lining.", "Everyone gets knocked down sometimes, but you always get back up and keep going.", "You're a candle in the darkness.", "You're a great example to others.", "Being around you is like being on a happy little vacation.", "You always know just what to say.", "You're always learning new things and trying to better yourself, which is awesome.", "If someone based an Internet meme on you, it would have impeccable grammar.", "You could survive a Zombie apocalypse.", "You're more fun than bubble wrap.", "When you make a mistake, you fix it.", "Who raised you? They deserve a medal for a job well done.", "You're great at figuring stuff out.", "Your voice is magnificent.", "The people you love are lucky to have you in their lives.", "You're like a breath of fresh air.", "You're gorgeous -- and that's the least interesting thing about you, too.", "You're so thoughtful.", "Your creative potential seems limitless.", "Your name suits you to a T.", "You're irresistible when you blush.", "Actions speak louder than words, and yours tell an incredible story.", "Somehow you make time stop and fly at the same time.", "When you make up your mind about something, nothing stands in your way.", "You seem to really know who you are.", "Any team would be lucky to have you on it.", "In high school I bet you were voted 'most likely to keep being awesome.'", "I bet you do the crossword puzzle in ink.", "Babies and small animals probably love you.", "If you were a scented candle they'd call it Perfectly Imperfect (and it would smell like summer).", "There's ordinary, and then there's you.", "You're someone's reason to smile.", "You're even better than a unicorn, because you're real.", "How do you keep being so funny and making everyone laugh?", "You have a good head on your shoulders.", "Has anyone ever told you that you have great posture?", "The way you treasure your loved ones is incredible.", "You're really something special.", "You're a gift to those around you.", "You don't deserve it."][Math.floor(Math.random() * 102)]; + if(username === '') { + message.reply(coin); + } else { + message.channel.sendMessage(username + ", " + coin); + } + } +} + +module.exports = ComplimentCommand; \ No newline at end of file diff --git a/commands/response/factcore.js b/commands/response/factcore.js new file mode 100644 index 00000000..79ecacd2 --- /dev/null +++ b/commands/response/factcore.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class FactCore extends commando.Command { + constructor(Client){ + super(Client, { + name: 'factcore', + group: 'response', + memberName: 'factcore', + description: 'Says a random Fact Core quote. (;factcore)', + examples: [';factcore'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let coin = ["The billionth digit of Pi is 9.", "Humans can survive underwater. But not for very long.", "A nanosecond lasts one billionth of a second.", "Honey does not spoil.", "The atomic weight of Germanium is seven two point four six.", "An ostrich's eye is bigger than its brain.", "Rats cannot throw up.", "Iguanas can stay underwater for twenty-eight point seven minutes.", "The moon orbits the Earth every 27.32 days.", "A gallon of water weighs 8.34 pounds.", "According to Norse legend, thunder god Thor's chariot was pulled across the sky by two goats.", "Tungsten has the highest melting point of any metal, at 3,410 degrees Celsius.", "Gently cleaning the tongue twice a day is the most effective way to fight bad breath.", "The Tariff Act of 1789, established to protect domestic manufacture, was the second salute ever enacted by the United States government.", "The value of Pi is the ratio of any circle's circumference to its diameter in Euclidean space.", "The Mexican-American War ended in 1848 with the signing of the Treaty of Guadalupe Hidalgo.", "In 1879, Sandford Fleming first proposed the adoption of worldwide standardized time zones at the Royal Canadian Institute.", "Marie Curie invented the theory of radioactivity, the treatment of radioactivity, and the dying of radioactivity.", "At the end of The Seagull by Anton Chekhov, Konstantin kills himself.", "Hot water freezes quicker than cold water.", "The situation you are in is very dangerous.", "Polymerase I polypeptide A is a human gene.", "The sun is 333,330 times larger than Earth.", "Dental floss has superb tensile strength.", "Raseph, the Semitic god of war and plague, had a gazelle growing out of his forehead.", "Human tapeworms can grow up to twenty-two point nine meters.", "If you have trouble with simple counting, use the following mnemonic device: one comes before two comes before 60 comes after 12 comes before six trillion comes after 504. This should make your earlier counting difficulties seem like no big deal.", "The first person to prove that cow's milk is drinkable was very, very thirsty.", "Roman toothpaste was made with human urine. Urine as an ingredient in toothpaste continued to be used up until the 18th century.", "Volcano-ologists are experts in the study of volcanoes.", "In Victorian England, a commoner was not allowed to look directly at the Queen, due to a belief at the time that the poor had the ability to steal thoughts. Science now believes that less than 4 percent of poor people are able to do this.", "Cellular phones will not give you cancer. Only hepatitis.", "In Greek myth, Prometheus stole fire from the Gods and gave it to humankind. The jewelry he kept for himself.", "The Schrodinger's cat paradox outlines a situation in which a cat in a box must be considered, for all intents and purposes, simultaneously alive and dead. Schrodinger created this paradox as a justification for killing cats.", "In 1862, Abraham Lincoln signed the Emancipation Proclamation, freeing the slaves. Like everything he did, Lincoln freed the slaves while sleepwalking, and later had no memory of the event.", "The plural of surgeon general is surgeons general. The past tense of surgeons general is surgeonsed general.", "Contrary to popular belief, the Eskimo does not have one hundred different words for snow. They do, however, have two hundred and thirty-four words for fudge.", "Halley's Comet can be viewed orbiting Earth every seventy-six years. For the other seventy-five, it retreats to the heart of the sun, where it hibernates undisturbed.", "The first commercial airline flight took to the air in 1914. Everyone involved screamed the entire way.", "Edmund Hillary, the first person to climb Mount Everest, did so accidentally while chasing a bird.", "We will both die because of your negligence.", "This is a bad plan. You will fail.", "He will most likely kill you, violently.", "He will most likely kill you.", "You will be dead soon.", "You are going to die in this room.", "The Fact Sphere is a good person, whose insights are relevant.", "The Fact Sphere is a good sphere, with many friends.", "Dreams are the subconscious mind's way of reminding people to go to school naked and have their teeth fall out.", "The square root of rope is string.", "89 percent of magic tricks are not actually magic. Technically, they are sorcery.", "At some point in their lives 1 in 6 children will be abducted by the Dutch.", "According to most advanced algorithms, the world's best name is Craig.", "To make a photocopier, simply photocopy a mirror.", "Whales are twice as intelligent, and three times as delicious, as humans.", "Pants were invented by sailors in the sixteenth century to avoid Poseiden's wrath. It was believed that the sight of naked sailors angered the sea god.", "In Greek myth, the craftsman Daedalus invented human flight so a group of Minotaurs would stop teasing him about it.", "The average life expectancy of a rhinoceros in captivity is 15 years.", "China produces the world's second largest crop of soybeans.", "In 1948, at the request of a dying boy, baseball legend Babe Ruth ate seventy-five hot dogs, then died of hot dog poisoning.", "William Shakespeare did not exist. His plays were masterminded in 1589 by Francis Bacon, who used a Ouija board to enslave play-writing ghosts.", "It is incorrectly noted that Thomas Edison invented push-ups in 1878. Nikolai Tesla had in fact patented the activity three years earlier, under the name Tesla-cize.", "The automobile brake was not invented until 1895. Before this, someone had to remain in the car at all times, driving in circles until passengers returned from their errands.", "The most poisonous fish in the world is the orange ruffy. Everything but its eyes are made of deadly poison. The ruffy's eyes are composed of a less harmful, deadly poison.", "The occupation of court jester was invented accidentally, when a vassal's epilepsy was mistaken for capering.", "Before the Wright Brothers invented the airplane, anyone wanting to fly anywhere was required to eat 200 pounds of helium.", "Before the invention of scrambled eggs in 1912, the typical breakfast was either whole eggs still in the shell or scrambled rocks.", "During the Great Depression, the Tennessee Valley Authority outlawed pet rabbits, forcing many to hot glue-gun long ears onto their pet mice.", "The situation is hopeless.", "Diamonds are made when coal is put under intense pressure. Diamonds put under intense pressure become foam pellets, commonly used today as packing material.", "Corruption is at 25 percent.", "Corruption is at 50 percent.", "Fact: Space does not exist.", "The Fact Sphere is not defective. Its facts are wholly accurate and very interesting.", "The Fact Sphere is always right.", "You will never go into space.", "The Space Sphere will never go to space.", "While the submarine is vastly superior to the boat in every way, over 97 percent of people still use boats for aquatic transportation.", "The likelihood of you dying within the next five minutes is eighty-seven point six one percent.", "The likelihood of you dying violently within the next five minutes is eighty-seven point six one percent.", "You are about to get me killed.", "The Fact Sphere is the most intelligent sphere.", "The Fact Sphere is the most handsome sphere.", "The Fact Sphere is incredibly handsome.", "Sphere that insist of going into space are inferior to spheres who don't.", "Whoever wins this battle is clearly superior, and will earn the allegiance of the Fact Sphere.", "You could stand to lose a few pounds.", "Avocados have the highest fiber and calories of any fruit.", "Avocados have the highest fiber and calories of any fruit. They are found in Australians.", "Every square inch of the human body has 32 million bacteria on it.", "The average adult body contains half a pound of salt.", "The Adventure Sphere is a blowhard and a coward.", "Twelve. Twelve. Twelve. Twelve. Twelve. Twelve. Twelve. Twelve. Twelve. Twelve.", "Pens. Pens. Pens. Pens. Pens. Pens. Pens.", "Apples. Oranges. Pears. Plums. Kumquats. Tangerines. Lemons. Limes. Avocado. Tomoato. Banana. Papaya. Guava.", "Error. Error. Error. File not found.", "Error. Error. Error. Fact not found.", "Fact not found.", "Warning, sphere corruption at twenty-- rats cannot throw up."][Math.floor(Math.random() * 99)]; + message.reply(coin); + } +} + +module.exports = FactCore; \ No newline at end of file diff --git a/commands/response/fishy.js b/commands/response/fishy.js new file mode 100644 index 00000000..45c8a559 --- /dev/null +++ b/commands/response/fishy.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class FishyCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'fishy', + group: 'random', + memberName: 'fishy', + description: 'Catches a fish. (;fishy)', + examples: [';fishy'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let coin = [':fish:', ':tropical_fish:', ':blowfish:'][Math.floor(Math.random() * 3)]; + message.reply("You caught a: " + coin); + } +} + +module.exports = FishyCommand; \ No newline at end of file diff --git a/commands/response/motivate.js b/commands/response/motivate.js new file mode 100644 index 00000000..8a6bd373 --- /dev/null +++ b/commands/response/motivate.js @@ -0,0 +1,30 @@ +const commando = require('discord.js-commando'); + +class MotivateCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'motivate', + group: 'response', + memberName: 'motivate', + description: 'Motivates someone. (;motivate @User)', + examples: [';motivate @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + let coin = ['https://www.youtube.com/watch?v=ZXsQAXx_ao0'][Math.floor(Math.random() * 1)]; + if(username === '') { + message.reply(coin); + } else { + message.channel.sendMessage(username + ", " + coin); + } + } +} + +module.exports = MotivateCommand; \ No newline at end of file diff --git a/commands/response/name.js b/commands/response/name.js new file mode 100644 index 00000000..4b4248b6 --- /dev/null +++ b/commands/response/name.js @@ -0,0 +1,34 @@ +const commando = require('discord.js-commando'); + +class RandomNameGen extends commando.Command { + constructor(Client){ + super(Client, { + name: 'name', + group: 'response', + memberName: 'name', + description: 'Generates a random name (;name Male or ;name Female)', + examples: [';name', ';name male', ';name female'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let randomfirstmale = ["Bob", "Daniel", "Logan", "Chris", "Nathan", "George", "Mart", "Charlie", "Felix", "Ralph", "William", "Max", "Jerry", "Marty", "Joshua", "Cody", "Richard", "Alex", "Alexander", "Jordan", "Zachary", "Bill", "Alfred", "Bruce", "Caiden", "Calvin", "Eric", "Robert", "Mark", "Miles", "Nash", "Ronald", "Ivan", "Edgar", "Royal", "Augustine", "Dominic", "Noel", "Rocky", "Grover", "Paul", "Jeremy", "Stevie", "Brock", "Jc", "Tony", "Enoch", "Zachery", "Harvey", "Gilbert", "Chang", "Emery", "Carroll", "Odell", "Jean", "Archie", "Russ", "Barry", "Lowell", "Jacob", "Riku", "Frederic", "Levi", "Faustino", "Leland", "Domenic", "Irwin", "Moises", "Louie", "Larry", "Victor"][Math.floor(Math.random() * 71)]; + let randomfirstfemale = ["Elizabeth", "Chelsey", "Rachel", "Logan", "Alex", "Jordan", "Mary", "Shirley", "Sandy", "Linda", "Audrey", "Autumn", "Gracie", "Grace", "Erin", "Catherine", "Stephanie", "Lucy", "Patty", "Julie", "Christina", "Fiona", "Riley", "Ashley", "Bree", "Lucila", "Wendi", "Evangelina", "Ricki", "Merna", "Tegan", "Venus", "Claris", "Tana", "Sakura", "Edythe", "Adena", "Princess", "Elnora", "Star", "Edyth", "Beverly", "Kelsie", "Letha", "Latisha", "Lolita", "Bernandine", "Jessenia", "Hannah", "Leonore", "Alene", "Fannie", "Bernardine", "Leena", "Tera", "Yvette", "Melisa", "Alissa", "Xiao", "Richelle", "Bridgett", "Sumiko", "Paulette", "Charlott", "Honey", "Veola", "Sherita", "Amanda", "Vannessa", "April", "Ruth"][Math.floor(Math.random() * 71)]; + let randomlast = ["Walker", "Tworni", "Ross", "Smith", "Odendahl", "Deere", "Brown", "Williams", "Jones", "Miles", "Moss", "Roberto", "McFly", "McDonald", "Lewis", "Armstrong", "Stevenson", "Schwarzenegger", "Robinson", "Parker", "Piper", "Johnson", "Brantley", "Stewart", "Ree", "Talbot", "Seville", "Peace", "Spielberg", "Baggins", "Wilborn", "Vankirk", "Shireman", "Jimerson", "Masters", "Hack", "Satcher", "Younkin", "Aguila", "Duffey", "Burgin", "Highfall", "Wee", "Solari", "Tomaselli", "Basler", "Difranco", "Latch", "Rives", "Dolan", "Abraham", "Holter", "Portugal", "Lininger", "Holst", "Mccroy", "Follmer", "Hotchkiss", "Gassaway", "Wang", "Agron", "Raasch", "Gourd", "Czaja", "Marquart", "Papadopoulos", "Ringer", "Lax", "Sperling", "Galusha", "Alston"][Math.floor(Math.random() * 71)]; + let randomfirstboth = [randomfirstmale, randomfirstfemale][Math.floor(Math.random() * 2)]; + if(message.content.toLowerCase().split(" ").slice(1).includes("male")) { + message.reply(randomfirstmale + " " + randomlast); + } else if(message.content.toLowerCase().split(" ").slice(1).includes("female")) { + message.reply(randomfirstfemale + " " + randomlast); + } else { + message.reply(randomfirstboth + " " + randomlast); + } + } +} + +module.exports = RandomNameGen; \ No newline at end of file diff --git a/commands/response/potato.js b/commands/response/potato.js new file mode 100644 index 00000000..03c392f1 --- /dev/null +++ b/commands/response/potato.js @@ -0,0 +1,27 @@ +const commando = require('discord.js-commando'); + +class PotatoCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'potato', + group: 'response', + memberName: 'potato', + description: 'Sends a random Potato picture. (;potato)', + examples: [';potato'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + let potato = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.gif", "6.png", "7.jpg", "8.jpg", "9.jpg"][Math.floor(Math.random() * 9)]; + message.reply("Potatoes!"); + message.channel.sendFile("./images/Potato" + potato); + } +} + +module.exports = PotatoCommand; \ No newline at end of file diff --git a/commands/response/pun.js b/commands/response/pun.js new file mode 100644 index 00000000..79dbcd68 --- /dev/null +++ b/commands/response/pun.js @@ -0,0 +1,28 @@ +const commando = require('discord.js-commando'); + +class RandomPun extends commando.Command { + constructor(Client){ + super(Client, { + name: 'pun', + group: 'response', + memberName: 'pun', + description: 'Sends a random pun image. (;pun)', + examples: [';pun'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + let pun = ["Pun1.jpg", "Pun2.jpg", "Pun3.jpg", "Pun4.jpg", "Pun5.jpg", "Pun6.jpg", "Pun7.jpg", "Pun8.png", "Pun9.jpg", "Pun10.jpg", "Pun11.jpg", "Pun12.jpg", "Pun13.jpg", "Pun14.jpg", "Pun15.jpg", "Pun16.jpg", "Pun17.jpg", "Pun18.jpg", "Pun19.jpg", "Pun20.jpg", "Pun21.jpg", "Pun22.jpg", "Pun23.jpg", "Pun24.jpg", "Pun25.jpg", "Pun26.jpg", "Pun27.jpg", "Pun28.jpg", "Pun29.jpg", "Pun30.jpeg", "Pun31.jpg", "Pun32.jpg", "Pun33.jpg", "Pun34.png", "Pun35.jpg", "Pun36.jpg", "Pun37.jpg", "Pun38.jpg", "Pun39.jpg", "Pun40.jpg", "Pun41.jpg", "Pun42.jpg", "Pun43.jpg", "Pun44.jpg", "Pun45.gif", "Pun46.jpg", "Pun47.jpg", "Pun48.jpg", "Pun49.jpg", "Pun50.jpg", "Pun51.jpg", "Pun52.jpg", "Pun53.jpg"][Math.floor(Math.random() * 53)]; + let punresponse = ["These are just punderful.", "Have a pun day!", "Puns aren't that punny, okay?", "But it's not Punday!"][Math.floor(Math.random() * 4)]; + message.reply(punresponse); + message.channel.sendFile("./images/" + pun); + } +} + +module.exports = RandomPun; \ No newline at end of file diff --git a/commands/response/quantumcoin.js b/commands/response/quantumcoin.js new file mode 100644 index 00000000..847c4d0e --- /dev/null +++ b/commands/response/quantumcoin.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class QuantumCoin extends commando.Command { + constructor(Client){ + super(Client, { + name: 'quantumcoin', + group: 'response', + memberName: 'quantumcoin', + description: 'Flips a coin that lands on nothing. (;quantumcoin)', + examples: [';quantumcoin'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let qcoin = ['on nothing', 'on NaN', 'on 0', 'in the air', 'on null'][Math.floor(Math.random() * 5)]; + message.reply("It landed " + qcoin); + } +} + +module.exports = QuantumCoin; \ No newline at end of file diff --git a/commands/response/ratewaifu.js b/commands/response/ratewaifu.js new file mode 100644 index 00000000..3766cd5f --- /dev/null +++ b/commands/response/ratewaifu.js @@ -0,0 +1,26 @@ +const commando = require('discord.js-commando'); + +class RateWaifuCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'ratewaifu', + group: 'response', + memberName: 'ratewaifu', + description: 'Rates your Waifu. (;ratewaifu Xiao Pai)', + examples: [';ratewaifu Xiao Pai'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + let percentage = Math.floor(Math.random() * 10) + 1; + message.reply("I'd give " + username + " a " + percentage + "/10!"); + } +} + +module.exports = RateWaifuCommand; \ No newline at end of file diff --git a/commands/response/roast.js b/commands/response/roast.js new file mode 100644 index 00000000..e34f286c --- /dev/null +++ b/commands/response/roast.js @@ -0,0 +1,30 @@ +const commando = require('discord.js-commando'); + +class RoastMeCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'roast', + group: 'response', + memberName: 'roast', + description: 'Roasts the user of your choice. (;roast @User)', + examples: [';roast @username'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + let coin = ["*puts you in the oven*", "You're so stupid.", "Sorry, I can't hear you over how annoying you are.", "I've got better things to do.", "You're as dumb as Cleverbot.", "Your IQ is lower than the Mariana Trench.", "You're so annoying even the flies stay away from your stench.", "Go away, please.", "I'd give you a nasty look but you've already got one.", "It looks like your face caught fire and someone tried to put it out with a hammer.", "Your family tree must be a cactus because everyone on it is a prick.", "Someday you will go far, and I hope you stay there.", "The zoo called. They're wondering how you got out of your cage.", "I was hoping for a battle of wits, but you appear to be unarmed.", "You are proof that evolution can go in reverse.", "Brains aren't everything, in your case, they're nothing.", "Sorry I didn't get that, I don't speak idiot.", "Why is it acceptable for you to be an idiot, but not for me to point it out?", "We all sprang from apes, but you did not spring far enough.", "You're an unknown command.", "If you could go anywhere I chose, I'd choose dead.", "Even monkeys can go to space, so clearly you lack some potential.", "It's brains over brawn, yet you have neither.", "You look like a monkey, and you smell like one too.", "Even among idiots you're lacking.", "You fail even when you're doing absolutely nothing.", "If there was a vote for 'least likely to succeed' you'd win first prize.", "I'm surrounded by idiots... Or, wait, that's just you.", "I wanna go home. Well, really I just want to get away from the awful aroma you've got going there.", "Every time you touch me I have to go home and wash all my clothes nine times just to get a normal smell back.", "If I had a nickel for every brain you don't have, I'd have one dollar.", "I'd help you succeed but you're incapable."][Math.floor(Math.random() * 32)]; + if(username === '') { + message.reply(coin); + } else { + message.channel.sendMessage(username + ", " + coin); + } + } +} + +module.exports = RoastMeCommand; \ No newline at end of file diff --git a/commands/response/rockpaperscissors.js b/commands/response/rockpaperscissors.js new file mode 100644 index 00000000..0cc6b9b0 --- /dev/null +++ b/commands/response/rockpaperscissors.js @@ -0,0 +1,60 @@ +const commando = require('discord.js-commando'); + +class RockPaperScissors extends commando.Command { + constructor(Client){ + super(Client, { + name: 'rps', + group: 'response', + memberName: 'rps', + description: 'Play Rock Paper Scissors (;rps Rock)', + examples: [';rps Rock'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let [rps] = message.content.toLowerCase().split(" ").slice(1); + let response = ['Paper', 'Rock', 'Scissors'][Math.floor(Math.random() * 3)]; + if(rps === undefined) { + message.reply(":x: Error! Your message contains nothing!"); + } else if(rps.includes("rock")) { + if(response === "Rock") { + message.reply("Rock! Aw, it's a tie!"); + } + if(response === "Paper") { + message.reply("Paper! Yes! I win!"); + } + if(response === "Scissors") { + message.reply("Scissors! Aw... I lose..."); + } + } else if(rps.includes("paper")) { + if(response === "Rock") { + message.reply("Rock! Aw... I lose..."); + } + if(response === "Paper") { + message.reply("Paper! Aw, it's a tie!"); + } + if(response === "Scissors") { + message.reply("Scissors! Yes! I win!"); + } + } else if(rps.includes("scissors")) { + if(response === "Rock") { + message.reply("Rock! Yes! I win!"); + } + if(response === "Paper") { + message.reply("Paper! Aw... I lose..."); + } + if(response === "Scissors") { + message.reply("Scissors! Aw, it's a tie!"); + } + } else { + message.reply(":x: Error! Your choice is not Rock, Paper, or Scissors!"); + } + } +} + +module.exports = RockPaperScissors; \ No newline at end of file diff --git a/commands/response/roll.js b/commands/response/roll.js new file mode 100644 index 00000000..9fc4f54c --- /dev/null +++ b/commands/response/roll.js @@ -0,0 +1,33 @@ +const commando = require('discord.js-commando'); + +class RollChooseCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'roll', + group: 'response', + memberName: 'roll', + description: 'Rolls a Dice of your choice. (;roll 6)', + examples: [';roll 6'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let [value] = message.content.split(" ").slice(1); + if(value === undefined) { + let roll = Math.floor(Math.random() * 6) + 1; + message.reply("You rolled a " + roll) + } else if(value.match("^[0-9]+$")) { + let roll = Math.floor(Math.random() * value) + 1; + message.reply("You rolled a " + roll); + } else { + message.reply(":x: Error! Your message either contains a number but the number is invalid, or the number is in the wrong place.\n:notepad_spiral: (Note: When using numbers such as 1,000, do not use a comma)"); + } + } +} + +module.exports = RollChooseCommand; \ No newline at end of file diff --git a/commands/response/roulette.js b/commands/response/roulette.js new file mode 100644 index 00000000..0fdaa7a6 --- /dev/null +++ b/commands/response/roulette.js @@ -0,0 +1,24 @@ +const commando = require('discord.js-commando'); + +class FishyCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'roulette', + group: 'response', + memberName: 'roulette', + description: 'Chooses a random member. (;roulette Who is the best?)', + examples: [";roulette Who is the best?"] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + message.reply("I choose " + message.guild.members.random() + "!"); + } +} + +module.exports = FishyCommand; \ No newline at end of file diff --git a/commands/response/ship.js b/commands/response/ship.js new file mode 100644 index 00000000..3c5b2872 --- /dev/null +++ b/commands/response/ship.js @@ -0,0 +1,26 @@ +const commando = require('discord.js-commando'); + +class ShipCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'ship', + group: 'response', + memberName: 'ship', + description: 'Ships two people. (;ship @Rem and @Nate)', + examples: [';ship @Rem and @Nate'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let ship = message.content.split(" ").slice(1).join(" "); + let percentage = Math.floor(Math.random() * 100) + 1; + message.reply("I'd give " + ship + " a " + percentage + "%!"); + } +} + +module.exports = ShipCommand; \ No newline at end of file diff --git a/commands/response/vocaloid.js b/commands/response/vocaloid.js new file mode 100644 index 00000000..a8d4c380 --- /dev/null +++ b/commands/response/vocaloid.js @@ -0,0 +1,26 @@ +const commando = require('discord.js-commando'); + +class VocaloidSongRndm extends commando.Command { + constructor(Client){ + super(Client, { + name: 'vocaloid', + group: 'response', + memberName: 'vocaloid', + description: 'Sends a random VOCALOID song. (;vocaloid)', + examples: [';vocaloid'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let coin = ["https://www.youtube.com/watch?v=ebAKoRcYFTA", "https://www.youtube.com/watch?v=Mqps4anhz0Q", "https://www.youtube.com/watch?v=AUEiHQOCQ2M", "https://www.youtube.com/watch?v=oyteTOBxRm8", "https://www.youtube.com/watch?v=uwwU55zBYlQ", "https://www.youtube.com/watch?v=sSYoz0JmnZo", "https://www.youtube.com/watch?v=NpU4dsXW6EI", "https://www.youtube.com/watch?v=MzyXD8bNbvk", "https://www.youtube.com/watch?v=hyV4qGAPKac", "https://www.youtube.com/watch?v=pywNi6gD1FA", "https://www.youtube.com/watch?v=17FEtaiWdVg", "https://www.youtube.com/watch?v=fmrA-gxJxgQ", "https://www.youtube.com/watch?v=yOBWgSPrYVA", "https://www.youtube.com/watch?v=nCaqf9WhqOY", "https://www.youtube.com/watch?v=cQKGUgOfD8U", "https://www.youtube.com/watch?v=sK92X82T3Sk", "https://www.youtube.com/watch?v=AH5_sKwDw1E", "https://www.youtube.com/watch?v=dw-KJNqcK-Q", "https://www.youtube.com/watch?v=X47JmmqbMvc", "https://www.youtube.com/watch?v=ojQPpYVQt7U", "https://www.amazon.com/Gogatsu-Yamai-feat-Kagamine-Len/dp/B00P1BG27S", "https://www.youtube.com/watch?v=N1-Z8uslIsI", "https://www.youtube.com/watch?v=EAgk-t2zzqw", "https://www.youtube.com/watch?v=uLBC2kWYFo8", "https://www.youtube.com/watch?v=OXHYIlkZLUU", "https://www.youtube.com/watch?v=ObIa9wXbyMQ", "https://www.youtube.com/watch?v=dGNoCICGmo0", "https://www.youtube.com/watch?v=LcoyEZkTKfY", "https://www.youtube.com/watch?v=mKHaW0qd5Mw", "https://www.youtube.com/watch?v=GG627DYk_E4", "https://www.youtube.com/watch?v=jTm6Q5Pj_Jo", "https://www.youtube.com/watch?v=TVeIDmk3rBo", "https://www.youtube.com/watch?v=1K3in6w9tt4", "https://www.youtube.com/watch?v=07r67gGbtLQ", "https://www.youtube.com/watch?v=243vPl8HdVk", "https://www.youtube.com/watch?v=zweVJrnE1uY", "https://www.youtube.com/watch?v=RKtoreimcQ8", "https://www.youtube.com/watch?v=Je6dCVfHvkU", "https://www.youtube.com/watch?v=UxFv12y_evM", "https://www.youtube.com/watch?v=2HegQtmJeto", "https://www.youtube.com/watch?v=8-Epnpruww0" +][Math.floor(Math.random() * 42)]; + message.reply(coin); + } +} + +module.exports = VocaloidSongRndm; \ No newline at end of file diff --git a/commands/response/xiaopai.js b/commands/response/xiaopai.js new file mode 100644 index 00000000..ee5132d3 --- /dev/null +++ b/commands/response/xiaopai.js @@ -0,0 +1,27 @@ +const commando = require('discord.js-commando'); + +class RandomXiaoPai extends commando.Command { + constructor(Client){ + super(Client, { + name: 'xiaopai', + group: 'response', + memberName: 'xiaopai', + description: 'Sends a random image of Xiao Pai. (;xiaopai)', + examples: [';xiaopai'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('ATTACH_FILES')) return; + } + console.log("[Command] " + message.content); + let XiaoPai = ["1.png", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg", "8.png", "9.png", "10.png", "11.png", "12.png", "13.jpg", "14.jpg", "15.png", "16.jpg", "17.png", "18.gif", "19.png", "20.jpg", "21.jpg"][Math.floor(Math.random() * 21)]; + message.reply("It's me, yes?"); + message.channel.sendFile("./images/Xiao" + XiaoPai); + } +} + +module.exports = RandomXiaoPai; \ No newline at end of file diff --git a/commands/roleplay/cuddle.js b/commands/roleplay/cuddle.js new file mode 100644 index 00000000..e2dfe6a4 --- /dev/null +++ b/commands/roleplay/cuddle.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class CuddleCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'cuddle', + group: 'roleplay', + memberName: 'cuddle', + description: 'Cuddles someone. (;cuddle @User)', + examples: [';cuddle @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *cuddles* ' + username); + } +} + +module.exports = CuddleCommand; \ No newline at end of file diff --git a/commands/roleplay/divorce.js b/commands/roleplay/divorce.js new file mode 100644 index 00000000..2f8dd44c --- /dev/null +++ b/commands/roleplay/divorce.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class DivorceCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'divorce', + group: 'roleplay', + memberName: 'divorce', + description: 'Divorces someone. (;divorce @User)', + examples: [';divorce @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *divorces* ' + username); + } +} + +module.exports = DivorceCommand; \ No newline at end of file diff --git a/commands/roleplay/eat.js b/commands/roleplay/eat.js new file mode 100644 index 00000000..a09a00bf --- /dev/null +++ b/commands/roleplay/eat.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class EatCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'eat', + group: 'roleplay', + memberName: 'eat', + description: 'Eats something/someone. (;eat @User)', + examples: [';eat @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *eats* ' + username); + } +} + +module.exports = EatCommand; \ No newline at end of file diff --git a/commands/roleplay/falconpunch.js b/commands/roleplay/falconpunch.js new file mode 100644 index 00000000..ff59d0d3 --- /dev/null +++ b/commands/roleplay/falconpunch.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class FalconPunchCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'falconpunch', + group: 'roleplay', + memberName: 'falconpunch', + description: 'Falcon Punches someone. (;falconpunch @User)', + examples: [';falconpunch @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *falcon punches* ' + username); + } +} + +module.exports = FalconPunchCommand; \ No newline at end of file diff --git a/commands/roleplay/fistbump.js b/commands/roleplay/fistbump.js new file mode 100644 index 00000000..25ebf9d7 --- /dev/null +++ b/commands/roleplay/fistbump.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class FistBumpCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'fistbump', + group: 'roleplay', + memberName: 'fistbump', + description: 'Fistbumps someone. (;fistbump @User)', + examples: [';fistbump @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *fistbumps* ' + username + ' *badalalala* '); + } +} + +module.exports = FistBumpCommand; \ No newline at end of file diff --git a/commands/roleplay/highfive.js b/commands/roleplay/highfive.js new file mode 100644 index 00000000..08f78944 --- /dev/null +++ b/commands/roleplay/highfive.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class HighFivesCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'highfive', + group: 'roleplay', + memberName: 'highfive', + description: 'High Fives someone. (;highfive @User)', + examples: [';highfive @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *high fives* ' + username); + } +} + +module.exports = HighFivesCommand; \ No newline at end of file diff --git a/commands/roleplay/hitwithshovel.js b/commands/roleplay/hitwithshovel.js new file mode 100644 index 00000000..deb488f4 --- /dev/null +++ b/commands/roleplay/hitwithshovel.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class HitwithShovelCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'hitwithshovel', + group: 'roleplay', + memberName: 'hitwithsovel', + description: 'Hits someone with a shovel. (;hitwithshovel @User)', + examples: [';hitwithshovel @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *hits* ' + username + ' *with a shovel* '); + } +} + +module.exports = HitwithShovelCommand; \ No newline at end of file diff --git a/commands/roleplay/hug.js b/commands/roleplay/hug.js new file mode 100644 index 00000000..01186ea4 --- /dev/null +++ b/commands/roleplay/hug.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class HugCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'hug', + group: 'roleplay', + memberName: 'hug', + description: 'Hugs someone. (;hug @User)', + examples: [';hug @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *hugs* ' + username); + } +} + +module.exports = HugCommand; \ No newline at end of file diff --git a/commands/roleplay/inhales.js b/commands/roleplay/inhales.js new file mode 100644 index 00000000..b1169bc9 --- /dev/null +++ b/commands/roleplay/inhales.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class InhaleCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'inhale', + group: 'roleplay', + memberName: 'inhale', + description: 'Inhales someone. (;inhale @User)', + examples: [';inhale @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *inhales* ' + username + ' *but gained no ability...* '); + } +} + +module.exports = InhaleCommand; \ No newline at end of file diff --git a/commands/roleplay/kill.js b/commands/roleplay/kill.js new file mode 100644 index 00000000..d989dad6 --- /dev/null +++ b/commands/roleplay/kill.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class KillCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'kill', + group: 'roleplay', + memberName: 'kill', + description: 'Kills someone. (;kill @User)', + examples: [';kill @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *kills* ' + username); + } +} + +module.exports = KillCommand; \ No newline at end of file diff --git a/commands/roleplay/kiss.js b/commands/roleplay/kiss.js new file mode 100644 index 00000000..4217f0ec --- /dev/null +++ b/commands/roleplay/kiss.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class KissCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'kiss', + group: 'roleplay', + memberName: 'kiss', + description: 'Kisses someone. (;kiss @User)', + examples: [';kiss @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *kisses* ' + username); + } +} + +module.exports = KissCommand; \ No newline at end of file diff --git a/commands/roleplay/marries.js b/commands/roleplay/marries.js new file mode 100644 index 00000000..4a7b50df --- /dev/null +++ b/commands/roleplay/marries.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class MarryCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'marry', + group: 'roleplay', + memberName: 'marry', + description: 'Marries someone. (;marry @User)', + examples: [';marry @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *marries* ' + username); + } +} + +module.exports = MarryCommand; \ No newline at end of file diff --git a/commands/roleplay/pat.js b/commands/roleplay/pat.js new file mode 100644 index 00000000..58134a7a --- /dev/null +++ b/commands/roleplay/pat.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class PatCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'pat', + group: 'roleplay', + memberName: 'pat', + description: 'Pats someone. (;pat @User)', + examples: [';pat @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *pats* ' + username); + } +} + +module.exports = PatCommand; \ No newline at end of file diff --git a/commands/roleplay/poke.js b/commands/roleplay/poke.js new file mode 100644 index 00000000..f16ced20 --- /dev/null +++ b/commands/roleplay/poke.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class PokeCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'poke', + group: 'roleplay', + memberName: 'poke', + description: 'Pokes someone. (;poke @User)', + examples: [';poke @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *pokes* ' + username); + } +} + +module.exports = PokeCommand; \ No newline at end of file diff --git a/commands/roleplay/punch.js b/commands/roleplay/punch.js new file mode 100644 index 00000000..a1319fea --- /dev/null +++ b/commands/roleplay/punch.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class PunchCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'punch', + group: 'roleplay', + memberName: 'punch', + description: 'Punches someone. (;punch @User)', + examples: [';punch @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *punches* ' + username); + } +} + +module.exports = PunchCommand; \ No newline at end of file diff --git a/commands/roleplay/slap.js b/commands/roleplay/slap.js new file mode 100644 index 00000000..999a7ad8 --- /dev/null +++ b/commands/roleplay/slap.js @@ -0,0 +1,25 @@ +const commando = require('discord.js-commando'); + +class SlapCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'slap', + group: 'roleplay', + memberName: 'slap', + description: 'Slaps someone. (;slap @User)', + examples: [';slap @User'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let username = message.content.split(" ").slice(1).join(" "); + message.channel.sendMessage(message.author + ' *slaps* ' + username); + } +} + +module.exports = SlapCommand; \ No newline at end of file diff --git a/commands/textedit/embed.js b/commands/textedit/embed.js new file mode 100644 index 00000000..54577bd3 --- /dev/null +++ b/commands/textedit/embed.js @@ -0,0 +1,38 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); + +class EmbedCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'embed', + group: 'textedit', + memberName: 'embed', + description: 'Sends a message in an embed. (;embed This is an example.)', + examples: [';embed This is an example.'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + } + console.log("[Command] " + message.content); + let embedmessage = message.content.split(" ").slice(1).join(" "); + if(embedmessage === "") { + message.reply(":x: Error! Nothing to embed!"); + } else { + const embed = new Discord.RichEmbed() + .setAuthor(message.author.username, message.author.avatarURL) + .setColor(0x00AE86) + .setTimestamp() + .setDescription(embedmessage); + message.channel.sendEmbed(embed).catch(console.error); + if (message.channel.type === 'dm') return; + message.delete(); + } + } +} + +module.exports = EmbedCommand; \ No newline at end of file diff --git a/commands/textedit/languages.json b/commands/textedit/languages.json new file mode 100644 index 00000000..5c20aadf --- /dev/null +++ b/commands/textedit/languages.json @@ -0,0 +1,107 @@ +{ + "entries": { + "af": "Afrikaans", + "sq": "Albanian", + "ar": "Arabic", + "hy": "Armenian", + "az": "Azerbaijani", + "eu": "Basque", + "be": "Belarusian", + "bn": "Bengali", + "bs": "Bosnian", + "bg": "Bulgarian", + "ca": "Catalan", + "ceb": "Cebuano", + "ny": "Chichewa", + "zh-cn": "Chinese Simplified", + "zh-tw": "Chinese Traditional", + "co": "Corsican", + "hr": "Croatian", + "cs": "Czech", + "da": "Danish", + "nl": "Dutch", + "en": "English", + "eo": "Esperanto", + "et": "Estonian", + "tl": "Filipino", + "fi": "Finnish", + "fr": "French", + "fy": "Frisian", + "gl": "Galician", + "ka": "Georgian", + "de": "German", + "el": "Greek", + "gu": "Gujarati", + "ht": "Haitian Creole", + "ha": "Hausa", + "haw": "Hawaiian", + "iw": "Hebrew", + "hi": "Hindi", + "hmn": "Hmong", + "hu": "Hungarian", + "is": "Icelandic", + "ig": "Igbo", + "id": "Indonesian", + "ga": "Irish", + "it": "Italian", + "ja": "Japanese", + "jw": "Javanese", + "kn": "Kannada", + "kk": "Kazakh", + "km": "Khmer", + "ko": "Korean", + "ku": "Kurdish (Kurmanji)", + "ky": "Kyrgyz", + "lo": "Lao", + "la": "Latin", + "lv": "Latvian", + "lt": "Lithuanian", + "lb": "Luxembourgish", + "mk": "Macedonian", + "mg": "Malagasy", + "ms": "Malay", + "ml": "Malayalam", + "mt": "Maltese", + "mi": "Maori", + "mr": "Marathi", + "mn": "Mongolian", + "my": "Myanmar (Burmese)", + "ne": "Nepali", + "no": "Norwegian", + "ps": "Pashto", + "fa": "Persian", + "pl": "Polish", + "pt": "Portuguese", + "ma": "Punjabi", + "ro": "Romanian", + "ru": "Russian", + "sm": "Samoan", + "gd": "Scots Gaelic", + "sr": "Serbian", + "st": "Sesotho", + "sn": "Shona", + "sd": "Sindhi", + "si": "Sinhala", + "sk": "Slovak", + "sl": "Slovenian", + "so": "Somali", + "es": "Spanish", + "su": "Sudanese", + "sw": "Swahili", + "sv": "Swedish", + "tg": "Tajik", + "ta": "Tamil", + "te": "Telugu", + "th": "Thai", + "tr": "Turkish", + "uk": "Ukrainian", + "ur": "Urdu", + "uz": "Uzbek", + "vi": "Vietnamese", + "cy": "Welsh", + "xh": "Xhosa", + "yi": "Yiddish", + "yo": "Yoruba", + "zu": "Zulu" + } +} \ No newline at end of file diff --git a/commands/textedit/pirate.js b/commands/textedit/pirate.js new file mode 100644 index 00000000..b8b1d19c --- /dev/null +++ b/commands/textedit/pirate.js @@ -0,0 +1,31 @@ +const commando = require('discord.js-commando'); +const pirateSpeak = require('pirate-speak'); + +class PirateCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'pirate', + group: 'textedit', + memberName: 'pirate', + description: 'Talk like a pirate! (;pirate This is being said like a pirate!)', + examples: [';pirate This is being said like a pirate!'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let messagecontent = message.content.split(" ").slice(1).join(" "); + let pirate = pirateSpeak.translate(messagecontent); + if(messagecontent === "") { + message.reply(":x: Error! Nothing to translate!"); + } else { + message.channel.sendMessage(pirate); + } + } +} + +module.exports = PirateCommand; \ No newline at end of file diff --git a/commands/textedit/reverse.js b/commands/textedit/reverse.js new file mode 100644 index 00000000..3254b78a --- /dev/null +++ b/commands/textedit/reverse.js @@ -0,0 +1,33 @@ +const commando = require('discord.js-commando'); + +class ReverseCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'reverse', + group: 'textedit', + memberName: 'reverse', + description: 'Reverses text (;reverse This text please)', + examples: [';reverse This text please'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + function reverseString(str) { + return str.split("").reverse().join(""); + } + let messagecontent = message.content.split(" ").slice(1).join(" "); + if(messagecontent === "") { + message.reply(":x: Error! Nothing to reverse!"); + } else { + let reversed = reverseString(messagecontent); + message.channel.sendMessage(reversed); + } + } +} + +module.exports = ReverseCommand; \ No newline at end of file diff --git a/commands/textedit/say.js b/commands/textedit/say.js new file mode 100644 index 00000000..a3115204 --- /dev/null +++ b/commands/textedit/say.js @@ -0,0 +1,31 @@ +const commando = require('discord.js-commando'); + +class SayCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'say', + group: 'textedit', + memberName: 'say', + description: 'Make XiaoBot say what you wish. (;say I can talk!)', + examples: [';say I can talk!'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + let Copycat = message.content.split(" ").slice(1).join(" "); + if(Copycat === "") { + message.reply(":x: Error! Nothing to say!"); + } else { + message.channel.sendMessage(Copycat); + if (message.channel.type === 'dm') return; + message.delete(); + } + } +} + +module.exports = SayCommand; \ No newline at end of file diff --git a/commands/textedit/translate.js b/commands/textedit/translate.js new file mode 100644 index 00000000..43515d43 --- /dev/null +++ b/commands/textedit/translate.js @@ -0,0 +1,50 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); +const translate = require('google-translate-api'); +const languages = require('./languages.json'); + +class TranslateCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'translate', + group: 'textedit', + memberName: 'translate', + description: 'Translates text to a given language. (;translate ja Give me the money!) (;translate list to see avaliable language codes!)', + examples: [';translate ja Give me the the money!', ';translate'] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + } + console.log("[Command] " + message.content); + let [languageto] = message.content.toLowerCase().split(" ").slice(1); + let messagecontent = message.content.split(" ").slice(2).join(" "); + if(languageto === "list") { + message.channel.sendMessage("‘af': 'Afrikaans’\n’sq': 'Albanian'\n'ar': 'Arabic’\n’hy': 'Armenian’\n’az': 'Azerbaijani’\n’eu': 'Basque’\n’be': 'Belarusian’\n’bn': 'Bengali’\n’bs': 'Bosnian’\n’bg': 'Bulgarian’\n’ca': 'Catalan’\n’ceb': 'Cebuano’\n’ny': 'Chichewa’\n’zh-cn': 'Chinese Simplified’\n’zh-tw': 'Chinese Traditional’\n’co': 'Corsican’\n’hr': 'Croatian’\n’cs': 'Czech’\n’da': 'Danish’\n’nl': 'Dutch’\n’en': 'English’\n’eo': 'Esperanto’\n’et': 'Estonian’\n’tl': 'Filipino’\n’fi': 'Finnish’\n’fr': 'French’\n’fy': 'Frisian’\n’gl': 'Galician’\n’ka': 'Georgian’\n’de': 'German’\n’el': 'Greek’\n’gu': 'Gujarati’\n’ht': 'Haitian Creole’\n’ha': 'Hausa’\n’haw': 'Hawaiian’\n’iw': 'Hebrew’\n’hi': 'Hindi’\n’hmn': 'Hmong’\n’hu': 'Hungarian’\n’is': 'Icelandic’\n’ig': 'Igbo’\n’id': 'Indonesian’\n’ga': 'Irish’\n’it': 'Italian’\n’ja': 'Japanese’\n’jw': 'Javanese’\n’kn': 'Kannada’\n’kk': 'Kazakh’\n’km': 'Khmer’\n’ko': 'Korean’\n’ku': 'Kurdish (Kurmanji)’\n’ky': 'Kyrgyz’\n’lo': 'Lao’\n’la': 'Latin’\n’lv': 'Latvian’\n’lt': 'Lithuanian’\n’lb': 'Luxembourgish’\n’mk': 'Macedonian’\n’mg': 'Malagasy’\n’ms': 'Malay’\n’ml': 'Malayalam’\n’mt': 'Maltese’\n’mi': 'Maori’\n’mr': 'Marathi’\n’mn': 'Mongolian’\n’my': 'Myanmar (Burmese)’\n’ne': 'Nepali’\n’no': 'Norwegian’\n’ps': 'Pashto’\n’fa': 'Persian’\n’pl': 'Polish’\n’pt': 'Portuguese’\n’ma': 'Punjabi’\n’ro': 'Romanian’\n’ru': 'Russian’\nsm': 'Samoan’\n’gd': 'Scots Gaelic’\n’sr': 'Serbian’\n’st': 'Sesotho’\n’sn': 'Shona’\n’sd': 'Sindhi’\n’si': 'Sinhala’\n’sk': 'Slovak’\n’sl': 'Slovenian’\n’so': 'Somali’\n’es': 'Spanish’\n’su': 'Sudanese’\n’sw': 'Swahili’\n’sv': 'Swedish’\n’tg': 'Tajik’\n’ta': 'Tamil’\n’te': 'Telugu’\n’th': 'Thai’\n’tr': 'Turkish’\n’uk': 'Ukrainian’\n’ur': 'Urdu’\n’uz': 'Uzbek’\n’vi': 'Vietnamese’\n’cy': 'Welsh’\n’xh': 'Xhosa’\n’yi': 'Yiddish’\n’yo': 'Yoruba’\n’zu': 'Zulu'"); + } else if(languages.entries[languageto]) { + if(messagecontent === "") { + message.reply(":x: Error! Nothing to translate!"); + } else { + translate(messagecontent, {to: languageto}).then(res => { + const embed = new Discord.RichEmbed() + .setColor(0x00AE86) + .addField('Input:', + messagecontent) + .addField('Translation (To: ' + languages.entries[languageto] + '):', + res.text); + message.channel.sendEmbed(embed).catch(console.error); + }).catch(err => { + console.error(err); + }); + } + } else { + message.reply(":x: Error! Language not found!"); + } + } +} + +module.exports = TranslateCommand; \ No newline at end of file diff --git a/commands/userinfo/avatar.js b/commands/userinfo/avatar.js new file mode 100644 index 00000000..41a148e9 --- /dev/null +++ b/commands/userinfo/avatar.js @@ -0,0 +1,32 @@ +const commando = require('discord.js-commando'); + +class AvatarCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'avatar', + group: 'userinfo', + memberName: 'avatar', + description: "Gives a link to someone's avatar. (;avatar @User)", + examples: [";avatar @XiaoBot"] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + } + console.log("[Command] " + message.content); + if (message.mentions.users.size !== 1) { + message.reply(':x: Either too many or no members, only mention one person!'); + } else { + if(message.mentions.users.first().avatarURL === null) { + message.reply(":x: This person has no avatar!"); + } else { + message.reply(message.mentions.users.first().avatarURL); + } + } + } +} + +module.exports = AvatarCommand; \ No newline at end of file diff --git a/commands/userinfo/userinfo.js b/commands/userinfo/userinfo.js new file mode 100644 index 00000000..5c5749f2 --- /dev/null +++ b/commands/userinfo/userinfo.js @@ -0,0 +1,99 @@ +const commando = require('discord.js-commando'); +const Discord = require('discord.js'); + +class UserInfoCommand extends commando.Command { + constructor(Client){ + super(Client, { + name: 'user', + group: 'userinfo', + memberName: 'user', + description: "Gives some info on a user. (;user @User)", + examples: [";user @User"] + }); + } + + async run(message, args) { + if(message.channel.type !== 'dm') { + if(!message.channel.permissionsFor(this.client.user).hasPermission('SEND_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('READ_MESSAGES')) return; + if(!message.channel.permissionsFor(this.client.user).hasPermission('EMBED_LINKS')) return; + } + console.log("[Command] " + message.content); + if (message.channel.type === 'dm') { + message.reply(":x: This is a DM!"); + } else { + let member = message.guild.member(message.mentions.users.first()); + let stat; + switch (message.mentions.users.first().presence.status) { + case "online": + stat = "<:vpOnline:212789758110334977> Online"; + break; + case "idle": + stat = "<:vpAway:212789859071426561> Idle"; + break; + case "dnd": + stat = "<:vpDnD:230093576355184640> Do Not Disturb"; + break; + case "offline": + stat = "<:vpOffline:212790005943369728> Offline"; + break; + } + let color; + switch (message.mentions.users.first().presence.status) { + case "online": + color = 0x00AE86; + break; + case "idle": + color = 0xFFFF00; + break; + case "dnd": + color = 0xFF0000; + break; + case "offline": + color = 0x808080; + break; + } + if (message.mentions.users.size !== 1) { + message.reply(':x: Either too many or no members, only mention one person!'); + } else { + if (message.mentions.users.first().presence.game === null) { + const embed = new Discord.RichEmbed() + .setColor(color) + .setThumbnail(message.mentions.users.first().avatarURL) + .addField('**Name:**', + message.mentions.users.first().username + '#' + message.mentions.users.first().discriminator, true) + .addField('**ID:**', + message.mentions.users.first().id, true) + .addField('**Joined Discord On:**', + message.mentions.users.first().createdAt, true) + .addField('**Joined Server On:**', + member.joinedAt, true) + .addField('**Status:**', + stat, true) + .addField('**Playing:**', + "None", true); + message.channel.sendEmbed(embed).catch(console.error); + } else { + const embed = new Discord.RichEmbed() + .setColor(color) + .setThumbnail(message.mentions.users.first().avatarURL) + .addField('**Name:**', + message.mentions.users.first().username + '#' + message.mentions.users.first().discriminator, true) + .addField('**ID:**', + message.mentions.users.first().id, true) + .addField('**Joined Discord On:**', + message.mentions.users.first().createdAt, true) + .addField('**Joined Server On:**', + member.joinedAt, true) + .addField('**Status:**', + stat, true) + .addField('**Playing:**', + message.mentions.users.first().presence.game.name, true); + message.channel.sendEmbed(embed).catch(console.error); + } + } + } + } +} + +module.exports = UserInfoCommand; \ No newline at end of file diff --git a/images/3000years.png b/images/3000years.png new file mode 100644 index 00000000..745fe871 Binary files /dev/null and b/images/3000years.png differ diff --git a/images/BlankWhite.png b/images/BlankWhite.png new file mode 100644 index 00000000..406390a8 Binary files /dev/null and b/images/BlankWhite.png differ diff --git a/images/BobRoss.png b/images/BobRoss.png new file mode 100644 index 00000000..91cdaff9 Binary files /dev/null and b/images/BobRoss.png differ diff --git a/images/Cat1.jpg b/images/Cat1.jpg new file mode 100644 index 00000000..65bd36a6 Binary files /dev/null and b/images/Cat1.jpg differ diff --git a/images/Cat10.jpg b/images/Cat10.jpg new file mode 100644 index 00000000..d4fde80c Binary files /dev/null and b/images/Cat10.jpg differ diff --git a/images/Cat11.jpeg b/images/Cat11.jpeg new file mode 100644 index 00000000..a764ca38 Binary files /dev/null and b/images/Cat11.jpeg differ diff --git a/images/Cat12.jpg b/images/Cat12.jpg new file mode 100644 index 00000000..d150f5da Binary files /dev/null and b/images/Cat12.jpg differ diff --git a/images/Cat13.jpeg b/images/Cat13.jpeg new file mode 100644 index 00000000..eddc1869 Binary files /dev/null and b/images/Cat13.jpeg differ diff --git a/images/Cat14.png b/images/Cat14.png new file mode 100644 index 00000000..2bd85974 Binary files /dev/null and b/images/Cat14.png differ diff --git a/images/Cat15.jpg b/images/Cat15.jpg new file mode 100644 index 00000000..480abec8 Binary files /dev/null and b/images/Cat15.jpg differ diff --git a/images/Cat16.jpg b/images/Cat16.jpg new file mode 100644 index 00000000..f06ed379 Binary files /dev/null and b/images/Cat16.jpg differ diff --git a/images/Cat17.jpg b/images/Cat17.jpg new file mode 100644 index 00000000..78792931 Binary files /dev/null and b/images/Cat17.jpg differ diff --git a/images/Cat18.jpg b/images/Cat18.jpg new file mode 100644 index 00000000..89515b1e Binary files /dev/null and b/images/Cat18.jpg differ diff --git a/images/Cat19.jpg b/images/Cat19.jpg new file mode 100644 index 00000000..164a37a6 Binary files /dev/null and b/images/Cat19.jpg differ diff --git a/images/Cat2.jpg b/images/Cat2.jpg new file mode 100644 index 00000000..56f7e4d9 Binary files /dev/null and b/images/Cat2.jpg differ diff --git a/images/Cat20.jpg b/images/Cat20.jpg new file mode 100644 index 00000000..cd3ceaf2 Binary files /dev/null and b/images/Cat20.jpg differ diff --git a/images/Cat3.jpg b/images/Cat3.jpg new file mode 100644 index 00000000..756f4572 Binary files /dev/null and b/images/Cat3.jpg differ diff --git a/images/Cat4.jpg b/images/Cat4.jpg new file mode 100644 index 00000000..ec089ade Binary files /dev/null and b/images/Cat4.jpg differ diff --git a/images/Cat5.jpg b/images/Cat5.jpg new file mode 100644 index 00000000..859302a1 Binary files /dev/null and b/images/Cat5.jpg differ diff --git a/images/Cat6.jpg b/images/Cat6.jpg new file mode 100644 index 00000000..27ce1554 Binary files /dev/null and b/images/Cat6.jpg differ diff --git a/images/Cat7.jpg b/images/Cat7.jpg new file mode 100644 index 00000000..a41af4ef Binary files /dev/null and b/images/Cat7.jpg differ diff --git a/images/Cat8.jpg b/images/Cat8.jpg new file mode 100644 index 00000000..4e5d6908 Binary files /dev/null and b/images/Cat8.jpg differ diff --git a/images/Cat9.jpg b/images/Cat9.jpg new file mode 100644 index 00000000..59ea204f Binary files /dev/null and b/images/Cat9.jpg differ diff --git a/images/Potato1.jpg b/images/Potato1.jpg new file mode 100644 index 00000000..2e44d2f1 Binary files /dev/null and b/images/Potato1.jpg differ diff --git a/images/Potato2.jpg b/images/Potato2.jpg new file mode 100644 index 00000000..4df77d9c Binary files /dev/null and b/images/Potato2.jpg differ diff --git a/images/Potato3.jpg b/images/Potato3.jpg new file mode 100644 index 00000000..1c5341e1 Binary files /dev/null and b/images/Potato3.jpg differ diff --git a/images/Potato4.jpg b/images/Potato4.jpg new file mode 100644 index 00000000..033af0d6 Binary files /dev/null and b/images/Potato4.jpg differ diff --git a/images/Potato5.gif b/images/Potato5.gif new file mode 100644 index 00000000..943c997e Binary files /dev/null and b/images/Potato5.gif differ diff --git a/images/Potato6.png b/images/Potato6.png new file mode 100644 index 00000000..1728c872 Binary files /dev/null and b/images/Potato6.png differ diff --git a/images/Potato7.jpg b/images/Potato7.jpg new file mode 100644 index 00000000..65172cbf Binary files /dev/null and b/images/Potato7.jpg differ diff --git a/images/Potato8.jpg b/images/Potato8.jpg new file mode 100644 index 00000000..9ee46596 Binary files /dev/null and b/images/Potato8.jpg differ diff --git a/images/Potato9.jpg b/images/Potato9.jpg new file mode 100644 index 00000000..d72ed573 Binary files /dev/null and b/images/Potato9.jpg differ diff --git a/images/Pun1.jpg b/images/Pun1.jpg new file mode 100644 index 00000000..918ca57a Binary files /dev/null and b/images/Pun1.jpg differ diff --git a/images/Pun10.jpg b/images/Pun10.jpg new file mode 100644 index 00000000..27d9cf62 Binary files /dev/null and b/images/Pun10.jpg differ diff --git a/images/Pun11.jpg b/images/Pun11.jpg new file mode 100644 index 00000000..c58f5c79 Binary files /dev/null and b/images/Pun11.jpg differ diff --git a/images/Pun12.jpg b/images/Pun12.jpg new file mode 100644 index 00000000..3d21847b Binary files /dev/null and b/images/Pun12.jpg differ diff --git a/images/Pun13.jpg b/images/Pun13.jpg new file mode 100644 index 00000000..58561bc9 Binary files /dev/null and b/images/Pun13.jpg differ diff --git a/images/Pun14.jpg b/images/Pun14.jpg new file mode 100644 index 00000000..59ccf160 Binary files /dev/null and b/images/Pun14.jpg differ diff --git a/images/Pun15.jpg b/images/Pun15.jpg new file mode 100644 index 00000000..b668b2ad Binary files /dev/null and b/images/Pun15.jpg differ diff --git a/images/Pun16.jpg b/images/Pun16.jpg new file mode 100644 index 00000000..bc60ebed Binary files /dev/null and b/images/Pun16.jpg differ diff --git a/images/Pun17.jpg b/images/Pun17.jpg new file mode 100644 index 00000000..c7ffad07 Binary files /dev/null and b/images/Pun17.jpg differ diff --git a/images/Pun18.jpg b/images/Pun18.jpg new file mode 100644 index 00000000..7ed0bed1 Binary files /dev/null and b/images/Pun18.jpg differ diff --git a/images/Pun19.jpg b/images/Pun19.jpg new file mode 100644 index 00000000..a4da1bc2 Binary files /dev/null and b/images/Pun19.jpg differ diff --git a/images/Pun2.jpg b/images/Pun2.jpg new file mode 100644 index 00000000..9bb7eab5 Binary files /dev/null and b/images/Pun2.jpg differ diff --git a/images/Pun20.jpg b/images/Pun20.jpg new file mode 100644 index 00000000..7fa76878 Binary files /dev/null and b/images/Pun20.jpg differ diff --git a/images/Pun21.jpg b/images/Pun21.jpg new file mode 100644 index 00000000..71ca98a9 Binary files /dev/null and b/images/Pun21.jpg differ diff --git a/images/Pun22.jpg b/images/Pun22.jpg new file mode 100644 index 00000000..8cfa9134 Binary files /dev/null and b/images/Pun22.jpg differ diff --git a/images/Pun23.jpg b/images/Pun23.jpg new file mode 100644 index 00000000..2b8d89a9 Binary files /dev/null and b/images/Pun23.jpg differ diff --git a/images/Pun24.jpg b/images/Pun24.jpg new file mode 100644 index 00000000..49ed384b Binary files /dev/null and b/images/Pun24.jpg differ diff --git a/images/Pun25.jpg b/images/Pun25.jpg new file mode 100644 index 00000000..3b87ce44 Binary files /dev/null and b/images/Pun25.jpg differ diff --git a/images/Pun26.jpg b/images/Pun26.jpg new file mode 100644 index 00000000..1bb7cb1b Binary files /dev/null and b/images/Pun26.jpg differ diff --git a/images/Pun27.jpg b/images/Pun27.jpg new file mode 100644 index 00000000..b8bf1910 Binary files /dev/null and b/images/Pun27.jpg differ diff --git a/images/Pun28.jpg b/images/Pun28.jpg new file mode 100644 index 00000000..954b9ad6 Binary files /dev/null and b/images/Pun28.jpg differ diff --git a/images/Pun29.jpg b/images/Pun29.jpg new file mode 100644 index 00000000..37440b48 Binary files /dev/null and b/images/Pun29.jpg differ diff --git a/images/Pun3.jpg b/images/Pun3.jpg new file mode 100644 index 00000000..430440a9 Binary files /dev/null and b/images/Pun3.jpg differ diff --git a/images/Pun30.jpeg b/images/Pun30.jpeg new file mode 100644 index 00000000..f9d9efb6 Binary files /dev/null and b/images/Pun30.jpeg differ diff --git a/images/Pun31.jpg b/images/Pun31.jpg new file mode 100644 index 00000000..c311020a Binary files /dev/null and b/images/Pun31.jpg differ diff --git a/images/Pun32.jpg b/images/Pun32.jpg new file mode 100644 index 00000000..bb38b22f Binary files /dev/null and b/images/Pun32.jpg differ diff --git a/images/Pun33.jpg b/images/Pun33.jpg new file mode 100644 index 00000000..65766995 Binary files /dev/null and b/images/Pun33.jpg differ diff --git a/images/Pun34.png b/images/Pun34.png new file mode 100644 index 00000000..9273cfb4 Binary files /dev/null and b/images/Pun34.png differ diff --git a/images/Pun35.jpg b/images/Pun35.jpg new file mode 100644 index 00000000..9127ff92 Binary files /dev/null and b/images/Pun35.jpg differ diff --git a/images/Pun36.jpg b/images/Pun36.jpg new file mode 100644 index 00000000..03b1b6e6 Binary files /dev/null and b/images/Pun36.jpg differ diff --git a/images/Pun37.jpg b/images/Pun37.jpg new file mode 100644 index 00000000..270ab04f Binary files /dev/null and b/images/Pun37.jpg differ diff --git a/images/Pun38.jpg b/images/Pun38.jpg new file mode 100644 index 00000000..4f74fb12 Binary files /dev/null and b/images/Pun38.jpg differ diff --git a/images/Pun39.jpg b/images/Pun39.jpg new file mode 100644 index 00000000..1b5b641f Binary files /dev/null and b/images/Pun39.jpg differ diff --git a/images/Pun4.jpg b/images/Pun4.jpg new file mode 100644 index 00000000..7ac02ef9 Binary files /dev/null and b/images/Pun4.jpg differ diff --git a/images/Pun40.jpg b/images/Pun40.jpg new file mode 100644 index 00000000..cfe225f3 Binary files /dev/null and b/images/Pun40.jpg differ diff --git a/images/Pun41.jpg b/images/Pun41.jpg new file mode 100644 index 00000000..fa1db1f0 Binary files /dev/null and b/images/Pun41.jpg differ diff --git a/images/Pun42.jpg b/images/Pun42.jpg new file mode 100644 index 00000000..a9c87924 Binary files /dev/null and b/images/Pun42.jpg differ diff --git a/images/Pun43.jpg b/images/Pun43.jpg new file mode 100644 index 00000000..6f6e7f09 Binary files /dev/null and b/images/Pun43.jpg differ diff --git a/images/Pun44.jpg b/images/Pun44.jpg new file mode 100644 index 00000000..f0441193 Binary files /dev/null and b/images/Pun44.jpg differ diff --git a/images/Pun45.gif b/images/Pun45.gif new file mode 100644 index 00000000..c297b051 Binary files /dev/null and b/images/Pun45.gif differ diff --git a/images/Pun46.jpg b/images/Pun46.jpg new file mode 100644 index 00000000..f9e1a645 Binary files /dev/null and b/images/Pun46.jpg differ diff --git a/images/Pun47.jpg b/images/Pun47.jpg new file mode 100644 index 00000000..6454dab8 Binary files /dev/null and b/images/Pun47.jpg differ diff --git a/images/Pun48.jpg b/images/Pun48.jpg new file mode 100644 index 00000000..04561ebb Binary files /dev/null and b/images/Pun48.jpg differ diff --git a/images/Pun49.jpg b/images/Pun49.jpg new file mode 100644 index 00000000..a17034a1 Binary files /dev/null and b/images/Pun49.jpg differ diff --git a/images/Pun5.jpg b/images/Pun5.jpg new file mode 100644 index 00000000..cab5eeaf Binary files /dev/null and b/images/Pun5.jpg differ diff --git a/images/Pun50.jpg b/images/Pun50.jpg new file mode 100644 index 00000000..95f46d7e Binary files /dev/null and b/images/Pun50.jpg differ diff --git a/images/Pun51.jpg b/images/Pun51.jpg new file mode 100644 index 00000000..1103cd6a Binary files /dev/null and b/images/Pun51.jpg differ diff --git a/images/Pun52.jpg b/images/Pun52.jpg new file mode 100644 index 00000000..bef575e6 Binary files /dev/null and b/images/Pun52.jpg differ diff --git a/images/Pun53.jpg b/images/Pun53.jpg new file mode 100644 index 00000000..5a65061c Binary files /dev/null and b/images/Pun53.jpg differ diff --git a/images/Pun6.jpg b/images/Pun6.jpg new file mode 100644 index 00000000..6e1d0e55 Binary files /dev/null and b/images/Pun6.jpg differ diff --git a/images/Pun7.jpg b/images/Pun7.jpg new file mode 100644 index 00000000..1be86d4a Binary files /dev/null and b/images/Pun7.jpg differ diff --git a/images/Pun8.png b/images/Pun8.png new file mode 100644 index 00000000..344488d5 Binary files /dev/null and b/images/Pun8.png differ diff --git a/images/Pun9.jpg b/images/Pun9.jpg new file mode 100644 index 00000000..93936af9 Binary files /dev/null and b/images/Pun9.jpg differ diff --git a/images/Spam.jpg b/images/Spam.jpg new file mode 100644 index 00000000..aad8ac1c Binary files /dev/null and b/images/Spam.jpg differ diff --git a/images/Xiao1.png b/images/Xiao1.png new file mode 100644 index 00000000..0419b730 Binary files /dev/null and b/images/Xiao1.png differ diff --git a/images/Xiao10.png b/images/Xiao10.png new file mode 100644 index 00000000..9c2ab4c9 Binary files /dev/null and b/images/Xiao10.png differ diff --git a/images/Xiao11.png b/images/Xiao11.png new file mode 100644 index 00000000..15f05f99 Binary files /dev/null and b/images/Xiao11.png differ diff --git a/images/Xiao12.png b/images/Xiao12.png new file mode 100644 index 00000000..58ddfd02 Binary files /dev/null and b/images/Xiao12.png differ diff --git a/images/Xiao13.jpg b/images/Xiao13.jpg new file mode 100644 index 00000000..34c1ba0a Binary files /dev/null and b/images/Xiao13.jpg differ diff --git a/images/Xiao14.jpg b/images/Xiao14.jpg new file mode 100644 index 00000000..e72f6a88 Binary files /dev/null and b/images/Xiao14.jpg differ diff --git a/images/Xiao15.png b/images/Xiao15.png new file mode 100644 index 00000000..c1262455 Binary files /dev/null and b/images/Xiao15.png differ diff --git a/images/Xiao16.jpg b/images/Xiao16.jpg new file mode 100644 index 00000000..3392f77a Binary files /dev/null and b/images/Xiao16.jpg differ diff --git a/images/Xiao17.png b/images/Xiao17.png new file mode 100644 index 00000000..38ce71e7 Binary files /dev/null and b/images/Xiao17.png differ diff --git a/images/Xiao18.gif b/images/Xiao18.gif new file mode 100644 index 00000000..63c2c0c9 Binary files /dev/null and b/images/Xiao18.gif differ diff --git a/images/Xiao19.png b/images/Xiao19.png new file mode 100644 index 00000000..1ffa013f Binary files /dev/null and b/images/Xiao19.png differ diff --git a/images/Xiao2.jpg b/images/Xiao2.jpg new file mode 100644 index 00000000..cc0cc8d6 Binary files /dev/null and b/images/Xiao2.jpg differ diff --git a/images/Xiao20.jpg b/images/Xiao20.jpg new file mode 100644 index 00000000..02c46c55 Binary files /dev/null and b/images/Xiao20.jpg differ diff --git a/images/Xiao21.jpg b/images/Xiao21.jpg new file mode 100644 index 00000000..18bd83ad Binary files /dev/null and b/images/Xiao21.jpg differ diff --git a/images/Xiao3.jpg b/images/Xiao3.jpg new file mode 100644 index 00000000..ff9dba07 Binary files /dev/null and b/images/Xiao3.jpg differ diff --git a/images/Xiao4.jpg b/images/Xiao4.jpg new file mode 100644 index 00000000..45c24c81 Binary files /dev/null and b/images/Xiao4.jpg differ diff --git a/images/Xiao5.jpg b/images/Xiao5.jpg new file mode 100644 index 00000000..59cc7c1f Binary files /dev/null and b/images/Xiao5.jpg differ diff --git a/images/Xiao6.jpg b/images/Xiao6.jpg new file mode 100644 index 00000000..1d258fbe Binary files /dev/null and b/images/Xiao6.jpg differ diff --git a/images/Xiao7.jpg b/images/Xiao7.jpg new file mode 100644 index 00000000..9cd038ff Binary files /dev/null and b/images/Xiao7.jpg differ diff --git a/images/Xiao8.png b/images/Xiao8.png new file mode 100644 index 00000000..ef4cc08b Binary files /dev/null and b/images/Xiao8.png differ diff --git a/images/Xiao9.png b/images/Xiao9.png new file mode 100644 index 00000000..fc93304b Binary files /dev/null and b/images/Xiao9.png differ diff --git a/images/beautiful.jpg b/images/beautiful.jpg new file mode 100644 index 00000000..bfc40dd2 Binary files /dev/null and b/images/beautiful.jpg differ diff --git a/images/gravestone.jpg b/images/gravestone.jpg new file mode 100644 index 00000000..307b7897 Binary files /dev/null and b/images/gravestone.jpg differ diff --git a/index.js b/index.js new file mode 100644 index 00000000..3dcb2ddf --- /dev/null +++ b/index.js @@ -0,0 +1,108 @@ +const Discord = require('discord.js'); +const commando = require('discord.js-commando'); +const config = require('./config.json'); +const clevusers = require('./clevusers.json'); +const client = new commando.Client({ + commandPrefix: ';', + unknownCommandResponse: false, + owner: config.owner +}); +const Cleverbot = require('cleverbot-node'); +const cleverbot = new Cleverbot; +cleverbot.configure({botapi: config.clevkey}); +const path = require('path'); + +client.registry +.registerDefaultTypes() +.registerGroups([ + ['botinfo', 'Bot Info'], + ['userinfo', 'User Info'], + ['guildinfo', 'Server Info'], + ['moderation', 'Moderation'], + ['response', 'Random Response'], + ['avataredit', 'Avatar Manipulation'], + ['textedit', 'Text Manipulation'], + ['pokemon', 'Pokémon'], + ['random', 'Random/Other'], + ['roleplay', 'Roleplay'] +]) +.registerDefaultGroups() +.registerDefaultCommands() +.registerCommandsIn(path.join(__dirname, 'commands')); + +client.on('message', (message) => { + if(message.author.bot) return; + if(message.content.startsWith(';servers')) { + if(message.author.id !== config.owner) return; + console.log("[Command] " + message.content); + console.log(client.guilds.array().length + " Servers: " + client.guilds.map(g => g.name + " (" + g.id + ")").join(", ")); + message.reply("Sent the information to the console!"); + } + if(message.content.startsWith(';leave')) { + if(message.author.id !== config.owner) return; + console.log("[Command] " + message.content); + message.reply("Reminder: To leave a server, eval `this.client.guilds.get().leave();`"); + } + if(message.content.includes("(╯°□°)╯︵ ┻━┻")) { + if(message.channel.type !== 'dm') { + if(message.guild.id === "110373943822540800") return; + } + console.log("[Command] " + message.content); + message.reply("Calm down! ┬─┬ ノ( ゜-゜ノ)"); + } + if(message.content.includes(":Swagolor:")) { + if(message.guild.id !== "252317073814978561") return; + message.channel.sendMessage(message.guild.emojis.get('254827709459333120').toString()); + } + if(message.channel.type !== 'dm') { + if (message.content.startsWith("<@" + client.user.id + ">")){ + if(message.guild.id === "252317073814978561") { + console.log("[Cleverbot] " + message.content); + if(message.author.id === clevusers.allowed[message.author.id]) { + let cleverMessage = message.content.replace("<@" + client.user.id + ">", ""); + cleverMessage = cleverMessage.replace("", ''); + message.channel.startTyping(); + cleverbot.write(cleverMessage, function (response) { + message.reply(response.output); + message.channel.stopTyping(); + }); + } else { + message.reply(":x: Error! You are either not verified for Cleverbot, or banned from it. Please check #rules for a link to the forum to sign-up for Cleverbot."); + } + } + } + } +}); + +client.on('guildMemberAdd', member => { + if(member.guild.id !== "252317073814978561") return; + member.addRole(member.guild.roles.find('name', 'Members')); + let username = member.user.username; + member.guild.defaultChannel.send('Welcome ' + username + '!'); +}); + +client.on('guildMemberRemove', member => { + if(member.guild.id !== "252317073814978561") return; + let username = member.user.username; + member.guild.defaultChannel.send('Bye ' + username + '...'); +}); + +client.on('guildCreate', guild => { + console.log("[Guild] I have joined the guild: " + guild.name + " (" + guild.id + ")..."); +}); + +client.on('guildDelete', guild => { + console.log("[Guild] I have left the guild: " + guild.name + " (" + guild.id + ")..."); +}); + +client.setInterval(()=>{ + let games = ["with a cardboard box", "with Rem", "with my cat", "in the fridge", "in " + client.guilds.size + " servers", "with dragonfire535", "at the Inn", "with your heart", "with a knife", "with a murderous cow", ";help | dragonfire535", "with Cleverbot", "like a pirate", "with all my games", "against Miki", "with " + client.users.size + " Users"][Math.floor(Math.random() * 16)]; + client.user.setGame(games); +}, 300000); + +client.once('ready', () => { + console.log('[Ready] Logged in!'); + client.user.setGame("Just Started Up!"); +}); + +client.login(config.token); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 00000000..d8c648f4 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "XiaoBot", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "engines": { + "node": "7.6.0" + }, + "author": "dragonfire535", + "license": "ISC", + "dependencies": { + "cleverbot-node": "^0.3.5", + "discord.js": "github:hydrabolt/discord.js", + "discord.js-commando": "^0.9.0", + "google-translate-api": "^2.2.2", + "jimp": "^0.2.27", + "pirate-speak": "^1.0.1" + } +}