46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
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);
|