Files
blitzkit/packages/bot/src/main.ts
T

81 lines
2.5 KiB
TypeScript
Raw Normal View History

2026-02-18 16:36:12 -06:00
import { assertSecret } from "@blitzkit/core";
import { ActivityType, ShardingManager } from "discord.js";
2024-12-14 15:14:48 -06:00
import {
discoveredIdsDefinitions,
tankDefinitions,
2026-02-18 16:36:12 -06:00
} from "./core/blitzkit/nonBlockingPromises";
2023-10-15 15:42:36 -05:00
2026-02-18 16:49:08 -06:00
let manager: ShardingManager;
2025-01-03 12:32:03 -06:00
let iteration = 0;
const interval = setInterval(async () => {
2026-02-18 16:49:08 -06:00
console.log(`Attempting launch on iteration ${++iteration}`);
2025-01-03 12:32:03 -06:00
2026-02-18 16:49:08 -06:00
manager?.respawnAll();
manager = new ShardingManager("dist/bot/workers/bot.js", {
token: assertSecret(import.meta.env.DISCORD_TOKEN),
});
2024-12-13 10:58:16 -06:00
const shards = await manager
2026-02-18 16:36:12 -06:00
.on("shardCreate", (shard) => {
2025-01-03 12:32:03 -06:00
clearInterval(interval);
console.log(`🟡 Launching shard ${shard.id}`);
2026-02-18 16:36:12 -06:00
shard.on("ready", () => console.log(`🟢 Launched shard ${shard.id}`));
})
2026-02-18 16:52:47 -06:00
.spawn({ timeout: 60000 });
2024-12-14 15:14:48 -06:00
try {
let servers = 0;
let channels = 0;
let users = 0;
2024-12-19 11:09:13 -06:00
for (const [, shard] of shards) {
2026-02-18 16:36:12 -06:00
const guilds = (await shard.fetchClientValue("guilds.cache")) as any;
servers += guilds.length;
for (const guild of guilds) {
channels += guild.channels.length;
users += guild.memberCount;
}
2024-12-19 11:09:13 -06:00
}
const awaitedTankDefinitions = await tankDefinitions;
const tanks = Object.values(awaitedTankDefinitions.tanks).length;
const awaitedDiscoveredIdsDefinitions = await discoveredIdsDefinitions;
const usernames = awaitedDiscoveredIdsDefinitions.count;
manager.broadcastEval(
2025-03-30 14:37:40 -05:00
async (client, { servers, users, channels, tanks, usernames }) => {
const bios = [
`Living in ${servers.toLocaleString()} servers`,
`Serving ${users.toLocaleString()} users`,
`Observing ${channels.toLocaleString()} channels`,
`Tinkering with ${tanks.toLocaleString()} tanks`,
`Memorizing ${usernames.toLocaleString()} usernames`,
];
client.user?.setPresence({
activities: [
{
type: ActivityType.Custom,
name: bios[Math.floor(Math.random() * bios.length)],
},
],
});
2025-03-30 14:37:40 -05:00
for (const guild of client.guilds.cache.values()) {
try {
const botMember = await guild.members.fetch(client.user.id);
2026-02-18 16:36:12 -06:00
await botMember.setNickname("BlitzKit");
2025-03-30 14:37:40 -05:00
} catch {}
}
},
{ context: { servers, channels, users, tanks, usernames } },
);
} catch (error) {
console.warn(
2026-02-18 16:36:12 -06:00
"An error occurred when setting up presence, ignoring to keep the process alive",
error,
);
2024-12-19 11:09:13 -06:00
}
2026-02-18 16:45:06 -06:00
}, 15000);