discord-bot-shared 0.14.5 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -14,9 +14,11 @@ declare class CommandManager {
|
|
|
14
14
|
add(command: Command): void;
|
|
15
15
|
setGlobalCommandHook(commandHook: CommandHook): void;
|
|
16
16
|
register(): Promise<void>;
|
|
17
|
+
unregister(): Promise<void>;
|
|
18
|
+
registerGuildCommands(): Promise<void>;
|
|
19
|
+
private _registerGuildCommands;
|
|
17
20
|
unregisterGuildCommands(): Promise<void>;
|
|
18
21
|
private _unregisterGuildCommands;
|
|
19
|
-
unregisterApplicationCommands(): Promise<void>;
|
|
20
22
|
_listen(): void;
|
|
21
23
|
private static checkRoles;
|
|
22
24
|
private static interactionReply;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-manager.d.ts","names":[],"sources":["../src/command-manager.ts"],"sourcesContent":[],"mappings":";;;;UAYiB,OAAA;;EAAA,OAAA,EAEN,+CAFa;EAEb,GAAA,EAAA,CAAA,WAAA,EACU,2BADV,CAAA,QAAA,CAAA,EAAA,GAAA,IAAA,GAC2D,OAD3D,CAAA,IAAA,CAAA;;AAC2D,KAG1D,WAAA,GAH0D,CAAA,WAAA,EAG9B,2BAH8B,CAAA,QAAA,CAAA,EAAA,GAAA,OAAA,GAGsB,OAHtB,CAAA,OAAA,CAAA;AAAO,cAKhE,cAAA,CALgE;EAGjE,CAAA,OAAA;EAEC,WAAA,CAAA,OAAc,EAKG,cALH;EAKG,GAAA,CAAA,OAAA,EAOR,OAPQ,CAAA,EAAA,IAAA;EAOR,oBAAA,CAAA,WAAA,EAIqB,WAJrB,CAAA,EAAA,IAAA;EAIqB,QAAA,CAAA,CAAA,EAIhB,OAJgB,CAAA,IAAA,CAAA;EAIhB,
|
|
1
|
+
{"version":3,"file":"command-manager.d.ts","names":[],"sources":["../src/command-manager.ts"],"sourcesContent":[],"mappings":";;;;UAYiB,OAAA;;EAAA,OAAA,EAEN,+CAFa;EAEb,GAAA,EAAA,CAAA,WAAA,EACU,2BADV,CAAA,QAAA,CAAA,EAAA,GAAA,IAAA,GAC2D,OAD3D,CAAA,IAAA,CAAA;;AAC2D,KAG1D,WAAA,GAH0D,CAAA,WAAA,EAG9B,2BAH8B,CAAA,QAAA,CAAA,EAAA,GAAA,OAAA,GAGsB,OAHtB,CAAA,OAAA,CAAA;AAAO,cAKhE,cAAA,CALgE;EAGjE,CAAA,OAAA;EAEC,WAAA,CAAA,OAAc,EAKG,cALH;EAKG,GAAA,CAAA,OAAA,EAOR,OAPQ,CAAA,EAAA,IAAA;EAOR,oBAAA,CAAA,WAAA,EAIqB,WAJrB,CAAA,EAAA,IAAA;EAIqB,QAAA,CAAA,CAAA,EAIhB,OAJgB,CAAA,IAAA,CAAA;EAIhB,UAAA,CAAA,CAAA,EAQE,OARF,CAAA,IAAA,CAAA;EAQE,qBAAA,CAAA,CAAA,EAOO,OAPP,CAAA,IAAA,CAAA;EAOO,QAAA,sBAAA;EA6BM,uBAAA,CAAA,CAAA,EAAA,OAAA,CAAA,IAAA,CAAA;EAAO,QAAA,wBAAA"}
|
package/dist/command-manager.js
CHANGED
|
@@ -14,10 +14,39 @@ var CommandManager = class CommandManager {
|
|
|
14
14
|
this.#globalCommandHook = commandHook;
|
|
15
15
|
}
|
|
16
16
|
async register() {
|
|
17
|
-
const
|
|
17
|
+
const commandPayload = this.#commands.map((c) => c.command);
|
|
18
18
|
const route = Routes.applicationCommands(this.#discord.applicationId);
|
|
19
|
-
await this.#discord.rest.put(route, { body:
|
|
20
|
-
console.log(`
|
|
19
|
+
await this.#discord.rest.put(route, { body: commandPayload });
|
|
20
|
+
console.log(`Globally registered ${this.#commands.size.toString()} (/) commands.`);
|
|
21
|
+
}
|
|
22
|
+
async unregister() {
|
|
23
|
+
const route = Routes.applicationCommands(this.#discord.applicationId);
|
|
24
|
+
await this.#discord.rest.put(route, { body: [] });
|
|
25
|
+
console.log("Unregistered global commands.");
|
|
26
|
+
}
|
|
27
|
+
async registerGuildCommands() {
|
|
28
|
+
if (this.#discord.client.readyAt) await this._registerGuildCommands();
|
|
29
|
+
else this.#discord.client.once(Events.ClientReady, () => void this._registerGuildCommands());
|
|
30
|
+
}
|
|
31
|
+
async _registerGuildCommands() {
|
|
32
|
+
let guilds;
|
|
33
|
+
try {
|
|
34
|
+
guilds = await this.#discord.client.guilds.fetch();
|
|
35
|
+
} catch (error) {
|
|
36
|
+
console.error("Unable to register guild commands. Failed to fetch guilds.");
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
const commandPayload = this.#commands.map((c) => c.command);
|
|
40
|
+
const registerPromises = [];
|
|
41
|
+
for (const guild of guilds.values()) {
|
|
42
|
+
const route = Routes.applicationGuildCommands(this.#discord.applicationId, guild.id);
|
|
43
|
+
const registerCommandsInGuild = async () => {
|
|
44
|
+
await this.#discord.rest.put(route, { body: commandPayload });
|
|
45
|
+
console.log(`Registered ${this.#commands.size.toString()} (/) commands in guild: ${guild.name}`);
|
|
46
|
+
};
|
|
47
|
+
registerPromises.push(registerCommandsInGuild());
|
|
48
|
+
}
|
|
49
|
+
await Promise.all(registerPromises);
|
|
21
50
|
}
|
|
22
51
|
async unregisterGuildCommands() {
|
|
23
52
|
if (this.#discord.client.readyAt) await this._unregisterGuildCommands();
|
|
@@ -34,19 +63,14 @@ var CommandManager = class CommandManager {
|
|
|
34
63
|
const unregisterPromises = [];
|
|
35
64
|
for (const guild of guilds.values()) {
|
|
36
65
|
const route = Routes.applicationGuildCommands(this.#discord.applicationId, guild.id);
|
|
37
|
-
const
|
|
66
|
+
const unregister = async () => {
|
|
38
67
|
await this.#discord.rest.put(route, { body: [] });
|
|
39
68
|
console.log(`Unregistered commands from guild: ${guild.name}`);
|
|
40
69
|
};
|
|
41
|
-
unregisterPromises.push(
|
|
70
|
+
unregisterPromises.push(unregister());
|
|
42
71
|
}
|
|
43
72
|
await Promise.all(unregisterPromises);
|
|
44
73
|
}
|
|
45
|
-
async unregisterApplicationCommands() {
|
|
46
|
-
const route = Routes.applicationCommands(this.#discord.applicationId);
|
|
47
|
-
await this.#discord.rest.put(route, { body: [] });
|
|
48
|
-
console.log("Unregistered application commands.");
|
|
49
|
-
}
|
|
50
74
|
_listen() {
|
|
51
75
|
const listen = async (interaction) => {
|
|
52
76
|
if (!interaction.isChatInputCommand()) return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-manager.js","names":["#commands","#discord","#globalCommandHook","guilds: Collection<Snowflake, OAuth2Guild>","unregisterPromises: Promise<void>[]","errorMessage: string"],"sources":["../src/command-manager.ts"],"sourcesContent":["import type {\n ChatInputCommandInteraction,\n Interaction,\n OAuth2Guild,\n RESTPostAPIChatInputApplicationCommandsJSONBody,\n Snowflake,\n} from \"discord.js\"\nimport { Collection, Events, MessageFlags, Routes } from \"discord.js\"\n\nimport type { DiscordContext } from \"~/types.ts\"\nimport { throwUserError, UserError } from \"~/util.ts\"\n\nexport interface Command {\n requiredRoles?: string[]\n command: RESTPostAPIChatInputApplicationCommandsJSONBody\n run: (interaction: ChatInputCommandInteraction<\"cached\">) => void | Promise<void>\n}\n\nexport type CommandHook = (interaction: ChatInputCommandInteraction<\"cached\">) => boolean | Promise<boolean>\n\nexport class CommandManager {\n readonly #commands = new Collection<string, Command>()\n #globalCommandHook?: CommandHook\n readonly #discord: DiscordContext\n\n public constructor(discord: DiscordContext) {\n this.#discord = discord\n }\n\n /*\n * Add a command\n */\n public add(command: Command): void {\n this.#commands.set(command.command.name, command)\n }\n\n public setGlobalCommandHook(commandHook: CommandHook): void {\n this.#globalCommandHook = commandHook\n }\n\n public async register(): Promise<void> {\n const
|
|
1
|
+
{"version":3,"file":"command-manager.js","names":["#commands","#discord","#globalCommandHook","guilds: Collection<Snowflake, OAuth2Guild>","registerPromises: Promise<void>[]","unregisterPromises: Promise<void>[]","errorMessage: string"],"sources":["../src/command-manager.ts"],"sourcesContent":["import type {\n ChatInputCommandInteraction,\n Interaction,\n OAuth2Guild,\n RESTPostAPIChatInputApplicationCommandsJSONBody,\n Snowflake,\n} from \"discord.js\"\nimport { Collection, Events, MessageFlags, Routes } from \"discord.js\"\n\nimport type { DiscordContext } from \"~/types.ts\"\nimport { throwUserError, UserError } from \"~/util.ts\"\n\nexport interface Command {\n requiredRoles?: string[]\n command: RESTPostAPIChatInputApplicationCommandsJSONBody\n run: (interaction: ChatInputCommandInteraction<\"cached\">) => void | Promise<void>\n}\n\nexport type CommandHook = (interaction: ChatInputCommandInteraction<\"cached\">) => boolean | Promise<boolean>\n\nexport class CommandManager {\n readonly #commands = new Collection<string, Command>()\n #globalCommandHook?: CommandHook\n readonly #discord: DiscordContext\n\n public constructor(discord: DiscordContext) {\n this.#discord = discord\n }\n\n /*\n * Add a command\n */\n public add(command: Command): void {\n this.#commands.set(command.command.name, command)\n }\n\n public setGlobalCommandHook(commandHook: CommandHook): void {\n this.#globalCommandHook = commandHook\n }\n\n public async register(): Promise<void> {\n const commandPayload = this.#commands.map((c) => c.command)\n const route = Routes.applicationCommands(this.#discord.applicationId)\n await this.#discord.rest.put(route, { body: commandPayload })\n\n console.log(`Globally registered ${this.#commands.size.toString()} (/) commands.`)\n }\n\n public async unregister(): Promise<void> {\n const route = Routes.applicationCommands(this.#discord.applicationId)\n await this.#discord.rest.put(route, { body: [] })\n console.log(\"Unregistered global commands.\")\n }\n\n // We can't fetch guilds before the client is ready.\n public async registerGuildCommands() {\n if (this.#discord.client.readyAt) await this._registerGuildCommands()\n else this.#discord.client.once(Events.ClientReady, () => void this._registerGuildCommands())\n }\n\n private async _registerGuildCommands(): Promise<void> {\n let guilds: Collection<Snowflake, OAuth2Guild>\n try {\n guilds = await this.#discord.client.guilds.fetch()\n } catch (error) {\n console.error(\"Unable to register guild commands. Failed to fetch guilds.\")\n throw error\n }\n\n const commandPayload = this.#commands.map((c) => c.command)\n\n const registerPromises: Promise<void>[] = []\n for (const guild of guilds.values()) {\n const route = Routes.applicationGuildCommands(this.#discord.applicationId, guild.id)\n const registerCommandsInGuild = async () => {\n await this.#discord.rest.put(route, { body: commandPayload })\n console.log(`Registered ${this.#commands.size.toString()} (/) commands in guild: ${guild.name}`)\n }\n registerPromises.push(registerCommandsInGuild())\n }\n\n await Promise.all(registerPromises)\n }\n\n public async unregisterGuildCommands(): Promise<void> {\n if (this.#discord.client.readyAt) await this._unregisterGuildCommands()\n else this.#discord.client.once(Events.ClientReady, () => void this._unregisterGuildCommands())\n }\n\n private async _unregisterGuildCommands(): Promise<void> {\n let guilds: Collection<Snowflake, OAuth2Guild>\n try {\n guilds = await this.#discord.client.guilds.fetch()\n } catch (error) {\n console.error(\"Unable to unregister guild commands. Failed to fetch guilds.\")\n throw error\n }\n\n const unregisterPromises: Promise<void>[] = []\n for (const guild of guilds.values()) {\n const route = Routes.applicationGuildCommands(this.#discord.applicationId, guild.id)\n const unregister = async () => {\n await this.#discord.rest.put(route, { body: [] })\n console.log(`Unregistered commands from guild: ${guild.name}`)\n }\n unregisterPromises.push(unregister())\n }\n\n await Promise.all(unregisterPromises)\n }\n\n public _listen(): void {\n const listen = async (interaction: Interaction) => {\n if (!interaction.isChatInputCommand()) return\n if (!interaction.guildId) return\n if (!interaction.inCachedGuild()) await interaction.client.guilds.fetch(interaction.guildId).catch(console.error)\n if (!interaction.inCachedGuild()) {\n CommandManager.interactionReply(interaction, \"Guild is not cached. Try again.\")\n return\n }\n\n const command = this.#commands.get(interaction.commandName)\n if (!command) {\n CommandManager.interactionReply(interaction, `Failed to get command with name: ${interaction.commandName}`)\n return\n }\n\n if (!(await CommandManager.checkRoles(command, interaction))) {\n CommandManager.interactionReply(interaction, \"You do not have one of the required roles to run this command.\")\n return\n }\n\n try {\n const shouldContinue = this.#globalCommandHook ? await this.#globalCommandHook(interaction) : true\n if (!shouldContinue) throwUserError(\"The global command hook returned false.\")\n\n await command.run(interaction)\n } catch (error) {\n CommandManager.interactionReply(interaction, error)\n }\n }\n\n this.#discord.client.on(Events.InteractionCreate, (interaction) => void listen(interaction))\n console.log(\"Listening for commands.\")\n }\n\n private static async checkRoles(command: Command, interaction: ChatInputCommandInteraction<\"cached\">) {\n if (!command.requiredRoles) return true\n\n if (command.requiredRoles.length > 0) {\n const member = await interaction.guild.members.fetch(interaction.user).catch(console.error)\n if (!member) return false\n\n return member.roles.cache.some((role) =>\n command.requiredRoles ? command.requiredRoles.includes(role.name) : false,\n )\n }\n\n return false\n }\n\n private static interactionReply(interaction: ChatInputCommandInteraction, error: unknown) {\n let errorMessage: string\n if (error instanceof UserError) errorMessage = error.message\n else if (error instanceof Error && error.stack) errorMessage = error.stack\n else errorMessage = String(error)\n\n const message = `There was an error while running this command.\\n\\`\\`\\`${errorMessage}\\`\\`\\``\n const handleInteractionReply = async () => {\n await (interaction.deferred\n ? interaction.editReply(message).catch(console.error)\n : interaction.reply({ content: message, flags: MessageFlags.Ephemeral }).catch(console.error))\n }\n void handleInteractionReply()\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-manager.d.ts","names":[],"sources":["../src/event-manager.ts"],"sourcesContent":[],"mappings":";;;;KAIK,WAAA,SAAoB;KAEpB,yBAAuB,cAAc,wBAChC,iBACC,aAAa,gBACZ;AAPoC,KAS3C,eAAA,GAPW,QAQR,WANS,GAMK,YANL,CAMkB,CANlB,CAAA,EAAW;UASlB,WATgC,CAAA,YASV,WATU,GASI,WATJ,CAAA,CAAA;EAChC,KAAA,EASD,GATC;EACC,OAAA,EASA,eATA,CASgB,GAThB,CAAA;;AACC,cAWC,YAAA,CAXD;EAAO,CAAA,OAAA;EAEd,WAAA,CAAA,OAAe,EAaU,cAbV;EACZ,GAAA,CAAA,UAmBe,WAnBf,CAAA,CAAA,KAAA,EAmBmC,WAnBnC,CAmB+C,CAnB/C,CAAA,CAAA,EAAA,IAAA;EAA2B,OAAA,CAAA,CAAA,EAAA,IAAA;;AAAD,
|
|
1
|
+
{"version":3,"file":"event-manager.d.ts","names":[],"sources":["../src/event-manager.ts"],"sourcesContent":[],"mappings":";;;;KAIK,WAAA,SAAoB;KAEpB,yBAAuB,cAAc,wBAChC,iBACC,aAAa,gBACZ;AAPoC,KAS3C,eAAA,GAPW,QAQR,WANS,GAMK,YANL,CAMkB,CANlB,CAAA,EAAW;UASlB,WATgC,CAAA,YASV,WATU,GASI,WATJ,CAAA,CAAA;EAChC,KAAA,EASD,GATC;EACC,OAAA,EASA,eATA,CASgB,GAThB,CAAA;;AACC,cAWC,YAAA,CAXD;EAAO,CAAA,OAAA;EAEd,WAAA,CAAA,OAAe,EAaU,cAbV;EACZ,GAAA,CAAA,UAmBe,WAnBf,CAAA,CAAA,KAAA,EAmBmC,WAnBnC,CAmB+C,CAnB/C,CAAA,CAAA,EAAA,IAAA;EAA2B,OAAA,CAAA,CAAA,EAAA,IAAA;;AAAD,KAuCtB,KAAA,GAvCsB,QAwC1B,WArCa,GAqCC,WArCD,CAqCa,CArCb,CAAA,EAAW,CAsC9B,WAtC8B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-manager.js","names":["#events","#discord"],"sources":["../src/event-manager.ts"],"sourcesContent":["import type { Client, ClientEvents } from \"discord.js\"\n\nimport type { DiscordContext } from \"~/types.ts\"\n\ntype ValidEvents = keyof ClientEvents\n\ntype EventHandler<E extends ValidEvents = ValidEvents> = (\n client: Client,\n ...args: ClientEvents[E]\n) => void | Promise<void>\n\ntype EventHandlerMap = {\n [E in ValidEvents]: EventHandler<E>\n}\n\ninterface SingleEvent<E extends ValidEvents = ValidEvents> {\n event: E\n handler: EventHandlerMap[E]\n}\n\nexport class EventManager {\n readonly #events: SingleEvent[] = []\n readonly #discord: DiscordContext\n\n public constructor(discord: DiscordContext) {\n this.#discord = discord\n }\n\n /*\n * Add an event listener\n */\n public add<N extends ValidEvents>(event: SingleEvent<N>): void {\n this.#events.push(event)\n }\n\n public _listen(): void {\n for (const event of this.#events) {\n const listen = async (...args: ClientEvents[typeof event.event]) => {\n try {\n
|
|
1
|
+
{"version":3,"file":"event-manager.js","names":["#events","#discord"],"sources":["../src/event-manager.ts"],"sourcesContent":["import type { Client, ClientEvents } from \"discord.js\"\n\nimport type { DiscordContext } from \"~/types.ts\"\n\ntype ValidEvents = keyof ClientEvents\n\ntype EventHandler<E extends ValidEvents = ValidEvents> = (\n client: Client,\n ...args: ClientEvents[E]\n) => void | Promise<void>\n\ntype EventHandlerMap = {\n [E in ValidEvents]: EventHandler<E>\n}\n\ninterface SingleEvent<E extends ValidEvents = ValidEvents> {\n event: E\n handler: EventHandlerMap[E]\n}\n\nexport class EventManager {\n readonly #events: SingleEvent[] = []\n readonly #discord: DiscordContext\n\n public constructor(discord: DiscordContext) {\n this.#discord = discord\n }\n\n /*\n * Add an event listener\n */\n public add<N extends ValidEvents>(event: SingleEvent<N>): void {\n this.#events.push(event)\n }\n\n public _listen(): void {\n for (const event of this.#events) {\n const listen = async (...args: ClientEvents[typeof event.event]) => {\n try {\n await (event.handler as EventHandler)(this.#discord.client, ...args)\n } catch (error) {\n console.error(error)\n }\n }\n\n this.#discord.client.on(event.event, (...args) => void listen(...args))\n }\n console.log(`Listening for (${this.#events.length.toString()}) events.`)\n }\n}\n\nexport type Event = {\n [E in ValidEvents]: SingleEvent<E>\n}[ValidEvents]\n"],"mappings":"AAoBA,IAAa,eAAb,MAA0B;CACxB,UAAkC,EAAE;CACpC;CAEA,YAAmB,SAAyB;AAC1C,QAAA,UAAgB;;CAMlB,IAAkC,OAA6B;AAC7D,QAAA,OAAa,KAAK,MAAM;;CAG1B,UAAuB;AACrB,OAAK,MAAM,SAAS,MAAA,QAAc;GAChC,MAAM,SAAS,OAAO,GAAG,SAA2C;AAClE,QAAI;AACF,WAAO,MAAM,QAAyB,MAAA,QAAc,QAAQ,GAAG,KAAK;aAC7D,OAAO;AACd,aAAQ,MAAM,MAAM;;;AAIxB,SAAA,QAAc,OAAO,GAAG,MAAM,QAAQ,GAAG,SAAS,KAAK,OAAO,GAAG,KAAK,CAAC;;AAEzE,UAAQ,IAAI,kBAAkB,MAAA,OAAa,OAAO,UAAU,CAAC,WAAW"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discord-bot-shared",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Modules for creating discord bots.",
|
|
6
6
|
"repository": {
|
|
@@ -34,15 +34,15 @@
|
|
|
34
34
|
"discord.js": "^14.0.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
|
-
"@adamhl8/configs": "^0.
|
|
37
|
+
"@adamhl8/configs": "^0.18.0",
|
|
38
38
|
"@arethetypeswrong/core": "^0.18.2",
|
|
39
|
-
"@biomejs/biome": "^2.3.
|
|
40
|
-
"@types/bun": "^1.3.
|
|
41
|
-
"discord.js": "^14.
|
|
42
|
-
"knip": "^5.
|
|
39
|
+
"@biomejs/biome": "^2.3.8",
|
|
40
|
+
"@types/bun": "^1.3.4",
|
|
41
|
+
"discord.js": "^14.25.1",
|
|
42
|
+
"knip": "^5.73.1",
|
|
43
43
|
"markdown-toc": "^1.2.0",
|
|
44
|
-
"publint": "^0.3.
|
|
45
|
-
"tsdown": "^0.
|
|
44
|
+
"publint": "^0.3.16",
|
|
45
|
+
"tsdown": "^0.17.2",
|
|
46
46
|
"typescript": "^5.9.3"
|
|
47
47
|
}
|
|
48
48
|
}
|