discord-bot-shared 0.9.1 → 0.10.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.
- package/LICENSE +1 -1
- package/README.md +2 -0
- package/dist/bot.js +24 -23
- package/dist/command-manager.js +70 -60
- package/dist/event-manager.js +16 -16
- package/dist/index.js +3 -3
- package/dist/types/bot.d.ts +15 -16
- package/dist/types/command-manager.d.ts +16 -17
- package/dist/types/event-manager.d.ts +11 -9
- package/dist/types/index.d.ts +4 -4
- package/dist/types/util.d.ts +7 -16
- package/dist/util.js +15 -12
- package/package.json +18 -21
package/LICENSE
CHANGED
package/README.md
CHANGED
package/dist/bot.js
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
import { REST } from "
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { EventManager } from "./event-manager.js"
|
|
1
|
+
import { Client, Events, REST } from "discord.js";
|
|
2
|
+
import { CommandManager } from "./command-manager.js";
|
|
3
|
+
import { EventManager } from "./event-manager.js";
|
|
5
4
|
export class Bot {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
#discord;
|
|
6
|
+
commands;
|
|
7
|
+
events;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.#discord = {
|
|
10
|
+
applicationId: options.applicationId,
|
|
11
|
+
token: options.token,
|
|
12
|
+
client: new Client(options.clientOptions),
|
|
13
|
+
rest: new REST().setToken(options.token),
|
|
14
|
+
};
|
|
15
|
+
this.commands = new CommandManager(this.#discord);
|
|
16
|
+
this.events = new EventManager(this.#discord);
|
|
17
|
+
}
|
|
18
|
+
async login() {
|
|
19
|
+
this.#discord.client.once(Events.ClientReady, () => {
|
|
20
|
+
console.log("Client is ready.");
|
|
21
|
+
});
|
|
22
|
+
await this.commands._register();
|
|
23
|
+
this.commands._listen();
|
|
24
|
+
await this.#discord.client.login(this.#discord.token);
|
|
15
25
|
}
|
|
16
|
-
this.commands = new CommandManager(this.#discord)
|
|
17
|
-
this.events = new EventManager(this.#discord)
|
|
18
|
-
}
|
|
19
|
-
async login() {
|
|
20
|
-
this.#discord.client.once("ready", () => console.log("Client is ready."))
|
|
21
|
-
await this.commands._register()
|
|
22
|
-
this.commands._listen()
|
|
23
|
-
await this.#discord.client.login(this.#discord.token)
|
|
24
|
-
}
|
|
25
26
|
}
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFpQixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFlakQsTUFBTSxPQUFPLEdBQUc7SUFDZCxRQUFRLENBQWdCO0lBRWYsUUFBUSxDQUFnQjtJQUN4QixNQUFNLENBQWM7SUFFN0IsWUFBWSxPQUFtQjtRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1lBQ3BDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztZQUNwQixNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN6QyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUN6QyxDQUFBO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtRQUNqQyxDQUFDLENBQUMsQ0FBQTtRQUVGLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRXZCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkQsQ0FBQztDQUNGIn0=
|
package/dist/command-manager.js
CHANGED
|
@@ -1,65 +1,75 @@
|
|
|
1
|
-
import { Routes } from "discord
|
|
2
|
-
import { Collection } from "discord.js"
|
|
1
|
+
import { Collection, Events, Routes, } from "discord.js";
|
|
3
2
|
export class CommandManager {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
/*
|
|
11
|
-
* Add a command
|
|
12
|
-
*/
|
|
13
|
-
add(command) {
|
|
14
|
-
if (!command.command.name) {
|
|
15
|
-
throw new Error("a command is missing a name")
|
|
3
|
+
discord;
|
|
4
|
+
#commands = new Collection();
|
|
5
|
+
#globalPreRunHook;
|
|
6
|
+
constructor(discord) {
|
|
7
|
+
this.discord = discord;
|
|
16
8
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const payload = this.#commands.map((c) => c.command)
|
|
24
|
-
const route = Routes.applicationCommands(this.discord.applicationId)
|
|
25
|
-
await this.discord.rest.put(route, { body: payload })
|
|
26
|
-
console.log(`Registered ${this.#commands.size} (/) commands.`)
|
|
27
|
-
}
|
|
28
|
-
_listen() {
|
|
29
|
-
this.discord.client.on("interactionCreate", async (interaction) => {
|
|
30
|
-
if (!interaction.guildId) return
|
|
31
|
-
if (!interaction.isChatInputCommand()) return
|
|
32
|
-
const command = this.#commands.get(interaction.commandName)
|
|
33
|
-
if (!command) return this.interactionReply(interaction, "Unable to get command.")
|
|
34
|
-
if (!(await this.checkRoles(command, interaction)))
|
|
35
|
-
return this.interactionReply(interaction, "You do not have one of the required roles to run this command.")
|
|
36
|
-
try {
|
|
37
|
-
const guild = await this.discord.client.guilds.fetch(interaction.guildId)
|
|
38
|
-
const context = {
|
|
39
|
-
guild,
|
|
9
|
+
/*
|
|
10
|
+
* Add a command
|
|
11
|
+
*/
|
|
12
|
+
add(command) {
|
|
13
|
+
if (!command.command.name) {
|
|
14
|
+
throw new Error("a command is missing a name");
|
|
40
15
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
16
|
+
this.#commands.set(command.command.name, command);
|
|
17
|
+
}
|
|
18
|
+
setGlobalPreRunHook(hook) {
|
|
19
|
+
this.#globalPreRunHook = hook;
|
|
20
|
+
}
|
|
21
|
+
async _register() {
|
|
22
|
+
const payload = this.#commands.map((c) => c.command);
|
|
23
|
+
const route = Routes.applicationCommands(this.discord.applicationId);
|
|
24
|
+
await this.discord.rest.put(route, { body: payload });
|
|
25
|
+
console.log(`Registered ${this.#commands.size} (/) commands.`);
|
|
26
|
+
}
|
|
27
|
+
_listen() {
|
|
28
|
+
this.discord.client.on(Events.InteractionCreate, async (interaction) => {
|
|
29
|
+
if (!interaction.guildId)
|
|
30
|
+
return;
|
|
31
|
+
if (!interaction.isChatInputCommand())
|
|
32
|
+
return;
|
|
33
|
+
const command = this.#commands.get(interaction.commandName);
|
|
34
|
+
if (!command) {
|
|
35
|
+
this.interactionReply(interaction, "Unable to get command.");
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!(await this.checkRoles(command, interaction))) {
|
|
39
|
+
this.interactionReply(interaction, "You do not have one of the required roles to run this command.");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const guild = await this.discord.client.guilds.fetch(interaction.guildId);
|
|
44
|
+
const context = {
|
|
45
|
+
guild,
|
|
46
|
+
};
|
|
47
|
+
const shouldContinue = this.#globalPreRunHook ? await this.#globalPreRunHook(context, interaction) : true;
|
|
48
|
+
if (!shouldContinue)
|
|
49
|
+
return;
|
|
50
|
+
await command.run(context, interaction);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
const errorMessage = error instanceof Error ? error.message : "";
|
|
54
|
+
this.interactionReply(interaction, `There was an error while running this command.\n${errorMessage}`);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async checkRoles(command, interaction) {
|
|
59
|
+
if (!command.requiredRoles)
|
|
60
|
+
return true;
|
|
61
|
+
if (command.requiredRoles.length > 0) {
|
|
62
|
+
const member = await interaction.guild?.members.fetch(interaction.user).catch(console.error);
|
|
63
|
+
if (!member)
|
|
64
|
+
return;
|
|
65
|
+
return member.roles.cache.some((role) => command.requiredRoles ? command.requiredRoles.includes(role.name) : false);
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
interactionReply(interaction, message) {
|
|
70
|
+
interaction.deferred
|
|
71
|
+
? void interaction.editReply(message).catch(console.error)
|
|
72
|
+
: void interaction.reply({ content: message, ephemeral: true }).catch(console.error);
|
|
56
73
|
}
|
|
57
|
-
return false
|
|
58
|
-
}
|
|
59
|
-
interactionReply(interaction, message) {
|
|
60
|
-
interaction.deferred
|
|
61
|
-
? void interaction.editReply(message).catch(console.error)
|
|
62
|
-
: void interaction.reply({ content: message, ephemeral: true }).catch(console.error)
|
|
63
|
-
}
|
|
64
74
|
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1hbmQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsVUFBVSxFQUNWLE1BQU0sRUFHTixNQUFNLEdBQ1AsTUFBTSxZQUFZLENBQUE7QUFlbkIsTUFBTSxPQUFPLGNBQWM7SUFJTDtJQUhwQixTQUFTLEdBQUcsSUFBSSxVQUFVLEVBQW1CLENBQUE7SUFDN0MsaUJBQWlCLENBQWM7SUFFL0IsWUFBb0IsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7SUFBRyxDQUFDO0lBRS9DOztPQUVHO0lBQ0gsR0FBRyxDQUFDLE9BQWdCO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7U0FDL0M7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBaUI7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQTtJQUMvQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3BELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3BFLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFB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
|
package/dist/event-manager.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
export class EventManager {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
discord;
|
|
3
|
+
constructor(discord) {
|
|
4
|
+
this.discord = discord;
|
|
5
|
+
}
|
|
6
|
+
/*
|
|
7
|
+
* Add an event listener
|
|
8
|
+
*/
|
|
9
|
+
add(event) {
|
|
10
|
+
this.discord.client.on(event.event, (...args) => {
|
|
11
|
+
const context = {
|
|
12
|
+
client: this.discord.client,
|
|
13
|
+
};
|
|
14
|
+
void event.handler(context, ...args).catch(console.error);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
17
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ldmVudC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWNBLE1BQU0sT0FBTyxZQUFZO0lBQ0g7SUFBcEIsWUFBb0IsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7SUFBRyxDQUFDO0lBRS9DOztPQUVHO0lBQ0gsR0FBRyxDQUF3QixLQUFlO1FBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRztnQkFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2FBQzVCLENBQUE7WUFDRCxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiJ9
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { Bot } from "./bot.js"
|
|
2
|
-
export { getChannel, isCategoryChannel, isTextChannel, throwError } from "./util.js"
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUc5QixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUEifQ==
|
|
1
|
+
export { Bot } from "./bot.js";
|
|
2
|
+
export { getChannel, isCategoryChannel, isTextChannel, throwError } from "./util.js";
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUc5QixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUEifQ==
|
package/dist/types/bot.d.ts
CHANGED
|
@@ -1,22 +1,21 @@
|
|
|
1
|
-
import { REST } from "
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { EventManager } from "./event-manager.js"
|
|
1
|
+
import { Client, ClientOptions, REST } from "discord.js";
|
|
2
|
+
import { CommandManager } from "./command-manager.js";
|
|
3
|
+
import { EventManager } from "./event-manager.js";
|
|
5
4
|
export interface BotOptions {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
applicationId: string;
|
|
6
|
+
token: string;
|
|
7
|
+
clientOptions: ClientOptions;
|
|
9
8
|
}
|
|
10
9
|
export interface DiscordContext {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
applicationId: string;
|
|
11
|
+
token: string;
|
|
12
|
+
client: Client;
|
|
13
|
+
rest: REST;
|
|
15
14
|
}
|
|
16
15
|
export declare class Bot {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
#private;
|
|
17
|
+
readonly commands: CommandManager;
|
|
18
|
+
readonly events: EventManager;
|
|
19
|
+
constructor(options: BotOptions);
|
|
20
|
+
login(): Promise<void>;
|
|
22
21
|
}
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import { RESTPostAPIChatInputApplicationCommandsJSONBody } from "discord
|
|
2
|
-
import {
|
|
3
|
-
import { DiscordContext } from "./bot.js"
|
|
1
|
+
import { ChatInputCommandInteraction, Guild, RESTPostAPIChatInputApplicationCommandsJSONBody } from "discord.js";
|
|
2
|
+
import { DiscordContext } from "./bot.js";
|
|
4
3
|
export interface Command {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
requiredRoles?: string[];
|
|
5
|
+
command: RESTPostAPIChatInputApplicationCommandsJSONBody;
|
|
6
|
+
run: (context: CommandContext, interaction: ChatInputCommandInteraction) => void | Promise<void>;
|
|
8
7
|
}
|
|
9
8
|
export interface CommandContext {
|
|
10
|
-
|
|
9
|
+
guild: Guild;
|
|
11
10
|
}
|
|
12
|
-
export type CommandHook = (context: CommandContext, interaction: ChatInputCommandInteraction) => Promise<boolean
|
|
11
|
+
export type CommandHook = (context: CommandContext, interaction: ChatInputCommandInteraction) => Promise<boolean>;
|
|
13
12
|
export declare class CommandManager {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
13
|
+
#private;
|
|
14
|
+
private discord;
|
|
15
|
+
constructor(discord: DiscordContext);
|
|
16
|
+
add(command: Command): void;
|
|
17
|
+
setGlobalPreRunHook(hook: CommandHook): void;
|
|
18
|
+
_register(): Promise<void>;
|
|
19
|
+
_listen(): void;
|
|
20
|
+
private checkRoles;
|
|
21
|
+
private interactionReply;
|
|
23
22
|
}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import { Client, ClientEvents } from "discord.js"
|
|
2
|
-
import { DiscordContext } from "./bot.js"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Client, ClientEvents, Events } from "discord.js";
|
|
2
|
+
import { DiscordContext } from "./bot.js";
|
|
3
|
+
type ValidEvents = Exclude<Events, Events.VoiceServerUpdate | Events.Raw>;
|
|
4
|
+
export interface Event<N extends ValidEvents = ValidEvents> {
|
|
5
|
+
event: N;
|
|
6
|
+
handler: (context: EventContext, ...args: ClientEvents[N]) => Promise<void>;
|
|
6
7
|
}
|
|
7
8
|
export interface EventContext {
|
|
8
|
-
|
|
9
|
+
client: Client;
|
|
9
10
|
}
|
|
10
11
|
export declare class EventManager {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
private discord;
|
|
13
|
+
constructor(discord: DiscordContext);
|
|
14
|
+
add<N extends ValidEvents>(event: Event<N>): void;
|
|
14
15
|
}
|
|
16
|
+
export {};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Bot } from "./bot.js"
|
|
2
|
-
export { Command, CommandContext, CommandHook } from "./command-manager.js"
|
|
3
|
-
export { Event, EventContext } from "./event-manager.js"
|
|
4
|
-
export { getChannel, isCategoryChannel, isTextChannel, throwError } from "./util.js"
|
|
1
|
+
export { Bot } from "./bot.js";
|
|
2
|
+
export type { Command, CommandContext, CommandHook } from "./command-manager.js";
|
|
3
|
+
export type { Event, EventContext } from "./event-manager.js";
|
|
4
|
+
export { getChannel, isCategoryChannel, isTextChannel, throwError } from "./util.js";
|
package/dist/types/util.d.ts
CHANGED
|
@@ -1,16 +1,7 @@
|
|
|
1
|
-
import { APIPartialChannel, BaseChannel, CategoryChannel, ChannelType, Guild, NonThreadGuildBasedChannel, TextChannel } from "discord.js"
|
|
2
|
-
type NonThreadGuildBasedChannelType =
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
declare function getChannel<T extends NonThreadGuildBasedChannel>(
|
|
9
|
-
guild: Guild,
|
|
10
|
-
channelNameOrId: string,
|
|
11
|
-
channelType: NonThreadGuildBasedChannelType,
|
|
12
|
-
): Promise<T | undefined>
|
|
13
|
-
declare function isTextChannel(channel: BaseChannel | APIPartialChannel): channel is TextChannel
|
|
14
|
-
declare function isCategoryChannel(channel: BaseChannel): channel is CategoryChannel
|
|
15
|
-
declare function throwError(error: string): never
|
|
16
|
-
export { getChannel, isTextChannel, isCategoryChannel, throwError }
|
|
1
|
+
import { APIPartialChannel, BaseChannel, CategoryChannel, ChannelType, Guild, NonThreadGuildBasedChannel, TextChannel } from "discord.js";
|
|
2
|
+
type NonThreadGuildBasedChannelType = ChannelType.GuildText | ChannelType.GuildVoice | ChannelType.GuildAnnouncement | ChannelType.GuildStageVoice | ChannelType.GuildCategory;
|
|
3
|
+
declare function getChannel<T extends NonThreadGuildBasedChannel>(guild: Guild, channelNameOrId: string, channelType: NonThreadGuildBasedChannelType): Promise<T>;
|
|
4
|
+
declare function isTextChannel(channel: BaseChannel | APIPartialChannel): channel is TextChannel;
|
|
5
|
+
declare function isCategoryChannel(channel: BaseChannel): channel is CategoryChannel;
|
|
6
|
+
declare function throwError(error: string): never;
|
|
7
|
+
export { getChannel, isCategoryChannel, isTextChannel, throwError };
|
package/dist/util.js
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
|
-
import { ChannelType } from "discord.js"
|
|
1
|
+
import { ChannelType, } from "discord.js";
|
|
2
2
|
async function getChannel(guild, channelNameOrId, channelType) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
const channels = await guild.channels.fetch();
|
|
4
|
+
let channel;
|
|
5
|
+
channel = channels.find((channel) => (channel ? channel.name === channelNameOrId : false));
|
|
6
|
+
if (channel && channel.type === channelType)
|
|
7
|
+
return channel;
|
|
8
|
+
channel = channels.get(channelNameOrId);
|
|
9
|
+
if (channel && channel.type === channelType)
|
|
10
|
+
return channel;
|
|
11
|
+
throw new Error(`Unable to get channel: ${channelNameOrId}`);
|
|
9
12
|
}
|
|
10
13
|
function isTextChannel(channel) {
|
|
11
|
-
|
|
14
|
+
return channel.type === ChannelType.GuildText;
|
|
12
15
|
}
|
|
13
16
|
function isCategoryChannel(channel) {
|
|
14
|
-
|
|
17
|
+
return channel.type === ChannelType.GuildCategory;
|
|
15
18
|
}
|
|
16
19
|
function throwError(error) {
|
|
17
|
-
|
|
20
|
+
throw new Error(error);
|
|
18
21
|
}
|
|
19
|
-
export { getChannel,
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
export { getChannel, isCategoryChannel, isTextChannel, throwError };
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxXQUFXLEdBSVosTUFBTSxZQUFZLENBQUE7QUFTbkIsS0FBSyxVQUFVLFVBQVUsQ0FDdkIsS0FBWSxFQUNaLGVBQXVCLEVBQ3ZCLFdBQTJDO0lBRTNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUU3QyxJQUFJLE9BQXNELENBQUE7SUFDMUQsT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUMxRixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVc7UUFBRSxPQUFPLE9BQVksQ0FBQTtJQUVoRSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUN2QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVc7UUFBRSxPQUFPLE9BQVksQ0FBQTtJQUVoRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixlQUFlLEVBQUUsQ0FBQyxDQUFBO0FBQzlELENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxPQUF3QztJQUM3RCxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxPQUFvQjtJQUM3QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLGFBQWEsQ0FBQTtBQUNuRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3hCLENBQUM7QUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "discord-bot-shared",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Modules for creating discord bots.",
|
|
6
6
|
"repository": "github:adamhl8/discord-bot-shared",
|
|
@@ -13,31 +13,28 @@
|
|
|
13
13
|
"README.md",
|
|
14
14
|
"LICENSE"
|
|
15
15
|
],
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"discord-api-types": "^0.37.23",
|
|
19
|
-
"discord.js": "^14.7.1"
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"discord.js": ">14.0.0"
|
|
20
18
|
},
|
|
21
19
|
"devDependencies": {
|
|
22
|
-
"@types/node": "^
|
|
23
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
24
|
-
"@typescript-eslint/parser": "^
|
|
25
|
-
"
|
|
26
|
-
"eslint
|
|
27
|
-
"eslint-
|
|
28
|
-
"eslint-plugin-
|
|
29
|
-
"eslint-plugin-
|
|
30
|
-
"
|
|
31
|
-
"prettier": "^2.
|
|
32
|
-
"prettier-plugin-
|
|
33
|
-
"prettier-plugin-
|
|
34
|
-
"
|
|
35
|
-
"typescript": "^4.9.4"
|
|
20
|
+
"@types/node": "^20.5.1",
|
|
21
|
+
"@typescript-eslint/eslint-plugin": "^6.4.0",
|
|
22
|
+
"@typescript-eslint/parser": "^6.4.0",
|
|
23
|
+
"discord.js": "^14.13.0",
|
|
24
|
+
"eslint": "^8.47.0",
|
|
25
|
+
"eslint-config-prettier": "^9.0.0",
|
|
26
|
+
"eslint-plugin-sonarjs": "^0.20.0",
|
|
27
|
+
"eslint-plugin-unicorn": "^48.0.1",
|
|
28
|
+
"prettier": "^3.0.2",
|
|
29
|
+
"prettier-plugin-organize-imports": "^3.2.3",
|
|
30
|
+
"prettier-plugin-pkg": "^0.18.0",
|
|
31
|
+
"prettier-plugin-sh": "^0.13.1",
|
|
32
|
+
"typescript": "^5.1.6"
|
|
36
33
|
},
|
|
37
34
|
"scripts": {
|
|
38
|
-
"build": "rm -rf dist &&
|
|
35
|
+
"build": "rm -rf dist && tsc",
|
|
39
36
|
"format": "prettier --write .",
|
|
40
|
-
"lint": "eslint
|
|
37
|
+
"lint": "eslint ./src/",
|
|
41
38
|
"prepublish": "pnpm build"
|
|
42
39
|
}
|
|
43
40
|
}
|