import { Client, Events, GatewayIntentBits } from 'discord.js'; import RoleService from './services/role'; import CommandService from './services/command'; import DataService from './services/data'; const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent] }); client.once(Events.ClientReady, async (readyClient) => { // Initialize services await DataService.init(); await CommandService.init(); await RoleService.init(client.guilds.cache); // Ready! console.log(`Ready! Logged in as ${readyClient.user.tag}`); }); client.on("guildMemberAdd", async (guildMember) => { await RoleService.giveStarterRoles(guildMember); }); client.on("messageCreate", async (message) => { if (message.author.bot) return; try { const command = CommandService.parse(message); if (command) command.execute(message); } catch (err) { console.error(err); } }); Bun.cron("0 */6 * * *", async () => { for (const guild of client.guilds.cache.values()) { const lurkerRole = RoleService.getRoleByName(guild, RoleService.ROLES["LURKER"]?.name); if (!lurkerRole) continue; await guild.members.prune({ days: 5, roles: [lurkerRole] }); } }); client.login(Bun.env.DISCORD_TOKEN);