Add: Welcome and goodbye message module
All checks were successful
Auto Build and Push Docker Image / build (push) Successful in 6s
All checks were successful
Auto Build and Push Docker Image / build (push) Successful in 6s
- Add /welcome command with setchannel, add, remove, list, help
- Welcome messages on guildMemberAdd event
- Goodbye messages on guildMemberRemove event
- Auto-use Discord system channel if no custom channel set
- Variables: {user}, {username}, {server}, {membercount}
- Add welcome_message and goodbye_message to guild_settings
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
34
src/events/guildMemberAdd.ts
Normal file
34
src/events/guildMemberAdd.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { Events, GuildMember, TextChannel, EmbedBuilder } from 'discord.js';
|
||||
|
||||
export default {
|
||||
name: Events.GuildMemberAdd,
|
||||
async execute(member: GuildMember) {
|
||||
const DB = (member.client as any).DB;
|
||||
const guildId = member.guild.id;
|
||||
|
||||
const settings: any = DB.get('SELECT * FROM guild_settings WHERE guild_id = ?', guildId);
|
||||
|
||||
// Use custom channel or fall back to Discord's system channel
|
||||
const channelId = settings?.welcome_channel || member.guild.systemChannelId;
|
||||
if (!channelId || !settings?.welcome_message) {
|
||||
return;
|
||||
}
|
||||
|
||||
const channel = member.guild.channels.cache.get(channelId);
|
||||
if (!channel || !channel.isTextBased()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const message = settings.welcome_message
|
||||
.replace(/{user}/g, `<@${member.id}>`)
|
||||
.replace(/{username}/g, member.user.username)
|
||||
.replace(/{server}/g, member.guild.name)
|
||||
.replace(/{membercount}/g, member.guild.memberCount.toString());
|
||||
|
||||
try {
|
||||
await (channel as TextChannel).send(message);
|
||||
} catch (error) {
|
||||
console.error('[WELCOME] Error sending welcome message:', error);
|
||||
}
|
||||
},
|
||||
};
|
||||
34
src/events/guildMemberRemove.ts
Normal file
34
src/events/guildMemberRemove.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { Events, GuildMember, TextChannel, EmbedBuilder } from 'discord.js';
|
||||
|
||||
export default {
|
||||
name: Events.GuildMemberRemove,
|
||||
async execute(member: GuildMember) {
|
||||
const DB = (member.client as any).DB;
|
||||
const guildId = member.guild.id;
|
||||
|
||||
const settings: any = DB.get('SELECT * FROM guild_settings WHERE guild_id = ?', guildId);
|
||||
|
||||
// Use custom channel or fall back to Discord's system channel
|
||||
const channelId = settings?.welcome_channel || member.guild.systemChannelId;
|
||||
if (!channelId || !settings?.goodbye_message) {
|
||||
return;
|
||||
}
|
||||
|
||||
const channel = member.guild.channels.cache.get(channelId);
|
||||
if (!channel || !channel.isTextBased()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const message = settings.goodbye_message
|
||||
.replace(/{user}/g, `<@${member.id}>`)
|
||||
.replace(/{username}/g, member.user.username)
|
||||
.replace(/{server}/g, member.guild.name)
|
||||
.replace(/{membercount}/g, member.guild.memberCount.toString());
|
||||
|
||||
try {
|
||||
await (channel as TextChannel).send(message);
|
||||
} catch (error) {
|
||||
console.error('[WELCOME] Error sending goodbye message:', error);
|
||||
}
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user