Initial commit

This commit is contained in:
TheEssem 2019-09-13 15:02:41 -05:00
commit c33a86eb4c
132 changed files with 5860 additions and 0 deletions

29
commands/8ball.js Normal file
View file

@ -0,0 +1,29 @@
const { random } = require("../utils/misc.js");
exports.run = async () => {
const responses = [
"It is certain",
"It is decidedly so",
"Without a doubt",
"Yes, definitely",
"You may rely on it",
"As I see it, yes",
"Most likely",
"Outlook good",
"Yes",
"Signs point to yes",
"Reply hazy, try again",
"Ask again later",
"Better not tell you now",
"Cannot predict now",
"Concentrate and ask again",
"Don't count on it",
"My reply is no",
"My sources say no",
"Outlook not so good",
"Very doubtful"
];
return `🎱 ${random(responses)}`;
};
exports.aliases = ["magicball", "magikball", "magic8ball", "magik8ball", "eightball"];

22
commands/9gag.js Normal file
View file

@ -0,0 +1,22 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a 9GAG watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/9gag.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = gm(imageBuffer).composite(watermark).gravity("East");
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `9gag.${image.type}`
});
};
exports.aliases = ["ninegag", "gag"];

13
commands/avatar.js Normal file
View file

@ -0,0 +1,13 @@
const client = require("../utils/client.js");
exports.run = async (message, args) => {
if (message.mentions[0] !== undefined) {
return message.mentions[0].avatarURL;
} else if (client.users.get(args[0]) !== undefined) {
return client.users.get(args[0]).avatarURL;
} else {
return message.author.avatarURL;
}
};
exports.aliases = ["pfp", "ava"];

18
commands/ban.js Normal file
View file

@ -0,0 +1,18 @@
const client = require("../utils/client.js");
exports.run = async (message) => {
if (!message.member.permission.has("banMembers")) return `${message.author.mention}, you need to have the \`Ban Members\` permission on this server to ban people!`;
if (!message.channel.guild.members.get(client.user.id).permission.has("banMembers") && !message.channel.permissionsOf(client.user.id).has("banMembers")) return `${message.author.mention}, I don't have the \`Ban Members\` permission!`;
const member = message.mentions[0];
if (member) {
try {
await message.channel.guild.banMember(member.id);
return `Successfully banned ${member.mention}.`;
} catch (error) {
console.error(error);
return `${message.author.mention}, I was unable to ban the member. Have you given me permissions?`;
}
} else {
return `${message.author.mention}, you need to provide a member to ban!`;
}
};

25
commands/bandicam.js Normal file
View file

@ -0,0 +1,25 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a Bandicam watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/bandicam.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const data = gm(imageBuffer).composite(watermark).gravity("North").resize(null, size.height);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `bandicam.${image.type}`
});
});
};
exports.aliases = ["bandi"];

17
commands/bird.js Normal file
View file

@ -0,0 +1,17 @@
const fetch = require("node-fetch");
exports.run = async (message) => {
message.channel.sendTyping();
const imageData = await fetch("http://shibe.online/api/birds");
const json = await imageData.json();
return message.channel.createMessage({
embed: {
color: 16711680,
image: {
url: json[0]
}
}
});
};
exports.aliases = ["birb", "birds", "birbs"];

15
commands/blur.js Normal file
View file

@ -0,0 +1,15 @@
const sharp = require("sharp");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to blur!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const resultBuffer = await sharp(imageBuffer).blur(5).toBuffer();
return message.channel.createMessage("", {
file: resultBuffer,
name: `blur.${image.type}`
});
};

21
commands/blurple.js Normal file
View file

@ -0,0 +1,21 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to make blurple!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = gm(imageBuffer).threshold(75, true).out("+level-colors").out("\"#7289DA\",white");
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `blurple.${image.type}`
});
};
exports.aliases = ["blurp"];

7
commands/boat.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/boat.opus", message);
};
exports.aliases = ["tape", "flextape", "phil", "philswift"];

7
commands/boi.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/boi.opus", message);
};
exports.aliases = ["boy", "neutron", "hugh"];

25
commands/brazzers.js Normal file
View file

@ -0,0 +1,25 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a Brazzers watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/brazzers.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const data = gm(imageBuffer).composite(watermark).gravity("SouthEast").resize(size.width, null);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `brazzers.${image.type}`
});
});
};
exports.aliases = ["brazzer", "br"];

7
commands/bruh.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/bruh.opus", message);
};
exports.aliases = ["bro"];

7
commands/bus.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/bus.opus", message);
};
exports.aliases = ["noyelling", "busyell"];

22
commands/cat.js Normal file
View file

