mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-07 14:55:40 +02:00
Lots of Stuff
This commit is contained in:
@@ -68,14 +68,12 @@ client.on('warn', console.warn);
|
||||
client.on('commandError', (command, err) => console.error(command.name, err));
|
||||
|
||||
client.on('guildCreate', async guild => {
|
||||
console.log(`[GUILD] I have joined ${guild.name}! (${guild.id})`);
|
||||
const guilds = await client.shard.fetchClientValues('guilds.size');
|
||||
const count = guilds.reduce((prev, val) => prev + val, 0);
|
||||
postStats(count, client.user.id);
|
||||
});
|
||||
|
||||
client.on('guildDelete', async guild => {
|
||||
console.log(`[GUILD] I have left ${guild.name}... (${guild.id})`);
|
||||
const guilds = await client.shard.fetchClientValues('guilds.size');
|
||||
const count = guilds.reduce((prev, val) => prev + val, 0);
|
||||
postStats(count, client.user.id);
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
[
|
||||
"capricorn",
|
||||
"aquarius",
|
||||
"pisces",
|
||||
"aries",
|
||||
"taurus",
|
||||
"gemini",
|
||||
"cancer",
|
||||
"leo",
|
||||
"virgo",
|
||||
"libra",
|
||||
"scorpio",
|
||||
"sagittarius"
|
||||
]
|
||||
@@ -41,5 +41,7 @@
|
||||
"angery": "https://cdn.discordapp.com/attachments/256055608279695360/308701431165091840/angerey.png",
|
||||
"banana": "https://cdn.discordapp.com/attachments/256055608279695360/308771979010244618/vfy6JExK7Ryhi.gif",
|
||||
"yuno gasai": "https://cdn.discordapp.com/attachments/256055608279695360/308658394766508033/ff79c3c19cf7e6fdc00c1c26c204c3f6.jpg",
|
||||
"why": "https://www.youtube.com/watch?v=sluHwh3hJhI"
|
||||
"why": "https://www.youtube.com/watch?v=sluHwh3hJhI",
|
||||
"it's joke": "https://i.imgur.com/Gmsx9Ma.jpg",
|
||||
"xd": "https://i.imgur.com/qdKDbRc.jpg"
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = class YearsCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over Pokémon\'s "It\'s been 3000 years" meme.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -41,7 +41,7 @@ module.exports = class YearsCommand extends Command {
|
||||
const avatar = await loadImage(body);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 461, 127, 200, 200);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: '3000-years.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = class ApprovedCommand extends Command {
|
||||
description: 'Draws an "approved" stamp over a user\'s avatar.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -41,7 +41,7 @@ module.exports = class ApprovedCommand extends Command {
|
||||
const avatar = await loadImage(body);
|
||||
ctx.drawImage(avatar, 0, 0, 256, 256);
|
||||
ctx.drawImage(base, 0, 0, 256, 256);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'approved.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class AvatarFusionCommand extends Command {
|
||||
description: 'Draws a a user\'s avatar over a user\'s avatar.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -51,7 +51,7 @@ module.exports = class AvatarFusionCommand extends Command {
|
||||
ctx.globalAlpha = 0.5;
|
||||
ctx.drawImage(baseAvatar, 0, 0, 256, 256);
|
||||
ctx.drawImage(overlayAvatar, 0, 0, 256, 256);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'avatar-fusion.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = class BeautifulCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over Gravity Falls\' "Oh, this? This is beautiful." meme.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -42,7 +42,7 @@ module.exports = class BeautifulCommand extends Command {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 341, 35, 117, 135);
|
||||
ctx.drawImage(avatar, 343, 301, 117, 135);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'beautiful.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = class BobRossCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over Bob Ross\' canvas.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -45,7 +45,7 @@ module.exports = class BobRossCommand extends Command {
|
||||
ctx.drawImage(avatar, 69, 102, 256, 256);
|
||||
ctx.rotate(-3 * (Math.PI / 180));
|
||||
ctx.drawImage(base, 0, 0);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'bob-ross.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -15,34 +15,33 @@ module.exports = class CardCommand extends Command {
|
||||
group: 'avatar-edit',
|
||||
memberName: 'card',
|
||||
description: 'Draws a trading card of random rarity based on a user\'s profile.',
|
||||
guildOnly: true,
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'member',
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'member',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, { member }) {
|
||||
if (!member) member = msg.member;
|
||||
const avatarURL = member.user.displayAvatarURL({
|
||||
async run(msg, { user }) {
|
||||
if (!user) user = msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
try {
|
||||
const cardID = Math.floor(Math.random() * ((9999 - 1000) + 1)) + 1000;
|
||||
const cardID = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
|
||||
let rarity;
|
||||
if (cardID < 5000) rarity = 'C';
|
||||
else if (cardID < 8000) rarity = 'U';
|
||||
else if (cardID < 9000) rarity = 'U';
|
||||
else rarity = 'R';
|
||||
const canvas = createCanvas(390, 544);
|
||||
const ctx = canvas.getContext('2d');
|
||||
@@ -55,18 +54,16 @@ module.exports = class CardCommand extends Command {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.font = '18px Noto';
|
||||
ctx.fillStyle = 'black';
|
||||
ctx.fillText(member.displayName, 30, 62);
|
||||
ctx.fillText(user.username, 30, 62);
|
||||
ctx.fillText('Discord Join Date:', 148, 400);
|
||||
ctx.fillText(member.user.createdAt.toDateString(), 148, 420);
|
||||
ctx.fillText('Role:', 148, 457);
|
||||
ctx.fillText(member.highestRole.name !== '@everyone' ? member.highestRole.name : 'None', 148, 477);
|
||||
ctx.fillText(user.createdAt.toDateString(), 148, 420);
|
||||
ctx.fillText(rarity, 73, 411);
|
||||
ctx.fillText(cardID, 60, 457);
|
||||
ctx.fillText(version.split('.')[0], 68, 502);
|
||||
ctx.font = '14px Noto';
|
||||
ctx.fillText(member.id, 30, 355);
|
||||
ctx.fillText(`#${member.user.discriminator}`, 313, 355);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'card.png' }] });
|
||||
ctx.fillText(user.id, 30, 355);
|
||||
ctx.fillText(`#${user.discriminator}`, 313, 355);
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class ChallengerCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over Super Smash Bros.\'s "Challenger Approaching" screen.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -40,7 +40,7 @@ module.exports = class ChallengerCommand extends Command {
|
||||
const avatar = await loadImage(body);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 484, 98, 256, 256);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'challenger.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class DexterCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over Dexter from Pokémon\'s screen.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -42,7 +42,7 @@ module.exports = class DexterCommand extends Command {
|
||||
ctx.rotate(-11 * (Math.PI / 180));
|
||||
ctx.drawImage(avatar, 234, 274, 225, 225);
|
||||
ctx.rotate(11 * (Math.PI / 180));
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'dexter.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class GreyscaleCommand extends Command {
|
||||
description: 'Draws a user\'s avatar in greyscale.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -47,7 +47,7 @@ module.exports = class GreyscaleCommand extends Command {
|
||||
data[i + 2] = brightness;
|
||||
}
|
||||
ctx.putImageData(imgData, 0, 0);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'greyscale.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ module.exports = class InvertCommand extends Command {
|
||||
description: 'Draws a user\'s avatar inverted.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -45,7 +45,7 @@ module.exports = class InvertCommand extends Command {
|
||||
data[i + 2] = 255 - data[i + 2];
|
||||
}
|
||||
ctx.putImageData(imgData, 0, 0);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'invert.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = class RainbowCommand extends Command {
|
||||
description: 'Draws a rainbow over a user\'s avatar.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -41,7 +41,7 @@ module.exports = class RainbowCommand extends Command {
|
||||
const avatar = await loadImage(body);
|
||||
ctx.drawImage(avatar, 0, 0, 256, 256);
|
||||
ctx.drawImage(base, 0, 0, 256, 256);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rainbow.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = class RejctedCommand extends Command {
|
||||
description: 'Draws a "rejected" stamp over a user\'s avatar.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -41,7 +41,7 @@ module.exports = class RejctedCommand extends Command {
|
||||
const avatar = await loadImage(body);
|
||||
ctx.drawImage(avatar, 0, 0, 256, 256);
|
||||
ctx.drawImage(base, 0, 0, 256, 256);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rejected.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ module.exports = class RIPCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over a gravestone.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -50,7 +50,7 @@ module.exports = class RIPCommand extends Command {
|
||||
data[i + 2] = brightness;
|
||||
}
|
||||
ctx.putImageData(imgData, 158, 51);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class SimbaCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over Simba from The Lion King\'s reflection.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -42,7 +42,7 @@ module.exports = class SimbaCommand extends Command {
|
||||
ctx.rotate(-24 * (Math.PI / 180));
|
||||
ctx.drawImage(avatar, 75, 160, 130, 150);
|
||||
ctx.rotate(24 * (Math.PI / 180));
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'simba.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -13,10 +13,9 @@ module.exports = class SteamCardCommand extends Command {
|
||||
group: 'avatar-edit',
|
||||
memberName: 'steam-card',
|
||||
description: 'Draws a user\'s avatar over a Steam Trading Card.',
|
||||
guildOnly: true,
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -48,7 +47,7 @@ module.exports = class SteamCardCommand extends Command {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.font = '30px Noto';
|
||||
ctx.fillText(member.displayName, 35, 48);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-card.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ module.exports = class SteamNowPlayingCommand extends Command {
|
||||
guildOnly: true,
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -57,7 +57,7 @@ module.exports = class SteamNowPlayingCommand extends Command {
|
||||
if (ctx.measureText(game).width > 160) shorten = true;
|
||||
while (ctx.measureText(game).width > 160) game = game.substr(0, game.length - 1);
|
||||
ctx.fillText(shorten ? `${game}...` : game, 63, 54);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-now-playing.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class ThugLifeCommand extends Command {
|
||||
description: 'Draws "Thug Life" over a user\'s avatar.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -49,7 +49,7 @@ module.exports = class ThugLifeCommand extends Command {
|
||||
data[i + 2] = brightness;
|
||||
}
|
||||
ctx.putImageData(imgData, 0, 0);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'thug-life.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class TriggeredCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over a Triggered meme.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -46,7 +46,7 @@ module.exports = class TriggeredCommand extends Command {
|
||||
for (let i = 0; i < data.length; i += 4) data[i] = Math.max(255, data[i]);
|
||||
ctx.putImageData(imgData, 0, 0);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'triggered.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class WantedCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over a wanted poster.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -40,7 +40,7 @@ module.exports = class WantedCommand extends Command {
|
||||
const avatar = await loadImage(body);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 150, 360, 430, 430);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'wanted.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ module.exports = class YuGiOhTokenCommand extends Command {
|
||||
description: 'Draws a user\'s avatar over a blank Yu-Gi-Oh! Token card.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
@@ -40,7 +40,7 @@ module.exports = class YuGiOhTokenCommand extends Command {
|
||||
const avatar = await loadImage(body);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 45, 102, 293, 294);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'yu-gi-oh-token.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -90,7 +90,7 @@ module.exports = class BattleCommand extends Command {
|
||||
} else if (choice === 'special') {
|
||||
const hit = Math.floor(Math.random() * 4) + 1;
|
||||
if (hit === 1) {
|
||||
const damage = Math.floor(Math.random() * (((guard ? 300 : 150) - 100) + 1)) + 100;
|
||||
const damage = Math.floor(Math.random() * ((guard ? 300 : 150) - 100 + 1)) + 100;
|
||||
await msg.say(`${user} deals **${damage}** damage!`);
|
||||
dealDamage(damage);
|
||||
reset();
|
||||
|
||||
+15
-23
@@ -2,13 +2,7 @@ const Command = require('../../structures/Command');
|
||||
const { stripIndents } = require('common-tags');
|
||||
const { list } = require('../../structures/Util');
|
||||
const difficulties = ['easy', 'medium', 'hard', 'extreme', 'impossible'];
|
||||
const operations = ['addition', 'subtraction', 'multiplication', 'division'];
|
||||
const operationDisplay = {
|
||||
addition: '+',
|
||||
subtraction: '-',
|
||||
multiplication: '*',
|
||||
division: '÷'
|
||||
};
|
||||
const operations = ['+', '-', '*'];
|
||||
const maxValues = {
|
||||
easy: 10,
|
||||
medium: 100,
|
||||
@@ -26,16 +20,6 @@ module.exports = class MathGameCommand extends Command {
|
||||
description: 'See how fast you can answer a math problem in a given time limit.',
|
||||
clientPermissions: ['EMBED_LINKS'],
|
||||
args: [
|
||||
{
|
||||
key: 'operation',
|
||||
prompt: `Which operation should be used for the game? Either ${list(operations, 'or')}.`,
|
||||
type: 'string',
|
||||
validate: operation => {
|
||||
if (operations.includes(operation.toLowerCase())) return true;
|
||||
return `Invalid operation, please enter either ${list(operations, 'or')}.`;
|
||||
},
|
||||
parse: operation => operation.toLowerCase()
|
||||
},
|
||||
{
|
||||
key: 'difficulty',
|
||||
prompt: `What should the difficulty of the game be? Either ${list(difficulties, 'or')}.`,
|
||||
@@ -50,17 +34,25 @@ module.exports = class MathGameCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, { operation, difficulty }) {
|
||||
async run(msg, { difficulty }) {
|
||||
const value1 = Math.floor(Math.random() * maxValues[difficulty]) + 1;
|
||||
const value2 = Math.floor(Math.random() * maxValues[difficulty]) + 1;
|
||||
const operation = operations[Math.floor(Math.random() * operations.length)];
|
||||
let answer;
|
||||
if (operation === 'addition') answer = value1 + value2;
|
||||
else if (operation === 'subtraction') answer = value1 - value2;
|
||||
else if (operation === 'multiplication') answer = value1 * value2;
|
||||
else if (operation === 'division') answer = value1 / value2;
|
||||
switch (operation) {
|
||||
case '+':
|
||||
answer = value1 + value2;
|
||||
break;
|
||||
case '-':
|
||||
answer = value1 - value2;
|
||||
break;
|
||||
case '*':
|
||||
answer = value1 * value2;
|
||||
break;
|
||||
}
|
||||
await msg.say(stripIndents`
|
||||
**You have 10 seconds to answer this question.**
|
||||
${value1} ${operationDisplay[operation]} ${value2}
|
||||
${value1} ${operation} ${value2}
|
||||
`);
|
||||
const msgs = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, {
|
||||
max: 1,
|
||||
|
||||
@@ -12,8 +12,7 @@ module.exports = class TicTacToeCommand extends Command {
|
||||
{
|
||||
key: 'opponent',
|
||||
prompt: 'What user would you like to challenge?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
type: 'user'
|
||||
}
|
||||
]
|
||||
});
|
||||
@@ -22,21 +21,19 @@ module.exports = class TicTacToeCommand extends Command {
|
||||
}
|
||||
|
||||
async run(msg, { opponent }) { // eslint-disable-line complexity
|
||||
if (!opponent) opponent = this.client.user;
|
||||
if (opponent.bot) return msg.say('Bots may not be played against.');
|
||||
if (opponent.id === msg.author.id) return msg.say('You may not play against yourself.');
|
||||
if (this.playing.has(msg.channel.id)) return msg.say('Only one game may be occurring per channel.');
|
||||
this.playing.add(msg.channel.id);
|
||||
try {
|
||||
if (!opponent.bot) {
|
||||
await msg.say(`${opponent}, do you accept this challenge?`);
|
||||
const verify = await msg.channel.awaitMessages(res => res.author.id === opponent.id, {
|
||||
max: 1,
|
||||
time: 30000
|
||||
});
|
||||
if (!verify.size || !['yes', 'y'].includes(verify.first().content.toLowerCase())) {
|
||||
this.playing.delete(msg.channel.id);
|
||||
return msg.say('Looks like they declined...');
|
||||
}
|
||||
await msg.say(`${opponent}, do you accept this challenge?`);
|
||||
const verify = await msg.channel.awaitMessages(res => res.author.id === opponent.id, {
|
||||
max: 1,
|
||||
time: 30000
|
||||
});
|
||||
if (!verify.size || !['yes', 'y'].includes(verify.first().content.toLowerCase())) {
|
||||
this.playing.delete(msg.channel.id);
|
||||
return msg.say('Looks like they declined...');
|
||||
}
|
||||
const sides = ['0', '1', '2', '3', '4', '5', '6', '7', '8'];
|
||||
const taken = [];
|
||||
@@ -45,29 +42,23 @@ module.exports = class TicTacToeCommand extends Command {
|
||||
while (!winner && taken.length < 9) {
|
||||
const user = userTurn ? msg.author : opponent;
|
||||
const sign = userTurn ? 'X' : 'O';
|
||||
let choice;
|
||||
if (!opponent.bot || (opponent.bot && userTurn)) {
|
||||
await msg.code(null, stripIndents`
|
||||
${sides[0]} | ${sides[1]} | ${sides[2]}
|
||||
—————————
|
||||
${sides[3]} | ${sides[4]} | ${sides[5]}
|
||||
—————————
|
||||
${sides[6]} | ${sides[7]} | ${sides[8]}
|
||||
`);
|
||||
await msg.say(`${user}, which side do you pick?`);
|
||||
const turn = await msg.channel.awaitMessages(res => res.author.id === user.id, {
|
||||
max: 1,
|
||||
time: 30000
|
||||
});
|
||||
if (!turn.size) {
|
||||
await msg.say('Time!');
|
||||
break;
|
||||
}
|
||||
choice = turn.first().content;
|
||||
} else {
|
||||
const filter = sides.filter(side => !['X', 'O'].includes(side));
|
||||
choice = filter[Math.floor(Math.random() * filter.length)];
|
||||
await msg.code(null, stripIndents`
|
||||
${sides[0]} | ${sides[1]} | ${sides[2]}
|
||||
—————————
|
||||
${sides[3]} | ${sides[4]} | ${sides[5]}
|
||||
—————————
|
||||
${sides[6]} | ${sides[7]} | ${sides[8]}
|
||||
`);
|
||||
await msg.say(`${user}, which side do you pick?`);
|
||||
const turn = await msg.channel.awaitMessages(res => res.author.id === user.id, {
|
||||
max: 1,
|
||||
time: 30000
|
||||
});
|
||||
if (!turn.size) {
|
||||
await msg.say('Time!');
|
||||
break;
|
||||
}
|
||||
const choice = turn.first().content;
|
||||
if (taken.includes(choice)) {
|
||||
await msg.say('That spot is already taken!');
|
||||
} else if (!sides.includes(choice)) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const { stripIndents } = require('common-tags');
|
||||
const { list } = require('../../structures/Util');
|
||||
const sentences = require('../../assets/json/typing-game');
|
||||
const difficulties = ['easy', 'medium', 'hard', 'extreme', 'impossible'];
|
||||
const times = {
|
||||
easy: 25000,
|
||||
@@ -9,7 +10,6 @@ const times = {
|
||||
extreme: 10000,
|
||||
impossible: 5000
|
||||
};
|
||||
const sentences = require('../../assets/json/typing-game');
|
||||
|
||||
module.exports = class TypingGameCommand extends Command {
|
||||
constructor(client) {
|
||||
|
||||
@@ -13,6 +13,6 @@ module.exports = class EmojiCommand extends Command {
|
||||
|
||||
run(msg) {
|
||||
if (!msg.guild.emojis.size) return msg.say('This server has no custom emoji.');
|
||||
return msg.say(msg.guild.emojis.map(e => e).join(''));
|
||||
return msg.say(msg.guild.emojis.map(emoji => emoji.toString()).join(''));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -33,7 +33,7 @@ module.exports = class GuildInfoCommand extends Command {
|
||||
.addField('❯ Verification Level',
|
||||
verificationLevels[msg.guild.verificationLevel], true)
|
||||
.addField('❯ Owner',
|
||||
msg.guild.owner ? msg.guild.owner.user.username : 'None', true)
|
||||
msg.guild.owner ? msg.guild.owner.user.tag : 'None', true)
|
||||
.addField('❯ Members',
|
||||
msg.guild.memberCount, true);
|
||||
return msg.embed(embed);
|
||||
|
||||
@@ -32,7 +32,7 @@ module.exports = class AchievementCommand extends Command {
|
||||
h: 'Achievement Get!',
|
||||
t: text
|
||||
});
|
||||
return msg.say({ files: [{ attachment: body, name: 'achievement.png' }] });
|
||||
return msg.say({ files: [body] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ module.exports = class ColorCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'color',
|
||||
aliases: ['colour'],
|
||||
group: 'image-edit',
|
||||
memberName: 'color',
|
||||
description: 'Sends an image of the color you choose.',
|
||||
@@ -12,7 +13,7 @@ module.exports = class ColorCommand extends Command {
|
||||
args: [
|
||||
{
|
||||
key: 'color',
|
||||
prompt: 'What color do you want to view? This can be HTML (#colorcode) or a name.',
|
||||
prompt: 'What color do you want to view? This can be #colorcode or a name.',
|
||||
type: 'string',
|
||||
parse: color => color.toLowerCase()
|
||||
}
|
||||
@@ -25,6 +26,6 @@ module.exports = class ColorCommand extends Command {
|
||||
const ctx = canvas.getContext('2d');
|
||||
ctx.fillStyle = color;
|
||||
ctx.fillRect(0, 0, 250, 250);
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'color.png' }] });
|
||||
return msg.say({ files: [canvas.toBuffer()] });
|
||||
}
|
||||
};
|
||||
|
||||
@@ -32,7 +32,7 @@ module.exports = class UnbanCommand extends Command {
|
||||
|
||||
async run(msg, { id, reason }) {
|
||||
const bans = await msg.guild.fetchBans();
|
||||
if (!bans.has(id)) return msg.say('This ID is not in the Guild Banlist.');
|
||||
if (!bans.has(id)) return msg.say('This ID is not in the server banlist.');
|
||||
const member = bans.get(id).user;
|
||||
await msg.say(`Are you sure you want to unban ${member.tag} (${member.id})?`);
|
||||
const msgs = await msg.channel.awaitMessages(res => res.author.id === msg.author.id, {
|
||||
|
||||
@@ -18,10 +18,11 @@ module.exports = class FortuneCommand extends Command {
|
||||
const { body } = await snekfetch
|
||||
.get('http://fortunecookieapi.herokuapp.com/v1/cookie')
|
||||
.query({ limit: 1 });
|
||||
const data = body[0];
|
||||
return msg.say(stripIndents`
|
||||
${body[0].fortune.message}
|
||||
${body[0].lotto.numbers.join(', ')}
|
||||
${body[0].lesson.chinese} (${body[0].lesson.pronunciation}): ${body[0].lesson.english}
|
||||
${data.fortune.message}
|
||||
${data.lotto.numbers.join(', ')}
|
||||
${data.lesson.chinese} (${data.lesson.pronunciation}): ${data.lesson.english}
|
||||
`);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -5,6 +5,7 @@ module.exports = class ShipCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'ship',
|
||||
aliases: ['rate'],
|
||||
group: 'random-res',
|
||||
memberName: 'ship',
|
||||
description: 'Ships things/people together.',
|
||||
|
||||
@@ -2,20 +2,7 @@ const Command = require('../../structures/Command');
|
||||
const { MessageEmbed } = require('discord.js');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { list } = require('../../structures/Util');
|
||||
const signs = [
|
||||
'capricorn',
|
||||
'aquarius',
|
||||
'pisces',
|
||||
'aries',
|
||||
'taurus',
|
||||
'gemini',
|
||||
'cancer',
|
||||
'leo',
|
||||
'virgo',
|
||||
'libra',
|
||||
'scorpio',
|
||||
'sagittarius'
|
||||
];
|
||||
const signs = require('../../assets/json/horoscope');
|
||||
|
||||
module.exports = class HoroscopeCommand extends Command {
|
||||
constructor(client) {
|
||||
|
||||
@@ -15,7 +15,7 @@ module.exports = class SoundboardCommand extends Command {
|
||||
guildOnly: true,
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 30
|
||||
duration: 15
|
||||
},
|
||||
args: [
|
||||
{
|
||||
|
||||
@@ -29,21 +29,22 @@ module.exports = class AnimeCommand extends Command {
|
||||
.query({ 'filter[text]': query });
|
||||
const body = JSON.parse(text);
|
||||
if (!body.meta.count) return msg.say('Could not find any results.');
|
||||
const data = body.data[0].attributes;
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xF75239)
|
||||
.setAuthor('Kitsu.io', 'https://i.imgur.com/VnIpwgF.png')
|
||||
.setURL(`https://kitsu.io/anime/${body.data[0].attributes.slug}`)
|
||||
.setThumbnail(body.data[0].attributes.posterImage ? body.data[0].attributes.posterImage.original : null)
|
||||
.setTitle(body.data[0].attributes.canonicalTitle)
|
||||
.setDescription(shorten(body.data[0].attributes.synopsis))
|
||||
.setURL(`https://kitsu.io/anime/${data.slug}`)
|
||||
.setThumbnail(data.posterImage ? data.posterImage.original : null)
|
||||
.setTitle(data.canonicalTitle)
|
||||
.setDescription(shorten(data.synopsis))
|
||||
.addField('❯ Type',
|
||||
`${body.data[0].attributes.showType} - ${body.data[0].attributes.status}`, true)
|
||||
`${data.showType} - ${data.status}`, true)
|
||||
.addField('❯ Episodes',
|
||||
body.data[0].attributes.episodeCount || 'N/A', true)
|
||||
data.episodeCount || 'N/A', true)
|
||||
.addField('❯ Start Date',
|
||||
body.data[0].attributes.startDate ? new Date(body.data[0].attributes.startDate).toDateString() : 'N/A', true)
|
||||
data.startDate ? new Date(data.startDate).toDateString() : 'N/A', true)
|
||||
.addField('❯ End Date',
|
||||
body.data[0].attributes.endDate ? new Date(body.data[0].attributes.endDate).toDateString() : 'N/A', true);
|
||||
data.endDate ? new Date(data.endDate).toDateString() : 'N/A', true);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -37,13 +37,14 @@ module.exports = class BulbapediaCommand extends Command {
|
||||
redirects: '',
|
||||
formatversion: 2
|
||||
});
|
||||
if (body.query.pages[0].missing) return msg.say('Could not find any results.');
|
||||
const data = body.query.pages[0];
|
||||
if (data.missing) return msg.say('Could not find any results.');
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x3E7614)
|
||||
.setTitle(body.query.pages[0].title)
|
||||
.setTitle(data.title)
|
||||
.setAuthor('Bulbapedia', 'https://i.imgur.com/09eYo5T.png')
|
||||
.setThumbnail(body.query.pages[0].thumbnail ? body.query.pages[0].thumbnail.source : null)
|
||||
.setDescription(shorten(body.query.pages[0].extract.replace(/\n/g, '\n\n')));
|
||||
.setThumbnail(data.thumbnail ? data.thumbnail.source : null)
|
||||
.setDescription(shorten(data.extract.replace(/\n/g, '\n\n')));
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -33,10 +33,11 @@ module.exports = class DefineCommand extends Command {
|
||||
api_key: WORDNIK_KEY
|
||||
});
|
||||
if (!body.length) return msg.say('Could not find any results.');
|
||||
const data = body[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x9797FF)
|
||||
.setTitle(body[0].word)
|
||||
.setDescription(body[0].text);
|
||||
.setTitle(data.word)
|
||||
.setDescription(data.text);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -47,20 +47,21 @@ module.exports = class iTunesCommand extends Command {
|
||||
});
|
||||
const body = JSON.parse(text);
|
||||
if (!body.resultCount) return msg.say('Could not find any results.');
|
||||
const data = body.results[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xFEFEFE)
|
||||
.setAuthor('iTunes', 'https://i.imgur.com/TbqzJFs.jpg')
|
||||
.setURL(body.results[0].trackViewUrl)
|
||||
.setThumbnail(body.results[0].artworkUrl100)
|
||||
.setTitle(body.results[0].trackName)
|
||||
.setURL(data.trackViewUrl)
|
||||
.setThumbnail(data.artworkUrl100)
|
||||
.setTitle(data.trackName)
|
||||
.addField('❯ Artist',
|
||||
body.results[0].artistName, true)
|
||||
data.artistName, true)
|
||||
.addField('❯ Album',
|
||||
body.results[0].collectionName, true)
|
||||
data.collectionName, true)
|
||||
.addField('❯ Release Date',
|
||||
new Date(body.results[0].releaseDate).toDateString(), true)
|
||||
new Date(data.releaseDate).toDateString(), true)
|
||||
.addField('❯ Genre',
|
||||
body.results[0].primaryGenreName, true);
|
||||
data.primaryGenreName, true);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -29,21 +29,22 @@ module.exports = class KickstarterCommand extends Command {
|
||||
term: query
|
||||
});
|
||||
if (!body.projects.length) return msg.say('Could not find any results.');
|
||||
const data = body.projects[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x14E06E)
|
||||
.setTitle(body.projects[0].name)
|
||||
.setURL(body.projects[0].urls.web.project)
|
||||
.setTitle(data.name)
|
||||
.setURL(data.urls.web.project)
|
||||
.setAuthor('Kickstarter', 'https://i.imgur.com/7mJF4qJ.png')
|
||||
.setDescription(body.projects[0].blurb)
|
||||
.setThumbnail(body.projects[0].photo ? body.projects[0].photo.full : null)
|
||||
.setDescription(data.blurb)
|
||||
.setThumbnail(data.photo ? data.photo.full : null)
|
||||
.addField('❯ Goal',
|
||||
`${body.projects[0].currency_symbol}${body.projects[0].goal.toLocaleString()}`, true)
|
||||
`${data.currency_symbol}${data.goal.toLocaleString()}`, true)
|
||||
.addField('❯ Pledged',
|
||||
`${body.projects[0].currency_symbol}${body.projects[0].pledged.toLocaleString()}`, true)
|
||||
`${data.currency_symbol}${data.pledged.toLocaleString()}`, true)
|
||||
.addField('❯ Backers',
|
||||
body.projects[0].backers_count, true)
|
||||
data.backers_count, true)
|
||||
.addField('❯ Creator',
|
||||
body.projects[0].creator.name, true);
|
||||
data.creator.name, true);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -29,21 +29,22 @@ module.exports = class MangaCommand extends Command {
|
||||
.query({ 'filter[text]': query });
|
||||
const body = JSON.parse(text);
|
||||
if (!body.meta.count) return msg.say('Could not find any results.');
|
||||
const data = body.data[0].attributes;
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xF75239)
|
||||
.setAuthor('Kitsu.io', 'https://i.imgur.com/VnIpwgF.png')
|
||||
.setURL(`https://kitsu.io/manga/${body.data[0].attributes.slug}`)
|
||||
.setThumbnail(body.data[0].attributes.posterImage ? body.data[0].attributes.posterImage.original : null)
|
||||
.setTitle(body.data[0].attributes.canonicalTitle)
|
||||
.setDescription(shorten(body.data[0].attributes.synopsis))
|
||||
.setURL(`https://kitsu.io/manga/${data.slug}`)
|
||||
.setThumbnail(data.posterImage ? data.posterImage.original : null)
|
||||
.setTitle(data.canonicalTitle)
|
||||
.setDescription(shorten(data.synopsis))
|
||||
.addField('❯ Type',
|
||||
`${body.data[0].attributes.subtype} - ${body.data[0].attributes.status}`, true)
|
||||
`${data.subtype} - ${data.status}`, true)
|
||||
.addField('❯ Volumes / Chapters',
|
||||
`${body.data[0].attributes.volumeCount || 'N/A'} / ${body.data[0].attributes.chapterCount || 'N/A'}`, true)
|
||||
`${data.volumeCount || 'N/A'} / ${data.chapterCount || 'N/A'}`, true)
|
||||
.addField('❯ Start Date',
|
||||
body.data[0].attributes.startDate ? new Date(body.data[0].attributes.startDate).toDateString() : 'N/A', true)
|
||||
data.startDate ? new Date(data.startDate).toDateString() : 'N/A', true)
|
||||
.addField('❯ End Date',
|
||||
body.data[0].attributes.endDate ? new Date(body.data[0].attributes.endDate).toDateString() : 'N/A', true);
|
||||
data.endDate ? new Date(data.endDate).toDateString() : 'N/A', true);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -40,7 +40,7 @@ module.exports = class MapCommand extends Command {
|
||||
size: '500x500',
|
||||
key: GOOGLE_KEY
|
||||
});
|
||||
return msg.say({ files: [{ attachment: body, name: 'map.png' }] });
|
||||
return msg.say({ files: [body] });
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
}
|
||||
|
||||
@@ -27,12 +27,13 @@ module.exports = class MDNCommand extends Command {
|
||||
.get('https://developer.mozilla.org/en-US/search.json')
|
||||
.query({ q: query });
|
||||
if (!body.documents.length) return msg.say('Could not find any results.');
|
||||
const data = body.documents[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x066FAD)
|
||||
.setAuthor('MDN', 'https://i.imgur.com/ClMfs9l.png')
|
||||
.setURL(body.documents[0].url)
|
||||
.setTitle(body.documents[0].title)
|
||||
.setDescription(body.documents[0].excerpt);
|
||||
.setURL(data.url)
|
||||
.setTitle(data.title)
|
||||
.setDescription(data.excerpt);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
+13
-12
@@ -32,34 +32,35 @@ module.exports = class OsuCommand extends Command {
|
||||
type: 'string'
|
||||
});
|
||||
if (!body.length) return msg.say('Could not find any results.');
|
||||
const data = body[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xFF66AA)
|
||||
.setAuthor('osu!', 'https://i.imgur.com/EmnUp00.png')
|
||||
.setURL('https://osu.ppy.sh/')
|
||||
.addField('❯ Username',
|
||||
body[0].username, true)
|
||||
data.username, true)
|
||||
.addField('❯ ID',
|
||||
body[0].user_id, true)
|
||||
data.user_id, true)
|
||||
.addField('❯ Level',
|
||||
body[0].level || 'N/A', true)
|
||||
data.level || 'N/A', true)
|
||||
.addField('❯ Accuracy',
|
||||
body[0].accuracy || 'N/A', true)
|
||||
data.accuracy || 'N/A', true)
|
||||
.addField('❯ Rank',
|
||||
body[0].pp_rank || 'N/A', true)
|
||||
data.pp_rank || 'N/A', true)
|
||||
.addField('❯ Play Count',
|
||||
body[0].playcount || 'N/A', true)
|
||||
data.playcount || 'N/A', true)
|
||||
.addField('❯ Country',
|
||||
body[0].country || 'N/A', true)
|
||||
data.country || 'N/A', true)
|
||||
.addField('❯ Ranked Score',
|
||||
body[0].ranked_score || 'N/A', true)
|
||||
data.ranked_score || 'N/A', true)
|
||||
.addField('❯ Total Score',
|
||||
body[0].total_score || 'N/A', true)
|
||||
data.total_score || 'N/A', true)
|
||||
.addField('❯ SS',
|
||||
body[0].count_rank_ss || 'N/A', true)
|
||||
data.count_rank_ss || 'N/A', true)
|
||||
.addField('❯ S',
|
||||
body[0].count_rank_s || 'N/A', true)
|
||||
data.count_rank_s || 'N/A', true)
|
||||
.addField('❯ A',
|
||||
body[0].count_rank_a || 'N/A', true);
|
||||
data.count_rank_a || 'N/A', true);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -30,19 +30,20 @@ module.exports = class SteamCommand extends Command {
|
||||
term: query
|
||||
});
|
||||
if (!body.total) return msg.say('Could not find any results.');
|
||||
const current = body.items[0].price ? body.items[0].price.final / 100 : 0.00;
|
||||
const original = body.items[0].price ? body.items[0].price.initial / 100 : 0.00;
|
||||
const data = body.items[0];
|
||||
const current = data.price ? data.price.final / 100 : 0.00;
|
||||
const original = data.price ? data.price.initial / 100 : 0.00;
|
||||
const price = current === original ? `$${current}` : `~~$${original}~~ $${current}`;
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x101D2F)
|
||||
.setAuthor('Steam', 'https://i.imgur.com/vL8b4D5.png')
|
||||
.setTitle(body.items[0].name)
|
||||
.setURL(`http://store.steampowered.com/app/${body.items[0].id}`)
|
||||
.setImage(body.items[0].tiny_image)
|
||||
.setTitle(data.name)
|
||||
.setURL(`http://store.steampowered.com/app/${data.id}`)
|
||||
.setImage(data.tiny_image)
|
||||
.addField('❯ Price',
|
||||
price, true)
|
||||
.addField('❯ Metascore',
|
||||
body.items[0].metascore || 'N/A', true);
|
||||
data.metascore || 'N/A', true);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -27,14 +27,15 @@ module.exports = class UrbanCommand extends Command {
|
||||
.get('http://api.urbandictionary.com/v0/define')
|
||||
.query({ term: query });
|
||||
if (!body.list.length) return msg.say('Could not find any results.');
|
||||
const data = body.list[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x32A8F0)
|
||||
.setAuthor('Urban Dictionary', 'https://i.imgur.com/fzFuuL7.png')
|
||||
.setURL(body.list[0].permalink)
|
||||
.setTitle(body.list[0].word)
|
||||
.setDescription(shorten(body.list[0].definition))
|
||||
.setURL(data.permalink)
|
||||
.setTitle(data.word)
|
||||
.setDescription(shorten(data.definition))
|
||||
.addField('❯ Example',
|
||||
shorten(body.list[0].example, 1000) || 'None');
|
||||
shorten(data.example, 1000) || 'None');
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -35,18 +35,19 @@ module.exports = class VocaloidCommand extends Command {
|
||||
fields: 'ThumbUrl,Lyrics'
|
||||
});
|
||||
if (!body.totalCount) return msg.say('Could not find any results.');
|
||||
const { minutes, seconds } = duration(body.items[0].lengthSeconds * 1000);
|
||||
const data = body.items[0];
|
||||
const { minutes, seconds } = duration(data.lengthSeconds * 1000);
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x86D2D0)
|
||||
.setAuthor('VocaDB', 'https://i.imgur.com/9Tx9UIc.jpg')
|
||||
.setTitle(body.items[0].name)
|
||||
.setURL(`http://vocadb.net/S/${body.items[0].id}`)
|
||||
.setDescription(body.items[0].lyrics.length ? shorten(body.items[0].lyrics[0].value) : 'N/A')
|
||||
.setThumbnail(body.items[0].thumbUrl)
|
||||
.setTitle(data.name)
|
||||
.setURL(`http://vocadb.net/S/${data.id}`)
|
||||
.setDescription(data.lyrics.length ? shorten(data.lyrics[0].value) : 'N/A')
|
||||
.setThumbnail(data.thumbUrl)
|
||||
.addField('❯ Artist',
|
||||
body.items[0].artistString)
|
||||
data.artistString)
|
||||
.addField('❯ Publish Date',
|
||||
new Date(body.items[0].publishDate).toDateString(), true)
|
||||
new Date(data.publishDate).toDateString(), true)
|
||||
.addField('❯ Length',
|
||||
`${minutes}:${seconds}`, true);
|
||||
return msg.embed(embed);
|
||||
|
||||
+11
-10
@@ -32,25 +32,26 @@ module.exports = class WattpadCommand extends Command {
|
||||
})
|
||||
.set({ Authorization: `Basic ${WATTPAD_KEY}` });
|
||||
if (!body.stories.length) return msg.say('Could not find any results.');
|
||||
const data = body.stories[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xF89C34)
|
||||
.setAuthor('Wattpad', 'https://i.imgur.com/Rw9vRQB.png')
|
||||
.setURL(body.stories[0].url)
|
||||
.setTitle(body.stories[0].title)
|
||||
.setDescription(shorten(body.stories[0].description))
|
||||
.setThumbnail(body.stories[0].cover)
|
||||
.setURL(data.url)
|
||||
.setTitle(data.title)
|
||||
.setDescription(shorten(data.description))
|
||||
.setThumbnail(data.cover)
|
||||
.addField('❯ Created On',
|
||||
new Date(body.stories[0].createDate).toDateString(), true)
|
||||
new Date(data.createDate).toDateString(), true)
|
||||
.addField('❯ Author',
|
||||
body.stories[0].user, true)
|
||||
data.user, true)
|
||||
.addField('❯ Parts',
|
||||
body.stories[0].numParts, true)
|
||||
data.numParts, true)
|
||||
.addField('❯ Reads',
|
||||
body.stories[0].readCount, true)
|
||||
data.readCount, true)
|
||||
.addField('❯ Votes',
|
||||
body.stories[0].voteCount, true)
|
||||
data.voteCount, true)
|
||||
.addField('❯ Comments',
|
||||
body.stories[0].commentCount, true);
|
||||
data.commentCount, true);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -40,13 +40,14 @@ module.exports = class WikiaCommand extends Command {
|
||||
const { body } = await snekfetch
|
||||
.get(`http://${wiki}.wikia.com/api/v1/Articles/AsSimpleJson/`)
|
||||
.query({ id: search.body.items[0].id });
|
||||
const data = body.sections[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0x002D54)
|
||||
.setTitle(body.sections[0].title)
|
||||
.setTitle(data.title)
|
||||
.setURL(search.body.items[0].url)
|
||||
.setAuthor('Wikia', 'https://i.imgur.com/WzXWJka.png')
|
||||
.setDescription(shorten(body.sections[0].content.map(section => section.text).join('\n\n')))
|
||||
.setThumbnail(body.sections[0].images.length ? body.sections[0].images[0].src : null);
|
||||
.setDescription(shorten(data.content.map(section => section.text).join('\n\n')))
|
||||
.setThumbnail(data.images.length ? data.images[0].src : null);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say('Could not find any results.');
|
||||
|
||||
@@ -36,13 +36,14 @@ module.exports = class WikipediaCommand extends Command {
|
||||
redirects: '',
|
||||
formatversion: 2
|
||||
});
|
||||
if (body.query.pages[0].missing) return msg.say('Could not find any results.');
|
||||
const data = body.query.pages[0];
|
||||
if (data.missing) return msg.say('Could not find any results.');
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xE7E7E7)
|
||||
.setTitle(body.query.pages[0].title)
|
||||
.setTitle(data.title)
|
||||
.setAuthor('Wikipedia', 'https://i.imgur.com/a4eeEhh.png')
|
||||
.setThumbnail(body.query.pages[0].thumbnail ? body.query.pages[0].thumbnail.source : null)
|
||||
.setDescription(shorten(body.query.pages[0].extract.replace(/\n/g, '\n\n')));
|
||||
.setThumbnail(data.thumbnail ? data.thumbnail.source : null)
|
||||
.setDescription(shorten(data.extract.replace(/\n/g, '\n\n')));
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -33,13 +33,14 @@ module.exports = class YouTubeCommand extends Command {
|
||||
key: GOOGLE_KEY
|
||||
});
|
||||
if (!body.items.length) return msg.say('Could not find any results.');
|
||||
const data = body.items[0];
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xDD2825)
|
||||
.setTitle(body.items[0].snippet.title)
|
||||
.setDescription(body.items[0].snippet.description)
|
||||
.setAuthor(`YouTube - ${body.items[0].snippet.channelTitle}`, 'https://i.imgur.com/hkUafwu.png')
|
||||
.setURL(`https://www.youtube.com/watch?v=${body.items[0].id.videoId}`)
|
||||
.setThumbnail(body.items[0].snippet.thumbnails.default.url);
|
||||
.setTitle(data.snippet.title)
|
||||
.setDescription(data.snippet.description)
|
||||
.setAuthor(`YouTube - ${data.snippet.channelTitle}`, 'https://i.imgur.com/hkUafwu.png')
|
||||
.setURL(`https://www.youtube.com/watch?v=${data.id.videoId}`)
|
||||
.setThumbnail(data.snippet.thumbnails.default.url);
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
return msg.say(`Oh no, an error occurred: \`${err.message}\`. Try again later!`);
|
||||
|
||||
@@ -28,26 +28,27 @@ module.exports = class YuGiOhCommand extends Command {
|
||||
if (body.status === 'fail') return msg.say('Could not find any results.');
|
||||
const image = await snekfetch
|
||||
.get(`http://yugiohprices.com/api/card_image/${query}`);
|
||||
const { data } = body;
|
||||
const embed = new MessageEmbed()
|
||||
.setColor(0xBE5F1F)
|
||||
.setTitle(body.data.name)
|
||||
.setDescription(body.data.text)
|
||||
.setTitle(data.name)
|
||||
.setDescription(data.text)
|
||||
.setAuthor('Yu-Gi-Oh!', 'https://i.imgur.com/7gPm9Rr.png')
|
||||
.setThumbnail(image.headers.location)
|
||||
.addField('❯ Card Type',
|
||||
body.data.card_type, true);
|
||||
if (body.data.card_type === 'monster') {
|
||||
data.card_type, true);
|
||||
if (data.card_type === 'monster') {
|
||||
embed
|
||||
.addField('❯ Type',
|
||||
body.data.type, true)
|
||||
data.type, true)
|
||||
.addField('❯ Attribute',
|
||||
body.data.family, true)
|
||||
data.family, true)
|
||||
.addField('❯ Level',
|
||||
body.data.level, true)
|
||||
data.level, true)
|
||||
.addField('❯ ATK',
|
||||
body.data.atk, true)
|
||||
data.atk, true)
|
||||
.addField('❯ DEF',
|
||||
body.data.def, true);
|
||||
data.def, true);
|
||||
}
|
||||
return msg.embed(embed);
|
||||
} catch (err) {
|
||||
|
||||
@@ -21,7 +21,7 @@ module.exports = class EmbedCommand extends Command {
|
||||
|
||||
run(msg, { text }) {
|
||||
const embed = new MessageEmbed()
|
||||
.setAuthor(msg.author.tag, msg.author.displayAvatarURL)
|
||||
.setAuthor(msg.author.tag, msg.author.displayAvatarURL())
|
||||
.setColor(0x00AE86)
|
||||
.setTimestamp()
|
||||
.setDescription(text);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "xiaobot",
|
||||
"version": "40.6.0",
|
||||
"version": "41.0.0",
|
||||
"description": "Your personal server companion.",
|
||||
"main": "Shard.js",
|
||||
"scripts": {
|
||||
|
||||
+2
-4
@@ -8,13 +8,11 @@ class Util {
|
||||
.post(`https://bots.discord.pw/api/bots/${id}/stats`)
|
||||
.set({ Authorization: DBOTS_KEY })
|
||||
.send({ server_count: count })
|
||||
.then(() => console.log('[DBOTS] Successfully posted to Discord Bots.'))
|
||||
.catch(err => console.error(`[DBOTS] Failed to post to Discord Bots. ${err}`));
|
||||
snekfetch
|
||||
.post(`https://discordbots.org/api/bots/${id}/stats`)
|
||||
.set({ Authorization: DBOTSORG_KEY })
|
||||
.send({ server_count: count })
|
||||
.then(() => console.log('[DBOTSORG] Successfully posted to Discord Bots Org.'))
|
||||
.catch(err => console.error(`[DBOTSORG] Failed to post to Discord Bots Org. ${err}`));
|
||||
}
|
||||
|
||||
@@ -34,8 +32,8 @@ class Util {
|
||||
}
|
||||
|
||||
static list(arr, conj = 'and') {
|
||||
const { length } = arr;
|
||||
return `${arr.slice(0, -1).join(', ')}${length > 1 ? `${length > 2 ? ',' : ''} ${conj} ` : ''}${arr.slice(-1)}`;
|
||||
const len = arr.length;
|
||||
return `${arr.slice(0, -1).join(', ')}${len > 1 ? `${len > 2 ? ',' : ''} ${conj} ` : ''}${arr.slice(-1)}`;
|
||||
}
|
||||
|
||||
static shorten(text, maxLen = 2000) {
|
||||
|
||||
Reference in New Issue
Block a user