46 lines
1.8 KiB
JavaScript
46 lines
1.8 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
}; |