Cache-aware Fluxer bot — custom limits, stats, and periodic sweeps.
cache-bot.js · 78 lines
Cache-aware Fluxer bot — custom limits, stats, and periodic sweeps.
View on GitHubnode examples/cache-bot.js
javascript
/**
* Cache-aware Fluxer bot — custom limits, stats, and periodic sweeps.
*
* Usage:
* FLUXER_BOT_TOKEN=your_token node examples/cache-bot.js
*
* See: https://fluxerjs.blstmo.com/guides/caching/
*/
import { Client, Events } from '@fluxerjs/core';
const client = new Client({
cache: {
guilds: 100,
channels: 2_000,
users: 5_000,
members: 2_000,
messages: 25,
},
});
client.on(Events.Ready, () => {
console.log('Ready!', client.cache.stats());
});
// Hold references across reconnects — READY / GUILD_CREATE patch in place.
/** @type {import('@fluxerjs/core').Guild | null} */
let primaryGuild = null;
client.on(Events.GuildCreate, (guild) => {
if (!primaryGuild) {
primaryGuild = guild;
console.log('Tracking guild', guild.id, guild.name);
}
});
client.on(Events.GuildAvailable, (guild) => {
if (primaryGuild && guild === primaryGuild) {
console.log('Same guild instance recovered after outage:', guild.name);
}
});
client.on(Events.MessageCreate, async (message) => {
if (message.author.bot) return;
if (message.content === '!cache') {
const stats = client.cache.stats();
await message.reply(
[
`guilds=${stats.guilds}`,
`channels=${stats.channels}`,
`users=${stats.users}`,
`members=${stats.members}`,
`messages=${stats.messages}`,
`limits.messages=${String(client.cache.limits.messages)}`,
].join(' · '),
);
return;
}
if (message.content === '!sweep') {
const messages = client.cache.sweepMessages();
const members = client.cache.sweepMembers((member) => member.id !== client.user?.id);
await message.reply(`Swept ${messages} messages, ${members} members`);
}
});
// Periodic maintenance for long-running bots
const HOUR = 60 * 60 * 1000;
setInterval(() => {
const removed = client.cache.sweepMessages(
(msg) => Date.now() - Date.parse(msg.timestamp) > HOUR,
);
if (removed > 0) console.log(`Swept ${removed} old messages`);
}, HOUR).unref?.();
await client.login(process.env.FLUXER_BOT_TOKEN);