@ -0,0 +1,22 @@
const fetch = require("node-fetch");
const config = require("../config.json");
exports.run = async (message) => {
message.channel.sendTyping();
const data = await fetch("https://api.thecatapi.com/v1/images/search?format=json", {
headers: {
"x-api-key": config.catToken
}
});
const json = await data.json();
return message.channel.createMessage({
embed: {
color: 16711680,
image: {
url: json[0].url
}
}
});
};
exports.aliases = ["kitters", "kitties", "kitty", "cattos", "catto", "cats"];

10
commands/catfact.js Normal file
View file

@ -0,0 +1,10 @@
const fetch = require("node-fetch");
exports.run = async (message) => {
message.channel.sendTyping();
const imageData = await fetch("https://catfact.ninja/fact");
const json = await imageData.json();
return `🐱 **Did you know?** ${json.fact}`;
};
exports.aliases = ["kittyfact"];

21
commands/circle.js Normal file
View file

@ -0,0 +1,21 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add radial blur!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = gm(imageBuffer).out("-radial-blur", 10);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `circle.${image.type}`
});
};
exports.aliases = ["cblur", "radial", "radialblur"];

66
commands/cowsay.js Normal file
View file

@ -0,0 +1,66 @@
const cowsay = require("cowsay");
exports.run = async (message, args) => {
const cowList = ["beavis.zen",
"bong",
"bud-frogs",
"bunny",
"cheese",
"cower",
"daemon",
"default",
"doge",
"dragon-and-cow",
"dragon",
"elephant-in-snake",
"elephant",
"eyes",
"flaming-sheep",
"ghostbusters",
"goat",
"hedgehog",
"hellokitty",
"kiss",
"kitty",
"koala",
"kosh",
"luke-koala",
"mech-and-cow",
"meow",
"milk",
"moofasa",
"moose",
"mutilated",
"ren",
"satanic",
"sheep",
"skeleton",
"small",
"squirrel",
"stegosaurus",
"stimpy",
"supermilker",
"surgery",
"telebears",
"turkey",
"turtle",
"tux",
"vader-koala",
"vader",
"whale",
"www"
];
if (args.length === 0) {
return `${message.author.mention}, you need to provide some text for the cow to say!`;
} else if (cowList.indexOf(args[0].toLowerCase()) > -1) {
const cow = args.shift().toLowerCase();
return `\`\`\`\n${cowsay.say({
text: args.join(" "),
f: cow
})}\n\`\`\``;
} else {
return `\`\`\`\n${cowsay.say({ text: args.join(" ") })}\n\`\`\``;
}
};
exports.aliases = ["cow"];

5
commands/dbl.js Normal file
View file

@ -0,0 +1,5 @@
exports.run = async (message) => {
return `${message.author.mention}, my DBL page can be found here: <https://discordbots.org/bot/429305856241172480>`;
};
exports.aliases = ["discordbotlist", "botlist", "discordbots"];

6
commands/decode.js Normal file
View file

@ -0,0 +1,6 @@
exports.run = async (message, args) => {
const b64Decoded = Buffer.from(args.join(" "), "base64").toString("utf-8");
return `\`\`\`\n${b64Decoded}\`\`\``;
};
exports.aliases = ["b64decode", "base64decode"];

25
commands/deviantart.js Normal file
View file

@ -0,0 +1,25 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a DeviantArt watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/deviantart.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const data = gm(imageBuffer).composite(watermark).gravity("Center").resize(null, size.height);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `deviantart.${image.type}`
});
});
};
exports.aliases = ["da", "deviant"];

15
commands/dice.js Normal file
View file

@ -0,0 +1,15 @@
const misc = require("../utils/misc.js");
exports.run = async (message, args) => {
if (args.length === 0) {
return `🎲 The dice landed on ${misc.random(Array.from(Array(6).keys())) + 1}.`;
} else {
if (args[0].match(/^\d+$/)) {
return `🎲 The dice landed on ${misc.random(Array.from(Array(parseInt(args[0])).keys())) + 1}.`;
} else {
return `🎲 The dice landed on ${misc.random(Array.from(Array(6).keys())) + 1}.`;
}
}
};
exports.aliases = ["roll", "die", "rng", "random"];

17
commands/dog.js Normal file
View file

@ -0,0 +1,17 @@
const fetch = require("node-fetch");
exports.run = async (message) => {
message.channel.sendTyping();
const imageData = await fetch("https://dog.ceo/api/breeds/image/random");
const json = await imageData.json();
return message.channel.createMessage({
embed: {
color: 16711680,
image: {
url: json.message
}
}
});
};
exports.aliases = ["doggos", "doggo", "pupper", "puppers", "dogs", "puppy", "puppies", "pups", "pup"];

10
commands/dogfact.js Normal file
View file

@ -0,0 +1,10 @@
const fetch = require("node-fetch");
exports.run = async (message) => {
message.channel.sendTyping();
const imageData = await fetch("https://dog-api.kinduff.com/api/facts");
const json = await imageData.json();
return `🐶 **Did you know?** ${json.facts[0]}`;
};
exports.aliases = ["pupfact"];

