mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-11-22 21:24:59 +05:00
130 lines
4.7 KiB
JavaScript
130 lines
4.7 KiB
JavaScript
|
const Canvas = require("canvas"),
|
||
|
Discord = require("discord.js"),
|
||
|
stringCleaner = require("@sindresorhus/slugify"),
|
||
|
{ resolve } = require("path");
|
||
|
|
||
|
// Register assets fonts
|
||
|
Canvas.registerFont(resolve("./assets/fonts/RubikMonoOne-Regular.ttf"), { family: "Regular" });
|
||
|
// Canvas.registerFont(resolve("./assets/fonts/RussoOne-Regular.ttf"), { family: "Regular" });
|
||
|
|
||
|
const applyText = (canvas, text, defaultFontSize) => {
|
||
|
const ctx = canvas.getContext("2d");
|
||
|
do {
|
||
|
ctx.font = `${defaultFontSize -= 10}px Regular`;
|
||
|
} while (ctx.measureText(text).width > 600);
|
||
|
return ctx.font;
|
||
|
};
|
||
|
|
||
|
module.exports = class {
|
||
|
constructor (client) {
|
||
|
this.client = client;
|
||
|
}
|
||
|
|
||
|
async run (member) {
|
||
|
await member.guild.members.fetch();
|
||
|
|
||
|
const guildData = await this.client.findOrCreateGuild({ id: member.guild.id });
|
||
|
member.guild.data = guildData;
|
||
|
|
||
|
const memberData = await this.client.findOrCreateMember({ id: member.id, guildID: member.guild.id });
|
||
|
if (memberData.mute.muted && memberData.mute.endDate > Date.now()) {
|
||
|
member.guild.channels.cache.forEach((channel) => {
|
||
|
channel.updateOverwrite(member.id, {
|
||
|
SEND_MESSAGES: false,
|
||
|
ADD_REACTIONS: false,
|
||
|
CONNECT: false
|
||
|
}).catch(() => {});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
// Check if the autorole is enabled
|
||
|
if (guildData.plugins.autorole.enabled) {
|
||
|
member.roles.add(guildData.plugins.autorole.role).catch(() => {});
|
||
|
};
|
||
|
|
||
|
// Check if welcome message is enabled
|
||
|
if (guildData.plugins.welcome.enabled) {
|
||
|
const channel = member.guild.channels.cache.get(guildData.plugins.welcome.channel);
|
||
|
if (channel) {
|
||
|
const message = guildData.plugins.welcome.message
|
||
|
.replace(/{user}/g, member)
|
||
|
.replace(/{server}/g, member.guild.name)
|
||
|
.replace(/{membercount}/g, member.guild.memberCount)
|
||
|
.replace(/{createdat}/g, this.client.printDate(member.user.createdAt))
|
||
|
if (guildData.plugins.welcome.withImage) {
|
||
|
const canvas = Canvas.createCanvas(1024, 450),
|
||
|
ctx = canvas.getContext("2d");
|
||
|
|
||
|
// Background image
|
||
|
const background = await Canvas.loadImage("./assets/img/greetings_background.png");
|
||
|
// This uses the canvas dimensions to stretch the image onto the entire canvas
|
||
|
ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
|
||
|
// Draw username
|
||
|
ctx.fillStyle = "#ffffff";
|
||
|
const username = stringCleaner(member.user.username, {
|
||
|
separator: " ",
|
||
|
lowercase: false,
|
||
|
decamelize: false,
|
||
|
preserveLeadingUnderscore: true,
|
||
|
});
|
||
|
ctx.font = applyText(canvas, username, 50);
|
||
|
ctx.fillText(username, canvas.width - 660, canvas.height - 250);
|
||
|
// Draw server name
|
||
|
ctx.font = applyText(canvas, member.guild.translate("administration/welcome:IMG_WELCOME", {
|
||
|
server: member.guild.name
|
||
|
}), 53);
|
||
|
ctx.fillText(member.guild.translate("administration/welcome:IMG_WELCOME", {
|
||
|
server: member.guild.name
|
||
|
}), canvas.width - 690, canvas.height - 85);
|
||
|
// Draw discriminator
|
||
|
ctx.font = "35px Regular";
|
||
|
ctx.fillText(member.user.discriminator, canvas.width - 624, canvas.height - 180);
|
||
|
// Draw number
|
||
|
ctx.font = "22px Regular";
|
||
|
ctx.fillText(member.guild.translate("administration/welcome:IMG_NB", {
|
||
|
memberCount: member.guild.memberCount
|
||
|
}), 50, canvas.height - 50);
|
||
|
// Draw # for discriminator
|
||
|
ctx.fillStyle = "#44d14a";
|
||
|
ctx.font = "70px Regular";
|
||
|
ctx.fillText("#", canvas.width - 690, canvas.height - 165);
|
||
|
// Draw Title with gradient
|
||
|
ctx.font = "65px Regular";
|
||
|
ctx.strokeStyle = "#1d2124";
|
||
|
ctx.lineWidth = 15;
|
||
|
ctx.strokeText(member.guild.translate("administration/welcome:TITLE"), canvas.width - 670, canvas.height - 330);
|
||
|
var gradient = ctx.createLinearGradient(canvas.width - 780, 0, canvas.width - 30, 0);
|
||
|
gradient.addColorStop(0, "#e15500");
|
||
|
gradient.addColorStop(1, "#e7b121");
|
||
|
ctx.fillStyle = gradient;
|
||
|
ctx.fillText(member.guild.translate("administration/welcome:TITLE"), canvas.width - 670, canvas.height - 330);
|
||
|
|
||
|
// Pick up the pen
|
||
|
ctx.beginPath();
|
||
|
//Define Stroke Line
|
||
|
ctx.lineWidth = 10;
|
||
|
//Define Stroke Style
|
||
|
ctx.strokeStyle = "#03A9F4";
|
||
|
// Start the arc to form a circle
|
||
|
ctx.arc(180, 225, 135, 0, Math.PI * 2, true);
|
||
|
// Draw Stroke
|
||
|
ctx.stroke();
|
||
|
// Put the pen down
|
||
|
ctx.closePath();
|
||
|
// Clip off the region you drew on
|
||
|
ctx.clip();
|
||
|
|
||
|
const options = { format: "png", size: 512 },
|
||
|
avatar = await Canvas.loadImage(member.user.displayAvatarURL(options));
|
||
|
// Move the image downwards vertically and constrain its height to 200, so it"s a square
|
||
|
ctx.drawImage(avatar, 45, 90, 270, 270);
|
||
|
|
||
|
const attachment = new Discord.MessageAttachment(canvas.toBuffer(), "welcome-image.png");
|
||
|
channel.send(message, attachment);
|
||
|
} else {
|
||
|
channel.send(message);
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
}
|
||
|
};
|