forked from embee/woomy
		
	
						commit
						9787e46258
					
				
					 56 changed files with 1889 additions and 211 deletions
				
			
		| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
MIT License
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2020 mudkipscience
 | 
			
		||||
Copyright (c) 2018 YorkAARGH
 | 
			
		||||
Copyright (c) 2018-2020 mudkipscience
 | 
			
		||||
 | 
			
		||||
Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
of this software and associated documentation files (the "Software"), to deal
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										39
									
								
								changes.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								changes.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,39 @@
 | 
			
		|||
Added a yodish command and made catfact and dogfact say if the api errors (terry)
 | 
			
		||||
Links to avatars now lead to the original file size
 | 
			
		||||
Bots now get a bot badge in the userinfo command
 | 
			
		||||
Added dogfact and catfact command (terry)
 | 
			
		||||
index.js now has better logging of when things fail to load/initialize (terry)
 | 
			
		||||
added `dice`, rolls a sided die (terry)
 | 
			
		||||
Help command changed, the amount of commands in each category and overall is now displayed and formatting changed
 | 
			
		||||
added `inspire` as an alias for inspirobot
 | 
			
		||||
ship command
 | 
			
		||||
added find by mention to functions
 | 
			
		||||
you can now @mention the bot to run commands
 | 
			
		||||
added identity command, has definitions of gender identities and stuff
 | 
			
		||||
added pronouns command, tells you how to use pronouns
 | 
			
		||||
added sexuality command, has definitions of sexualities
 | 
			
		||||
renamed math calculate  
 | 
			
		||||
fixed woomy in dms
 | 
			
		||||
roleinfo now displays what permissions a role has and also the role colour in the thumbnail
 | 
			
		||||
request has been replaced with node-fetch
 | 
			
		||||
added neko
 | 
			
		||||
added fact
 | 
			
		||||
added nekogif
 | 
			
		||||
added dog
 | 
			
		||||
added cat 
 | 
			
		||||
added hug
 | 
			
		||||
added kiss
 | 
			
		||||
added pat
 | 
			
		||||
added poke
 | 
			
		||||
added slap
 | 
			
		||||
added tickle
 | 
			
		||||
added cuddle
 | 
			
		||||
added feed
 | 
			
		||||
added smug
 | 
			
		||||
added lizard
 | 
			
		||||
added kemonomimi
 | 
			
		||||
added spoilerise
 | 
			
		||||
added zalgo
 | 
			
		||||
renamed flip coinflip
 | 
			
		||||
small changes to weather
 | 
			
		||||
recategorised some commands
 | 
			
		||||
| 
						 | 
				
			
			@ -1,68 +1,69 @@
 | 
			
		|||