6
commands/encode.js Normal file
View file

@ -0,0 +1,6 @@
exports.run = async (message, args) => {
const b64Encoded = Buffer.from(args.join(" ")).toString("base64");
return `\`\`\`\n${b64Encoded}\`\`\``;
};
exports.aliases = ["b64encode", "base64encode"];

15
commands/eval.js Normal file
View file

@ -0,0 +1,15 @@
const { clean } = require("../utils/misc.js");
exports.run = async (message, args) => {
if (message.author.id !== "198198681982205953") return `${message.author.mention}, only the bot owner can use eval!`;
const code = args.join(" ");
try {
const evaled = eval(code);
const cleaned = await clean(evaled);
return `\`\`\`js\n${cleaned}\n\`\`\``;
} catch (err) {
return `\`ERROR\` \`\`\`xl\n${await clean(err)}\n\`\`\``;
}
};
exports.aliases = ["run"];

21
commands/explode.js Normal file
View file

@ -0,0 +1,21 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to explode!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = gm(imageBuffer).implode([-2]);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `explode.${image.type}`
});
};
exports.aliases = ["exp"];

5
commands/explosion.js Normal file
View file

@ -0,0 +1,5 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/explosion.opus", message);
};

7
commands/fakeping.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/ping.opus", message);
};
exports.aliases = ["notification", "notif"];

7
commands/fart.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/fart.opus", message);
};
exports.aliases = ["toot"];

7
commands/fbi.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/fbi.opus", message);
};
exports.aliases = ["openup"];

35
commands/feedback.js Normal file
View file

@ -0,0 +1,35 @@
const client = require("../utils/client.js");
exports.run = async (message, args) => {
if (args.length !== 0) {
const feedbackChannel = client.guilds.get("592399417676529688").channels.get("592429860769497098");
feedbackChannel.createMessage({
embed: {
color: 16711680,
timestamp: new Date(),
thumbnail: {
url: message.author.avatarURL
},
author: {
name: "esmBot Feedback",
icon_url: client.user.avatarURL
},
fields: [{
name: "👥 Author:",
value: `${message.author.username}#${message.author.discriminator}`
}, {
name: "👪 Server:",
value: message.channel.guild.name
}, {
name: "💬 Message:",
value: args.join(" ")
}]
}
});
return `${message.author.mention}, your feedback has been sent!`;
} else {
return `${message.author.mention}, you need to provide some feedback to send!`;
}
};
exports.aliases = ["request", "report", "complain", "compliment"];

15
commands/flip.js Normal file
View file

@ -0,0 +1,15 @@
const sharp = require("sharp");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to flip!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const resultBuffer = await sharp(imageBuffer).flip().toBuffer();
return message.channel.createMessage("", {
file: resultBuffer,
name: `flip.${image.type}`
});
};

17
commands/flop.js Normal file
View file

@ -0,0 +1,17 @@
const sharp = require("sharp");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to flop!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const resultBuffer = await sharp(imageBuffer).flop().toBuffer();
return message.channel.createMessage("", {
file: resultBuffer,
name: `flop.${image.type}`
});
};
exports.aliases = ["flip2"];

7
commands/fortnite.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/fortnite.opus", message);
};
exports.aliases = ["dance", "defaultdance"];

6
commands/fullwidth.js Normal file
View file

@ -0,0 +1,6 @@
exports.run = async (message, args) => {
if (args.length === 0) return `${message.author.mention}, you need to provide some text to convert to fullwidth!`;
return args.join("").replace(/[A-Za-z0-9]/g, (s) => { return String.fromCharCode(s.charCodeAt(0) + 0xFEE0); });
};
exports.aliases = ["aesthetic", "aesthetics", "aes"];

25
commands/funky.js Normal file
View file

@ -0,0 +1,25 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add New Funky Mode!`;
message.channel.sendTyping();
const watermark = "./assets/images/funky.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const data = gm(imageBuffer).composite(watermark).gravity("NorthEast").resize(null, size.height);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `funky.${image.type}`
});
});
};
exports.aliases = ["funkymode", "newfunkymode", "funkykong"];

32
commands/haah.js Normal file
View file

@ -0,0 +1,32 @@
// really don't like this file
const gm = require("gm").subClass({
imageMagick: true
});
const tempy = require("tempy");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to mirror!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = tempy.file({ extension: image.type });
const data2 = tempy.file({ extension: image.type });
gm(imageBuffer).gravity("West").crop("50%", 0).strip().write(data2, (error) => {
if (error) console.error;
gm(data2).flop().strip().write(data, async (error) => {
if (error) console.error;
gm(data2).append(data, true).toBuffer(image.type, (error, resultBuffer) => {
if (error) console.error;
return message.channel.createMessage("", {
file: resultBuffer,
name: `haah.${image.type}`
});
});
});
});
};
exports.aliases = ["magik4", "mirror2"];

6
commands/help.js Normal file
View file

@ -0,0 +1,6 @@
const database = require("../utils/database.js");
exports.run = async (message) => {
const guildConf = database.settings.get(message.channel.guild.id);
return `${message.author.mention}, my command list can be found here: https://essem.space/esmBot/commands.html?dev=true\nThis server's prefix is \`${guildConf.prefix[0]}\`.`;
};

