Add events module with dashboard UI, scheduling, signups, and settings updates; extend env/readme.
This commit is contained in:
@@ -1,13 +1,46 @@
|
||||
import { GuildMember } from 'discord.js';
|
||||
import { EventHandler } from '../utils/types.js';
|
||||
import { context } from '../config/context.js';
|
||||
import { settings } from '../config/state.js';
|
||||
import { GuildMember, EmbedBuilder } from 'discord.js';
|
||||
import { EventHandler } from '../utils/types';
|
||||
import { context } from '../config/context';
|
||||
import { settingsStore } from '../config/state';
|
||||
|
||||
const event: EventHandler = {
|
||||
name: 'guildMemberAdd',
|
||||
execute(member: GuildMember) {
|
||||
const guildConfig = settings.get(member.guild.id);
|
||||
if (guildConfig?.welcomeChannelId) {
|
||||
const guildConfig = settingsStore.get(member.guild.id);
|
||||
const welcomeCfg = guildConfig?.welcomeConfig || guildConfig?.automodConfig?.welcomeConfig;
|
||||
if (welcomeCfg?.enabled && welcomeCfg.channelId) {
|
||||
const channel = member.guild.channels.cache.get(welcomeCfg.channelId);
|
||||
if (channel && channel.isTextBased()) {
|
||||
const files: any[] = [];
|
||||
const colorVal = parseInt((welcomeCfg.embedColor || '00ff99').replace('#', ''), 16);
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle(welcomeCfg.embedTitle || 'Willkommen!')
|
||||
.setDescription(welcomeCfg.embedDescription || `${member} ist beigetreten.`)
|
||||
.setColor(isNaN(colorVal) ? 0x00ff99 : colorVal)
|
||||
.setFooter({ text: welcomeCfg.embedFooter || '' });
|
||||
if (welcomeCfg.embedThumbnailData && welcomeCfg.embedThumbnailData.startsWith('data:')) {
|
||||
const [meta, b64] = welcomeCfg.embedThumbnailData.split(',');
|
||||
const ext = meta.includes('gif') ? 'gif' : 'png';
|
||||
const buf = Buffer.from(b64, 'base64');
|
||||
const name = `welcome-thumb.${ext}`;
|
||||
files.push({ attachment: buf, name });
|
||||
embed.setThumbnail(`attachment://${name}`);
|
||||
} else if (welcomeCfg.embedThumbnail) {
|
||||
embed.setThumbnail(welcomeCfg.embedThumbnail);
|
||||
}
|
||||
if (welcomeCfg.embedImageData && welcomeCfg.embedImageData.startsWith('data:')) {
|
||||
const [meta, b64] = welcomeCfg.embedImageData.split(',');
|
||||
const ext = meta.includes('gif') ? 'gif' : 'png';
|
||||
const buf = Buffer.from(b64, 'base64');
|
||||
const name = `welcome-image.${ext}`;
|
||||
files.push({ attachment: buf, name });
|
||||
embed.setImage(`attachment://${name}`);
|
||||
} else if (welcomeCfg.embedImage) {
|
||||
embed.setImage(welcomeCfg.embedImage);
|
||||
}
|
||||
channel.send({ embeds: [embed], files }).catch(() => undefined);
|
||||
}
|
||||
} else if (guildConfig?.welcomeChannelId) {
|
||||
const channel = member.guild.channels.cache.get(guildConfig.welcomeChannelId);
|
||||
if (channel && channel.isTextBased()) {
|
||||
channel.send({ content: `Willkommen ${member}!` }).catch(() => undefined);
|
||||
|
||||
Reference in New Issue
Block a user