106 lines
3.5 KiB
JavaScript
106 lines
3.5 KiB
JavaScript
const { createCanvas, loadImage } = require('canvas');
|
|
const path = require('node:path');
|
|
const { mClient } = require('..');
|
|
require('dotenv').configDotenv();
|
|
|
|
module.exports = {
|
|
name: "Birthday",
|
|
once: false,
|
|
async execute(member, client) {
|
|
console.log(`${member.user.username} hat Geburtstag!`)
|
|
let found = null
|
|
|
|
const db = mClient.db(process.env.M_DB)
|
|
const channelsColl = db.collection('config_channels')
|
|
found = await channelsColl.find(
|
|
{
|
|
$and: [
|
|
{ guildID: member.guild.id },
|
|
{ purpose: 'birthday' }
|
|
]
|
|
}
|
|
).toArray()
|
|
|
|
if (!found) {
|
|
return console.log('Channel not yet set for birthday!')
|
|
}
|
|
|
|
const guild = client.guilds.cache.get(found[0].guildID);
|
|
const channel = guild.channels.cache.get(found[0].channelID);
|
|
const roleColl = db.collection('config_roles')
|
|
|
|
// Bot Role MUST BE above birthday Role, Birthday Role MUST BE above user roles
|
|
found = await roleColl.findOne({guildID: member.guild.id})
|
|
const role = guild.roles.cache.get(found.roleID)
|
|
|
|
try {
|
|
await member.roles.add(role)
|
|
} catch (error) {
|
|
console.error(error)
|
|
}
|
|
// Create Canvas
|
|
let canvasWidth = 600;
|
|
let canvasHeight = 250;
|
|
const canvas = new createCanvas(canvasWidth, canvasHeight);
|
|
const ctx = canvas.getContext('2d');
|
|
|
|
// Draw Initial Image
|
|
const background = await loadImage(
|
|
path.join(__dirname, '../assets/Event_Birthday/bdbanner.png')
|
|
);
|
|
let x = 0;
|
|
let y = 0;
|
|
ctx.drawImage(background, x, y);
|
|
|
|
// Create Profile Picture
|
|
const pfp = await loadImage(
|
|
member.user.displayAvatarURL({
|
|
extension: 'jpg',
|
|
size: 64,
|
|
})
|
|
);
|
|
|
|
// Draw Profile Picture on Top of Background
|
|
x = canvas.width / 2 - pfp.width / 2;
|
|
y = 20;
|
|
ctx.drawImage(pfp, x, y);
|
|
|
|
// Set styles for text
|
|
ctx.font = '35px sans-serif';
|
|
ctx.fillStyle = '#FFC0CB'; // Pink text
|
|
ctx.strokeStyle = '#000000'; // Black outline
|
|
ctx.lineWidth = 3; // Thickness of the outline
|
|
|
|
let text = `Alles Gute zum Geburtstag! `;
|
|
let textWidth = ctx.measureText(text).width;
|
|
let textX = canvas.width / 2 - textWidth / 2;
|
|
let textHeight = 35; // Approximate height of the text
|
|
|
|
// Draw the text with black outline
|
|
ctx.strokeText(text, textX, 60 + pfp.height);
|
|
ctx.fillText(text, textX, 60 + pfp.height);
|
|
|
|
// requires apt-get install ttf-ancient-fonts
|
|
ctx.font = '30px "Noto Emoji", "Segoe UI Emoji", "Apple Color Emoji", sans-serif';
|
|
text = `🎉 ${member.user.globalName ? member.user.globalName : member.user.username} 🎉`;
|
|
textWidth = ctx.measureText(text).width;
|
|
textX = canvas.width / 2 - textWidth / 2;
|
|
textHeight = 30; // Approximate height of the text
|
|
|
|
// Draw the second line of text with black outline
|
|
ctx.strokeText(text, textX, 100 + pfp.height);
|
|
ctx.fillText(text, textX, 100 + pfp.height);
|
|
|
|
const banner = canvas.toBuffer();
|
|
|
|
channel.send({
|
|
content: `@here`,
|
|
files: [{
|
|
attachment: banner,
|
|
name: 'banner.png',
|
|
description: 'a birthday banner'
|
|
}]
|
|
});
|
|
}
|
|
};
|