32
commands/hooh.js Normal file
View file

@ -0,0 +1,32 @@
// really don't like this file
const gm = require("gm").subClass({
imageMagick: true
});
const tempy = require("tempy");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to mirror!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = tempy.file({ extension: image.type });
const data2 = tempy.file({ extension: image.type });
gm(imageBuffer).gravity("South").crop(0, "50%").strip().write(data2, (error) => {
if (error) console.error;
gm(data2).flip().strip().write(data, async (error) => {
if (error) console.error;
gm(data).append(data2).toBuffer(image.type, (error, resultBuffer) => {
if (error) console.error;
return message.channel.createMessage("", {
file: resultBuffer,
name: `hooh.${image.type}`
});
});
});
});
};
exports.aliases = ["magik6", "mirror4"];

25
commands/hypercam.js Normal file
View file

@ -0,0 +1,25 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a Hypercam watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/hypercam.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const data = gm(imageBuffer).composite(watermark).gravity("NorthWest").resize(null, size.height);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `hypercam.${image.type}`
});
});
};
exports.aliases = ["hcam"];

23
commands/ifunny.js Normal file
View file

@ -0,0 +1,23 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a iFunny watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/ifunny.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const data = gm(imageBuffer).append(watermark).gravity("South").resize(size.width, null);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `ifunny.${image.type}`
});
});
};

35
commands/image.js Normal file
View file

@ -0,0 +1,35 @@
const GoogleImages = require("google-images");
const client = require("../utils/client.js");
const paginator = require("../utils/pagination/pagination");
const config = require("../config.json");
exports.run = async (message, args) => {
if (!message.channel.guild.members.get(client.user.id).permission.has("addReactions") && !message.channel.permissionsOf(client.user.id).has("addReactions")) return `${message.author.mention}, I don't have the \`Add Reactions\` permission!`;
if (!message.channel.guild.members.get(client.user.id).permission.has("embedLinks") && !message.channel.permissionsOf(client.user.id).has("embedLinks")) return `${message.author.mention}, I don't have the \`Embed Links\` permission!`;
if (args.length === 0) return `${message.author.mention}, you need to provide something to search for!`;
const embeds = [];
const imageSearch = new GoogleImages(config.cseID, config.googleKey);
const images = await imageSearch.search(args.join(" "), { safe: "high" });
for (const [i, value] of images.entries()) {
embeds.push({
"embed": {
"title": "Search Results",
"color": 16711680,
"footer": {
"text": `Page ${i + 1} of ${images.length}`
},
"image": {
"url": value.url
},
"author": {
"name": message.author.username,
"icon_url": message.author.avatarURL
}
}
});
}
if (embeds.length === 0) return `${message.author.mention}, I couldn't find any results!`;
return paginator(message, embeds);
};
exports.aliases = ["im", "photo", "img"];

21
commands/implode.js Normal file
View file

@ -0,0 +1,21 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to implode!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = gm(imageBuffer).implode([1]);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `implode.${image.type}`
});
};
exports.aliases = ["imp"];

41
commands/info.js Normal file
View file

@ -0,0 +1,41 @@
const client = require("../utils/client.js");
const config = require("../config.json");
exports.run = async (message) => {
const dev = client.users.get(config.botOwner);
const artist = client.users.get("401980971517214723");
const infoEmbed = {
"embed": {
"description": "**You are currently using esmBot Dev! Things may change at any time without warning and there will be bugs. Many bugs.**",
"color": 16711680,
"author": {
"name": "esmBot Info/Credits",
"icon_url": client.user.avatarURL
},
"fields": [{
"name": "📝 Credits:",
"value": `Bot by **${dev.username}#${dev.discriminator}**\nIcon by **${artist.username}#${artist.discriminator}**`
},
{
"name": "👪 Total Users:",
"value": client.users.size
},
{
"name": "💬 Total Servers:",
"value": client.guilds.size
},
{
"name": "✅ Official Server:",
"value": "[Click here!](https://discord.gg/vfFM7YT)"
},
{
"name": "💻 Source Code:",
"value": "[Click here!](https://github.com/TheEssem/esmBot-rewrite)"
}
]
}
};
return message.channel.createMessage(infoEmbed);
};
exports.aliases = ["botinfo", "credits"];

21
commands/invert.js Normal file
View file

@ -0,0 +1,21 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to invert!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = gm(imageBuffer).negative();
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: `invert.${image.type}`
});
};
exports.aliases = ["inverse", "negate", "negative"];