const config = {
 | 
			
		||||
    // ID's
 | 
			
		||||
    "owners": ["433790467830972417", "324937993972350976"],
 | 
			
		||||
  
 | 
			
		||||
    // Tokens
 | 
			
		||||
    "token": "",
 | 
			
		||||
    "devtoken": "",
 | 
			
		||||
    "ytkey": "",
 | 
			
		||||
    "dblkey": "",
 | 
			
		||||
  
 | 
			
		||||
    // Default per-server settings 
 | 
			
		||||
    "defaultSettings" : {
 | 
			
		||||
      "prefix": "~",
 | 
			
		||||
      "devprefix": "!",
 | 
			
		||||
      "modRole": "None set",
 | 
			
		||||
      "adminRole": "None set",
 | 
			
		||||
      "mutedRole": "None set",
 | 
			
		||||
      "autorole": "off",
 | 
			
		||||
      "welcomeChannel": "off",
 | 
			
		||||
      "welcomeMessage": "off",
 | 
			
		||||
      "leaveMessage": "off",
 | 
			
		||||
      "chatlogsChannel": "off",
 | 
			
		||||
      "modlogsChannel": "off",
 | 
			
		||||
      "raidMode": "off",
 | 
			
		||||
      "raidModeStrict": "off",
 | 
			
		||||
      "blacklisted": "ARRAY",
 | 
			
		||||
      "botChannels": "ARRAY",
 | 
			
		||||
      "AFK": "ARRAY",
 | 
			
		||||
      "SAR": "ARRAY"
 | 
			
		||||
  // ID's
 | 
			
		||||
  "owners": [], // Adding your ID here will give you access to dangerous commands like eval. Please be careful with who you add here! Eval can be used to modify the host machine.
 | 
			
		||||
 | 
			
		||||
  // Tokens
 | 
			
		||||
  "token": "", // Your bot's token.
 | 
			
		||||
  "devtoken": "", // (optional) another token, meant for a bot used for development
 | 
			
		||||
  "ytkey": "", // Youtube API key, needed for music searching to work
 | 
			
		||||
  "dblkey": "", // top.gg key, sends bot statistics to top.gg. You do not need this.
 | 
			
		||||
 | 
			
		||||
  // Default per-server settings 
 | 
			
		||||
  "defaultSettings" : {
 | 
			
		||||
    "prefix": "~",
 | 
			
		||||
    "devprefix": "!",
 | 
			
		||||
    "modRole": "None set",
 | 
			
		||||
    "adminRole": "None set",
 | 
			
		||||
    "mutedRole": "None set",
 | 
			
		||||
    "autorole": "off",
 | 
			
		||||
    "welcomeChannel": "off",
 | 
			
		||||
    "welcomeMessage": "off",
 | 
			
		||||
    "leaveMessage": "off",
 | 
			
		||||
    "chatlogsChannel": "off",
 | 
			
		||||
    "modlogsChannel": "off",
 | 
			
		||||
    "raidMode": "off",
 | 
			
		||||
    "raidModeStrict": "off",
 | 
			
		||||
    "blacklisted": "ARRAY",
 | 
			
		||||
    "botChannels": "ARRAY",
 | 
			
		||||
    "AFK": "ARRAY",
 | 
			
		||||
    "SAR": "ARRAY",
 | 
			
		||||
    "customCommands": "ARRAY",    
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  // Perm levels
 | 
			
		||||
  permLevels: [
 | 
			
		||||
    { level: 0,
 | 
			
		||||
      name: "User", 
 | 
			
		||||
      check: () => true
 | 
			
		||||
    },
 | 
			
		||||
  
 | 
			
		||||
    // Perm levels
 | 
			
		||||
    permLevels: [
 | 
			
		||||
      { level: 0,
 | 
			
		||||
        name: "User", 
 | 
			
		||||
        check: () => true
 | 
			
		||||
      },
 | 
			
		||||
  
 | 
			
		||||
      { level: 1,
 | 
			
		||||
        name: "Moderator",
 | 
			
		||||
        check: (message) => {
 | 
			
		||||
          try {
 | 
			
		||||
            if (message.member.roles.has(message.settings.modRole)) return true;
 | 
			
		||||
          } catch (e) {
 | 
			
		||||
            return false;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
    { level: 1,
 | 
			
		||||
      name: "Moderator",
 | 
			
		||||
      check: (message) => {
 | 
			
		||||
        try {
 | 
			
		||||
          if (message.member.roles.cache.has(message.settings.modRole)) return true;
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
  
 | 
			
		||||
      { level: 2,
 | 
			
		||||
        name: "Administrator", 
 | 
			
		||||
        check: (message) => {
 | 
			
		||||
          try {
 | 
			
		||||
            if (message.member.roles.has(message.settings.adminRole)) return true;
 | 
			
		||||
          } catch (e) {
 | 
			
		||||
            return false;
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    { level: 2,
 | 
			
		||||
      name: "Administrator", 
 | 
			
		||||
      check: (message) => {
 | 
			
		||||
        try {
 | 
			
		||||
          if (message.member.roles.cache.has(message.settings.adminRole) || message.member.permissions.has("ADMINISTRATOR")) return true;
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
  
 | 
			
		||||
      { level: 3,
 | 
			
		||||
        name: "Server Owner", 
 | 
			
		||||
        check: (message) => message.channel.type === "text" ? (message.guild.ownerID === message.author.id ? true : false) : false
 | 
			
		||||
      },
 | 
			
		||||
    ]
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  module.exports = config;
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    { level: 3,
 | 
			
		||||
      name: "Server Owner", 
 | 
			
		||||
      check: (message) => message.channel.type === "text" ? (message.guild.ownerID === message.author.id ? true : false) : false
 | 
			
		||||
    },
 | 
			
		||||
  ]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
module.exports = config;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								index.js
									
										
									
									
									
								
							
							
						
						
									
										42
									
								
								index.js
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,28 +1,54 @@
 | 
			
		|||
if (Number(process.version.slice(1).split(".")[0]) < 12) {
 | 
			
		||||
  throw new Error("Node 12.0.0 or higher is required. Please update Node on your system.");
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const Discord = require('discord.js');
 | 
			
		||||
const { promisify } = require('util');
 | 
			
		||||
const readdir = promisify(require('fs').readdir);
 | 
			
		||||
const Enmap = require('enmap');
 | 
			
		||||
const chalk = require('chalk');
 | 
			
		||||
const DBL = require("dblapi.js");
 | 
			
		||||
const client = new Discord.Client();
 | 
			
		||||
 | 
			
		||||
client.config = require('./config');
 | 
			
		||||
client.version = require('./version.json');
 | 
			
		||||
client.logger = require('./src/modules/Logger');
 | 
			
		||||
require("./src/modules/functions")(client);
 | 
			
		||||
try {
 | 
			
		||||
  client.config = require('./config');
 | 
			
		||||
} catch (err) {
 | 
			
		||||
  console.log('Failed to load config.js:', err);
 | 
			
		||||
  process.exit();
 | 
			
		||||
};
 | 
			
		||||
try{
 | 
			
		||||
  client.version = require('./version.json');
 | 
			
		||||
} catch (err) {
 | 
			
		||||
  console.log('Failed to load version.json:', err);
 | 
			
		||||
  process.exit();
 | 
			
		||||
};
 | 
			
		||||
try{
 | 
			
		||||
  client.logger = require('./src/modules/Logger');
 | 
			
		||||
} catch (err) {
 | 
			
		||||
  console.log('Failed to load Logger.js:', err);
 | 
			
		||||
  process.exit();
 | 
			
		||||
};
 | 
			
		||||
client.logger.setClient(client);
 | 
			
		||||
 | 
			
		||||
try{
 | 
			
		||||
  require("./src/modules/functions")(client);
 | 
			
		||||
} catch (err) {
 | 
			
		||||
  console.log('Failed to load functions.js:', err);
 | 
			
		||||
  process.exit();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
if(process.env['USER'] != 'container') {
 | 
			
		||||
  client.devmode = true;
 | 
			
		||||
} else {
 | 
			
		||||
  client.devmode = false;
 | 
			
		||||
  const dblapi = new DBL(client.config.dblkey, client);
 | 
			
		||||
}
 | 
			
		||||
  if(client.config.dblkey.length > 0) {
 | 
			
		||||
    const DBL = require("dblapi.js");
 | 
			
		||||
    const dblapi = new DBL(client.config.dblkey, client);
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
client.commands = new Enmap();
 | 
			
		||||
client.aliases = new Enmap();
 | 
			
		||||
client.settings = new Enmap({name: 'settings'});
 | 
			
		||||
client.blacklist = new Enmap({name: 'blacklist'});
 | 
			
		||||
 | 
			
		||||
const init = async () => {
 | 
			
		||||
  const cmdFiles = await readdir("./src/commands/");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								package.json
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								package.json
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -4,23 +4,26 @@
 | 
			
		|||
  "description": "Woomy is a all-purpose discord bot built off the guidebot base and coded in node.js using discord.js.",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "better-sqlite3": "^5.4.1",
 | 
			
		||||
    "@discordjs/opus": "^0.1.0",
 | 
			
		||||
    "better-sqlite3": "^5.4.3",
 | 
			
		||||
    "chalk": "^3.0.0",
 | 
			
		||||
    "dblapi.js": "^2.3.1",
 | 
			
		||||
    "discord.js": "^12.0.1",
 | 
			
		||||
    "discord.js": "^12.0.2",
 | 
			
		||||
    "enmap": "^5.2.4",
 | 
			
		||||
    "garfield": "^1.1.2",
 | 
			
		||||
    "get-youtube-id": "^1.0.1",
 | 
			
		||||
    "hastebin-gen": "^2.0.5",
 | 
			
		||||
    "moment": "^2.24.0",
 | 
			
		||||
    "moment-duration-format": "^2.3.2",
 | 
			
		||||
    "nekos.life": "^2.0.5",
 | 
			
		||||
    "node-fetch": "^2.6.0",
 | 
			
		||||
    "openweather-apis": "^4.2.0",
 | 
			
		||||
    "prism-media": "^1.2.1",
 | 
			
		||||
    "randomcolor": "^0.5.4",
 | 
			
		||||
    "request": "^2.88.2",
 | 
			
		||||
    "relevant-urban": "^2.0.0",
 | 
			
		||||
    "request": "^2.88.2",
 | 
			
		||||
    "to-zalgo": "^1.0.1",
 | 
			
		||||
    "urban": "^0.3.2",
 | 
			
		||||
    "url-unshort": "^5.0.0",
 | 
			
		||||
    "url-unshorten": "^1.0.6",
 | 
			
		||||
    "weather-js": "^2.0.0",
 | 
			
		||||
    "youtube-info": "^1.3.2",
 | 
			
		||||
    "ytdl-core-discord": "^1.1.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										
											BIN
										
									
								
								resources/images/attackhelicopter.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								resources/images/attackhelicopter.jpg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 99 KiB  | 
							
								
								
									
										21
									
								
								resources/other/coolpeople.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								resources/other/coolpeople.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,21 @@
 | 
			
		|||
{
 | 
			
		||||
    "coolPeople": [
 | 
			
		||||
        "448354605617643520", 
 | 
			
		||||
        "433790467830972417", 
 | 
			
		||||
        "231777839576252417", 
 | 
			
		||||
        "285992938314661899",
 | 
			
		||||
        "231704701433937931",
 | 
			
		||||
        "324937993972350976",
 | 
			
		||||
        "336492042299637771",
 | 
			
		||||
        "273867501006225419",
 | 
			
		||||
        "331870539897372672",
 | 
			
		||||
        "304000458144481280",
 | 
			
		||||
        "239787232666451980",
 | 
			
		||||
        "264970229514371072",
 | 
			
		||||
        "254310746450690048",
 | 
			
		||||
        "358390849807319040",
 | 
			
		||||
        "211011138656272386",
 | 
			
		||||
        "266472557740425216",
 | 
			
		||||
        "102943767346057216"
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
  "cisgender": "Someone who identifies with their assigned gender at birth.",
 | 
			
		||||
  "transgender": "Someone who identifies with a gender that is not their assigned gender at birth."
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										110
									
								
								resources/other/identities.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								resources/other/identities.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,110 @@
 | 
			
		|||
{
 | 
			
		||||
  "agender": {
 | 
			
		||||
    "name": "agender",
 | 
			
		||||
    "description": "A gender identity used by someone who has no gender, or sometimes by someone whose gender is neutral."
 | 
			
		||||
  },
 | 
			
		||||
  "androgyne": {
 | 
			
		||||
    "name": "androgyne",
 | 
			
		||||
    "description": "A gender identity associated with androgyny. Androgynes have a gender which is simultaneously feminine and masculine, although not necessarily in equal amounts."
 | 
			
		||||
  },
 | 
			
		||||
  "androgynous": {
 | 
			
		||||
    "name": "androgynous",
 | 
			
		||||
    "description": "A term used to refer to people who have both feminine and masculine characteristics."
 | 
			
		||||
  },
 | 
			
		||||
  "aporagender": {
 | 
			
		||||
    "name": "aporagender",
 | 
			
		||||
    "description": "A gender that is not male, female, or anything in between that still has a distinct gendered feeling."
 | 
			
		||||
  },
 | 
			
		||||
  "bigender": {
 | 
			
		||||
    "name": "bigender",
 | 
			
		||||
    "description": "Having two gender identities, either simultaneously or varying between the two."
 | 
			
		||||
  },
 | 
			
		||||
  "cisgender": {
 | 
			
		||||
    "name": "cisgender",
 | 
			
		||||
    "description": "Someone who identifies with their assigned gender at birth."
 | 
			
		||||
  },
 | 
			
		||||
  "demiboy": {
 | 
			
		||||
    "name": "demiboy",
 | 
			
		||||
    "description": "Someone who identifies as partially male and partially another gender."
 | 
			
		||||
  },
 | 
			
		||||
  "demiflux": {
 | 
			
		||||
    "name": "demiflux",
 | 
			
		||||
    "description": "A gender where one part of someone’s gender is static, and the other part fluctuates in intensity."
 | 
			
		||||
  },
 | 
			
		||||
  "demigender": {
 | 
			
		||||
    "name": "demigender",
 | 
			
		||||
    "description": "Someone who identifies as partially one gender, and partially another."
 | 
			
		||||
  },
 | 
			
		||||
  "demigirl": {
 | 
			
		||||
    "name": "demigirl",
 | 
			
		||||
    "description": "Someone who identifies as partially female and partially another gender."
 | 
			
		||||
  },
 | 
			
		||||
  "dyadic": {
 | 
			
		||||
    "name": "dyadic",
 | 
			
		||||
    "description": "A word used to refer to people who are not intersex"
 | 
			
		||||
  },
 | 
			
		||||
  "enby": {
 | 
			
		||||
    "name": "enby",
 | 
			
		||||
    "description": "Shortened term for “nonbinary”. Used as a noun, like “boy” or “girl” but for nonbinary people."
 | 
			
		||||
  },
 | 
			
		||||
  "fluidflux": {
 | 
			
		||||
    "name": "fluidflux",
 | 
			
		||||
    "description": "A gender identity which refers to someone with a gender that moves between two or more genders and also fluctuates in intensity."
 | 
			
		||||
  },
 | 
			
		||||
  "genderfluid": {
 | 
			
		||||
    "name": "genderfluid",
 | 
			
		||||
    "description": "Someone whose gender varies over time. This might be fluctuating between different genders, or expressing multiple aspects of various genders at the same time."
 | 
			
		||||
  },
 | 
			
		||||
  "genderflux": {
 | 
			
		||||
    "name": "genderflux",
 | 
			
		||||
    "description": "Someone whose gender fluctuates, usually between agender and something else."
 | 
			
		||||
  },
 | 
			
		||||
  "genderqueer": {
 | 
			
		||||
    "name": "genderqueer",
 | 
			
		||||
    "description": "An umbrella term for all the nonbinary genders. Genderqueer can be a standalone identity, or can refer to a more specific gender identity."
 | 
			
		||||
  },
 | 
			
		||||
  "gendervoid": {
 | 
			
		||||
    "name": "gendervoid",
 | 
			
		||||
    "description": "Someone who does not experience gender, or who feels an absence or void in the place of gender."
 | 
			
		||||
  },
 | 
			
		||||
  "intersex": {
 | 
			
		||||
    "name": "intersex",
 | 
			
		||||
    "description": "An intersex person is someone with sex characteristics (sexual anatomy, reproductive organs, chromosomal patterns, etc.) that do not align with the typical descriptions of male and female."
 | 
			
		||||
  },
 | 
			
		||||
  "libragender": {
 | 
			
		||||
    "name": "libragender",
 | 
			
		||||
    "description": "A gender identity that is mostly agender, but has a connection to masculinity and/or femininity and/or other gendered feelings. That connection may be static (libragender, librafeminine, libramasculine, etc) or fluid, where one feels that the gender one experiences changes (librafluid)."
 | 
			
		||||
  },
 | 
			
		||||
  "neutrois": {
 | 
			
		||||
    "name": "neutrois",
 | 
			
		||||
    "description": "Having a null or neutral gender."
 | 
			
		||||
  },
 | 
			
		||||
  "nonbinary": {
 | 
			
		||||
    "name": "nonbinary",
 | 
			
		||||
    "description": "An umbrella term for all the gender identities that aren't male or female (the binary genders)"
 | 
			
		||||
  },
 | 
			
		||||
  "non-gendered": {
 | 
			
		||||
    "name": "non-gendered",
 | 
			
		||||
    "description": "Having no gender."
 | 
			
		||||
  },
 | 
			
		||||
  "polygender": {
 | 
			
		||||
    "name": "polygender",
 | 
			
		||||
    "description": "Having more than one gender, either at the same time or at different times. A polygender person may identify with any combination of binary and nonbinary genders."
 | 
			
		||||
  },
 | 
			
		||||
  "pangender": {
 | 
			
		||||
    "name": "pangender",
 | 
			
		||||
    "description": "Having more than one gender, especially someone who identifies as all genders."
 | 
			
		||||
  },
 | 
			
		||||
  "transfeminine": {
 | 
			
		||||
    "name": "transfeminine",
 | 
			
		||||
    "description": "A transgender person who identifies with femininity, either as a binary female or a fem-leaning nonbinary identity."
 | 
			
		||||
  },
 | 
			
		||||
  "transgender": {
 | 
			
		||||
    "name": "transgender",
 | 
			
		||||
    "description": "Someone whose identity differs from their assigned gender at birth."
 | 
			
		||||
  },
 | 
			
		||||
  "transmasculine": {
 | 
			
		||||
    "name": "transmasculine",
 | 
			
		||||
    "description": "A transgender person who identifies with masculinity, either as a binary male or a masc-leaning nonbinary identity."
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,154 @@
 | 
			
		|||
{
 | 
			
		||||
    
 | 
			
		||||
  "ae/aer": {
 | 
			
		||||
    "name": "ae/aer",
 | 
			
		||||
    "examples": "• **Ae** went to the park.\n• I went with **aer**.\n• **Ae** brought **aer** frisbee.\n• At least I think it was **aers.**\n• **Ae** threw a frisbee to **aerself**."
 | 
			
		||||
  },
 | 
			
		||||
  "e/em": {
 | 
			
		||||
    "name": "e/em",
 | 
			
		||||
    "examples": "• **E** went to the park.\n• I went with **em**.\n• **E** brought **eir** frisbee.\n• At least I think it was **eirs**.\n• **E** threw a frisbee to **emself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ey/em": {
 | 
			
		||||
    "name": "ey/em",
 | 
			
		||||
    "examples": "• **Ey** went to the park.\n• I went with **em**.\n• **Ey** brought **eir** frisbee.\n• At least I think it was **eirs**.\n• **Ey** threw a frisbee to **eirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "fae/faer": {
 | 
			
		||||
    "name": "fae/faer",
 | 
			
		||||
    "examples": "• **Fae** went to the park.\n• I went with **faer**.\n• **Fae** brought **faer** frisbee.\n• At least I think it was **faers**.\n• **Fae** threw a frisbee to **faerself**."
 | 
			
		||||
  },
 | 
			
		||||
  "fey/fem": {
 | 
			
		||||
    "name": "fey/fem",
 | 
			
		||||
    "examples": "• **Fey** went to the park.\n• I went with **fem**.\n• **Fey** brought **feir** frisbee.\n• At least I think it was **feirs**.\n• **Fey** threw a frisbee to **feirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "he/him": {
 | 
			
		||||
    "name": "he/him",
 | 
			
		||||
    "examples": "• **He** went to the park.\n• I went with **him**.\n• **He** brought **his** frisbee.\n• At least I think it was **his**.\n• **He** threw a frisbee to **himself**."
 | 
			
		||||
  },
 | 
			
		||||
  "hu/hum": {
 | 
			
		||||
    "name": "hu/hum",
 | 
			
		||||
    "examples": "• **Hu** went to the park.\n• I went with **hum**.\n• **Hu** brought **hus** frisbee.\n• At least I think it was **hus**.\n• **Hu** threw a frisbee to **humself**."
 | 
			
		||||
  },
 | 
			
		||||
  "it/its": {
 | 
			
		||||
    "name": "it/its",
 | 
			
		||||
    "examples": "• **It** went to the park.\n• I went with **it**.\n• **It** brought **its** frisbee.\n• At least I think it was **its**.\n• **It** threw a frisbee to **itself**."
 | 
			
		||||
  },
 | 
			
		||||
  "jee/jem": {
 | 
			
		||||
    "name": "je/jem",
 | 
			
		||||
    "examples": "• **Jee** went to the park.\n• I went with **jem**.\n• **Jee** brought **jeir** frisbee.\n• At least I think it was **jeirs**.\n• **Jee** threw a frisbee to **jemself**."
 | 
			
		||||
  },
 | 
			
		||||
  "kit/kits": {
 | 
			
		||||
    "name": "kit/kits",
 | 
			
		||||
    "examples": "• **Kit** went to the park.\n• I went with **kit**.\n• **Kit** brought **kits** frisbee.\n• At least I think it was **kits**.\n• **Kit** threw a frisbee to **kitself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ne/nem": {
 | 
			
		||||
    "name": "ne/nem",
 | 
			
		||||
    "examples": "• **Ne** went to the park.\n• I went with **nem**.\n• **Ne** brought **nir** frisbee.\n• At least I think it was **nirs**.\n• **Ne** threw a frisbee to **nemself**."
 | 
			
		||||
  },
 | 
			
		||||
  "peh/pehm": {
 | 
			
		||||
    "name": "pe/pehm",
 | 
			
		||||
    "examples": "• **Peh** went to the park.\n• I went with **pehm**.\n• **Peh** brought **peh's** frisbee.\n• At least I think it was **peh's**.\n• **Peh** threw a frisbee to **pehself**."
 | 
			
		||||
  },
 | 
			
		||||
  "per": {
 | 
			
		||||
    "name": "per/per",
 | 
			
		||||
    "examples": "• **Per** went to the park.\n• I went with **per**.\n• **Per** brought **per** frisbee.\n• At least I think it was **pers**.\n• **Per** threw a frisbee to **perself**."
 | 
			
		||||
  },
 | 
			
		||||
  "sie/hir": {
 | 
			
		||||
    "name": "sie/hir",
 | 
			
		||||
    "examples": "• **Sie** went to the park.\n• I went with **hir**.\n• **Sie** brought **hir** frisbee.\n• At least I think it was **hirs**.\n• **Sie* threw a frisbee to **hirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "se/sim": {
 | 
			
		||||
    "name": "se/sim",
 | 
			
		||||
    "examples": "• **Se** went to the park.\n• I went with **sim**.\n• **Se** brought **ser** frisbee.\n• At least I think it was **sers**.\n• **Se** threw a frisbee to **serself**."
 | 
			
		||||
  },
 | 
			
		||||
  "shi/hir": {
 | 
			
		||||
    "name": "shi/her",
 | 
			
		||||
    "examples": "• **Shi** went to the park.\n• I went with **hir**.\n• **Shi** brought **shir** frisbee.\n• At least I think it was **hirs**.\n• **Shi** threw a frisbee to **hirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "si/hyr": {
 | 
			
		||||
    "name": "si/hyr",
 | 
			
		||||
    "examples": "• **Si** went to the park.\n• I went with **hyr**.\n• **Si** brought **hyr** frisbee.\n• At least I think it was **hyrs**.\n• **Si** threw a frisbee to **hyrself**."
 | 
			
		||||
  },
 | 
			
		||||
  "they/them": {
 | 
			
		||||
    "name": "they/them",
 | 
			
		||||
    "examples": "• **They** went to the park.\n• I went with **them**.\n• **They** brought **their** frisbee.\n• At least I think it was **theirs**.\n• **They** threw a frisbee to **themself**."
 | 
			
		||||
  },
 | 
			
		||||
  "thon": {
 | 
			
		||||
    "name": "thon/thon",
 | 
			
		||||
    "examples": "• **Thon** went to the park.\n• I went with **thon**.\n• **Thon** brought **thons** frisbee.\n• At least I think it was **thons**.\n• **Thon** threw a frisbee to **thonself**."
 | 
			
		||||
  },
 | 
			
		||||
  "she/her": {
 | 
			
		||||
    "name": "she/her",
 | 
			
		||||
    "examples": "• **She** went to the park.\n• I went with **her**.\n• **She** brought **her** frisbee.\n• At least I think it was **hers**.\n• **She** threw a frisbee to **herself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ve/ver": {
 | 
			
		||||
    "name": "ve/ver",
 | 
			
		||||
    "examples": "• **Ve** went to the park.\n• I went with **ver**.\n• **Ve** brought **vis** frisbee.\n• At least I think it was **vis**.\n• **Ve** threw a frisbee to **verself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ve/vem": {
 | 
			
		||||
    "name": "ve/vem",
 | 
			
		||||
    "examples": "• **Ve** went to the park.\n• I went with **vem**.\n• **Ve** brought **vir** frisbee.\n• At least I think it was **virs**.\n• **Ve** threw a frisbee to **vemself**."
 | 
			
		||||
  },
 | 
			
		||||
  "vi/ver": {
 | 
			
		||||
    "name": "vi/ver",
 | 
			
		||||
    "examples": "• **Vi** went to the park.\n• I went with **ver**.\n• **Vi** brought **ver** frisbee.\n• At least I think it was **vers**.\n• **Vi** threw a frisbee to **verself**."
 | 
			
		||||
  },
 | 
			
		||||
  "vi/vim/vir": {
 | 
			
		||||
    "name": "vi/vim/vir",
 | 
			
		||||
    "examples": "• **Vi** went to the park.\n• I went with **vim**.\n• **Vi** brought **vir** frisbee.\n• At least I think it was **virs**.\n• **Vi** threw a frisbee to **vimself**."
 | 
			
		||||
  },
 | 
			
		||||
  "vi/vim/vim": {
 | 
			
		||||
    "name": "vi/vim/vim",
 | 
			
		||||
    "examples": "• **Vi** went to the park.\n• I went with **vim**.\n• **Vi** brought **vim** frisbee.\n• At least I think it was **vims**.\n• **Vi** threw a frisbee to **vimself**."
 | 
			
		||||
  },
 | 
			
		||||
  "xie/xer": {
 | 
			
		||||
    "name": "xie/xer",
 | 
			
		||||
    "examples": "• **Xie** went to the park.\n• I went with **xer**.\n• **Xie** brought **xer** frisbee.\n• At least I think it was **xers**.\n• **Xie** threw a frisbee to **xerself**."
 | 
			
		||||
  },
 | 
			
		||||
  "xe/xem": {
 | 
			
		||||
    "name": "xe/xem",
 | 
			
		||||
    "examples": "• **Xe** went to the park.\n• I went with **xem**.\n• **Xe** brought **xyr** frisbee.\n• At least I think it was **xyrs**.\n• **Xe** threw a frisbee to **xemself**."
 | 
			
		||||
  },
 | 
			
		||||
  "xey/xem": {
 | 
			
		||||
    "name": "xey/xem",
 | 
			
		||||
    "examples": "• **Xey** went to the park.\n• I went with **xem**.\n• **Xey** brought **xeir** frisbee.\n• At least I think it was **xeirs**.\n• **Xey** threw a frisbee to **xemself**."
 | 
			
		||||
  },
 | 
			
		||||
  "yo": {
 | 
			
		||||
    "name": "yo",
 | 
			
		||||
    "examples": "• **Yo** went to the park.\n• I went with **yo**.\n• **Yo** brought **yos** frisbee.\n• At least I think it was **yos**.\n• **Yo** threw a frisbee to **yosself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ze/hir": {
 | 
			
		||||
    "name": "ze/hir",
 | 
			
		||||
    "examples": "• **Ze** went to the park.\n• I went with **hir**.\n• **Ze** brought **hir** frisbee.\n• At least I think it was **hirs**.\n• **Ze** threw a frisbee to **hirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ze/zem": {
 | 
			
		||||
    "name": "ze/zem",
 | 
			
		||||
    "examples": "• **Ze** went to the park.\n• I went with **zem**.\n• **Ze** brought **zes** frisbee.\n• At least I think it was **zes**.\n• **Ze** threw a frisbee to **zirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ze/mer": {
 | 
			
		||||
    "name": "ze/mer",
 | 
			
		||||
    "examples": "• **Ze** went to the park.\n• I went with **mer**.\n• **Ze** brought **zer** frisbee.\n• At least I think it was **zers**.\n• **Ze** threw a frisbee to **zemself**."
 | 
			
		||||
  },
 | 
			
		||||
  "zee/zed": {
 | 
			
		||||
    "name": "zee/zed",
 | 
			
		||||
    "examples": "• **Zee** went to the park.\n• I went with **zed**.\n• **Zee** brought **zeta** frisbee.\n• At least I think it was **zetas**.\n• **Zee** threw a frisbee to **zedself**."
 | 
			
		||||
  },
 | 
			
		||||
  "ze/zir": {
 | 
			
		||||
    "name": "ze/zir",
 | 
			
		||||
    "examples": "• **Ze** went to the park.\n• I went with **zir**.\n• **Ze** brought **zir** frisbee.\n• At least I think it was **zirs**.\n• **Ze** threw a frisbee to **zirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "zie/zir": {
 | 
			
		||||
    "name": "zie/zir",
 | 
			
		||||
    "examples": "• **Zie** went to the park.\n• I went with **zir**.\n• **Zie** brought **zir** frisbee.\n• At least I think it was **zirs**.\n• **Zie** threw a frisbee to **zirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "zie/zem": {
 | 
			
		||||
    "name": "zie/zem",
 | 
			
		||||
    "examples": "• **Zie** went to the park.\n• I went with **zem**.\n• **Zie** brought **zes** frisbee.\n• At least I think it was **zes**.\n• **Zie** threw a frisbee to **zirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "zie/hir": {
 | 
			
		||||
    "name": "zie/hir",
 | 
			
		||||
    "examples": "• **Zie** went to the park.\n• I went with **hir**.\n• **Zie** brought **hir** frisbee.\n• At least I think it was **hirs**.\n• **Zie** threw a frisbee to **hirself**."
 | 
			
		||||
  },
 | 
			
		||||
  "zme/zmyr": {
 | 
			
		||||
    "name": "zme/zmyr",
 | 
			
		||||
    "examples": "• **Zme** went to the park.\n• I went with **zmyr**.\n• **Zme** brought **zmyr** frisbee.\n• At least I think it was **zmyrs**.\n• **Zme** threw a frisbee to **zmyrself**."
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,3 +1,102 @@
 | 
			
		|||
{
 | 
			
		||||
    
 | 
			
		||||
    "aesthetic attraction": {
 | 
			
		||||
        "name": "aesthetic attraction",
 | 
			
		||||
        "description": "Getting pleasure from the appearance of a specific individual like you would from watching beautiful scenery."
 | 
			
		||||
    },
 | 
			
		||||
    "platonic attraction": {
 | 
			
		||||
        "name": "platonic attraction",
 | 
			
		||||
        "description": "A desire to have a platonic relationship or friendship with a specific individual."
 | 
			
		||||
    },
 | 
			
		||||
    "romantic attraction": {
 | 
			
		||||
        "name": "romantic attraction",
 | 
			
		||||
        "description": "A desire to have a romantic relationship with a specific individual."
 | 
			
		||||
    },
 | 
			
		||||
    "sensual attraction": {
 | 
			
		||||
        "name": "sensual attraction",
 | 
			
		||||
        "description": "A desire for physical intimacy with a specific individual. Cuddling, hand holding, etc."
 | 
			
		||||
    },
 | 
			
		||||
    "sexual attraction": {
 | 
			
		||||
        "name": "sexual attraction",
 | 
			
		||||
        "description": "A desire for sexual contact with a specific individual."
 | 
			
		||||
    },
 | 
			
		||||
    "abrosexual": {
 | 
			
		||||
        "name": "abrosexual",
 | 
			
		||||
        "description": "Someone whose sexuality changes frequently. They experience different sexualities over time."
 | 
			
		||||
    },
 | 
			
		||||
    "androgynosexual": {
 | 
			
		||||
        "name": "androgynosexual",
 | 
			
		||||
        "description": "Someone who is attracted to both men and women, particularly those who are androgynous in appearance."
 | 
			
		||||
    },
 | 
			
		||||
    "androsexual": {
 | 
			
		||||
        "name": "androsexual",
 | 
			
		||||
        "description": "Someone who is attracted to men and/or masculine people."
 | 
			
		||||
    },
 | 
			
		||||
    "aromantic": {
 | 
			
		||||
        "name": "aromantic",
 | 
			
		||||
        "description": "Someone who does not experience romantic attraction. They do not have to also be asexual however as they may still experience other types of attraction."
 | 
			
		||||
    },
 | 
			
		||||
    "asexual": {
 | 
			
		||||
        "name": "asexual",
 | 
			
		||||
        "description": "Someone who feels little to no sexual attraction to anyone."
 | 
			
		||||
    },
 | 
			
		||||
    "bisexual": {
 | 
			
		||||
        "name": "bisexual",
 | 
			
		||||
        "description": "Someone who is attracted to more than one gender."
 | 
			
		||||
    },
 | 
			
		||||
    "ceterosexual": {
 | 
			
		||||
        "name": "ceterosexual",
 | 
			
		||||
        "description": "Someone who is attracted to non-binary people."
 | 
			
		||||
    },
 | 
			
		||||
    "demisexual": {
 | 
			
		||||
        "name": "demisexual",
 | 
			
		||||
        "description": "Someone who doesn't experience sexual/romantic attraction towards someone until they form an emotional connection."
 | 
			
		||||
    },
 | 
			
		||||
    "finsexual": {
 | 
			
		||||
        "name": "finsexual",
 | 
			
		||||
        "description": "Someone who is attracted to women and/or feminine people."
 | 
			
		||||
    },
 | 
			
		||||
    "gay": {
 | 
			
		||||
        "name": "gay",
 | 
			
		||||
        "description": "Someone who is homosexual (attracted to ones own gender)"
 | 
			
		||||
    },
 | 
			
		||||
    "gynosexual": {
 | 
			
		||||
        "name": "gynosexual",
 | 
			
		||||
        "description": "Someone who as attracted to women and/or feminity."
 | 
			
		||||
    },
 | 
			
		||||
    "grey-romantic": {
 | 
			
		||||
        "name": "grey-romantic",
 | 
			
		||||
        "description": "Someone with a romantic orentiation that is somewhere between aromantic and romantic."
 | 
			
		||||
    },
 | 
			
		||||
    "heterosexual": {
 | 
			
		||||
        "name": "heterosexual",
 | 
			
		||||
        "description": "Someone who is attracted to people of the opposite gender."
 | 
			
		||||
    },
 | 
			
		||||
    "homosexual": {
 | 
			
		||||
        "name": "homosexual",
 | 
			
		||||
        "description": "Someone attracted to people of ones own gender."
 | 
			
		||||
    },
 | 
			
		||||
    "lesbian": {
 | 
			
		||||
        "name": "lesbian",
 | 
			
		||||
        "description": "A woman who is attracted to other women."
 | 
			
		||||
    },
 | 
			
		||||
    "omnisexual": {
 | 
			
		||||
        "name": "omnisexual",
 | 
			
		||||
        "description": "Someone who is attracted to all genders."
 | 
			
		||||
    },
 | 
			
		||||
    "pansexual": {
 | 
			
		||||
        "name": "pansexual",
 | 
			
		||||
        "description": "Someone who is attracted towards people regardless of their gender identity."
 | 
			
		||||
    },
 | 
			
		||||
    "pomosexual": {
 | 
			
		||||
        "name": "pomosexual",
 | 
			
		||||
        "description": "Someone who does not fit into any sexual orientation label."
 | 
			
		||||
    },
 | 
			
		||||
    "polysexual": {
 | 
			
		||||
        "name": "polysexual",
 | 
			
		||||
        "description": "Someone who is attracted to some, but not all genders."
 | 
			
		||||
    },
 | 
			
		||||
    "straight": {
 | 
			
		||||
        "name": "straight",
 | 
			
		||||
        "description": "Someone who is heterosexual (attracted to people of the opposite gender)"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -26,9 +26,9 @@ exports.run = (client, message) => {
 | 
			
		|||
  }
 | 
			
		||||
 | 
			
		||||
  embed = new Discord.MessageEmbed();
 | 
			
		||||
    embed.setTitle(`Woomy`);
 | 
			
		||||
    embed.setColor(client.embedColour(message));
 | 
			
		||||
    embed.setThumbnail(client.user.avatarURL({format: "png", dynamic: true, size: 2048}))
 | 
			
		||||
    embed.setTitle("About Woomy")
 | 
			
		||||
    embed.addField(
 | 
			
		||||
      "General:", `• users: \`${client.users.cache.size}\`\n• channels: \`${client.channels.cache.size}\`\n• servers: \`${client.guilds.cache.size}\`\n• commands: \`${client.commands.size}\`\n• uptime: \`${duration}\``,true
 | 
			
		||||
      );
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ exports.run = (client, message) => {
 | 
			
		|||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["stats"],
 | 
			
		||||
  aliases: ["stats", "botinfo"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,14 +29,14 @@ exports.run = (client, message, args) => {
 | 
			
		|||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["calculate", "calc"],
 | 
			
		||||
  aliases: ["calc", "math"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "math",
 | 
			
		||||
  name: "calculate",
 | 
			
		||||
  category: "Utility",
 | 
			
		||||
  description: "Solves basic mathematical equations.",
 | 
			
		||||
  usage: "math [equation]"
 | 
			
		||||
  usage: "calculate [equation]"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										30
									
								
								src/commands/cat.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/cat.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.meow().then((json) => {
 | 
			
		||||
      message.channel.send(json.url)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("cat.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "cat",
 | 
			
		||||
  category: "Image",
 | 
			
		||||
  description: "Sends you cat pics.",
 | 
			
		||||
  usage: "cat"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										27
									
								
								src/commands/catfact.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/commands/catfact.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
const fetch = require("node-fetch")
 | 
			
		||||
exports.run = async (bot, message, args) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try{
 | 
			
		||||
    fetch('https://catfact.ninja/facts')
 | 
			
		||||
      .then(res => res.json())
 | 
			
		||||
      .then(json => message.channel.send(`__**Did you know?**__\n${json.data[0].fact}`))
 | 
			
		||||
  } catch(err) {
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`);
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
    enabled: true,
 | 
			
		||||
    guildOnly: false,
 | 
			
		||||
    aliases: ["kittenfact"],
 | 
			
		||||
    permLevel: "User",
 | 
			
		||||
    requiredPerms: []
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  exports.help = {
 | 
			
		||||
    name: "catfact",
 | 
			
		||||
    category: "Fun",
 | 
			
		||||
    description: "Sends a fun fact about a cat.",
 | 
			
		||||
    usage: "catfact/kittenfact"
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			@ -22,14 +22,14 @@ exports.run = (client, message, args) => {
 | 
			
		|||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  aliases: ["flip"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "flip",
 | 
			
		||||
  name: "coinflip",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Flips a coin!",
 | 
			
		||||
  usage: "flip [heads/tails]"
 | 
			
		||||
  usage: "coinflip [heads/tails]"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
exports.run = async (client, message, args) => {
 | 
			
		||||
  message.channel.send(
 | 
			
		||||
    `**Credits:**\n• \`mudkipscience#8904\` and \`FLGX#9896\`for developing the bot\n• \`An Idiots Guide\` for the Guidebot bot base\n• \`dellannie#6057\` for helping with the music commands\n• \`TheCakeChicken#9088\` and \`Tina the Cyclops girl#0064\` for helping me not suck at coding\n• \`AirVentTrent\` for the icon, find him on Instagram`
 | 
			
		||||
    `__**Credits:**__\n• \`mudkipscience#8904\`, \`FLGX#9896\` and \`TheCakeChicken#9088\` for developing the bot\n• \`An Idiots Guide\` for the Guidebot bot base\n• \`Tina the Cyclops girl#0064\` for helping me not suck at coding\n• \`AirVentTrent\` for the icon, find him on Instagram\n• \`Terryiscool160\` for contributing to Woomy.`
 | 
			
		||||
  );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ exports.conf = {
 | 
			
		|||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "credits",
 | 
			
		||||
  category: "Miscellaneous",
 | 
			
		||||
  category: "Utility",
 | 
			
		||||
  description: "Cool people",
 | 
			
		||||
  usage: "credits"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										69
									
								
								src/commands/cuddle.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/cuddle.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to cuddle! Usage: \`${client.commands.get(`cuddle`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.cuddle().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** cuddled **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("cuddle.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "cuddle",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "cuddle someone!",
 | 
			
		||||
  usage: "cuddle [@user/user] (you can cuddle as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										27
									
								
								src/commands/dice.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/commands/dice.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
exports.run = async (bot, message, args) => {
 | 
			
		||||
    if (args.length === 0) {
 | 
			
		||||
      message.channel.send(`🎲 You rolled a ${Array.from(Array(6).keys()).random() + 1}!`);
 | 
			
		||||
    } else {
 | 
			
		||||
      if (args[0].match(/^\d+$/)) {
 | 
			
		||||
        message.channel.send(`🎲 You rolled a ${Array.from(Array(parseInt(args[0])).keys()).random() + 1}!`);
 | 
			
		||||
      } else {
 | 
			
		||||
        message.channel.send(`🎲 You rolled a ${Array.from(Array(6).keys()).random() + 1}!`);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  exports.conf = {
 | 
			
		||||
    enabled: true,
 | 
			
		||||
    guildOnly: false,
 | 
			
		||||
    aliases: ["diceroll", "roll"],
 | 
			
		||||
    permLevel: "User",
 | 
			
		||||
    requiredPerms: []
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  exports.help = {
 | 
			
		||||
    name: "dice",
 | 
			
		||||
    category: "Fun",
 | 
			
		||||
    description: "Rolls a dice.",
 | 
			
		||||
    usage: "dice <faces>"
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										30
									
								
								src/commands/dog.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/dog.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.woof().then((json) => {
 | 
			
		||||
      message.channel.send(json.url)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("dog.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "dog",
 | 
			
		||||
  category: "Image",
 | 
			
		||||
  description: "Sends you dog pics.",
 | 
			
		||||
  usage: "dog"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										28
									
								
								src/commands/dogfact.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/commands/dogfact.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
const fetch = require("node-fetch");
 | 
			
		||||
exports.run = async (bot, message, args) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try{
 | 
			
		||||
    fetch('https://dog-api.kinduff.com/api/facts')
 | 
			
		||||
      .then(res => res.json())
 | 
			
		||||
      .then(json => message.channel.send(`__**Did you know?**__\n ${json.facts[0]}`));
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  } catch(err) {
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`);
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
    enabled: true,
 | 
			
		||||
    guildOnly: false,
 | 
			
		||||
    aliases: ["pupfact"],
 | 
			
		||||
    permLevel: "User",
 | 
			
		||||
    requiredPerms: []
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  exports.help = {
 | 
			
		||||
    name: "dogfact",
 | 
			
		||||
    category: "Fun",
 | 
			
		||||
    description: "Sends a fun fact about a doggo.",
 | 
			
		||||
    usage: "dogfact/pupfact"
 | 
			
		||||
  };
 | 
			
		||||
| 
						 | 
				
			
			@ -11,7 +11,6 @@ exports.run = async (client, message, args) => {
 | 
			
		|||
    format = ".gif"
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  console.log(string.length)
 | 
			
		||||
  if(string.length > 18) {
 | 
			
		||||
    ID = string.slice(string.length - 18);
 | 
			
		||||
  } else {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ exports.run = (client, message, args) => {
 | 
			
		|||
 | 
			
		||||
    if(emojified.length > 2000) {
 | 
			
		||||
      return message.channel.send("<:error:466995152976871434> The emojified message exceeds 2000 characters.")
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
      
 | 
			
		||||
    message.channel.send(emojified);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								src/commands/fact.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/fact.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.fact().then((json) => {
 | 
			
		||||
      message.channel.send("__**Did you know?**__\n" + json.fact + ".");
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("fact.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["randomfact"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "fact",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Sends you a random fact.",
 | 
			
		||||
  usage: "fact"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										69
									
								
								src/commands/feed.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/feed.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to feed! Usage: \`${client.commands.get(`feed`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.feed().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** fed **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("feed.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "feed",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "feed someone!",
 | 
			
		||||
  usage: "feed [@user/user] (you can feed as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +22,7 @@ exports.conf = {
 | 
			
		|||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "feedback",
 | 
			
		||||
  category: "Miscellaneous",
 | 
			
		||||
  category: "Utility",
 | 
			
		||||
  description: "Send feedback to my developer.",
 | 
			
		||||
  usage: "feedback [message]"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								src/commands/foxgirl.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/foxgirl.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.foxGirl().then((json) => {
 | 
			
		||||
      message.channel.send(json.url)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("foxgirl.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "foxgirl",
 | 
			
		||||
  category: "Image",
 | 
			
		||||
  description: "Sends you pictures of fox girls.",
 | 
			
		||||
  usage: "foxgirl"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -4,6 +4,7 @@ exports.run = (client, message, args, level) => {
 | 
			
		|||
 | 
			
		||||
  var ran = false;
 | 
			
		||||
  var output = "";
 | 
			
		||||
  var commands = 0;
 | 
			
		||||
  var prefix;
 | 
			
		||||
  var currentCategory;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -14,7 +15,7 @@ exports.run = (client, message, args, level) => {
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    embed.setTitle("Command list");
 | 
			
		||||
    embed.setTitle(`Command list`);
 | 
			
		||||
    embed.setDescription(`For more information on a specific command use \`${prefix}help <command>\`\nFor the full command list use \`${prefix}help all\`\n`);
 | 
			
		||||
 | 
			
		||||
    const myCommands = message.guild ? client.commands.filter(
 | 
			
		||||
| 
						 | 
				
			
			@ -34,19 +35,21 @@ exports.run = (client, message, args, level) => {
 | 
			
		|||
    );
 | 
			
		||||
 | 
			
		||||
    sorted.forEach( c => {
 | 
			
		||||
      const cat = c.help.category.toProperCase();
 | 
			
		||||
      const cat = c.help.category;
 | 
			
		||||
      if (currentCategory !== cat) {
 | 
			
		||||
        if(ran == true) {
 | 
			
		||||
          embed.addField(currentCategory + ":", output.slice(0, -6))
 | 
			
		||||
          embed.addField(currentCategory + ` [${commands}]`, output)
 | 
			
		||||
          output = "";
 | 
			
		||||
          commands = 0;
 | 
			
		||||
        }
 | 
			
		||||
        currentCategory = cat;
 | 
			
		||||
        ran = true
 | 
			
		||||
      }
 | 
			
		||||
    output += `\`${prefix}${c.help.name}\`**,** `;
 | 
			
		||||
    output += `\`${c.help.name}\` `;
 | 
			
		||||
    commands = commands + 1;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    embed.addField(currentCategory + ":", output.slice(0, -6));
 | 
			
		||||
    embed.addField(currentCategory + ` [${commands}]`, output);
 | 
			
		||||
 | 
			
		||||
    embed.addField(
 | 
			
		||||
      "Invite me",
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +68,7 @@ exports.run = (client, message, args, level) => {
 | 
			
		|||
  };
 | 
			
		||||
 | 
			
		||||
  if(args[0].toLowerCase() == "all") {
 | 
			
		||||
    embed.setTitle("Command list");
 | 
			
		||||
    embed.setTitle(`Command list`);
 | 
			
		||||
    embed.setDescription(`For more information on a specific command use \`${prefix}help <command>\`\nFor the full command list use \`${prefix}help all\`\n`);
 | 
			
		||||
 | 
			
		||||
    const myCommands = client.commands
 | 
			
		||||
| 
						 | 
				
			
			@ -81,19 +84,22 @@ exports.run = (client, message, args, level) => {
 | 
			
		|||
    );
 | 
			
		||||
 | 
			
		||||
    sorted.forEach( c => {
 | 
			
		||||
      const cat = c.help.category.toProperCase();
 | 
			
		||||
      const cat = c.help.category;
 | 
			
		||||
      if (currentCategory !== cat) {
 | 
			
		||||
        if(ran == true) {
 | 
			
		||||
          embed.addField(currentCategory + ":", output.slice(0, -6))
 | 
			
		||||
          embed.addField(currentCategory + ` [${commands}]`, output)
 | 
			
		||||
          output = "";
 | 
			
		||||
          commands = 0;
 | 
			
		||||
        }
 | 
			
		||||
        currentCategory = cat;
 | 
			
		||||
        ran = true
 | 
			
		||||
      }
 | 
			
		||||
    output += `\`${prefix}${c.help.name}\`**,** `;
 | 
			
		||||
    output += `\`${c.help.name}\` `;
 | 
			
		||||
    commands = commands + 1;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    embed.addField(currentCategory + ":", output.slice(0, -6));
 | 
			
		||||
 | 
			
		||||
    embed.addField(currentCategory + ` [${commands}]`, output);
 | 
			
		||||
 | 
			
		||||
    embed.addField(
 | 
			
		||||
      "Invite me",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										69
									
								
								src/commands/hug.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/hug.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to hug! Usage: \`${client.commands.get(`hug`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.hug().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** hugged **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("hug.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "hug",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "Hug someone!",
 | 
			
		||||
  usage: "hug [@user/user] (you can hug as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										36
									
								
								src/commands/identity.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/commands/identity.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
const identities = require ("../../resources/other/identities.json");
 | 
			
		||||
exports.run = async (client, message, args) => { 
 | 
			
		||||
  var output = "";
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    for (var key of Object.keys(identities)) {
 | 
			
		||||
      output += `${key}, `  
 | 
			
		||||
    };
 | 
			
		||||
    return message.channel.send(`__**Identities**__\n${output.slice(0, -2)}`);
 | 
			
		||||
  } else {  
 | 
			
		||||
    if(args.join(" ").toLowerCase() == "attack helicopter" || args.join(" ").toLowerCase() == "apache attack helicopter" || args.join(" ").toLowerCase() == "apache") {
 | 
			
		||||
      return message.channel.send({
 | 
			
		||||
        files: [new Discord.MessageAttachment("./resources/images/attackhelicopter.jpg")]
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    output = identities[args.join(" ").toLowerCase()];
 | 
			
		||||
    if(!output) {
 | 
			
		||||
      return message.channel.send("<:error:466995152976871434> No results for that query.");
 | 
			
		||||
    };
 | 
			
		||||
    return message.channel.send(`__**${output.name.toProperCase()}**__\n${output.description}`);
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["identities"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
}; 
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "identity",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Gives you information about the specified identity.",
 | 
			
		||||
  usage: "identity [identity]"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,21 @@
 | 
			
		|||
const request = require('request')
 | 
			
		||||
const fetch = require("node-fetch")
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  request({
 | 
			
		||||
    url: "http://inspirobot.me/api?generate=true"
 | 
			
		||||
  },
 | 
			
		||||
  function(error, res, body) {
 | 
			
		||||
    if(body.length > 0) {
 | 
			
		||||
      message.channel.send({
 | 
			
		||||
        files: [new Discord.MessageAttachment(body)]
 | 
			
		||||
      });
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    } else {
 | 
			
		||||
      message.channel.send('<:error:466995152976871434> API error, please retry.')
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    };
 | 
			
		||||
  });
 | 
			
		||||
  try {
 | 
			
		||||
    fetch('http://inspirobot.me/api?generate=true')
 | 
			
		||||
      .then(res => res.text())
 | 
			
		||||
      .then(body => message.channel.send({files: [new Discord.MessageAttachment(body)]}));
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  aliases: ["inspire"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										30
									
								
								src/commands/kemonomimi.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/kemonomimi.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.kemonomimi().then((json) => {
 | 
			
		||||
      message.channel.send(json.url)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("kemonomimi.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "kemonomimi",
 | 
			
		||||
  category: "Image",
 | 
			
		||||
  description: "Sends you pictures of people with animal characteristics.",
 | 
			
		||||
  usage: "kemonomimi"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										69
									
								
								src/commands/kiss.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/kiss.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to kiss! Usage: \`${client.commands.get(`kiss`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.kiss().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** kissed **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("kiss.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "kiss",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "Kiss someone!",
 | 
			
		||||
  usage: "kiss [@user/user] (you can kiss as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										30
									
								
								src/commands/lizard.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/lizard.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.lizard().then((json) => {
 | 
			
		||||
      message.channel.send(json.url)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("lizard.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "lizard",
 | 
			
		||||
  category: "Image",
 | 
			
		||||
  description: "Sends pictures of lizards.",
 | 
			
		||||
  usage: "lizard"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										30
									
								
								src/commands/neko.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/neko.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.neko().then((json) => {
 | 
			
		||||
      message.channel.send(json.url);
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("neko.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["catgirl"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "neko",
 | 
			
		||||
  category: "Image",
 | 
			
		||||
  description: "Sends you pictures of catgirls.",
 | 
			
		||||
  usage: "neko"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										30
									
								
								src/commands/nekogif.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/nekogif.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.nekoGif().then((json) => {
 | 
			
		||||
      message.channel.send(json.url);
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("nekogif.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["catgirlgif"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "nekogif",
 | 
			
		||||
  category: "Image",
 | 
			
		||||
  description: "Sends you gifs of catgirls.",
 | 
			
		||||
  usage: "nekogif"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -13,8 +13,8 @@ exports.run = (client, message, args) => {
 | 
			
		|||
  owoified = owoified.replace(/!+/g, ' ' + faces[~~(Math.random() * faces.length)] + ' ')
 | 
			
		||||
 | 
			
		||||
  if(owoified.length > 2000) {
 | 
			
		||||
    return message.channel.send("<:error:466995152976871434> The owoified message exceeds 2000 characters.")
 | 
			
		||||
  }
 | 
			
		||||
    owoified = owoified.slice(0, -Math.abs(owoified.length - 2000))
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
message.channel.send(owoified)
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										69
									
								
								src/commands/pat.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/pat.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to pat! Usage: \`${client.commands.get(`pat`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.pat().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** patted **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("pat.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: ["headpat"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "pat",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "pat someone!",
 | 
			
		||||
  usage: "pat [@user/user] (you can pat as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										69
									
								
								src/commands/poke.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/poke.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to poke! Usage: \`${client.commands.get(`poke`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.poke().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** poked **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("poke.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "poke",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "poke someone!",
 | 
			
		||||
  usage: "poke [@user/user] (you can poke as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										36
									
								
								src/commands/pronoun.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/commands/pronoun.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
const pronouns = require ("../../resources/other/pronouns.json");
 | 
			
		||||
exports.run = async (client, message, args) => { 
 | 
			
		||||
  var output = "";
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    for (var key of Object.keys(pronouns)) {
 | 
			
		||||
      output += `${key}, `  
 | 
			
		||||
    };
 | 
			
		||||
    return message.channel.send(`__**Pronouns:**__\n${output.slice(0, -2)}`);
 | 
			
		||||
  } else {
 | 
			
		||||
    if(args.join(" ").toLowerCase() == "attack helicopter" || args.join(" ").toLowerCase() == "apache attack helicopter" || args.join(" ").toLowerCase() == "apache") {
 | 
			
		||||
      return message.channel.send({
 | 
			
		||||
        files: [new Discord.MessageAttachment("./resources/images/attackhelicopter.jpg")]
 | 
			
		||||
      });
 | 
			
		||||
    };
 | 
			
		||||
    output = pronouns[args.join(" ").toLowerCase()];
 | 
			
		||||
    if(!output) {
 | 
			
		||||
      return message.channel.send("<:error:466995152976871434> No results for that query.");
 | 
			
		||||
    };
 | 
			
		||||
    return message.channel.send(`__**Example sentences using ${output.name}:**__\n${output.examples}`);
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["pronouns"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
}; 
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "pronoun",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Gives you information on how to use the specified pronoun.",
 | 
			
		||||
  usage: "pronoun [pronoun]"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -15,17 +15,47 @@ exports.run = async (client, message, args, level) => {
 | 
			
		|||
    return message.channel.send(`<:error:466995152976871434> Role not found.`)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(role.hoist === true) {
 | 
			
		||||
    var hoist = `Yes`
 | 
			
		||||
  } else {
 | 
			
		||||
    var hoist = `No`
 | 
			
		||||
  }
 | 
			
		||||
  var permissions = "```";
 | 
			
		||||
  if(role.permissions.has("ADMINISTRATOR")) permissions += "ADMINISTRATOR, ";
 | 
			
		||||
  if(role.permissions.has("CREATE_INSTANT_INVITE")) permissions += "CREATE_INSTANT_INVITE, ";
 | 
			
		||||
  if(role.permissions.has("KICK_MEMBERS")) permissions += "KICK_MEMBERS, ";
 | 
			
		||||
  if(role.permissions.has("BAN_MEMBERS")) permissions += "BAN_MEMBERS, ";
 | 
			
		||||
  if(role.permissions.has("MANAGE_CHANNELS")) permissions += "MANAGE_CHANNELS, ";
 | 
			
		||||
  if(role.permissions.has("MANAGE_GUILD")) permissions += "MANAGE_GUILD, ";
 | 
			
		||||
  if(role.permissions.has("ADD_REACTIONS")) permissions += "ADD_REACTIONS, ";
 | 
			
		||||
  if(role.permissions.has("VIEW_AUDIT_LOG")) permissions += "VIEW_AUDIT_LOG, ";
 | 
			
		||||
  if(role.permissions.has("PRIORITY_SPEAKER")) permissions += "PRIORITY_SPEAKER, ";
 | 
			
		||||
  if(role.permissions.has("STREAM")) permissions += "STREAM, ";
 | 
			
		||||
  if(role.permissions.has("VIEW_CHANNEL")) permissions += "VIEW_CHANNEL, ";
 | 
			
		||||
  if(role.permissions.has("SEND_MESSAGES")) permissions += "SEND_MESSAGES, ";
 | 
			
		||||
  if(role.permissions.has("SEND_TTS_MESSAGES")) permissions += "SEND_TTS_MESSAGES, ";
 | 
			
		||||
  if(role.permissions.has("MANAGE_MESSAGES")) permissions += "MANAGE_MESSAGES, ";
 | 
			
		||||
  if(role.permissions.has("EMBED_LINKS")) permissions += "EMBED_LINKS, ";
 | 
			
		||||
  if(role.permissions.has("ATTACH_FILES")) permissions += "ATTACH_FILES, ";
 | 
			
		||||
  if(role.permissions.has("READ_MESSAGE_HISTORY")) permissions += "READ_MESSAGE_HISTORY, ";
 | 
			
		||||
  if(role.permissions.has("MENTION_EVERYONE")) permissions += "MENTION_EVERYONE, ";
 | 
			
		||||
  if(role.permissions.has("USE_EXTERNAL_EMOJIS")) permissions += "USE_EXTERNAL_EMOJIS, ";
 | 
			
		||||
  if(role.permissions.has("CONNECT")) permissions += "CONNECT, ";
 | 
			
		||||
  if(role.permissions.has("SPEAK")) permissions += "SPEAK, ";
 | 
			
		||||
  if(role.permissions.has("MUTE_MEMBERS")) permissions += "MUTE_MEMBERS, ";
 | 
			
		||||
  if(role.permissions.has("DEAFEN_MEMBERS")) permissions += "DEAFEN_MEMBERS, ";
 | 
			
		||||
  if(role.permissions.has("MOVE_MEMBERS")) permissions += "MOVE_MEMBERS, ";
 | 
			
		||||
  if(role.permissions.has("USE_VAD")) permissions += "USE_VAD, ";
 | 
			
		||||
  if(role.permissions.has("CHANGE_NICKNAME")) permissions += "CHANGE_NICKNAME, ";
 | 
			
		||||
  if(role.permissions.has("MANAGE_NICKNAMES")) permissions += "MANAGE_NICKNAMES, ";
 | 
			
		||||
  if(role.permissions.has("MANAGE_ROLES")) permissions += "MANAGE_ROLES, ";
 | 
			
		||||
  if(role.permissions.has("MANAGE_WEBHOOKS")) permissions += "MANAGE_WEBHOOKS, ";
 | 
			
		||||
  if(role.permissions.has("MANAGE_EMOJIS")) permissions += "MANAGE_EMOJIS, ";
 | 
			
		||||
  permissions = permissions.slice(0, -2);
 | 
			
		||||
  permissions += "```";
 | 
			
		||||
 | 
			
		||||
  var embed = new Discord.MessageEmbed();
 | 
			
		||||
  embed.setColor(role.color)
 | 
			
		||||
  embed.setColor(role.color);
 | 
			
		||||
  embed.setTitle(role.name);
 | 
			
		||||
  embed.setDescription(
 | 
			
		||||
    `• **Name:** ${role.name}\n• **ID:** ${role.id}\n• **Hex:** ${role.hexColor}\n• **Members:** ${role.members.size}\n• **Position:** ${role.position}\n• **Hoisted:** ${hoist}`
 | 
			
		||||
    `• **ID:** ${role.id}\n• **Hex:** ${role.hexColor}\n• **Members:** ${role.members.size}\n• **Position:** ${role.position}\n• **Hoisted:** ${role.hoist}`
 | 
			
		||||
  );
 | 
			
		||||
  embed.addField(`**Permissions:**`, permissions)
 | 
			
		||||
  message.channel.send(embed)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										36
									
								
								src/commands/sexuality.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/commands/sexuality.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
const sexualities = require ("../../resources/other/sexualities.json");
 | 
			
		||||
exports.run = async (client, message, args) => { 
 | 
			
		||||
  var output = "";
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    for (var key of Object.keys(sexualities)) {
 | 
			
		||||
      output += `${key}, `  
 | 
			
		||||
    };
 | 
			
		||||
    return message.channel.send(`__**Sexualities:**__\n${output.slice(0, -2)}`);
 | 
			
		||||
  } else {  
 | 
			
		||||
    if(args.join(" ").toLowerCase() == "attack helicopter" || args.join(" ").toLowerCase() == "apache attack helicopter" || args.join(" ").toLowerCase() == "apache") {
 | 
			
		||||
      return message.channel.send({
 | 
			
		||||
        files: [new Discord.MessageAttachment("./resources/images/attackhelicopter.jpg")]
 | 
			
		||||
      });
 | 
			
		||||
    }
 | 
			
		||||
    output = sexualities[args.join(" ").toLowerCase()];
 | 
			
		||||
    if(!output) {
 | 
			
		||||
      return message.channel.send("<:error:466995152976871434> No results for that query.");
 | 
			
		||||
    };
 | 
			
		||||
    return message.channel.send(`__**${output.name.toProperCase()}:**__\n${output.description}`);
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["sexualities"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
}; 
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "sexuality",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Gives you information about the specified sexuality.",
 | 
			
		||||
  usage: "sexuality [sexuality]"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										53
									
								
								src/commands/ship.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/commands/ship.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,53 @@
 | 
			
		|||
exports.run = async (client, message, args) => {
 | 
			
		||||
 | 
			
		||||
  var name, name1;
 | 
			
		||||
  var rating = Math.floor(Math.random() * 100) + 1;
 | 
			
		||||
  var hearts = [
 | 
			
		||||
    "❤️",
 | 
			
		||||
    "🧡",
 | 
			
		||||
    "💛",
 | 
			
		||||
    "💚",
 | 
			
		||||
    "💙",
 | 
			
		||||
    "💜"
 | 
			
		||||
  ];
 | 
			
		||||
  
 | 
			
		||||
  if(args.length < 2) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> Please include two names/users.`)
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(message.guild && message.mentions.members && message.mentions.members.size > 0) {
 | 
			
		||||
      name = message.mentions.members.first().displayName;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  if(message.guild && message.mentions.members && message.mentions.members.size > 1) {
 | 
			
		||||
    name1 = message.mentions.members.last().displayName;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  if(!name) {
 | 
			
		||||
    name = args[0];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  if(!name1) {
 | 
			
		||||
    name1 = args[1];
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  shipName = name.substr(0, client.intBetween(1,name.length))+name1.substr(client.intBetween(0,name1.length));
 | 
			
		||||
 | 
			
		||||
  message.channel.send(`__**Ship Generator:**__\n${hearts.random()} Ship Name: \`${shipName}\`\n${hearts.random()} Compatibility rating: \`${rating}%\``)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "ship",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Ship two people together <3",
 | 
			
		||||
  usage: "ship [name/user] [name/user]"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										69
									
								
								src/commands/slap.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/slap.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to slap! Usage: \`${client.commands.get(`kiss`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.slap().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** slapped **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("slap.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "slap",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "Slap someone >:3",
 | 
			
		||||
  usage: "slap [@user/user] (you can slap as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										33
									
								
								src/commands/smug.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/commands/smug.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message) => {
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.smug().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("smug.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "smug",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "Sends a smug gif.",
 | 
			
		||||
  usage: "smug"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										28
									
								
								src/commands/spoilerise.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								src/commands/spoilerise.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,28 @@
 | 
			
		|||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't provide any text! Usage: \`${client.commands.get(`spoiler`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var output = `||${[...message.cleanContent.substring(9)].join("||||")}||`;
 | 
			
		||||
 | 
			
		||||
  if(output.length > 2000) {
 | 
			
		||||
    output = output.slice(0, -Math.abs(output.length - 2000))
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  message.channel.send(output)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: ["spoilerize", "spoiler"],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "spoilerise",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Spoilers every letter in the provided text.",
 | 
			
		||||
  usage: "spoiler [text]"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -12,7 +12,7 @@ exports.conf = {
 | 
			
		|||
 | 
			
		||||
exports.help = {
 | 
			
		||||
    name: "support",
 | 
			
		||||
    category: "utility",
 | 
			
		||||
    category: "Utility",
 | 
			
		||||
    description: "Sends a link to Woomy's support/development server.",
 | 
			
		||||
    usage: "support"
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										69
									
								
								src/commands/tickle.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								src/commands/tickle.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,69 @@
 | 
			
		|||
const API = require('nekos.life');
 | 
			
		||||
const {sfw} = new API();
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  if(!args[0]) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> You didn't say who you wanted to tickle! Usage: \`${client.commands.get(`tickle`).help.usage}\``)
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  var people = "";
 | 
			
		||||
 | 
			
		||||
  for (var i = 0; i < args.length; i++) {
 | 
			
		||||
    var user = client.getUserFromMention(args[i])
 | 
			
		||||
    if (user) {
 | 
			
		||||
      user = message.guild.members.cache.get(user.id).displayName;
 | 
			
		||||
    } else {
 | 
			
		||||
      users = client.searchForMembers(message.guild, args[i]);
 | 
			
		||||
      if (users.length > 1)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> Found multiple users for `" + args[i] + "`, Please be more specific or mention the user instead."
 | 
			
		||||
        );
 | 
			
		||||
      else if (users.length == 0)
 | 
			
		||||
        return message.channel.send(
 | 
			
		||||
          "<:error:466995152976871434> That user doesn't seem to exist. Try again!"
 | 
			
		||||
        );
 | 
			
		||||
      user = users[0].displayName;
 | 
			
		||||
    };
 | 
			
		||||
    if(i+1 == args.length && args.length > 1) {
 | 
			
		||||
      people += `**and** ${user}!`
 | 
			
		||||
    } else if(args.length < 2) {
 | 
			
		||||
      people += `${user}!`;
 | 
			
		||||
    } else if(args.length == 2 && i == 0) {
 | 
			
		||||
      people += `${user} `;
 | 
			
		||||
    } else {
 | 
			
		||||
      people += `${user}, `;
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try {
 | 
			
		||||
    sfw.tickle().then((json) => {
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setImage(json.url)
 | 
			
		||||
      embed.setColor(client.embedColour(message));
 | 
			
		||||
      embed.setDescription(`**${message.guild.members.cache.get(message.author.id).displayName}** tickled **${people}**`)
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
    });
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    client.logger.error("tickle.js: " + err);
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true, 
 | 
			
		||||
  guildOnly: true,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: ["EMBED_LINKS"]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.help = {
 | 
			
		||||
  name: "tickle",
 | 
			
		||||
  category: "Action",
 | 
			
		||||
  description: "Tickle someone!",
 | 
			
		||||
  usage: "tickle [@user/user] (you can tickle as many people as you want!)"
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,10 @@
 | 
			
		|||
const Discord = require("discord.js");
 | 
			
		||||
 | 
			
		||||
const coolPeople = require('../../resources/other/coolpeople.json')
 | 
			
		||||
exports.run = (client, message, args) => {
 | 
			
		||||
  var user;
 | 
			
		||||
  var guild;
 | 
			
		||||
  var nick = "";
 | 
			
		||||
  var roles = "";
 | 
			
		||||
  var presence = "";
 | 
			
		||||
  var badges = "";
 | 
			
		||||
  var status;
 | 
			
		||||
  var createdAt;
 | 
			
		||||
  var avurl;
 | 
			
		||||
  var tag;
 | 
			
		||||
  var id;
 | 
			
		||||
  var bot;
 | 
			
		||||
  var user, guild, status, createdAt, avurl, tag, id;
 | 
			
		||||
  var nick, roles, presence, badges = "";
 | 
			
		||||
  var coolPerson = false;
 | 
			
		||||
  var friendos = coolPeople.coolPeople;
 | 
			
		||||
 | 
			
		||||
  if(message.guild) {
 | 
			
		||||
    user = message.mentions.members.first();
 | 
			
		||||
| 
						 | 
				
			
			@ -39,16 +31,27 @@ exports.run = (client, message, args) => {
 | 
			
		|||
      nick = `\n• **Nickname:** ${user.nickname}`;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if(user.user.id == message.guild.ownerID) {
 | 
			
		||||
      badges = "<:owner:685703193694306331>\n"
 | 
			
		||||
    for (var i = 0; i < friendos.length; i++) {
 | 
			
		||||
      if (user.user.id == friendos[i])
 | 
			
		||||
      coolPerson = true;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    if(coolPerson == true) {
 | 
			
		||||
      badges += "🌟"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(user.user.id == message.guild.ownerID) {
 | 
			
		||||
      badges += "<:owner:685703193694306331>"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(user.user.bot) {
 | 
			
		||||
      badges += "<:bot:686489601678114859>"
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
    if(badges.length > 0) {
 | 
			
		||||
      badges += "\n"
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    createdTimestamp = user.user.createdTimestamp;
 | 
			
		||||
    var date = new Date(createdTimestamp * 1000);
 | 
			
		||||
    var hours = date.getHours();
 | 
			
		||||
    var minutes = "0" + date.getMinutes();
 | 
			
		||||
    var seconds = "o" + date.getSeconds();
 | 
			
		||||
    console.log(date)
 | 
			
		||||
 | 
			
		||||
    user.roles.cache.forEach((role) => {
 | 
			
		||||
      roles = roles + role.name + "`, `"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,46 +5,47 @@ exports.run = async (client, message, args, error) => {
 | 
			
		|||
      `<:error:466995152976871434> You didn't give me a location. Usage: \`${client.commands.get(`weather`).help.usage}\``
 | 
			
		||||
    );
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  if(args.join(" ").toLowerCase() == "antarctica") {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
	
 | 
			
		||||
  weather.find({search: args.join(" "), degreeType: 'C'}, function(err, result) {
 | 
			
		||||
		if(err) client.logger.log(`weather.js error: ${JSON.stringify(error)}`, "error")
 | 
			
		||||
    if(result.length < 2 || !result) {
 | 
			
		||||
  
 | 
			
		||||
  try {
 | 
			
		||||
    weather.find({search: args.join(" "), degreeType: 'C'}, function(err, result) {
 | 
			
		||||
      if(err) return message.channel.send(`<:error:466995152976871434> API error: \`${error}\``)
 | 
			
		||||
      if(result.length < 2 || !result) {
 | 
			
		||||
        message.channel.stopTyping();
 | 
			
		||||
        return message.channel.send("<:error:466995152976871434> City not found!");
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      var location = result[0].location;
 | 
			
		||||
      var current = result[0].current;
 | 
			
		||||
 | 
			
		||||
      var warning = (`${location.alert}` || "No warnings");
 | 
			
		||||
 | 
			
		||||
      var embedColour;
 | 
			
		||||
      if (current.temperature < 0) {
 | 
			
		||||
        embedColour = "#addeff";
 | 
			
		||||
      }else if (current.temperature < 20) {
 | 
			
		||||
        embedColour = "#4fb8ff";
 | 
			
		||||
      }else if (current.temperature < 26) {
 | 
			
		||||
        embedColour = "#ffea4f";
 | 
			
		||||
      }else if (current.temperature < 31) {
 | 
			
		||||
        embedColour = "#ffa14f"
 | 
			
		||||
      } else {
 | 
			
		||||
        embedColour = "#ff614f"
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      embed = new Discord.MessageEmbed();
 | 
			
		||||
      embed.setAuthor(`Weather for ${location.name}:`)
 | 
			
		||||
      embed.setDescription(`• **Condition:** ${current.skytext}\n• **Temperature:** ${current.temperature}°C\n• **Feels like:** ${current.feelslike}°C\n• **Humidity:** ${current.humidity}%\n• **Wind:** ${current.winddisplay}\n• **Warnings:** ${warning}`)
 | 
			
		||||
      embed.setThumbnail(current.imageUrl)
 | 
			
		||||
      embed.setFooter(`Last updated at ${current.observationtime} ${current.date}`)
 | 
			
		||||
      embed.setColor(embedColour)
 | 
			
		||||
      message.channel.stopTyping();
 | 
			
		||||
      return message.channel.send("<:error:466995152976871434> City not found!");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    var location = result[0].location;
 | 
			
		||||
    var current = result[0].current;
 | 
			
		||||
 | 
			
		||||
    var warning = (`${location.alert}` || "No warnings");
 | 
			
		||||
 | 
			
		||||
    var embedColour;
 | 
			
		||||
    if (current.temperature < 0) {
 | 
			
		||||
      embedColour = "#addeff";
 | 
			
		||||
    }else if (current.temperature < 20) {
 | 
			
		||||
      embedColour = "#4fb8ff";
 | 
			
		||||
    }else if (current.temperature < 26) {
 | 
			
		||||
      embedColour = "#ffea4f";
 | 
			
		||||
    }else if (current.temperature < 31) {
 | 
			
		||||
      embedColour = "#ffa14f"
 | 
			
		||||
    } else {
 | 
			
		||||
      embedColour = "#ff614f"
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
		embed = new Discord.MessageEmbed();
 | 
			
		||||
		embed.addField(`Weather for ${location.name}:`, `**Condition:** ${current.skytext}\n**Temperature:** ${current.temperature}C°\n**Feels like:** ${current.feelslike}C°\n**Humidity:** ${current.humidity}%\n**Wind:** ${current.winddisplay}\n**Warnings:** ${warning}`)
 | 
			
		||||
		embed.setThumbnail(current.imageUrl)
 | 
			
		||||
		embed.setFooter(`Last updated at ${current.observationtime} ${current.date}`)
 | 
			
		||||
    embed.setColor(embedColour)
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
		message.channel.send(embed)
 | 
			
		||||
  });
 | 
			
		||||
      message.channel.send(embed)
 | 
			
		||||
    });
 | 
			
		||||
  } catch(err) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> API error: \`${err}\``)
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										33
									
								
								src/commands/yoda.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/commands/yoda.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
 | 
			
		||||
const fetch = require("node-fetch")
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
  const speech = args.join(' ');
 | 
			
		||||
  if (!speech) {
 | 
			
		||||
    return message.channel.send(`<:error:466995152976871434> Please include text for me to convert to yodish. Yes.`)
 | 
			
		||||
  };
 | 
			
		||||
  message.channel.startTyping();
 | 
			
		||||
  try{
 | 
			
		||||
    fetch(`http://yoda-api.appspot.com/api/v1/yodish?text=${encodeURIComponent(speech.toLowerCase())}`)
 | 
			
		||||
      .then(res => res.json())
 | 
			
		||||
      .then(json => message.channel.send(json.yodish));
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  } catch(err) {
 | 
			
		||||
    message.channel.send(`<:error:466995152976871434> An error has occurred: ${err}`);
 | 
			
		||||
    message.channel.stopTyping();
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
exports.conf = {
 | 
			
		||||
  enabled: true,
 | 
			
		||||
  guildOnly: false,
 | 
			
		||||
  aliases: [],
 | 
			
		||||
  permLevel: "User",
 | 
			
		||||
  requiredPerms: []
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
  exports.help = {
 | 
			
		||||
  name: "yoda",
 | 
			
		||||
  category: "Fun",
 | 
			
		||||
  description: "Turns any text you input into yodish. Yes.",
 | 
			
		||||
  usage: "yoda <text>"
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										30
									
								
								src/commands/zalgo.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/commands/zalgo.js
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
const zalgo = require("to-zalgo")
 | 
			
		||||
exports.run = async (client, message, args) => {
 | 
			
		||||
    if(!args[0]) {
 | 
			
		||||
      return message.channel.send(`<:error:466995152976871434> You didn't provide any text! Usage: \`${client.commands.get(`zalgo`).help.usage}\``)
 | 
			
		||||
    };
 | 
			
		||||
  
 | 
			
		||||
    var output = zalgo(args.join(" "))
 | 
			
		||||
  
 | 
			
		||||
    if(output.length > 2000) {
 | 
			
		||||
      output = output.slice(0, -Math.abs(output.length - 2000))
 | 
			
		||||
    };
 | 
			
		||||
  
 | 
			
		||||
    message.channel.send(output)
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  exports.conf = {
 | 
			
		||||
    enabled: true, 
 | 
			
		||||
    guildOnly: false,
 | 
			
		||||
    aliases: [],
 | 
			
		||||
    permLevel: "User",
 | 
			
		||||
    requiredPerms: []
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  exports.help = {
 | 
			
		||||
    name: "zalgo",
 | 
			
		||||
    category: "Fun",
 | 
			
		||||
    description: "Spoilers every letter in the provided text.",
 | 
			
		||||
    usage: "zalgo [text]"
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
| 
						 | 
				
			
			@ -131,11 +131,17 @@ module.exports = async (client, message) => {
 | 
			
		|||
    };
 | 
			
		||||
  };
 | 
			
		||||
  
 | 
			
		||||
  const prefixMention = new RegExp(`^<@!?${client.user.id}>( |)$`);
 | 
			
		||||
 | 
			
		||||
  if (message.content.match(prefixMention)) {
 | 
			
		||||
    return message.channel.send(`Current prefix: \`${prefix}\``);
 | 
			
		||||
  }
 | 
			
		||||
  //const prefixMention = new RegExp(`^<@!?${client.user.id}>( |)$`);
 | 
			
		||||
  const myMention = `<@&${client.user.id}>`;
 | 
			
		||||
  const myMention2 = `<@!${client.user.id}>`;
 | 
			
		||||
  
 | 
			
		||||
  if (message.content.startsWith(myMention) || message.content.startsWith(myMention2)) {
 | 
			
		||||
    if(message.content.length > myMention.length + 1 && (message.content.substr(0, myMention.length + 1) == myMention + ' ' || message.content.substr(0, myMention2.length + 1) == myMention2 + ' ')) {
 | 
			
		||||
      prefix = message.content.substr(0, myMention.length) + ' ';
 | 
			
		||||
    } else {
 | 
			
		||||
      return message.channel.send(`Current prefix: \`${prefix}\``);
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  if (message.content.indexOf(prefix) !== 0) return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,11 +8,15 @@ module.exports = client => {
 | 
			
		|||
 | 
			
		||||
  client.logger.log(`Connected to Discord as ${client.user.tag} | v${client.version.number}`, 'ready');
 | 
			
		||||
 | 
			
		||||
  let channel;
 | 
			
		||||
  let channel1;
 | 
			
		||||
  let channel, channel1;
 | 
			
		||||
 | 
			
		||||
  try { channel = client.guilds.cache.get('410990517841690625').channels.cache.get('570963998342643732'); } catch(err) {};
 | 
			
		||||
  try { channel1 = client.guilds.cache.get('410990517841690625').channels.cache.get('570963481189154822'); } catch(err) {};
 | 
			
		||||
  try { 
 | 
			
		||||
    channel = client.guilds.cache.get('410990517841690625').channels.cache.get('570963998342643732'); 
 | 
			
		||||
  } catch(err) {};
 | 
			
		||||
  
 | 
			
		||||
  try { 
 | 
			
		||||
    channel1 = client.guilds.cache.get('410990517841690625').channels.cache.get('570963481189154822'); 
 | 
			
		||||
  } catch(err) {};
 | 
			
		||||
 | 
			
		||||
  if(client.devmode == true) {
 | 
			
		||||
    client.logger.warn("Running in development mode.")
 | 
			
		||||
| 
						 | 
				
			
			@ -21,13 +25,16 @@ module.exports = client => {
 | 
			
		|||
    prefix = client.config.defaultSettings.prefix;
 | 
			
		||||
    channel.send(`\`${timestamp}\`: Ready event fired! Connected to ${client.users.cache.size} users in ${client.guilds.cache.size} guilds.`);
 | 
			
		||||
    channel1.send(`\`${timestamp}\`: **Ready event fired**`);
 | 
			
		||||
  }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  let randomActivity = activityArray.random();
 | 
			
		||||
  
 | 
			
		||||
  client.user.setActivity(`${prefix + randomActivity} | v${client.version.number}`, {type: "PLAYING"});
 | 
			
		||||
 | 
			
		||||
  setInterval(() => {
 | 
			
		||||
    randomActivity = activityArray.random();
 | 
			
		||||
    if(client.lockActivity == false) client.user.setActivity(`${prefix + randomActivity} | v${client.version.number}`, {type: "PLAYING"});
 | 
			
		||||
    if(client.lockActivity == false) {
 | 
			
		||||
      client.user.setActivity(`${prefix + randomActivity} | v${client.version.number}`, {type: "PLAYING"});
 | 
			
		||||
    };
 | 
			
		||||
  }, 30000);
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
const ytdl = require('ytdl-core-discord');
 | 
			
		||||
const youtubeInfo = require('youtube-info');
 | 
			
		||||
const getYoutubeId = require('get-youtube-id');
 | 
			
		||||
const request = require('request');
 | 
			
		||||
const fetch = require('node-fetch');
 | 
			
		||||
 | 
			
		||||
module.exports = client => {
 | 
			
		||||
  // Permission level function
 | 
			
		||||
| 
						 | 
				
			
			@ -133,6 +133,22 @@ module.exports = client => {
 | 
			
		|||
    return a;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // USER OBJECT FROM MENTION
 | 
			
		||||
  client.getUserFromMention = mention => {
 | 
			
		||||
    if (!mention) return;
 | 
			
		||||
  
 | 
			
		||||
    if (mention.startsWith('<@') && mention.endsWith('>')) {
 | 
			
		||||
      mention = mention.slice(2, -1);
 | 
			
		||||
  
 | 
			
		||||
      if (mention.startsWith('!')) {
 | 
			
		||||
        mention = mention.slice(1);
 | 
			
		||||
      }
 | 
			
		||||
  
 | 
			
		||||
      return client.users.cache.get(mention);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  // MUSIC
 | 
			
		||||
  client.music = {guilds: {}};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -144,14 +160,17 @@ module.exports = client => {
 | 
			
		|||
  {
 | 
			
		||||
      return new Promise(function(resolve, reject)
 | 
			
		||||
      {
 | 
			
		||||
          request("https://www.googleapis.com/youtube/v3/search?part=id&type=video&q=" + encodeURIComponent(query) + "&key=" + client.config.ytkey, function(error, response, body)
 | 
			
		||||
          {
 | 
			
		||||
              if(error) throw error;
 | 
			
		||||
 | 
			
		||||
              var json = JSON.parse(body);
 | 
			
		||||
        try{
 | 
			
		||||
          fetch("https://www.googleapis.com/youtube/v3/search?part=id&type=video&q=" + encodeURIComponent(query) + "&key=" + client.config.ytkey)
 | 
			
		||||
            .then(res => res.json())
 | 
			
		||||
            .then(json => {
 | 
			
		||||
              if(!json.items) { reject(); return; }
 | 
			
		||||
              resolve(json.items[0]);
 | 
			
		||||
          });
 | 
			
		||||
            });
 | 
			
		||||
          } catch (err) {
 | 
			
		||||
            client.logger.error("Music search err: ", err);
 | 
			
		||||
            throw err;
 | 
			
		||||
          };
 | 
			
		||||
      });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -324,6 +343,12 @@ module.exports = client => {
 | 
			
		|||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // FIND RANDOM INT BETWEEN TWO INTEGERS
 | 
			
		||||
  client.intBetween = function(min, max){
 | 
			
		||||
    return Math.round((Math.random() * (max - min))+min);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  // <String>.toPropercase() returns a proper-cased string
 | 
			
		||||
  Object.defineProperty(String.prototype, "toProperCase", {
 | 
			
		||||
    value: function() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
{
 | 
			
		||||
    "number": "1.1.2",
 | 
			
		||||
    "number": "1.2.0",
 | 
			
		||||
    "changelog": "**1.1.0 CHANGELOG:**\n> • Added `~softban`, bans and unbans a user to clear messages\n> • Added `~emoji`, enlarges custom emojis\n> • Added `~inspirobot`, generates an inspirational quote\n> • `~serverinfo` has been changed to be more consistent, and also now displays boosts and if the server is partnered and stuff\n> • `~userinfo` has been changed to be more consistent, also added some stuff\n> • `~about` has been changed, added a thumbnail and removed the description\n> • `~colour` has been changed, it can now generate colours from text\n> • `~hackban` no longer has its own embed\n> • `~eval` now logs to hastebin if output is too large\n> • role names are no longer case sensitive\n> • `~echo` renamed `~say`\n> • Users with the ADMINISTRATOR permission now automatically recieve woomy admin\n> • Fixed `~flip`, `~purge`, `~bohemian_rhapsody` and `~creeper`\n> • Guild join/leave messages no longer include the guild name\n> • Some emojis have been changed\n> • Woomy now supports discord.js v12\n> • Files have been restructured\n> • Logger now logs error stack\n> • Restart now exits with code 0"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue