const { Events } = require('discord.js'); module.exports = { name: Events.GuildMemberAdd, async execute(member) { try { const api = require('../api'); // Get the welcome/leave settings from the API const welcomeLeaveSettings = await api.getWelcomeLeaveSettings(member.guild.id) || { welcome: { enabled: false } }; const welcome = welcomeLeaveSettings.welcome; if (welcome && welcome.enabled && welcome.channel) { const channel = member.guild.channels.cache.get(welcome.channel); if (channel) { try { const message = (welcome.message || '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 ${welcome.channel} in guild ${member.guild.id}:`, error); } } } // Handle autorole const autoroleSettings = await api.getAutoroleSettings(member.guild.id) || { enabled: false }; if (autoroleSettings && autoroleSettings.enabled && autoroleSettings.roleId) { const role = member.guild.roles.cache.get(autoroleSettings.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); } } };