3
commands/invite.js Normal file
View file

@ -0,0 +1,3 @@
exports.run = async (message) => {
return `${message.author.mention}, you can invite me to your server here: <https://discordapp.com/oauth2/authorize?client_id=515571942418546689&scope=bot&permissions=70642766>`;
};

21
commands/jpeg.js Normal file
View file

@ -0,0 +1,21 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add more JPEG!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const data = gm(imageBuffer).setFormat("jpg").quality(1);
const resultBuffer = await gmToBuffer(data);
return message.channel.createMessage("", {
file: resultBuffer,
name: "jpeg.jpg"
});
};
exports.aliases = ["needsmorejpeg", "jpegify", "magik2", "morejpeg", "jpg"];

18
commands/kick.js Normal file
View file

@ -0,0 +1,18 @@
const client = require("../utils/client.js");
exports.run = async (message) => {
if (!message.member.permission.has("kickMembers")) return `${message.author.mention}, you need to have the \`Kick Members\` permission on this server to kick people!`;
if (!message.channel.guild.members.get(client.user.id).permission.has("kickMembers") && !message.channel.permissionsOf(client.user.id).has("kickMembers")) return `${message.author.mention}, I don't have the \`Kick Members\` permission!`;
const member = message.mentions[0];
if (member) {
try {
await message.channel.guild.kickMember(member.id);
return `Successfully kicked ${member.mention}.`;
} catch (error) {
console.error(error);
return `${message.author.mention}, I was unable to kick the member. Have you given me permissions?`;
}
} else {
return `${message.author.mention}, you need to provide a member to kick!`;
}
};

12
commands/lengthen.js Normal file
View file

@ -0,0 +1,12 @@
const urlCheck = require("../utils/urlcheck.js");
exports.run = async (message, args) => {
message.channel.sendTyping();
if (args.length === 0 || !urlCheck(args[0])) return `${message.author.mention}, you need to provide a short URL to lengthen!`;
if (urlCheck(args[0])) {
const url = await require("url-unshort")().expand(args[0]);
return url;
}
};
exports.aliases = ["longurl", "lengthenurl", "longuri", "lengthenuri", "unshorten"];

28
commands/magik.js Normal file
View file

@ -0,0 +1,28 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add some magik!`;
const processMessage = await message.channel.createMessage("<a:processing:479351417102925854> Processing... This might take a while");
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).resize(800, 800).stream((error, stream) => {
if (error) console.error;
gm(stream).out("-liquid-rescale", "400x400").stream(async (error, stream2) => {
if (error) console.error;
const data = gm(stream2).out("-liquid-rescale", "1200x1200");
const resultBuffer = await gmToBuffer(data);
await processMessage.delete();
return message.channel.createMessage("", {
file: resultBuffer,
name: `magik.${image.type}`
});
});
});
};
exports.aliases = ["imagemagic", "imagemagick", "imagemagik", "magic", "magick", "cas", "liquid"];

7
commands/mail.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/mail.opus", message);
};
exports.aliases = ["yougotmail", "youvegotmail", "aol"];

14
commands/mc.js Normal file
View file

@ -0,0 +1,14 @@
const fetch = require("node-fetch");
exports.run = async (message, args) => {
if (args.length === 0) return `${message.author.mention}, you need to provide some text to generate a Minecraft achievement!`;
message.channel.sendTyping();
const request = await fetch(`https://www.minecraftskinstealer.com/achievement/a.php?i=13&h=Achievement+get%21&t=${args.join("+")}`);
const buffer = await request.buffer();
return message.channel.createMessage("", {
file: buffer,
name: "mc.png"
});
};
exports.aliases = ["ach", "achievement", "minecraft"];

32
commands/meme.js Normal file
View file

