discord-bot-shared 0.8.1 → 0.9.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/dist/bot.js ADDED
@@ -0,0 +1,26 @@
1
+ import { REST } from "@discordjs/rest"
2
+ import { Client } from "discord.js"
3
+ import { CommandManager } from "./command-manager.js"
4
+ import { EventManager } from "./event-manager.js"
5
+ export class Bot {
6
+ #discord
7
+ commands
8
+ events
9
+ constructor(options) {
10
+ this.#discord = {
11
+ applicationId: options.applicationId,
12
+ token: options.token,
13
+ client: new Client(options.clientOptions),
14
+ rest: new REST().setToken(options.token),
15
+ }
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
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2JvdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDdEMsT0FBTyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxZQUFZLENBQUE7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQWVqRCxNQUFNLE9BQU8sR0FBRztJQUNkLFFBQVEsQ0FBZ0I7SUFFZixRQUFRLENBQWdCO0lBQ3hCLE1BQU0sQ0FBYztJQUU3QixZQUFZLE9BQW1CO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWE7WUFDcEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3pDLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ3pDLENBQUE7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFBO1FBRXpFLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRXZCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkQsQ0FBQztDQUNGIn0=
@@ -0,0 +1,65 @@
1
+ import { Routes } from "discord-api-types/v10"
2
+ import { Collection } from "discord.js"
3
+ export class CommandManager {
4
+ discord
5
+ #commands = new Collection()
6
+ #globalPreRunHook
7
+ constructor(discord) {
8
+ this.discord = discord
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")
16
+ }
17
+ this.#commands.set(command.command.name, command)
18
+ }
19
+ setGlobalPreRunHook(hook) {
20
+ this.#globalPreRunHook = hook
21
+ }
22
+ async _register() {
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,
40
+ }
41
+ const shouldContinue = this.#globalPreRunHook ? await this.#globalPreRunHook(context, interaction) : true
42
+ if (!shouldContinue) return
43
+ await command.run(context, interaction)
44
+ } catch (error) {
45
+ const errorMessage = error instanceof Error ? error.message : ""
46
+ this.interactionReply(interaction, `There was an error while running this command.\n${errorMessage}`)
47
+ }
48
+ })
49
+ }
50
+ async checkRoles(command, interaction) {
51
+ if (!command.requiredRoles) return true
52
+ if (command.requiredRoles.length > 0) {
53
+ const member = await interaction.guild?.members.fetch(interaction.user).catch(console.error)
54
+ if (!member) return
55
+ return member.roles.cache.some((role) => (command.requiredRoles ? command.requiredRoles.includes(role.name) : false))
56
+ }
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
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1hbmQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1ELE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQy9GLE9BQU8sRUFBK0IsVUFBVSxFQUFTLE1BQU0sWUFBWSxDQUFBO0FBZTNFLE1BQU0sT0FBTyxjQUFjO0lBSUw7SUFIcEIsU0FBUyxHQUFHLElBQUksVUFBVSxFQUFtQixDQUFBO0lBQzdDLGlCQUFpQixDQUFjO0lBRS9CLFlBQW9CLE9BQXVCO1FBQXZCLFlBQU8sR0FBUCxPQUFPLENBQWdCO0lBQUcsQ0FBQztJQUUvQzs7T0FFRztJQUNILEdBQUcsQ0FBQyxPQUFnQjtRQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1NBQy9DO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQWlCO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUE7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTO1FBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUNwRSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJ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
@@ -0,0 +1,18 @@
1
+ export class EventManager {
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.name, (...args) => {
11
+ const context = {
12
+ client: this.discord.client,
13
+ }
14
+ void event.handler(context, ...args).catch(console.error)
15
+ })
16
+ }
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ldmVudC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sT0FBTyxZQUFZO0lBQ0g7SUFBcEIsWUFBb0IsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7SUFBRyxDQUFDO0lBRS9DOztPQUVHO0lBQ0gsR0FBRyxDQUErQixLQUFlO1FBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUM3QyxNQUFNLE9BQU8sR0FBRztnQkFDZCxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2FBQzVCLENBQUE7WUFDRCxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUMzRCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiJ9
package/dist/index.js CHANGED
@@ -1,29 +1,3 @@
1
- import { Client, Collection } from "discord.js"
2
- import registerInteractionCreate from "./events/interaction-create.js"
3
- import registerReady from "./events/ready.js"
4
- import Guild from "./guild.js"
5
- import registerCommands from "./register-commands.js"
6
- import registerEvents from "./register-events.js"
7
- const botToken = process.env.BOT_TOKEN || ""
8
- const clientId = process.env.CLIENT_ID || ""
9
- async function login(botIntents, commands, events, interactionCheck) {
10
- console.log("Logging in...")
11
- const bot = new Client(botIntents)
12
- await registerCommands(botToken, clientId, commands)
13
- registerEvents(bot, events)
14
- // Register default/built-in events
15
- registerReady(bot)
16
- registerInteractionCreate(bot, commands, interactionCheck)
17
- await bot.login(botToken)
18
- console.log("Logged in.")
19
- const partialGuilds = await bot.guilds.fetch()
20
- const guildPromises = partialGuilds.map((guildPartial) => guildPartial.fetch())
21
- const guilds = await Promise.all(guildPromises)
22
- const GuildCollection = new Collection()
23
- for (const guild of guilds) GuildCollection.set(guild.id, new Guild(guild.id, guild))
24
- return { GuildCollection, bot }
25
- }
26
- export default login
27
- export { default as Guild } from "./guild.js"
28
- export { isCategoryChannel, isTextChannel, throwError } from "./util.js"
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBaUIsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzlELE9BQU8seUJBQStDLE1BQU0sZ0NBQWdDLENBQUE7QUFDNUYsT0FBTyxhQUFhLE1BQU0sbUJBQW1CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFBO0FBQzlCLE9BQU8sZ0JBQThCLE1BQU0sd0JBQXdCLENBQUE7QUFDbkUsT0FBTyxjQUEwQixNQUFNLHNCQUFzQixDQUFBO0FBRTdELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQTtBQUM1QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUE7QUFFNUMsS0FBSyxVQUFVLEtBQUssQ0FBQyxVQUF5QixFQUFFLFFBQWtCLEVBQUUsTUFBYyxFQUFFLGdCQUFtQztJQUNySCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBRTVCLE1BQU0sR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2xDLE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUNwRCxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBRTNCLG1DQUFtQztJQUNuQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbEIseUJBQXlCLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0lBRTFELE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRXpCLE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUM5QyxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUMvRSxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDL0MsTUFBTSxlQUFlLEdBQUcsSUFBSSxVQUFVLEVBQWlCLENBQUE7SUFDdkQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNO1FBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUVyRixPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFBO0FBQ2pDLENBQUM7QUFFRCxlQUFlLEtBQUssQ0FBQTtBQUVwQixPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUU3QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQSJ9
1
+ export { Bot } from "./bot.js"
2
+ export { getChannel, isCategoryChannel, isTextChannel, throwError } from "./util.js"
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUc5QixPQUFPLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUEifQ==
@@ -0,0 +1,22 @@
1
+ import { REST } from "@discordjs/rest"
2
+ import { Client, ClientOptions } from "discord.js"
3
+ import { CommandManager } from "./command-manager.js"
4
+ import { EventManager } from "./event-manager.js"
5
+ export interface BotOptions {
6
+ applicationId: string
7
+ token: string
8
+ clientOptions: ClientOptions
9
+ }
10
+ export interface DiscordContext {
11
+ applicationId: string
12
+ token: string
13
+ client: Client
14
+ rest: REST
15
+ }
16
+ export declare class Bot {
17
+ #private
18
+ readonly commands: CommandManager
19
+ readonly events: EventManager
20
+ constructor(options: BotOptions)
21
+ login(): Promise<void>
22
+ }
@@ -0,0 +1,23 @@
1
+ import { RESTPostAPIChatInputApplicationCommandsJSONBody } from "discord-api-types/v10"
2
+ import { ChatInputCommandInteraction, Guild } from "discord.js"
3
+ import { DiscordContext } from "./bot.js"
4
+ export interface Command {
5
+ requiredRoles?: string[]
6
+ command: RESTPostAPIChatInputApplicationCommandsJSONBody
7
+ run: (context: CommandContext, interaction: ChatInputCommandInteraction) => void | Promise<void>
8
+ }
9
+ export interface CommandContext {
10
+ guild: Guild
11
+ }
12
+ export type CommandHook = (context: CommandContext, interaction: ChatInputCommandInteraction) => Promise<boolean>
13
+ export declare class CommandManager {
14
+ #private
15
+ private discord
16
+ constructor(discord: DiscordContext)
17
+ add(command: Command): void
18
+ setGlobalPreRunHook(hook: CommandHook): void
19
+ _register(): Promise<void>
20
+ _listen(): void
21
+ private checkRoles
22
+ private interactionReply
23
+ }
@@ -0,0 +1,14 @@
1
+ import { Client, ClientEvents } from "discord.js"
2
+ import { DiscordContext } from "./bot.js"
3
+ export interface Event<K extends keyof ClientEvents> {
4
+ name: K
5
+ handler: (context: EventContext, ...args: ClientEvents[K]) => Promise<void>
6
+ }
7
+ export interface EventContext {
8
+ client: Client
9
+ }
10
+ export declare class EventManager {
11
+ private discord
12
+ constructor(discord: DiscordContext)
13
+ add<K extends keyof ClientEvents>(event: Event<K>): void
14
+ }
@@ -1,19 +1,4 @@
1
- import { Client, ClientOptions, Collection } from "discord.js"
2
- import { InteractionCheck } from "./events/interaction-create.js"
3
- import Guild from "./guild.js"
4
- import { Commands } from "./register-commands.js"
5
- import { Events } from "./register-events.js"
6
- declare function login(
7
- botIntents: ClientOptions,
8
- commands: Commands,
9
- events: Events,
10
- interactionCheck?: InteractionCheck,
11
- ): Promise<{
12
- GuildCollection: Collection<string, Guild>
13
- bot: Client<boolean>
14
- }>
15
- export default login
16
- export { InteractionCheck } from "./events/interaction-create.js"
17
- export { default as Guild } from "./guild.js"
18
- export { Command } from "./register-commands.js"
19
- export { isCategoryChannel, isTextChannel, throwError } from "./util.js"
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,5 +1,16 @@
1
- import { APIPartialChannel, BaseChannel, CategoryChannel, TextChannel } from "discord.js"
1
+ import { APIPartialChannel, BaseChannel, CategoryChannel, ChannelType, Guild, NonThreadGuildBasedChannel, TextChannel } from "discord.js"
2
+ type NonThreadGuildBasedChannelType =
3
+ | ChannelType.GuildText
4
+ | ChannelType.GuildVoice
5
+ | ChannelType.GuildNews
6
+ | ChannelType.GuildStageVoice
7
+ | ChannelType.GuildCategory
8
+ declare function getChannel<T extends NonThreadGuildBasedChannel>(
9
+ guild: Guild,
10
+ channelNameOrId: string,
11
+ channelType: NonThreadGuildBasedChannelType,
12
+ ): Promise<T | undefined>
2
13
  declare function isTextChannel(channel: BaseChannel | APIPartialChannel): channel is TextChannel
