mirror of
https://github.com/arthur-pbty/xiao.git
synced 2026-06-15 08:22:37 +02:00
23
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class YearsCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: '3000-years',
|
||||
aliases: ['az', '3ky', '3k-years'],
|
||||
group: 'avatar-edit',
|
||||
memberName: '3000-years',
|
||||
description: 'Draws a user\'s avatar over Pokémon\'s "It\'s been 3000 years" meme.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(856, 569);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 461, 127, 200, 200);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', '3000-years.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: '3000-years.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class BeautifulCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'beautiful',
|
||||
aliases: ['grunkle-stan'],
|
||||
group: 'avatar-edit',
|
||||
memberName: 'beautiful',
|
||||
description: 'Draws a user\'s avatar over Gravity Falls\' "Oh, this? This is beautiful." meme.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(500, 532);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 341, 35, 117, 135);
|
||||
ctx.drawImage(avatar, 343, 301, 117, 135);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'beautiful.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'beautiful.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,57 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class BobRossCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'bob-ross',
|
||||
aliases: ['ross'],
|
||||
group: 'avatar-edit',
|
||||
memberName: 'bob-ross',
|
||||
description: 'Draws a user\'s avatar over Bob Ross\' canvas.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(600, 775);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.fillRect(0, 0, 600, 775);
|
||||
ctx.rotate(3 * Math.PI / 180);
|
||||
ctx.drawImage(avatar, 69, 102, 256, 256);
|
||||
ctx.rotate(-3 * Math.PI / 180);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'bob-ross.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'bob-ross.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,78 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const moment = require('moment');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
const { version } = require('../../package');
|
||||
|
||||
module.exports = class CardCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'card',
|
||||
aliases: ['discord-card'],
|
||||
group: 'avatar-edit',
|
||||
memberName: 'card',
|
||||
description: 'Creates a trading card of random rarity based on a user\'s profile.',
|
||||
guildOnly: true,
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'member',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'member',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const member = args.member || msg.member;
|
||||
const avatarURL = member.user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const cardID = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
|
||||
let rarity;
|
||||
if (cardID < 5000) rarity = 'C';
|
||||
else if (cardID < 8000) rarity = 'U';
|
||||
else rarity = 'R';
|
||||
const Image = Canvas.Image;
|
||||
Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Roboto.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len
|
||||
Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'NotoEmoji-Regular.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len
|
||||
const canvas = new Canvas(390, 544);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.fillRect(0, 0, 390, 544);
|
||||
ctx.drawImage(avatar, 11, 11, 370, 370);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.font = '18px Roboto';
|
||||
ctx.fillStyle = 'black';
|
||||
ctx.fillText(member.displayName, 30, 62);
|
||||
ctx.fillText('Discord Join Date:', 148, 400);
|
||||
ctx.fillText(moment(member.user.createdTimestamp).format('MMMM Do YYYY'), 148, 420);
|
||||
ctx.fillText('Role:', 148, 457);
|
||||
ctx.fillText(member.highestRole.name, 148, 477);
|
||||
ctx.fillText(rarity, 73, 411);
|
||||
ctx.fillText(cardID, 60, 457);
|
||||
ctx.fillText(version.split('.')[0], 68, 502);
|
||||
ctx.font = '14px Roboto';
|
||||
ctx.fillText(member.id, 30, 355);
|
||||
ctx.fillText(`#${member.user.discriminator}`, 313, 355);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'card.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'card.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class ChallengerCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'challenger',
|
||||
group: 'avatar-edit',
|
||||
memberName: 'challenger',
|
||||
description: 'Draws a user\'s avatar over Super Smash Bros.\'s "Challenger Approaching" screen.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(500, 500);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.fillStyle = '#ff0028';
|
||||
ctx.fillRect(0, 0, 500, 500);
|
||||
ctx.drawImage(avatar, 226, 155, 200, 200);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'challenger.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'challenger.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class DexterCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'dexter',
|
||||
group: 'avatar-edit',
|
||||
memberName: 'dexter',
|
||||
description: 'Draws a user\'s avatar over Dexter from Pokémon\'s screen.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(744, 554);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.rotate(-11 * Math.PI / 180);
|
||||
ctx.drawImage(avatar, 234, 274, 225, 225);
|
||||
ctx.rotate(11 * Math.PI / 180);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'dexter.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'dexter.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,56 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
|
||||
module.exports = class GreyscaleCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'greyscale',
|
||||
aliases: ['grayscale'],
|
||||
group: 'avatar-edit',
|
||||
memberName: 'greyscale',
|
||||
description: 'Draws a user\'s avatar in greyscale.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(256, 256);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(avatar, 0, 0, 256, 256);
|
||||
const imgData = ctx.getImageData(0, 0, 256, 256);
|
||||
const { data } = imgData;
|
||||
for (let i = 0; i < data.length; i += 4) {
|
||||
const brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
|
||||
data[i] = brightness;
|
||||
data[i + 1] = brightness;
|
||||
data[i + 2] = brightness;
|
||||
}
|
||||
ctx.putImageData(imgData, 0, 0);
|
||||
};
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'greyscale.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
|
||||
module.exports = class InvertCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'invert',
|
||||
group: 'avatar-edit',
|
||||
memberName: 'invert',
|
||||
description: 'Draws a user\'s avatar inverted.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(256, 256);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(avatar, 0, 0, 256, 256);
|
||||
const imgData = ctx.getImageData(0, 0, 256, 256);
|
||||
const { data } = imgData;
|
||||
for (let i = 0; i < data.length; i += 4) {
|
||||
data[i] = 255 - data[i];
|
||||
data[i + 1] = 255 - data[i + 1];
|
||||
data[i + 2] = 255 - data[i + 2];
|
||||
}
|
||||
ctx.putImageData(imgData, 0, 0);
|
||||
};
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'invert.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,62 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class RIPCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'rip',
|
||||
aliases: ['grave', 'grave-stone'],
|
||||
group: 'avatar-edit',
|
||||
memberName: 'rip',
|
||||
description: 'Draws a user\'s avatar over a gravestone.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(507, 338);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 158, 51, 200, 200);
|
||||
const imgData = ctx.getImageData(158, 51, 200, 200);
|
||||
const { data } = imgData;
|
||||
for (let i = 0; i < data.length; i += 4) {
|
||||
const brightness = 0.34 * data[i] + 0.5 * data[i + 1] + 0.16 * data[i + 2];
|
||||
data[i] = brightness;
|
||||
data[i + 1] = brightness;
|
||||
data[i + 2] = brightness;
|
||||
}
|
||||
ctx.putImageData(imgData, 158, 51);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'rip.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'rip.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class SimbaCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'simba',
|
||||
group: 'avatar-edit',
|
||||
memberName: 'simba',
|
||||
description: 'Draws a user\'s avatar over Simba from The Lion King\'s reflection.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 256
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(500, 281);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.rotate(-24 * Math.PI / 180);
|
||||
ctx.drawImage(avatar, 75, 160, 130, 150);
|
||||
ctx.rotate(24 * Math.PI / 180);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'simba.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'simba.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,58 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class SteamCardCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'steam-card',
|
||||
group: 'avatar-edit',
|
||||
memberName: 'steam-card',
|
||||
description: 'Draws a user\'s avatar over a Steam card.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 512
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Roboto.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len
|
||||
Canvas.registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'NotoEmoji-Regular.ttf'), { family: 'Roboto' }); // eslint-disable-line max-len
|
||||
const canvas = new Canvas(494, 568);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.fillRect(0, 0, 494, 568);
|
||||
ctx.drawImage(avatar, 25, 25, 450, 450);
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.font = '30px Roboto';
|
||||
ctx.fillText(user.username, 35, 48);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'steam-card.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'steam-card.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,58 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class TriggeredCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'triggered',
|
||||
group: 'avatar-edit',
|
||||
memberName: 'triggered',
|
||||
description: 'Draws a user\'s avatar over a Triggered meme.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 512
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(320, 371);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.fillRect(0, 0, 320, 371);
|
||||
ctx.drawImage(avatar, 0, 0, 320, 320);
|
||||
const imgData = ctx.getImageData(0, 0, 320, 320);
|
||||
const { data } = imgData;
|
||||
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);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'triggered.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'triggered.png' }] });
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,52 @@
|
||||
const Command = require('../../structures/Command');
|
||||
const Canvas = require('canvas');
|
||||
const snekfetch = require('snekfetch');
|
||||
const { promisifyAll } = require('tsubaki');
|
||||
const fs = promisifyAll(require('fs'));
|
||||
const path = require('path');
|
||||
|
||||
module.exports = class WantedCommand extends Command {
|
||||
constructor(client) {
|
||||
super(client, {
|
||||
name: 'wanted',
|
||||
group: 'avatar-edit',
|
||||
memberName: 'wanted',
|
||||
description: 'Draws a user\'s avatar over a wanted poster.',
|
||||
throttling: {
|
||||
usages: 1,
|
||||
duration: 15
|
||||
},
|
||||
clientPermissions: ['ATTACH_FILES'],
|
||||
args: [
|
||||
{
|
||||
key: 'user',
|
||||
prompt: 'Which user would you like to edit the avatar of?',
|
||||
type: 'user',
|
||||
default: ''
|
||||
}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async run(msg, args) {
|
||||
const user = args.user || msg.author;
|
||||
const avatarURL = user.displayAvatarURL({
|
||||
format: 'png',
|
||||
size: 512
|
||||
});
|
||||
const Image = Canvas.Image;
|
||||
const canvas = new Canvas(741, 1000);
|
||||
const ctx = canvas.getContext('2d');
|
||||
const base = new Image();
|
||||
const avatar = new Image();
|
||||
const generate = () => {
|
||||
ctx.drawImage(base, 0, 0);
|
||||
ctx.drawImage(avatar, 150, 360, 430, 430);
|
||||
};
|
||||
base.src = await fs.readFileAsync(path.join(__dirname, '..', '..', 'assets', 'images', 'wanted.png'));
|
||||
const { body } = await snekfetch.get(avatarURL);
|
||||
avatar.src = body;
|
||||
generate();
|
||||
return msg.say({ files: [{ attachment: canvas.toBuffer(), name: 'wanted.png' }] });
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user