43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
const { Events } = require('discord.js');
|
|
const { readDb } = require('../../backend/db.js');
|
|
|
|
module.exports = {
|
|
name: Events.GuildMemberRemove,
|
|
async execute(member) {
|
|
try {
|
|
const db = readDb();
|
|
const settings = db[member.guild.id];
|
|
|
|
if (settings && settings.leaveEnabled && settings.leaveChannel) {
|
|
let channel = member.guild.channels.cache.get(settings.leaveChannel);
|
|
if (!channel) {
|
|
try {
|
|
channel = await member.guild.channels.fetch(settings.leaveChannel);
|
|
} catch (err) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (channel && channel.isTextBased && channel.isTextBased()) {
|
|
try {
|
|
const me = member.guild.members.me;
|
|
const perms = channel.permissionsFor(me);
|
|
if (!perms || !perms.has('ViewChannel') || !perms.has('SendMessages')) {
|
|
return;
|
|
}
|
|
|
|
const userMention = member.user ? (member.user.toString ? member.user.toString() : member.user.tag) : 'A user';
|
|
const message = (settings.leaveMessage || '{user} has left the server.').replace('{user}', userMention).replace('{server}', member.guild.name);
|
|
await channel.send(message);
|
|
} catch (error) {
|
|
console.error(`Could not send leave message to channel ${settings.leaveChannel} in guild ${member.guild.id}:`, error);
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error(`Error in guildMemberRemove event for guild ${member.guild.id}:`, error);
|
|
}
|
|
},
|
|
}; |