JaBa/events/Guild/guildMemberAdd.js

150 lines
4.7 KiB
JavaScript
Raw Normal View History

2022-01-04 02:18:28 +05:00
const Canvas = require("canvas"),
BaseEvent = require("../../base/BaseEvent"),
{ AttachmentBuilder } = require("discord.js"),
2022-01-04 02:18:28 +05:00
{ resolve } = require("path");
Canvas.registerFont(resolve("./assets/fonts/RubikMonoOne-Regular.ttf"), { family: "RubikMonoOne" });
Canvas.registerFont(resolve("./assets/fonts/KeepCalm-Medium.ttf"), { family: "KeepCalm" });
const applyText = (canvas, text, defaultFontSize, width, font) => {
2022-01-04 02:18:28 +05:00
const ctx = canvas.getContext("2d");
do ctx.font = `${(defaultFontSize -= 1)}px ${font}`;
while (ctx.measureText(text).width > width);
2022-01-04 02:18:28 +05:00
return ctx.font;
};
class GuildMemberAdd extends BaseEvent {
constructor() {
super({
name: "guildMemberAdd",
once: false,
});
2022-01-04 02:18:28 +05:00
}
/**
*
* @param {import("../../base/JaBa")} client
* @param {import("discord.js").GuildMember} member
*/
async execute(client, member) {
2023-07-03 19:30:47 +05:00
if (member.guild && member.guildId === "568120814776614924") return;
2022-01-04 02:18:28 +05:00
await member.guild.members.fetch();
const guildData = await client.findOrCreateGuild({
2023-07-10 21:07:24 +05:00
id: member.guild.id,
2022-01-04 02:18:28 +05:00
});
2022-01-31 20:09:32 +05:00
if (guildData.plugins.autorole.enabled) member.roles.add(guildData.plugins.autorole.role);
2022-01-04 02:18:28 +05:00
if (guildData.plugins.welcome.enabled) {
const channel = member.guild.channels.cache.get(guildData.plugins.welcome.channel);
2023-06-26 17:25:17 +05:00
2022-01-04 02:18:28 +05:00
if (channel) {
const message = guildData.plugins.welcome.message
.replace(/{user}/g, member)
.replace(/{server}/g, member.guild.name)
2022-08-08 18:19:56 +05:00
.replace(/{membercount}/g, member.guild.memberCount);
2023-06-26 17:25:17 +05:00
2022-01-04 02:18:28 +05:00
if (guildData.plugins.welcome.withImage) {
const canvas = Canvas.createCanvas(1024, 450),
ctx = canvas.getContext("2d");
// Draw background
2022-01-04 02:18:28 +05:00
const background = await Canvas.loadImage("./assets/img/greetings_background.png");
ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
// Draw layer
ctx.fillStyle = "#FFFFFF";
ctx.globalAlpha = "0.4";
ctx.fillRect(0, 0, 25, canvas.height);
ctx.fillRect(canvas.width - 25, 0, 25, canvas.height);
ctx.fillRect(25, 0, canvas.width - 50, 25);
ctx.fillRect(25, canvas.height - 25, canvas.width - 50, 25);
ctx.fillStyle = "#FFFFFF";
ctx.globalAlpha = "0.4";
ctx.fillRect(344, canvas.height - 296, 625, 65);
ctx.fillStyle = "#FFFFFF";
ctx.globalAlpha = "0.4";
ctx.fillRect(389, canvas.height - 225, 138, 65);
ctx.fillStyle = "#FFFFFF";
ctx.globalAlpha = "0.4";
ctx.fillRect(308, canvas.height - 110, 672, 65);
2022-01-04 02:18:28 +05:00
// Draw username
ctx.globalAlpha = 1;
ctx.fillStyle = "#FFFFFF";
ctx.font = applyText(canvas, member.user.username, 48, 600, "RubikMonoOne");
ctx.fillText(member.user.username, canvas.width - 670, canvas.height - 250);
2022-01-04 02:18:28 +05:00
// Draw server name
2023-07-05 00:58:06 +05:00
ctx.font = applyText(
canvas,
client.translate("administration/welcome:IMG_WELCOME", {
server: member.guild.name,
}, guildData.language),
53,
625,
"RubikMonoOne",
);
ctx.fillText(
client.translate("administration/welcome:IMG_WELCOME", {
server: member.guild.name,
}, guildData.language),
canvas.width - 700,
canvas.height - 70,
);
2022-01-04 02:18:28 +05:00
// Draw discriminator
ctx.font = "35px RubikMonoOne";
2023-06-07 23:59:38 +05:00
ctx.fillText(member.user.discriminator === "0" ? "" : member.user.discriminator, canvas.width - 623, canvas.height - 178);
2022-01-04 02:18:28 +05:00
// Draw membercount
2022-01-04 02:18:28 +05:00
ctx.font = "22px RubikMonoOne";
2023-06-27 21:19:55 +05:00
ctx.fillText(`${member.guild.memberCount}й ${client.translate("misc:NOUNS:MEMBERS:1", null, guildData.language)}`, 40, canvas.height - 35);
2022-01-04 02:18:28 +05:00
// Draw # for discriminator
ctx.fillStyle = "#FFFFFF";
2022-01-04 02:18:28 +05:00
ctx.font = "70px RubikMonoOne";
2023-06-27 21:19:55 +05:00
ctx.fillText(member.user.discriminator === "0" ? "" : "#", canvas.width - 690, canvas.height - 165);
2022-01-04 02:18:28 +05:00
// Draw title
ctx.font = "45px RubikMonoOne";
ctx.strokeStyle = "#000000";
ctx.lineWidth = 10;
2023-06-27 21:19:55 +05:00
ctx.strokeText(client.translate("administration/welcome:TITLE", null, guildData.language), canvas.width - 670, canvas.height - 330);
ctx.fillStyle = "#FFFFFF";
2023-06-27 21:19:55 +05:00
ctx.fillText(client.translate("administration/welcome:TITLE", null, guildData.language), canvas.width - 670, canvas.height - 330);
2022-01-04 02:18:28 +05:00
// Draw avatar circle
2022-01-04 02:18:28 +05:00
ctx.beginPath();
ctx.lineWidth = 10;
ctx.strokeStyle = "#FFFFFF";
2022-01-04 02:18:28 +05:00
ctx.arc(180, 225, 135, 0, Math.PI * 2, true);
ctx.stroke();
ctx.closePath();
ctx.clip();
2023-06-26 17:25:17 +05:00
2023-07-05 00:58:06 +05:00
const avatar = await Canvas.loadImage(
member.displayAvatarURL({
extension: "jpg",
}),
);
2022-01-04 02:18:28 +05:00
ctx.drawImage(avatar, 45, 90, 270, 270);
const attachment = new AttachmentBuilder(canvas.toBuffer(), { name: "welcome-image.png" });
2023-06-26 17:25:17 +05:00
channel.send({
content: message,
files: [attachment],
});
2023-07-05 00:58:06 +05:00
} else channel.send({ content: message });
2022-01-13 00:26:23 +05:00
}
}
2022-01-04 02:18:28 +05:00
}
}
2023-07-05 00:58:06 +05:00
module.exports = GuildMemberAdd;