@ -0,0 +1,32 @@
const { spawn } = require("child_process");
const fetch = require("node-fetch");
exports.run = async (message, args) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to generate a meme!`;
if (args.length === 0) return `${message.author.mention}, you need to provide some text to generate a meme!`;
message.channel.sendTyping();
const request = await fetch(image.url);
const buffer = await request.buffer();
const [topText, bottomText] = args.join(" ").split(",").map(elem => elem.trim());
const child = spawn("./utils/meme.sh", [topText.toUpperCase().replace(/\\/g, "\\\\"), bottomText ? bottomText.toUpperCase().replace(/\\/g, "\\\\") : ""]);
child.stdin.write(buffer);
child.stdin.end();
const chunks = [];
child.stdout.on("data", (data) => {
chunks.push(data);
});
child.once("error", (error) => {
if (error) console.error;
});
child.stderr.once("data", (error) => {
if (error) console.error;
});
child.stdout.once("close", () => {
const data = Buffer.concat(chunks);
return message.channel.createMessage("", {
file: data,
name: "meme.png"
});
});
};

34
commands/memecenter.js Normal file
View file

@ -0,0 +1,34 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a MemeCenter watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/memecenter.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
let resultBuffer;
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const command = gm(imageBuffer).out(watermark).background("#FFFFFF").gravity("East").out("-smush").out("-9");
const output = await gmToBuffer(command);
gm(output).size(async (error, size2) => {
if (error) console.error;
resultBuffer = output;
if (size.width !== size2.width) {
const command2 = gm(output).gravity("West").chop(size2.width - size.width, 0);
resultBuffer = await gmToBuffer(command2);
}
return message.channel.createMessage("", {
file: resultBuffer,
name: "memecenter.png"
});
});
});
};
exports.aliases = ["memec", "mcenter"];

7
commands/oof.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/oof.opus", message);
};
exports.aliases = ["roblox", "commitdie"];

8
commands/ping.js Normal file
View file

@ -0,0 +1,8 @@
const client = require("../utils/client.js");
exports.run = async (message) => {
const pingMessage = await client.createMessage(message.channel.id, "🏓 Ping?");
return pingMessage.edit(`🏓 Pong! Latency is ${pingMessage.timestamp - message.timestamp}ms. API Latency is ${Math.round(client.shards.get(client.guildShardMap[message.channel.guild.id]).latency)}ms.`);
};
exports.aliases = ["pong"];

25
commands/play.js Normal file
View file

@ -0,0 +1,25 @@
const client = require("../utils/client.js");
exports.run = async (message) => {
if (message.member.voiceState.channelID) {
if (!message.channel.guild.members.get(client.user.id).permission.has("voiceConnect") || !message.channel.permissionsOf(client.user.id).has("voiceConnect")) return `${message.author.mention}, I can't join this voice channel!`;
if (message.author.id !== "198198681982205953") return "this command is for testing and is restricted to owners lol";
const voiceChannel = message.channel.guild.channels.get(message.member.voiceState.channelID);
client.createMessage(message.channel.id, "🔊 Playing music...");
const connection = await voiceChannel.join();
connection.play(message.attachments[0].url, {
inlineVolume: true
});
connection.setVolume(0.5);
connection.on("error", () => {
voiceChannel.leave();
console.error;
});
connection.on("end", () => {
voiceChannel.leave();
return "This music session has now ended.";
});
} else {
return `${message.author.mention}, you need to be in a voice channel first!`;
}
};

13
commands/prefix.js Normal file
View file

@ -0,0 +1,13 @@
const database = require("../utils/database.js");
exports.run = async (message, args) => {
if (args.length !== 0) {
if (!message.member.permission.has("administrator") && message.member.id !== "198198681982205953") return `${message.author.mention}, you need to be an administrator to change the bot prefix!`;
database.settings.set(message.channel.guild.id, args[0], "prefix");
return `The prefix has been changed to ${args[0]}.`;
} else {
return `${message.author.mention}, the current prefix is \`${database.settings.get(message.channel.guild.id, "prefix")}\`.`;
}
};
exports.aliases = ["setprefix", "changeprefix", "checkprefix"];

7
commands/prunejuice.js Normal file
View file

@ -0,0 +1,7 @@
const playSound = require("../utils/soundplayer.js");
exports.run = async (message) => {
return playSound("./assets/audio/prunejuice.opus", message);
};
exports.aliases = ["juice", "grandma"];

20
commands/purge.js Normal file
View file

@ -0,0 +1,20 @@
const client = require("../utils/client.js");
exports.run = async (message, args) => {
if (!message.member.permission.has("manageMessages")) return `${message.author.mention}, you need to have the \`Manage Messages\` permission on this server to ban people!`;
if (!message.channel.guild.members.get(client.user.id).permission.has("manageMessages") && !message.channel.permissionsOf(client.user.id).has("manageMessages")) return `${message.author.mention}, I don't have the \`Manage Messages\` permission!`;
if (args.length === 0 || !args[0].match(/^\d+$/)) return `${message.author.mention}, you need to provide the number of messages to purge!`;
const numberOfMessages = parseInt(args[0]) + 1;
const messageCollection = await message.channel.getMessages(numberOfMessages);
const messages = [];
for (const messageObject of messageCollection) {
messages.push(messageObject.id);
}
await message.channel.deleteMessages(messages);
const purgeMessage = await message.channel.createMessage(`Successfully purged ${args[0]} messages.`);
await require("util").promisify(setTimeout)(10000);
await purgeMessage.delete();
return;
};
exports.aliases = ["prune"];

23
commands/qrcreate.js Normal file
View file

