Merge pull request #6 from mudkipscience/dev

Update master to 1.2.0
This commit is contained in:
Emily 2020-03-26 04:34:17 +00:00 committed by GitHub
commit 9787e46258
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
56 changed files with 1889 additions and 211 deletions

View File

@ -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
View 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

View File

@ -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;

View File

@ -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/");

View File

@ -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"

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

View File

@ -0,0 +1,21 @@
{
"coolPeople": [
"448354605617643520",
"433790467830972417",
"231777839576252417",
"285992938314661899",
"231704701433937931",
"324937993972350976",
"336492042299637771",
"273867501006225419",
"331870539897372672",
"304000458144481280",
"239787232666451980",
"264970229514371072",
"254310746450690048",
"358390849807319040",
"211011138656272386",
"266472557740425216",
"102943767346057216"
]
}

View File

@ -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."
}

View 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 someones 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."
}
}

View File

@ -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**."
}
}

View File

@ -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)"
}
}

View File

@ -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: []
};

View File

@ -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
View 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
View 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"
};

View File

@ -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]"
};

View File

@ -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
View 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
View 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
View 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
View 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"
};

View File

@ -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 {

View File

@ -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
View 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
View 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!)"
};

View File

@ -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
View 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"
};

View File

@ -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
View 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
View 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]"
};

View File

@ -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: []
};

View 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
View 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
View 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
View 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
View 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"
};

View File

@ -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
View 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
View 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
View 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]"
};

View File

@ -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
View 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
View 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
View 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
View 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"
};

View 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]"
};

View File

@ -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
View 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!)"
};

View File

@ -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 + "`, `"

View File

@ -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}\n**Feels like:** ${current.feelslike}\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
View 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
View 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]"
};

View File

@ -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;

View File

@ -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);
};

View File

@ -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() {

View File

@ -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"
}