mirror of
https://github.com/keanuplayz/TravBot-v3.git
synced 2024-08-15 02:33:12 +00:00
75 lines
2.9 KiB
TypeScript
75 lines
2.9 KiB
TypeScript
|
import {createCanvas, loadImage, Canvas} from "canvas";
|
||
|
import {TextChannel, MessageAttachment} from "discord.js";
|
||
|
import {parseVars} from "../lib";
|
||
|
import {Storage} from "../structures";
|
||
|
import {client} from "../index";
|
||
|
|
||
|
function applyText(canvas: Canvas, text: string) {
|
||
|
const ctx = canvas.getContext("2d");
|
||
|
let fontSize = 70;
|
||
|
|
||
|
do {
|
||
|
ctx.font = `${(fontSize -= 10)}px sans-serif`;
|
||
|
} while (ctx.measureText(text).width > canvas.width - 300);
|
||
|
|
||
|
return ctx.font;
|
||
|
}
|
||
|
|
||
|
client.on("guildMemberAdd", async (member) => {
|
||
|
const {welcomeType, welcomeChannel, welcomeMessage} = Storage.getGuild(member.guild.id);
|
||
|
|
||
|
if (welcomeChannel) {
|
||
|
const channel = member.guild.channels.cache.get(welcomeChannel);
|
||
|
|
||
|
if (channel && channel.type === "text") {
|
||
|
if (welcomeType === "graphical") {
|
||
|
const canvas = createCanvas(700, 250);
|
||
|
const ctx = canvas.getContext("2d");
|
||
|
const background = await loadImage(
|
||
|
"https://raw.githubusercontent.com/keanuplayz/TravBot/dev/assets/wallpaper.png"
|
||
|
);
|
||
|
ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
|
||
|
|
||
|
ctx.strokeStyle = "#74037b";
|
||
|
ctx.strokeRect(0, 0, canvas.width, canvas.height);
|
||
|
|
||
|
ctx.font = "28px sans-serif";
|
||
|
ctx.fillStyle = "#ffffff";
|
||
|
ctx.fillText("Welcome to the server,", canvas.width / 2.5, canvas.height / 3.5);
|
||
|
|
||
|
ctx.font = applyText(canvas, member.displayName);
|
||
|
ctx.fillStyle = "#ffffff";
|
||
|
ctx.fillText(`${member.displayName}!`, canvas.width / 2.5, canvas.height / 1.5);
|
||
|
|
||
|
ctx.beginPath();
|
||
|
ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
|
||
|
ctx.closePath();
|
||
|
ctx.clip();
|
||
|
|
||
|
const avatarURL =
|
||
|
member.user.avatarURL({
|
||
|
dynamic: true,
|
||
|
size: 2048,
|
||
|
format: "png"
|
||
|
}) ?? member.user.defaultAvatarURL;
|
||
|
const avatar = await loadImage(avatarURL);
|
||
|
ctx.drawImage(avatar, 25, 25, 200, 200);
|
||
|
|
||
|
const attachment = new MessageAttachment(canvas.toBuffer("image/png"), "welcome-image.png");
|
||
|
(channel as TextChannel).send(`Welcome \`${member.user.tag}\`!`, attachment);
|
||
|
} else if (welcomeType === "text") {
|
||
|
(channel as TextChannel).send(
|
||
|
parseVars(
|
||
|
welcomeMessage || "Say hello to `%user%`, everyone! We all need a warm welcome sometimes :D",
|
||
|
{
|
||
|
user: member.user.tag
|
||
|
}
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
} else {
|
||
|
console.error(`"${welcomeChannel}" is not a valid text channel ID!`);
|
||
|
}
|
||
|
}
|
||
|
});
|