@ -0,0 +1,23 @@
const qrcode = require("qrcode");
const stream = require("stream");
exports.run = async (message, args) => {
if (args.length === 0) return `${message.author.mention}, you need to provide some text to generate a QR code!`;
message.channel.sendTyping();
const writable = new stream.PassThrough();
qrcode.toFileStream(writable, args.join(" "), { margin: 1 });
const chunks = [];
writable.on("data", (chunk) => {
chunks.push(chunk);
});
writable.once("error", (error) => {
if (error) console.error;
});
writable.once("end", () => {
const imageBuffer = Buffer.concat(chunks);
return message.channel.createMessage("", {
file: imageBuffer,
name: "qr.png"
});
});
};

14
commands/qrread.js Normal file
View file

@ -0,0 +1,14 @@
const fetch = require("node-fetch");
const jsqr = require("jsqr");
const sharp = require("sharp");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image with a QR code to read it!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const rawData = await sharp(imageBuffer).ensureAlpha().raw().toBuffer({ resolveWithObject: true });
const qrBuffer = jsqr(rawData.data, rawData.info.width, rawData.info.height);
return `\`\`\`\n${qrBuffer.data}\n\`\`\``;
};

13
commands/reload.js Normal file
View file

@ -0,0 +1,13 @@
const handler = require("../utils/handler.js");
exports.run = async (message, args) => {
if (message.author.id !== require("../config.json").botOwner) return `${message.author.mention}, only the bot owner can reload commands!`;
if (args.length === 0) return `${message.author.mention}, you need to provide a command to reload!`;
try {
await handler.unload(args[0]);
await handler.load(args[0]);
return `${message.author.mention}, the command \`${args[0]}\` has been reloaded.`;
} catch (error) {
if (error) console.error;
}
};

13
commands/restart.js Normal file
View file

@ -0,0 +1,13 @@
const handler = require("../utils/handler.js");
const collections = require("../utils/collections.js");
exports.run = async (message) => {
if (message.author.id !== require("../config.json").botOwner) return `${message.author.mention}, only the bot owner can restart me!`;
await message.channel.createMessage(`${message.author.mention}, esmBot is restarting.`);
collections.commands.forEach(async (command) => {
await handler.unload(command);
});
process.exit(1);
};
exports.aliases = ["reboot"];

21
commands/retro.js Normal file
View file

@ -0,0 +1,21 @@
const RetroText = require("retrotext");
exports.run = async (message, args) => {
if (args.length === 0) return `${message.author.mention}, you need to provide some text to generate some retro text!`;
const [line1, line2, line3] = args.join(" ").split(",").map(elem => elem.trim());
if (/^[\w ]+$/i.test(line1) === false || /^[\w ]+$/i.test(line2) === false || /^[\w ]+$/i.test(line3) === false) return `${message.author.mention}, only alphanumeric characters, spaces, and underscores are allowed!`;
message.channel.sendTyping();
let text;
if (line3) {
text = new RetroText().setLine(1, line1).setLine(2, line2).setLine(3, line3).setBackgroundStyle("outlineTri").setTextStyle("chrome");
} else if (line2) {
text = new RetroText().setLine(1, line1).setLine(2, line2).setBackgroundStyle("outlineTri").setTextStyle("chrome");
} else {
text = new RetroText().setLine(2, line1).setBackgroundStyle("outlineTri").setTextStyle("chrome");
}
const textImage = await text.fetchBuffer();
return message.channel.createMessage("", {
file: textImage,
name: "retro.png"
});
};

25
commands/rps.js Normal file
View file

@ -0,0 +1,25 @@
exports.run = async (message, args) => {
if (args.length === 0 || (args[0] !== "rock" && args[0] !== "paper" && args[0] !== "scissors")) return `${message.author.mention}, you need to choose whether you want to be rock, paper, or scissors!`;
let emoji;
let winOrLose;
const result = require("../utils/misc.js").random(["rock", "paper", "scissors"]);
switch (result) {
case "rock":
emoji = "✊";
if (args[0].toLowerCase() === "paper") winOrLose = 1;
break;
case "paper":
emoji = "✋";
if (args[0].toLowerCase() === "scissors") winOrLose = 1;
break;
case "scissors":
emoji = "✌";
if (args[0].toLowerCase() === "rock") winOrLose = 1;
break;
default:
break;
}
return args[0].toLowerCase() === result ? `${emoji} I chose ${result}. It's a tie!` : `${emoji} I chose ${result}. ${winOrLose ? "You win!" : "You lose!"}`;
};
exports.aliases = ["rockpaperscissors"];

25
commands/scott.js Normal file
View file

