const { Events } = require('discord.js'); const { readDb } = require('../../backend/db.js'); module.exports = { name: Events.GuildMemberAdd, async execute(member) { try { const db = readDb(); const settings = db[member.guild.id]; if (settings && settings.welcomeEnabled && settings.welcomeChannel) { const channel = member.guild.channels.cache.get(settings.welcomeChannel); if (channel) { try { const message = (settings.welcomeMessage || 'Welcome {user} to {server}!').replace('{user}', member.user.toString()).replace('{server}', member.guild.name); await channel.send(message); } catch (error) { console.error(`Could not send welcome message to channel ${settings.welcomeChannel} in guild ${member.guild.id}:`, error); } } } if (settings && settings.autorole && settings.autorole.enabled && settings.autorole.roleId) { const role = member.guild.roles.cache.get(settings.autorole.roleId); if (role) { try { // Re-check that role is assignable const botHighest = member.guild.members.me.roles.highest.position; if (role.id === member.guild.id || role.managed || role.position >= botHighest) { console.warn(`Autorole ${role.id} in guild ${member.guild.id} is not assignable (everyone/managed/too high). Skipping.`); return; } await member.roles.add(role); } catch (error) { console.error(`Could not assign autorole in guild ${member.guild.id}:`, error); } } } } catch (error) { console.error(`Error in guildMemberAdd event for guild ${member.guild.id}:`, error); } }, };