feat: implement command registration for booster role bot and add tests

This commit is contained in:
MythEclipse
2026-05-15 23:45:47 +07:00
parent 9d0322b118
commit 972400e4e4
4 changed files with 57 additions and 1 deletions
+26
View File
@@ -0,0 +1,26 @@
import { describe, expect, test } from "bun:test";
import { registerGuildCommands, type DiscordRestClient } from "./registerCommands";
class FakeRestClient implements DiscordRestClient {
route: string | null = null;
body: unknown = null;
async put(route: string, input: { body: unknown }): Promise<unknown> {
this.route = route;
this.body = input.body;
return null;
}
}
describe("registerGuildCommands", () => {
test("registers booster role command to the configured guild", async () => {
const rest = new FakeRestClient();
await registerGuildCommands(rest, { clientId: "client", guildId: "guild" });
expect(rest.route).toBe("/applications/client/guilds/guild/commands");
expect(rest.body).toEqual([
expect.objectContaining({ name: "booster-role", description: "Manage your cosmetic booster role" })
]);
});
});
+22
View File
@@ -0,0 +1,22 @@
import { REST, Routes } from "discord.js";
import { boosterRoleCommand } from "./commands/booster-role";
export type DiscordRestClient = {
put(route: string, input: { body: unknown }): Promise<unknown>;
};
export type RegisterCommandsConfig = {
clientId: string;
guildId: string;
};
export async function registerGuildCommands(rest: DiscordRestClient, config: RegisterCommandsConfig): Promise<void> {
await rest.put(Routes.applicationGuildCommands(config.clientId, config.guildId), {
body: [boosterRoleCommand.toJSON()]
});
}
export async function registerGuildCommandsWithToken(token: string, config: RegisterCommandsConfig): Promise<void> {
const rest = new REST({ version: "10" }).setToken(token);
await registerGuildCommands(rest, config);
}
+7 -1
View File
@@ -1,10 +1,16 @@
import { loadConfig } from "./config";
import { createDiscordClient } from "./discord/client";
import { registerGuildCommandsWithToken } from "./discord/registerCommands";
const config = loadConfig();
await registerGuildCommandsWithToken(config.discordToken, {
clientId: config.discordClientId,
guildId: config.discordGuildId
});
const client = createDiscordClient();
client.once("ready", () => {
client.once("clientReady", () => {
console.log(`Logged in as ${client.user?.tag ?? "unknown bot"}`);
});