@ -0,0 +1,25 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
const fs = require("fs");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to make a Scott the Woz TV meme!`;
message.channel.sendTyping();
const template = "./assets/images/scott.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const path = require("tempy").file({ extension: image.type });
require("util").promisify(fs.writeFile)(path, imageBuffer);
const command = gm(template).out("-gravity").out("Center").out("(").out(path).out("-virtual-pixel").out("transparent").out("-resize").out("415x234!").out("+distort").out("Perspective").out("0,0 129,187 415,0 517,182 415,234 517,465 0,234 132,418").out("-geometry").out("-110+83").out(")").out("-composite");
const resultBuffer = await gmToBuffer(command);
return message.channel.createMessage("", {
file: resultBuffer,
name: "scott.png"
});
};
exports.aliases = ["woz", "tv", "porn"];

45
commands/serverinfo.js Normal file
View file

@ -0,0 +1,45 @@
exports.run = async (message) => {
const owner = await message.channel.guild.members.get(message.channel.guild.ownerID);
const infoEmbed = {
"embed": {
"title": message.channel.guild.name,
"thumbnail": {
"url": message.channel.guild.iconURL
},
"color": 16711680,
"fields": [
{
"name": "🔢 **ID:**",
"value": message.channel.guild.id
},
{
"name": "👤 **Owner:**",
"value": `${owner.user.username}#${owner.user.discriminator}`
},
{
"name": "🗺 **Region:**",
"value": message.channel.guild.region
},
{
"name": "🗓 **Created on:**",
"value": new Date(message.channel.guild.createdAt).toString()
},
{
"name": "👥 **Users:**",
"value": message.channel.guild.memberCount
},
{
"name": "💬 **Channels:**",
"value": message.channel.guild.channels.size
},
{
"name": "😃 **Emojis:**",
"value": message.channel.guild.emojis.length
}
]
}
};
return message.channel.createMessage(infoEmbed);
};
exports.aliases = ["server"];

18
commands/sharpen.js Normal file
View file

@ -0,0 +1,18 @@
const sharp = require("sharp");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to sharpen!`;
message.channel.sendTyping();
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
const resultBuffer = await sharp(imageBuffer).sharpen(5).toBuffer();
return message.channel.createMessage("", {
file: resultBuffer,
name: "sharpen.png"
});
};
exports.aliases = ["sharp"];

11
commands/shorten.js Normal file
View file

@ -0,0 +1,11 @@
const urlCheck = require("../utils/urlcheck.js");
const fetch = require("node-fetch");
exports.run = async (message, args) => {
if (args.length === 0 || !urlCheck(args[0])) return `${message.author.mention}, you need to provide a URL to shorten!`;
const data = await fetch(`https://is.gd/create.php?format=simple&url=${encodeURIComponent(args[0])}`);
const url = await data.text();
return url;
};
exports.aliases = ["urlshorten", "shortenlink", "urishorten", "shortenuri", "shortenurl"];

25
commands/shutterstock.js Normal file
View file

@ -0,0 +1,25 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const fetch = require("node-fetch");
exports.run = async (message) => {
const image = await require("../utils/imagedetect.js")(message);
if (image === undefined) return `${message.author.mention}, you need to provide an image to add a Shutterstock watermark!`;
message.channel.sendTyping();
const watermark = "./assets/images/shutterstock.png";
const imageData = await fetch(image.url);
const imageBuffer = await imageData.buffer();
gm(imageBuffer).size(async (error, size) => {
if (error) console.error;
const command = gm(imageBuffer).composite(watermark).gravity("Center").resize(null, size.height);
const output = await gmToBuffer(command);
return message.channel.createMessage("", {
file: output,
name: "shutterstock.png"
});
});
};
exports.aliases = ["stock", "stockphoto"];

23
commands/sonic.js Normal file
View file

@ -0,0 +1,23 @@
const gm = require("gm").subClass({
imageMagick: true
});
const gmToBuffer = require("../utils/gmbuffer.js");
const tempy = require("tempy");
const wrap = require("../utils/wrap.js");
exports.run = async (message, args) => {
if (args.length === 0) return `${message.author.mention}, you need to provide an image to make a Sonic meme!`;
message.channel.sendTyping();
const template = "./assets/images/sonic.jpg";
const file = tempy.file({ extension: "png" });
const cleanedMessage = args.join(" ").replace(/&/g, "\\&amp;").replace(/>/g, "\\&gt;").replace(/</g, "\\&lt;");
gm(474, 332).out("+size").gravity("Center").out("-pointsize", 40).out("-font", "Bitstream Vera Sans").out(`pango:${wrap(cleanedMessage, {width: 15, indent: ""})}`).negative().out("-fuzz", "30%").transparent("black").write(file, async (error) => {
if (error) console.error;
const command = gm(template).composite(file).gravity("Center").geometry("474x332+160+10");
const resultBuffer = await gmToBuffer(command);
return message.channel.createMessage("", {
file: resultBuffer,
name: "sonic.png"
});
});
};

5
commands/spam.js Normal file
View file

@ -0,0 +1,5 @@
exports.run = async (message, args) => {
if (args.length === 0) return `${message.author.mention}, you need to provide what you want to spam!`;
if (message.content.indexOf("@everyone") > -1 || message.content.indexOf("@here") > -1) return "I don't know about you, but that seems like a bad idea.";
return args.join(" ").repeat(500).substring(0, 500);
};