3
14
  declare function isCategoryChannel(channel: BaseChannel): channel is CategoryChannel
4
15
  declare function throwError(error: string): never
5
- export { isTextChannel, isCategoryChannel, throwError }
16
+ export { getChannel, isTextChannel, isCategoryChannel, throwError }
package/dist/util.js CHANGED
@@ -1,4 +1,12 @@
1
1
  import { ChannelType } from "discord.js"
2
+ async function getChannel(guild, channelNameOrId, channelType) {
3
+ const channels = await guild.channels.fetch()
4
+ let channel
5
+ channel = channels.find((channel) => (channel ? channel.name === channelNameOrId : false))
6
+ if (channel) return channel.type === channelType ? channel : undefined
7
+ channel = channels.get(channelNameOrId)
8
+ if (channel) return channel.type === channelType ? channel : undefined
9
+ }
2
10
  function isTextChannel(channel) {
3
11
  return channel.type === ChannelType.GuildText
4
12
  }
@@ -8,5 +16,5 @@ function isCategoryChannel(channel) {
8
16
  function throwError(error) {
9
17
  throw new Error(error)
10
18
  }
11
- export { isTextChannel, isCategoryChannel, throwError }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUQsV0FBVyxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBRXRHLFNBQVMsYUFBYSxDQUFDLE9BQXdDO0lBQzdELE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFBO0FBQy9DLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLE9BQW9CO0lBQzdDLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsYUFBYSxDQUFBO0FBQ25ELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhO0lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDeEIsQ0FBQztBQUVELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLENBQUEifQ==
19
+ export { getChannel, isTextChannel, isCategoryChannel, throwError }
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUQsV0FBVyxFQUFrRCxNQUFNLFlBQVksQ0FBQTtBQVN6SSxLQUFLLFVBQVUsVUFBVSxDQUN2QixLQUFZLEVBQ1osZUFBdUIsRUFDdkIsV0FBMkM7SUFFM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBRTdDLElBQUksT0FBc0QsQ0FBQTtJQUMxRCxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzFGLElBQUksT0FBTztRQUFFLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLE9BQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBRTdFLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQ3ZDLElBQUksT0FBTztRQUFFLE9BQU8sT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFFLE9BQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0FBQy9FLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxPQUF3QztJQUM3RCxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLFNBQVMsQ0FBQTtBQUMvQyxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxPQUFvQjtJQUM3QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLGFBQWEsQ0FBQTtBQUNuRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYTtJQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ3hCLENBQUM7QUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsQ0FBQSJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "discord-bot-shared",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "description": "Modules for creating discord bots.",
6
6
  "repository": "github:adamhl8/discord-bot-shared",
@@ -1,33 +0,0 @@
1
- function registerInteractionCreate(bot, commands, interactionCheck) {
2
- bot.on("interactionCreate", async (interaction) => {
3
- if (!interaction.isChatInputCommand()) return
4
- const command = commands[interaction.commandName]
5
- if (!command) return interactionReply(interaction, "Unable to get command.")
6
- if (!(await checkRoles(command, interaction)))
7
- return interactionReply(interaction, "You do not have one of the required roles to run this command.")
8
- try {
9
- const interactionCheckPassed = interactionCheck ? await interactionCheck(interaction) : true
10
- if (!interactionCheckPassed) return
11
- await command.run(interaction)
12
- } catch (error) {
13
- const errorMessage = error instanceof Error ? error.message : ""
14
- interactionReply(interaction, `There was an error while running this command.\n${errorMessage}`)
15
- }
16
- })
17
- }
18
- async function checkRoles(command, interaction) {
19
- if (!command.requiredRoles) return true
20
- if (command.requiredRoles.length > 0) {
21
- const member = await interaction.guild?.members.fetch(interaction.user).catch(console.error)
22
- if (!member) return
23
- return member.roles.cache.some((role) => (command.requiredRoles ? command.requiredRoles.includes(role.name) : false))
24
- }
25
- return false
26
- }
27
- function interactionReply(interaction, message) {
28
- interaction.deferred
29
- ? void interaction.editReply(message).catch(console.error)
30
- : void interaction.reply({ content: message, ephemeral: true }).catch(console.error)
31
- }
32
- export default registerInteractionCreate
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb24tY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9pbnRlcmFjdGlvbi1jcmVhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsU0FBUyx5QkFBeUIsQ0FBQyxHQUFXLEVBQUUsUUFBa0IsRUFBRSxnQkFBbUM7SUFDckcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtZQUFFLE9BQU07UUFFN0MsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNqRCxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxFQUFFLHdCQUF3QixDQUFDLENBQUE7UUFFNUUsSUFBSSxDQUFDLENBQUMsTUFBTSxVQUFVLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLE9BQU8sZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGdFQUFnRSxDQUFDLENBQUE7UUFFeEcsSUFBSTtZQUNGLE1BQU0sc0JBQXNCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtZQUM1RixJQUFJLENBQUMsc0JBQXNCO2dCQUFFLE9BQU07WUFFbkMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1NBQy9CO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDaEUsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLG1EQUFtRCxZQUFZLEVBQUUsQ0FBQyxDQUFBO1NBQ2pHO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsS0FBSyxVQUFVLFVBQVUsQ0FBQyxPQUFnQixFQUFFLFdBQXdDO0lBQ2xGLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYTtRQUFFLE9BQU8sSUFBSSxDQUFBO0lBRXZDLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzVGLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTTtRQUVuQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7S0FDdEg7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFdBQXdDLEVBQUUsT0FBZTtJQUNqRixXQUFXLENBQUMsUUFBUTtRQUNsQixDQUFDLENBQUMsS0FBSyxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzFELENBQUMsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDeEYsQ0FBQztBQUVELGVBQWUseUJBQXlCLENBQUEifQ==
@@ -1,7 +0,0 @@
1
- function registerReady(bot) {
2
- bot.once("ready", () => {
3
- console.log("Client is ready.")
4
- })
5
- }
6
- export default registerReady
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnRzL3JlYWR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLFNBQVMsYUFBYSxDQUFDLEdBQVc7SUFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUNqQyxDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRCxlQUFlLGFBQWEsQ0FBQSJ9
package/dist/guild.js DELETED
@@ -1,30 +0,0 @@
1
- class Guild {
2
- id
3
- guild
4
- constructor(id, guild) {
5
- this.id = id
6
- this.guild = guild
7
- }
8
- get members() {
9
- return this.guild.members.fetch()
10
- }
11
- get channels() {
12
- return this.guild.channels.fetch()
13
- }
14
- get roles() {
15
- return this.guild.roles.fetch()
16
- }
17
- get emojis() {
18
- return this.guild.emojis.fetch()
19
- }
20
- async getChannel(channelNameOrId, channelType) {
21
- const channels = await this.channels
22
- let channel
23
- channel = channels.find((channel) => (channel ? channel.name === channelNameOrId : false))
24
- if (channel) return channel.type === channelType ? channel : undefined
25
- channel = channels.get(channelNameOrId)
26
- if (channel) return channel.type === channelType ? channel : undefined
27
- }
28
- }
29
- export default Guild
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZ3VpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxLQUFLO0lBQ0EsRUFBRSxDQUFRO0lBQ1YsS0FBSyxDQUFVO0lBRXhCLFlBQVksRUFBVSxFQUFFLEtBQWU7UUFDckMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUE7UUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNqQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FDZCxlQUF1QixFQUN2QixXQUEyQztRQUUzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUE7UUFFcEMsSUFBSSxPQUFzRCxDQUFBO1FBQzFELE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDMUYsSUFBSSxPQUFPO1lBQUUsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUUsT0FBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7UUFFN0UsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDdkMsSUFBSSxPQUFPO1lBQUUsT0FBTyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUUsT0FBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDL0UsQ0FBQztDQUNGO0FBRUQsZUFBZSxLQUFLLENBQUEifQ==
@@ -1,10 +0,0 @@
1
- import { REST } from "@discordjs/rest"
2
- import { Routes } from "discord-api-types/v10"
3
- async function registerCommands(botToken, clientId, commands) {
4
- const commandData = Object.values(commands).map((command) => command.command.toJSON())
5
- const rest = new REST().setToken(botToken)
6
- await rest.put(Routes.applicationCommands(clientId), { body: commandData })
7
- console.log("Registered (/) commands.")
8
- }
9
- export default registerCommands
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVnaXN0ZXItY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQWE5QyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFFLFFBQWtCO0lBQ3BGLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFFdEYsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDMUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtBQUN6QyxDQUFDO0FBRUQsZUFBZSxnQkFBZ0IsQ0FBQSJ9
@@ -1,6 +0,0 @@
1
- function registerEvents(bot, events) {
2
- for (const registerEvent of Object.values(events)) registerEvent(bot)
3
- console.log("Registered events.")
4
- }
5
- export default registerEvents
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlZ2lzdGVyLWV2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxTQUFTLGNBQWMsQ0FBQyxHQUFXLEVBQUUsTUFBYztJQUNqRCxLQUFLLE1BQU0sYUFBYSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtBQUNuQyxDQUFDO0FBRUQsZUFBZSxjQUFjLENBQUEifQ==
@@ -1,6 +0,0 @@
1
- import { ChatInputCommandInteraction, Client } from "discord.js"
2
- import { Commands } from "../register-commands.js"
3
- type InteractionCheck = (interaction: ChatInputCommandInteraction) => Promise<boolean | void>
4
- declare function registerInteractionCreate(bot: Client, commands: Commands, interactionCheck?: InteractionCheck): void
5
- export default registerInteractionCreate
6
- export { InteractionCheck }
@@ -1,3 +0,0 @@
1
- import { Client } from "discord.js"
2
- declare function registerReady(bot: Client): void
3
- export default registerReady
@@ -1,21 +0,0 @@
1
- import { ChannelType, Guild as djsGuild, NonThreadGuildBasedChannel } from "discord.js"
2
- type NonThreadGuildBasedChannelType =
3
- | ChannelType.GuildText
4
- | ChannelType.GuildVoice
5
- | ChannelType.GuildNews
6
- | ChannelType.GuildStageVoice
7
- | ChannelType.GuildCategory
8
- declare class Guild {
9
- readonly id: string
10
- readonly guild: djsGuild
11
- constructor(id: string, guild: djsGuild)
12
- get members(): Promise<import("@discordjs/collection").Collection<string, import("discord.js").GuildMember>>
13
- get channels(): Promise<import("@discordjs/collection").Collection<string, NonThreadGuildBasedChannel | null>>
14
- get roles(): Promise<import("@discordjs/collection").Collection<string, import("discord.js").Role>>
15
- get emojis(): Promise<import("@discordjs/collection").Collection<string, import("discord.js").GuildEmoji>>
16
- getChannel<T extends NonThreadGuildBasedChannel>(
17
- channelNameOrId: string,
18
- channelType: NonThreadGuildBasedChannelType,
19
- ): Promise<T | undefined>
20
- }
21
- export default Guild
@@ -1,12 +0,0 @@
1
- import { ChatInputCommandInteraction, SlashCommandBuilder } from "discord.js"
2
- interface Command {
3
- requiredRoles?: string[]
4
- command: SlashCommandBuilder
5
- run: (interaction: ChatInputCommandInteraction) => void | Promise<void>
6
- }
7
- interface Commands {
8
- [name: string]: Command
9
- }
10
- declare function registerCommands(botToken: string, clientId: string, commands: Commands): Promise<void>
11
- export default registerCommands
12
- export { Command, Commands }
@@ -1,8 +0,0 @@
1
- import { Client } from "discord.js"
2
- type Event = (bot: Client) => void
3
- interface Events {
4
- [name: string]: Event
5
- }
6
- declare function registerEvents(bot: Client, events: Events): void
7
- export default registerEvents
8
- export { Event, Events }