@mostfeatured/dbi 0.1.46 → 0.2.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/src/DBI.d.ts.map +1 -0
- package/dist/src/DBI.js.map +1 -0
- package/dist/src/Events.d.ts.map +1 -0
- package/dist/src/Events.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/methods/handleMessageCommands.d.ts.map +1 -0
- package/dist/src/methods/handleMessageCommands.js.map +1 -0
- package/dist/src/methods/hookEventListeners.d.ts.map +1 -0
- package/dist/src/methods/hookEventListeners.js.map +1 -0
- package/dist/src/methods/hookInteractionListeners.d.ts.map +1 -0
- package/dist/{methods → src/methods}/hookInteractionListeners.js +22 -12
- package/dist/src/methods/hookInteractionListeners.js.map +1 -0
- package/dist/src/methods/publishInteractions.d.ts.map +1 -0
- package/dist/src/methods/publishInteractions.js.map +1 -0
- package/dist/src/types/ApplicationRoleConnectionMetadata.d.ts.map +1 -0
- package/dist/src/types/ApplicationRoleConnectionMetadata.js.map +1 -0
- package/dist/src/types/Builders/ButtonBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/ButtonBuilder.js.map +1 -0
- package/dist/src/types/Builders/ChannelSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/ChannelSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/MentionableSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/MentionableSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/ModalBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/ModalBuilder.js.map +1 -0
- package/dist/src/types/Builders/RoleSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/RoleSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/StringSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/StringSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/Builders/UserSelectMenuBuilder.d.ts.map +1 -0
- package/dist/src/types/Builders/UserSelectMenuBuilder.js.map +1 -0
- package/dist/src/types/ChatInput/ChatInput.d.ts.map +1 -0
- package/dist/src/types/ChatInput/ChatInput.js.map +1 -0
- package/dist/{types → src/types}/ChatInput/ChatInputOptions.d.ts +2 -2
- package/dist/src/types/ChatInput/ChatInputOptions.d.ts.map +1 -0
- package/dist/src/types/ChatInput/ChatInputOptions.js.map +1 -0
- package/dist/src/types/Components/Button.d.ts.map +1 -0
- package/dist/src/types/Components/Button.js.map +1 -0
- package/dist/src/types/Components/ChannelSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/ChannelSelectMenu.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.d.ts +91 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.js +300 -0
- package/dist/src/types/Components/HTMLComponentsV2/index.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/parser.d.ts.map +1 -0
- package/dist/{types → src/types}/Components/HTMLComponentsV2/parser.js +11 -4
- package/dist/src/types/Components/HTMLComponentsV2/parser.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.d.ts +35 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js +822 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.d.ts +24 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.d.ts.map +1 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js +294 -0
- package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js.map +1 -0
- package/dist/src/types/Components/MentionableSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/MentionableSelectMenu.js.map +1 -0
- package/dist/src/types/Components/Modal.d.ts.map +1 -0
- package/dist/src/types/Components/Modal.js.map +1 -0
- package/dist/src/types/Components/RoleSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/RoleSelectMenu.js.map +1 -0
- package/dist/src/types/Components/StringSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/StringSelectMenu.js.map +1 -0
- package/dist/src/types/Components/UserSelectMenu.d.ts.map +1 -0
- package/dist/src/types/Components/UserSelectMenu.js.map +1 -0
- package/dist/src/types/Event.d.ts.map +1 -0
- package/dist/src/types/Event.js.map +1 -0
- package/dist/src/types/Interaction.d.ts.map +1 -0
- package/dist/src/types/Interaction.js.map +1 -0
- package/dist/src/types/other/CustomEvent.d.ts.map +1 -0
- package/dist/src/types/other/CustomEvent.js.map +1 -0
- package/dist/src/types/other/FakeMessageInteraction.d.ts.map +1 -0
- package/dist/src/types/other/FakeMessageInteraction.js.map +1 -0
- package/dist/src/types/other/InteractionLocale.d.ts.map +1 -0
- package/dist/src/types/other/InteractionLocale.js.map +1 -0
- package/dist/src/types/other/Locale.d.ts.map +1 -0
- package/dist/src/types/other/Locale.js.map +1 -0
- package/dist/src/types/other/MessageContextMenu.d.ts.map +1 -0
- package/dist/src/types/other/MessageContextMenu.js.map +1 -0
- package/dist/src/types/other/UserContextMenu.d.ts.map +1 -0
- package/dist/src/types/other/UserContextMenu.js.map +1 -0
- package/dist/src/utils/MemoryStore.d.ts.map +1 -0
- package/dist/src/utils/MemoryStore.js.map +1 -0
- package/dist/src/utils/UtilTypes.d.ts.map +1 -0
- package/dist/src/utils/UtilTypes.js.map +1 -0
- package/dist/src/utils/customId.d.ts.map +1 -0
- package/dist/src/utils/customId.js.map +1 -0
- package/dist/src/utils/permissions.d.ts.map +1 -0
- package/dist/src/utils/permissions.js.map +1 -0
- package/dist/src/utils/recursiveImport.d.ts.map +1 -0
- package/dist/src/utils/recursiveImport.js.map +1 -0
- package/dist/src/utils/recursiveUnload.d.ts.map +1 -0
- package/dist/src/utils/recursiveUnload.js.map +1 -0
- package/dist/src/utils/unloadModule.d.ts.map +1 -0
- package/dist/src/utils/unloadModule.js.map +1 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.d.ts.map +1 -0
- package/dist/test/index.js +103 -0
- package/dist/test/index.js.map +1 -0
- package/docs/ADVANCED_FEATURES.md +836 -0
- package/docs/API_REFERENCE.md +925 -0
- package/docs/CHAT_INPUT.md +807 -0
- package/docs/COMPONENTS.md +1035 -0
- package/docs/EVENTS.md +564 -0
- package/docs/GETTING_STARTED.md +394 -0
- package/docs/LOCALIZATION.md +773 -0
- package/docs/README.md +341 -0
- package/docs/SVELTE_COMPONENTS.md +955 -0
- package/generated/globals.d.ts +1 -0
- package/generated/index.d.ts +30 -0
- package/generated/svelte-dbi.d.ts +588 -0
- package/package.json +57 -47
- package/readme.md +168 -491
- package/src/methods/hookInteractionListeners.ts +23 -12
- package/src/types/Components/HTMLComponentsV2/index.ts +353 -12
- package/src/types/Components/HTMLComponentsV2/parser.ts +14 -4
- package/src/types/Components/HTMLComponentsV2/svelteParser.ts +904 -0
- package/src/types/Components/HTMLComponentsV2/svelteRenderer.ts +332 -0
- package/test/index.ts +105 -0
- package/test/product-showcase.svelte +199 -0
- package/tsconfig.json +13 -3
- package/dist/DBI.d.ts.map +0 -1
- package/dist/DBI.js.map +0 -1
- package/dist/Events.d.ts.map +0 -1
- package/dist/Events.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/methods/handleMessageCommands.d.ts.map +0 -1
- package/dist/methods/handleMessageCommands.js.map +0 -1
- package/dist/methods/hookEventListeners.d.ts.map +0 -1
- package/dist/methods/hookEventListeners.js.map +0 -1
- package/dist/methods/hookInteractionListeners.d.ts.map +0 -1
- package/dist/methods/hookInteractionListeners.js.map +0 -1
- package/dist/methods/publishInteractions.d.ts.map +0 -1
- package/dist/methods/publishInteractions.js.map +0 -1
- package/dist/types/ApplicationRoleConnectionMetadata.d.ts.map +0 -1
- package/dist/types/ApplicationRoleConnectionMetadata.js.map +0 -1
- package/dist/types/Builders/ButtonBuilder.d.ts.map +0 -1
- package/dist/types/Builders/ButtonBuilder.js.map +0 -1
- package/dist/types/Builders/ChannelSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/ChannelSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/MentionableSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/MentionableSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/ModalBuilder.d.ts.map +0 -1
- package/dist/types/Builders/ModalBuilder.js.map +0 -1
- package/dist/types/Builders/RoleSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/RoleSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/StringSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/StringSelectMenuBuilder.js.map +0 -1
- package/dist/types/Builders/UserSelectMenuBuilder.d.ts.map +0 -1
- package/dist/types/Builders/UserSelectMenuBuilder.js.map +0 -1
- package/dist/types/ChatInput/ChatInput.d.ts.map +0 -1
- package/dist/types/ChatInput/ChatInput.js.map +0 -1
- package/dist/types/ChatInput/ChatInputOptions.d.ts.map +0 -1
- package/dist/types/ChatInput/ChatInputOptions.js.map +0 -1
- package/dist/types/Components/Button.d.ts.map +0 -1
- package/dist/types/Components/Button.js.map +0 -1
- package/dist/types/Components/ChannelSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/ChannelSelectMenu.js.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/index.d.ts +0 -19
- package/dist/types/Components/HTMLComponentsV2/index.d.ts.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/index.js +0 -31
- package/dist/types/Components/HTMLComponentsV2/index.js.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/parser.d.ts.map +0 -1
- package/dist/types/Components/HTMLComponentsV2/parser.js.map +0 -1
- package/dist/types/Components/MentionableSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/MentionableSelectMenu.js.map +0 -1
- package/dist/types/Components/Modal.d.ts.map +0 -1
- package/dist/types/Components/Modal.js.map +0 -1
- package/dist/types/Components/RoleSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/RoleSelectMenu.js.map +0 -1
- package/dist/types/Components/StringSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/StringSelectMenu.js.map +0 -1
- package/dist/types/Components/UserSelectMenu.d.ts.map +0 -1
- package/dist/types/Components/UserSelectMenu.js.map +0 -1
- package/dist/types/Event.d.ts.map +0 -1
- package/dist/types/Event.js.map +0 -1
- package/dist/types/Interaction.d.ts.map +0 -1
- package/dist/types/Interaction.js.map +0 -1
- package/dist/types/other/CustomEvent.d.ts.map +0 -1
- package/dist/types/other/CustomEvent.js.map +0 -1
- package/dist/types/other/FakeMessageInteraction.d.ts.map +0 -1
- package/dist/types/other/FakeMessageInteraction.js.map +0 -1
- package/dist/types/other/InteractionLocale.d.ts.map +0 -1
- package/dist/types/other/InteractionLocale.js.map +0 -1
- package/dist/types/other/Locale.d.ts.map +0 -1
- package/dist/types/other/Locale.js.map +0 -1
- package/dist/types/other/MessageContextMenu.d.ts.map +0 -1
- package/dist/types/other/MessageContextMenu.js.map +0 -1
- package/dist/types/other/UserContextMenu.d.ts.map +0 -1
- package/dist/types/other/UserContextMenu.js.map +0 -1
- package/dist/utils/MemoryStore.d.ts.map +0 -1
- package/dist/utils/MemoryStore.js.map +0 -1
- package/dist/utils/UtilTypes.d.ts.map +0 -1
- package/dist/utils/UtilTypes.js.map +0 -1
- package/dist/utils/customId.d.ts.map +0 -1
- package/dist/utils/customId.js.map +0 -1
- package/dist/utils/permissions.d.ts.map +0 -1
- package/dist/utils/permissions.js.map +0 -1
- package/dist/utils/recursiveImport.d.ts.map +0 -1
- package/dist/utils/recursiveImport.js.map +0 -1
- package/dist/utils/recursiveUnload.d.ts.map +0 -1
- package/dist/utils/recursiveUnload.js.map +0 -1
- package/dist/utils/unloadModule.d.ts.map +0 -1
- package/dist/utils/unloadModule.js.map +0 -1
- package/examples/modal/dbi.js +0 -30
- package/examples/modal/login.js +0 -15
- package/examples/modal/package.json +0 -15
- package/examples/modal/publish.js +0 -13
- package/examples/modal/src/chatInput.js +0 -38
- package/examples/modal/src/components.js +0 -33
- package/examples/modal/src/event.js +0 -20
- package/examples/modal/src/interactionlocales.js +0 -24
- package/examples/modal/src/locales.js +0 -38
- package/examples/modal/src/modal.js +0 -28
- /package/dist/{DBI.d.ts → src/DBI.d.ts} +0 -0
- /package/dist/{DBI.js → src/DBI.js} +0 -0
- /package/dist/{Events.d.ts → src/Events.d.ts} +0 -0
- /package/dist/{Events.js → src/Events.js} +0 -0
- /package/dist/{data → src/data}/eventMap.json +0 -0
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{index.js → src/index.js} +0 -0
- /package/dist/{methods → src/methods}/handleMessageCommands.d.ts +0 -0
- /package/dist/{methods → src/methods}/handleMessageCommands.js +0 -0
- /package/dist/{methods → src/methods}/hookEventListeners.d.ts +0 -0
- /package/dist/{methods → src/methods}/hookEventListeners.js +0 -0
- /package/dist/{methods → src/methods}/hookInteractionListeners.d.ts +0 -0
- /package/dist/{methods → src/methods}/publishInteractions.d.ts +0 -0
- /package/dist/{methods → src/methods}/publishInteractions.js +0 -0
- /package/dist/{types → src/types}/ApplicationRoleConnectionMetadata.d.ts +0 -0
- /package/dist/{types → src/types}/ApplicationRoleConnectionMetadata.js +0 -0
- /package/dist/{types → src/types}/Builders/ButtonBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/ButtonBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/ChannelSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/ChannelSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/MentionableSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/MentionableSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/ModalBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/ModalBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/RoleSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/RoleSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/StringSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/StringSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/Builders/UserSelectMenuBuilder.d.ts +0 -0
- /package/dist/{types → src/types}/Builders/UserSelectMenuBuilder.js +0 -0
- /package/dist/{types → src/types}/ChatInput/ChatInput.d.ts +0 -0
- /package/dist/{types → src/types}/ChatInput/ChatInput.js +0 -0
- /package/dist/{types → src/types}/ChatInput/ChatInputOptions.js +0 -0
- /package/dist/{types → src/types}/Components/Button.d.ts +0 -0
- /package/dist/{types → src/types}/Components/Button.js +0 -0
- /package/dist/{types → src/types}/Components/ChannelSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/ChannelSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts +0 -0
- /package/dist/{types → src/types}/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js +0 -0
- /package/dist/{types → src/types}/Components/HTMLComponentsV2/parser.d.ts +0 -0
- /package/dist/{types → src/types}/Components/MentionableSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/MentionableSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/Modal.d.ts +0 -0
- /package/dist/{types → src/types}/Components/Modal.js +0 -0
- /package/dist/{types → src/types}/Components/RoleSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/RoleSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/StringSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/StringSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Components/UserSelectMenu.d.ts +0 -0
- /package/dist/{types → src/types}/Components/UserSelectMenu.js +0 -0
- /package/dist/{types → src/types}/Event.d.ts +0 -0
- /package/dist/{types → src/types}/Event.js +0 -0
- /package/dist/{types → src/types}/Interaction.d.ts +0 -0
- /package/dist/{types → src/types}/Interaction.js +0 -0
- /package/dist/{types → src/types}/other/CustomEvent.d.ts +0 -0
- /package/dist/{types → src/types}/other/CustomEvent.js +0 -0
- /package/dist/{types → src/types}/other/FakeMessageInteraction.d.ts +0 -0
- /package/dist/{types → src/types}/other/FakeMessageInteraction.js +0 -0
- /package/dist/{types → src/types}/other/InteractionLocale.d.ts +0 -0
- /package/dist/{types → src/types}/other/InteractionLocale.js +0 -0
- /package/dist/{types → src/types}/other/Locale.d.ts +0 -0
- /package/dist/{types → src/types}/other/Locale.js +0 -0
- /package/dist/{types → src/types}/other/MessageContextMenu.d.ts +0 -0
- /package/dist/{types → src/types}/other/MessageContextMenu.js +0 -0
- /package/dist/{types → src/types}/other/UserContextMenu.d.ts +0 -0
- /package/dist/{types → src/types}/other/UserContextMenu.js +0 -0
- /package/dist/{utils → src/utils}/MemoryStore.d.ts +0 -0
- /package/dist/{utils → src/utils}/MemoryStore.js +0 -0
- /package/dist/{utils → src/utils}/UtilTypes.d.ts +0 -0
- /package/dist/{utils → src/utils}/UtilTypes.js +0 -0
- /package/dist/{utils → src/utils}/customId.d.ts +0 -0
- /package/dist/{utils → src/utils}/customId.js +0 -0
- /package/dist/{utils → src/utils}/permissions.d.ts +0 -0
- /package/dist/{utils → src/utils}/permissions.js +0 -0
- /package/dist/{utils → src/utils}/recursiveImport.d.ts +0 -0
- /package/dist/{utils → src/utils}/recursiveImport.js +0 -0
- /package/dist/{utils → src/utils}/recursiveUnload.d.ts +0 -0
- /package/dist/{utils → src/utils}/recursiveUnload.js +0 -0
- /package/dist/{utils → src/utils}/unloadModule.d.ts +0 -0
- /package/dist/{utils → src/utils}/unloadModule.js +0 -0
|
@@ -0,0 +1,807 @@
|
|
|
1
|
+
# Chat Input Commands (Slash Commands)
|
|
2
|
+
|
|
3
|
+
This guide covers everything you need to know about creating slash commands with DBI.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Table of Contents
|
|
8
|
+
|
|
9
|
+
- [Basic Commands](#basic-commands)
|
|
10
|
+
- [Command Options](#command-options)
|
|
11
|
+
- [Subcommands](#subcommands)
|
|
12
|
+
- [Autocomplete](#autocomplete)
|
|
13
|
+
- [Permissions](#permissions)
|
|
14
|
+
- [Context Menus](#context-menus)
|
|
15
|
+
- [Execution Context](#execution-context)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Basic Commands
|
|
20
|
+
|
|
21
|
+
### Simple Command
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
dbi.register(({ ChatInput }) => {
|
|
25
|
+
ChatInput({
|
|
26
|
+
name: "hello",
|
|
27
|
+
description: "Say hello!",
|
|
28
|
+
|
|
29
|
+
onExecute({ interaction }) {
|
|
30
|
+
interaction.reply("Hello, World! 👋");
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Async Command
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
dbi.register(({ ChatInput }) => {
|
|
40
|
+
ChatInput({
|
|
41
|
+
name: "fetch-data",
|
|
42
|
+
description: "Fetch some data",
|
|
43
|
+
|
|
44
|
+
async onExecute({ interaction }) {
|
|
45
|
+
// Defer reply for long operations
|
|
46
|
+
await interaction.deferReply();
|
|
47
|
+
|
|
48
|
+
// Do async work
|
|
49
|
+
const data = await fetchSomeData();
|
|
50
|
+
|
|
51
|
+
// Edit the deferred reply
|
|
52
|
+
await interaction.editReply(`Data: ${data}`);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Command Options
|
|
61
|
+
|
|
62
|
+
DBI provides type-safe option builders through `ChatInputOptions`.
|
|
63
|
+
|
|
64
|
+
### String Options
|
|
65
|
+
|
|
66
|
+
```javascript
|
|
67
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
68
|
+
ChatInput({
|
|
69
|
+
name: "echo",
|
|
70
|
+
description: "Echo a message",
|
|
71
|
+
options: [
|
|
72
|
+
ChatInputOptions.string({
|
|
73
|
+
name: "message",
|
|
74
|
+
description: "The message to echo",
|
|
75
|
+
required: true,
|
|
76
|
+
minLength: 1,
|
|
77
|
+
maxLength: 2000
|
|
78
|
+
})
|
|
79
|
+
],
|
|
80
|
+
|
|
81
|
+
onExecute({ interaction }) {
|
|
82
|
+
const message = interaction.options.getString("message");
|
|
83
|
+
interaction.reply(message);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### String with Choices
|
|
90
|
+
|
|
91
|
+
```javascript
|
|
92
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
93
|
+
ChatInput({
|
|
94
|
+
name: "color",
|
|
95
|
+
description: "Pick a color",
|
|
96
|
+
options: [
|
|
97
|
+
ChatInputOptions.stringChoices({
|
|
98
|
+
name: "color",
|
|
99
|
+
description: "Choose your favorite color",
|
|
100
|
+
required: true,
|
|
101
|
+
choices: [
|
|
102
|
+
{ name: "Red", value: "red" },
|
|
103
|
+
{ name: "Green", value: "green" },
|
|
104
|
+
{ name: "Blue", value: "blue" }
|
|
105
|
+
]
|
|
106
|
+
})
|
|
107
|
+
],
|
|
108
|
+
|
|
109
|
+
onExecute({ interaction }) {
|
|
110
|
+
const color = interaction.options.getString("color");
|
|
111
|
+
interaction.reply(`You chose: ${color}`);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Number Options
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
121
|
+
ChatInput({
|
|
122
|
+
name: "roll",
|
|
123
|
+
description: "Roll a dice",
|
|
124
|
+
options: [
|
|
125
|
+
ChatInputOptions.integer({
|
|
126
|
+
name: "sides",
|
|
127
|
+
description: "Number of sides",
|
|
128
|
+
required: true,
|
|
129
|
+
minValue: 2,
|
|
130
|
+
maxValue: 100
|
|
131
|
+
}),
|
|
132
|
+
ChatInputOptions.number({
|
|
133
|
+
name: "multiplier",
|
|
134
|
+
description: "Multiplier (decimal)",
|
|
135
|
+
required: false,
|
|
136
|
+
minValue: 0.1,
|
|
137
|
+
maxValue: 10.0
|
|
138
|
+
})
|
|
139
|
+
],
|
|
140
|
+
|
|
141
|
+
onExecute({ interaction }) {
|
|
142
|
+
const sides = interaction.options.getInteger("sides");
|
|
143
|
+
const multiplier = interaction.options.getNumber("multiplier") ?? 1;
|
|
144
|
+
const result = Math.floor(Math.random() * sides + 1) * multiplier;
|
|
145
|
+
interaction.reply(`🎲 You rolled: ${result}`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Boolean Options
|
|
152
|
+
|
|
153
|
+
```javascript
|
|
154
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
155
|
+
ChatInput({
|
|
156
|
+
name: "announce",
|
|
157
|
+
description: "Make an announcement",
|
|
158
|
+
options: [
|
|
159
|
+
ChatInputOptions.string({
|
|
160
|
+
name: "message",
|
|
161
|
+
description: "The announcement",
|
|
162
|
+
required: true
|
|
163
|
+
}),
|
|
164
|
+
ChatInputOptions.boolean({
|
|
165
|
+
name: "mention-everyone",
|
|
166
|
+
description: "Ping @everyone?",
|
|
167
|
+
required: false
|
|
168
|
+
})
|
|
169
|
+
],
|
|
170
|
+
|
|
171
|
+
onExecute({ interaction }) {
|
|
172
|
+
const message = interaction.options.getString("message");
|
|
173
|
+
const mention = interaction.options.getBoolean("mention-everyone");
|
|
174
|
+
|
|
175
|
+
const content = mention ? `@everyone ${message}` : message;
|
|
176
|
+
interaction.reply(content);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### User, Role, Channel Options
|
|
183
|
+
|
|
184
|
+
```javascript
|
|
185
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
186
|
+
ChatInput({
|
|
187
|
+
name: "info",
|
|
188
|
+
description: "Get information",
|
|
189
|
+
options: [
|
|
190
|
+
ChatInputOptions.user({
|
|
191
|
+
name: "user",
|
|
192
|
+
description: "Target user",
|
|
193
|
+
required: true
|
|
194
|
+
}),
|
|
195
|
+
ChatInputOptions.role({
|
|
196
|
+
name: "role",
|
|
197
|
+
description: "Target role",
|
|
198
|
+
required: false
|
|
199
|
+
}),
|
|
200
|
+
ChatInputOptions.channel({
|
|
201
|
+
name: "channel",
|
|
202
|
+
description: "Target channel",
|
|
203
|
+
required: false,
|
|
204
|
+
channelTypes: ["GuildText", "GuildVoice"]
|
|
205
|
+
})
|
|
206
|
+
],
|
|
207
|
+
|
|
208
|
+
onExecute({ interaction }) {
|
|
209
|
+
const user = interaction.options.getUser("user");
|
|
210
|
+
const role = interaction.options.getRole("role");
|
|
211
|
+
const channel = interaction.options.getChannel("channel");
|
|
212
|
+
|
|
213
|
+
let info = `User: ${user.tag}`;
|
|
214
|
+
if (role) info += `\nRole: ${role.name}`;
|
|
215
|
+
if (channel) info += `\nChannel: ${channel.name}`;
|
|
216
|
+
|
|
217
|
+
interaction.reply(info);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Mentionable Options
|
|
224
|
+
|
|
225
|
+
```javascript
|
|
226
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
227
|
+
ChatInput({
|
|
228
|
+
name: "mention",
|
|
229
|
+
description: "Mention a user or role",
|
|
230
|
+
options: [
|
|
231
|
+
ChatInputOptions.mentionable({
|
|
232
|
+
name: "target",
|
|
233
|
+
description: "User or role to mention",
|
|
234
|
+
required: true
|
|
235
|
+
})
|
|
236
|
+
],
|
|
237
|
+
|
|
238
|
+
onExecute({ interaction }) {
|
|
239
|
+
const mentionable = interaction.options.getMentionable("target");
|
|
240
|
+
interaction.reply(`Mentionable: ${mentionable}`);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Attachment Options
|
|
247
|
+
|
|
248
|
+
```javascript
|
|
249
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
250
|
+
ChatInput({
|
|
251
|
+
name: "upload",
|
|
252
|
+
description: "Upload a file",
|
|
253
|
+
options: [
|
|
254
|
+
ChatInputOptions.attachment({
|
|
255
|
+
name: "file",
|
|
256
|
+
description: "The file to upload",
|
|
257
|
+
required: true
|
|
258
|
+
})
|
|
259
|
+
],
|
|
260
|
+
|
|
261
|
+
async onExecute({ interaction }) {
|
|
262
|
+
const file = interaction.options.getAttachment("file");
|
|
263
|
+
interaction.reply(`Received: ${file.name} (${file.size} bytes)`);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## All ChatInputOptions Methods
|
|
272
|
+
|
|
273
|
+
| Method | Description | Key Options |
|
|
274
|
+
|--------|-------------|-------------|
|
|
275
|
+
| `string()` | Free text input | `minLength`, `maxLength` |
|
|
276
|
+
| `stringChoices()` | Text with predefined choices | `choices[]` |
|
|
277
|
+
| `stringAutocomplete()` | Text with dynamic autocomplete | `onComplete()` |
|
|
278
|
+
| `integer()` | Whole number | `minValue`, `maxValue` |
|
|
279
|
+
| `integerChoices()` | Integer with choices | `choices[]` |
|
|
280
|
+
| `integerAutocomplete()` | Integer with autocomplete | `onComplete()` |
|
|
281
|
+
| `number()` | Decimal number | `minValue`, `maxValue` |
|
|
282
|
+
| `numberChoices()` | Number with choices | `choices[]` |
|
|
283
|
+
| `numberAutocomplete()` | Number with autocomplete | `onComplete()` |
|
|
284
|
+
| `boolean()` | True/false | - |
|
|
285
|
+
| `user()` | User mention | - |
|
|
286
|
+
| `channel()` | Channel mention | `channelTypes[]` |
|
|
287
|
+
| `role()` | Role mention | - |
|
|
288
|
+
| `mentionable()` | User or role | - |
|
|
289
|
+
| `attachment()` | File upload | - |
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Autocomplete
|
|
294
|
+
|
|
295
|
+
Autocomplete provides dynamic suggestions as users type.
|
|
296
|
+
|
|
297
|
+
### String Autocomplete
|
|
298
|
+
|
|
299
|
+
```javascript
|
|
300
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
301
|
+
ChatInput({
|
|
302
|
+
name: "search",
|
|
303
|
+
description: "Search for an item",
|
|
304
|
+
options: [
|
|
305
|
+
ChatInputOptions.stringAutocomplete({
|
|
306
|
+
name: "query",
|
|
307
|
+
description: "Search query",
|
|
308
|
+
required: true,
|
|
309
|
+
|
|
310
|
+
// Return suggestions based on user input
|
|
311
|
+
async onComplete({ value, interaction }) {
|
|
312
|
+
const items = await searchDatabase(value);
|
|
313
|
+
|
|
314
|
+
// Return up to 25 suggestions
|
|
315
|
+
return items.slice(0, 25).map(item => ({
|
|
316
|
+
name: item.displayName, // Shown to user
|
|
317
|
+
value: item.id // Sent when selected
|
|
318
|
+
}));
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
// Optional: Validate the final selection
|
|
322
|
+
async validate({ value, step }) {
|
|
323
|
+
if (step === "Autocomplete") {
|
|
324
|
+
// During autocomplete, just return true
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// After selection, validate the value
|
|
329
|
+
const item = await getItemById(value);
|
|
330
|
+
return item !== null;
|
|
331
|
+
}
|
|
332
|
+
})
|
|
333
|
+
],
|
|
334
|
+
|
|
335
|
+
async onExecute({ interaction }) {
|
|
336
|
+
const itemId = interaction.options.getString("query");
|
|
337
|
+
const item = await getItemById(itemId);
|
|
338
|
+
|
|
339
|
+
interaction.reply(`Selected: ${item.name}`);
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
});
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Number Autocomplete
|
|
346
|
+
|
|
347
|
+
```javascript
|
|
348
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
349
|
+
ChatInput({
|
|
350
|
+
name: "quantity",
|
|
351
|
+
description: "Select quantity",
|
|
352
|
+
options: [
|
|
353
|
+
ChatInputOptions.integerAutocomplete({
|
|
354
|
+
name: "amount",
|
|
355
|
+
description: "Amount to select",
|
|
356
|
+
required: true,
|
|
357
|
+
|
|
358
|
+
onComplete({ value }) {
|
|
359
|
+
// Suggest common quantities
|
|
360
|
+
const suggestions = [1, 5, 10, 25, 50, 100];
|
|
361
|
+
|
|
362
|
+
// Filter based on what user typed
|
|
363
|
+
const typed = parseInt(value) || 0;
|
|
364
|
+
|
|
365
|
+
return suggestions
|
|
366
|
+
.filter(n => n.toString().startsWith(typed.toString()))
|
|
367
|
+
.map(n => ({ name: `${n} items`, value: n }));
|
|
368
|
+
}
|
|
369
|
+
})
|
|
370
|
+
],
|
|
371
|
+
|
|
372
|
+
onExecute({ interaction }) {
|
|
373
|
+
const amount = interaction.options.getInteger("amount");
|
|
374
|
+
interaction.reply(`Quantity: ${amount}`);
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
});
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## Subcommands
|
|
383
|
+
|
|
384
|
+
### Using Subcommand Options
|
|
385
|
+
|
|
386
|
+
```javascript
|
|
387
|
+
const Discord = require("discord.js");
|
|
388
|
+
|
|
389
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
390
|
+
ChatInput({
|
|
391
|
+
name: "config",
|
|
392
|
+
description: "Bot configuration",
|
|
393
|
+
options: [
|
|
394
|
+
{
|
|
395
|
+
type: Discord.ApplicationCommandOptionType.Subcommand,
|
|
396
|
+
name: "view",
|
|
397
|
+
description: "View current configuration"
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
type: Discord.ApplicationCommandOptionType.Subcommand,
|
|
401
|
+
name: "set",
|
|
402
|
+
description: "Change a setting",
|
|
403
|
+
options: [
|
|
404
|
+
ChatInputOptions.string({
|
|
405
|
+
name: "key",
|
|
406
|
+
description: "Setting name",
|
|
407
|
+
required: true
|
|
408
|
+
}),
|
|
409
|
+
ChatInputOptions.string({
|
|
410
|
+
name: "value",
|
|
411
|
+
description: "New value",
|
|
412
|
+
required: true
|
|
413
|
+
})
|
|
414
|
+
]
|
|
415
|
+
}
|
|
416
|
+
],
|
|
417
|
+
|
|
418
|
+
onExecute({ interaction }) {
|
|
419
|
+
const subcommand = interaction.options.getSubcommand();
|
|
420
|
+
|
|
421
|
+
switch (subcommand) {
|
|
422
|
+
case "view":
|
|
423
|
+
interaction.reply("Current config: ...");
|
|
424
|
+
break;
|
|
425
|
+
|
|
426
|
+
case "set":
|
|
427
|
+
const key = interaction.options.getString("key");
|
|
428
|
+
const value = interaction.options.getString("value");
|
|
429
|
+
interaction.reply(`Set ${key} = ${value}`);
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
});
|
|
434
|
+
});
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
### Subcommand Groups
|
|
438
|
+
|
|
439
|
+
```javascript
|
|
440
|
+
const Discord = require("discord.js");
|
|
441
|
+
|
|
442
|
+
dbi.register(({ ChatInput, ChatInputOptions }) => {
|
|
443
|
+
ChatInput({
|
|
444
|
+
name: "admin",
|
|
445
|
+
description: "Admin commands",
|
|
446
|
+
options: [
|
|
447
|
+
{
|
|
448
|
+
type: Discord.ApplicationCommandOptionType.SubcommandGroup,
|
|
449
|
+
name: "user",
|
|
450
|
+
description: "User management",
|
|
451
|
+
options: [
|
|
452
|
+
{
|
|
453
|
+
type: Discord.ApplicationCommandOptionType.Subcommand,
|
|
454
|
+
name: "ban",
|
|
455
|
+
description: "Ban a user",
|
|
456
|
+
options: [
|
|
457
|
+
ChatInputOptions.user({
|
|
458
|
+
name: "target",
|
|
459
|
+
description: "User to ban",
|
|
460
|
+
required: true
|
|
461
|
+
})
|
|
462
|
+
]
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
type: Discord.ApplicationCommandOptionType.Subcommand,
|
|
466
|
+
name: "kick",
|
|
467
|
+
description: "Kick a user",
|
|
468
|
+
options: [
|
|
469
|
+
ChatInputOptions.user({
|
|
470
|
+
name: "target",
|
|
471
|
+
description: "User to kick",
|
|
472
|
+
required: true
|
|
473
|
+
})
|
|
474
|
+
]
|
|
475
|
+
}
|
|
476
|
+
]
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
type: Discord.ApplicationCommandOptionType.SubcommandGroup,
|
|
480
|
+
name: "channel",
|
|
481
|
+
description: "Channel management",
|
|
482
|
+
options: [
|
|
483
|
+
{
|
|
484
|
+
type: Discord.ApplicationCommandOptionType.Subcommand,
|
|
485
|
+
name: "lock",
|
|
486
|
+
description: "Lock a channel"
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
type: Discord.ApplicationCommandOptionType.Subcommand,
|
|
490
|
+
name: "unlock",
|
|
491
|
+
description: "Unlock a channel"
|
|
492
|
+
}
|
|
493
|
+
]
|
|
494
|
+
}
|
|
495
|
+
],
|
|
496
|
+
|
|
497
|
+
onExecute({ interaction }) {
|
|
498
|
+
const group = interaction.options.getSubcommandGroup();
|
|
499
|
+
const subcommand = interaction.options.getSubcommand();
|
|
500
|
+
|
|
501
|
+
switch (`${group}/${subcommand}`) {
|
|
502
|
+
case "user/ban":
|
|
503
|
+
const banTarget = interaction.options.getUser("target");
|
|
504
|
+
interaction.reply(`Banning ${banTarget.tag}...`);
|
|
505
|
+
break;
|
|
506
|
+
|
|
507
|
+
case "user/kick":
|
|
508
|
+
const kickTarget = interaction.options.getUser("target");
|
|
509
|
+
interaction.reply(`Kicking ${kickTarget.tag}...`);
|
|
510
|
+
break;
|
|
511
|
+
|
|
512
|
+
case "channel/lock":
|
|
513
|
+
interaction.reply("Channel locked!");
|
|
514
|
+
break;
|
|
515
|
+
|
|
516
|
+
case "channel/unlock":
|
|
517
|
+
interaction.reply("Channel unlocked!");
|
|
518
|
+
break;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
});
|
|
522
|
+
});
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
527
|
+
## Permissions
|
|
528
|
+
|
|
529
|
+
### Default Member Permissions
|
|
530
|
+
|
|
531
|
+
```javascript
|
|
532
|
+
dbi.register(({ ChatInput }) => {
|
|
533
|
+
ChatInput({
|
|
534
|
+
name: "ban",
|
|
535
|
+
description: "Ban a user",
|
|
536
|
+
|
|
537
|
+
// Users need BanMembers permission to see/use this command
|
|
538
|
+
defaultMemberPermissions: ["BanMembers"],
|
|
539
|
+
|
|
540
|
+
async onExecute({ interaction }) {
|
|
541
|
+
// Only users with BanMembers can reach here
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
});
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
### Allow in Direct Messages
|
|
548
|
+
|
|
549
|
+
```javascript
|
|
550
|
+
dbi.register(({ ChatInput }) => {
|
|
551
|
+
ChatInput({
|
|
552
|
+
name: "help",
|
|
553
|
+
description: "Get help",
|
|
554
|
+
|
|
555
|
+
// Allow this command in DMs
|
|
556
|
+
directMessages: true,
|
|
557
|
+
|
|
558
|
+
onExecute({ interaction }) {
|
|
559
|
+
interaction.reply("Here's how to use me...");
|
|
560
|
+
}
|
|
561
|
+
});
|
|
562
|
+
});
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
---
|
|
566
|
+
|
|
567
|
+
## Context Menus
|
|
568
|
+
|
|
569
|
+
### Message Context Menu
|
|
570
|
+
|
|
571
|
+
Right-click on a message to use:
|
|
572
|
+
|
|
573
|
+
```javascript
|
|
574
|
+
dbi.register(({ MessageContextMenu }) => {
|
|
575
|
+
MessageContextMenu({
|
|
576
|
+
name: "Report Message",
|
|
577
|
+
|
|
578
|
+
async onExecute({ interaction }) {
|
|
579
|
+
// interaction.targetMessage is the right-clicked message
|
|
580
|
+
const message = interaction.targetMessage;
|
|
581
|
+
|
|
582
|
+
await interaction.reply({
|
|
583
|
+
content: `Reported message by ${message.author.tag}`,
|
|
584
|
+
ephemeral: true
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
});
|
|
588
|
+
});
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
### User Context Menu
|
|
592
|
+
|
|
593
|
+
Right-click on a user to use:
|
|
594
|
+
|
|
595
|
+
```javascript
|
|
596
|
+
dbi.register(({ UserContextMenu }) => {
|
|
597
|
+
UserContextMenu({
|
|
598
|
+
name: "View Profile",
|
|
599
|
+
|
|
600
|
+
async onExecute({ interaction }) {
|
|
601
|
+
// interaction.targetUser is the right-clicked user
|
|
602
|
+
const user = interaction.targetUser;
|
|
603
|
+
|
|
604
|
+
await interaction.reply({
|
|
605
|
+
content: `Profile: ${user.tag}\nID: ${user.id}`,
|
|
606
|
+
ephemeral: true
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
});
|
|
610
|
+
});
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
---
|
|
614
|
+
|
|
615
|
+
## Execution Context
|
|
616
|
+
|
|
617
|
+
The `onExecute` function receives a context object with useful properties:
|
|
618
|
+
|
|
619
|
+
```javascript
|
|
620
|
+
dbi.register(({ ChatInput }) => {
|
|
621
|
+
ChatInput({
|
|
622
|
+
name: "context-demo",
|
|
623
|
+
description: "Demonstrates execution context",
|
|
624
|
+
|
|
625
|
+
async onExecute(ctx) {
|
|
626
|
+
const {
|
|
627
|
+
interaction, // Discord.js ChatInputCommandInteraction
|
|
628
|
+
dbi, // Your DBI instance
|
|
629
|
+
dbiInteraction, // The DBIChatInput instance
|
|
630
|
+
locale, // Locale helpers
|
|
631
|
+
setRateLimit, // Rate limit function
|
|
632
|
+
other, // Custom data object
|
|
633
|
+
clientNamespace, // Multi-client namespace
|
|
634
|
+
v2 // Whether Components V2 is enabled
|
|
635
|
+
} = ctx;
|
|
636
|
+
|
|
637
|
+
// Access user's locale
|
|
638
|
+
const greeting = locale.user.data.greeting();
|
|
639
|
+
|
|
640
|
+
// Access guild's locale (if in guild)
|
|
641
|
+
const guildGreeting = locale.guild?.data.greeting?.();
|
|
642
|
+
|
|
643
|
+
// Set a rate limit (e.g., once per minute per user)
|
|
644
|
+
await setRateLimit("User", 60000);
|
|
645
|
+
|
|
646
|
+
// Access DBI methods
|
|
647
|
+
const button = dbi.interaction("my-button");
|
|
648
|
+
|
|
649
|
+
await interaction.reply(greeting);
|
|
650
|
+
}
|
|
651
|
+
});
|
|
652
|
+
});
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
### Context Properties Reference
|
|
656
|
+
|
|
657
|
+
| Property | Type | Description |
|
|
658
|
+
|----------|------|-------------|
|
|
659
|
+
| `interaction` | `ChatInputCommandInteraction` | The Discord.js interaction |
|
|
660
|
+
| `dbi` | `DBI` | Your DBI instance |
|
|
661
|
+
| `dbiInteraction` | `DBIChatInput` | The registered interaction object |
|
|
662
|
+
| `locale.user` | `DBILocale` | User's preferred locale |
|
|
663
|
+
| `locale.guild` | `DBILocale \| undefined` | Guild's preferred locale |
|
|
664
|
+
| `setRateLimit` | `function` | Set rate limit for this interaction |
|
|
665
|
+
| `other` | `object` | Shared custom data |
|
|
666
|
+
| `clientNamespace` | `string` | Multi-client namespace |
|
|
667
|
+
| `v2` | `boolean` | Components V2 enabled |
|
|
668
|
+
|
|
669
|
+
---
|
|
670
|
+
|
|
671
|
+
## Rate Limiting
|
|
672
|
+
|
|
673
|
+
DBI supports built-in rate limiting:
|
|
674
|
+
|
|
675
|
+
```javascript
|
|
676
|
+
dbi.register(({ ChatInput }) => {
|
|
677
|
+
ChatInput({
|
|
678
|
+
name: "daily",
|
|
679
|
+
description: "Daily reward",
|
|
680
|
+
|
|
681
|
+
// Built-in rate limits
|
|
682
|
+
rateLimits: [
|
|
683
|
+
{
|
|
684
|
+
type: "User",
|
|
685
|
+
duration: 86400000 // 24 hours in milliseconds
|
|
686
|
+
}
|
|
687
|
+
],
|
|
688
|
+
|
|
689
|
+
async onExecute({ interaction }) {
|
|
690
|
+
interaction.reply("Here's your daily reward! 🎁");
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
});
|
|
694
|
+
```
|
|
695
|
+
|
|
696
|
+
### Rate Limit Types
|
|
697
|
+
|
|
698
|
+
| Type | Description |
|
|
699
|
+
|------|-------------|
|
|
700
|
+
| `User` | Per-user rate limit |
|
|
701
|
+
| `Channel` | Per-channel rate limit |
|
|
702
|
+
| `Guild` | Per-guild rate limit |
|
|
703
|
+
| `Member` | Per-member (user+guild) rate limit |
|
|
704
|
+
| `Message` | Per-message rate limit |
|
|
705
|
+
|
|
706
|
+
### Dynamic Rate Limiting
|
|
707
|
+
|
|
708
|
+
```javascript
|
|
709
|
+
dbi.register(({ ChatInput }) => {
|
|
710
|
+
ChatInput({
|
|
711
|
+
name: "action",
|
|
712
|
+
description: "Perform an action",
|
|
713
|
+
|
|
714
|
+
async onExecute({ interaction, setRateLimit }) {
|
|
715
|
+
// Set rate limit dynamically based on result
|
|
716
|
+
const isPremium = await checkPremium(interaction.user.id);
|
|
717
|
+
|
|
718
|
+
// Premium users: 1 minute cooldown, Free users: 5 minutes
|
|
719
|
+
await setRateLimit("User", isPremium ? 60000 : 300000);
|
|
720
|
+
|
|
721
|
+
interaction.reply("Action performed!");
|
|
722
|
+
}
|
|
723
|
+
});
|
|
724
|
+
});
|
|
725
|
+
```
|
|
726
|
+
|
|
727
|
+
---
|
|
728
|
+
|
|
729
|
+
## Message Command Aliases
|
|
730
|
+
|
|
731
|
+
Commands can have aliases for message command usage:
|
|
732
|
+
|
|
733
|
+
```javascript
|
|
734
|
+
dbi.register(({ ChatInput }) => {
|
|
735
|
+
ChatInput({
|
|
736
|
+
name: "help",
|
|
737
|
+
description: "Get help",
|
|
738
|
+
|
|
739
|
+
other: {
|
|
740
|
+
messageCommand: {
|
|
741
|
+
aliases: ["h", "?", "commands"],
|
|
742
|
+
ignore: false // Set to true to disable message command
|
|
743
|
+
}
|
|
744
|
+
},
|
|
745
|
+
|
|
746
|
+
onExecute({ interaction }) {
|
|
747
|
+
interaction.reply("Help information...");
|
|
748
|
+
}
|
|
749
|
+
});
|
|
750
|
+
});
|
|
751
|
+
```
|
|
752
|
+
|
|
753
|
+
---
|
|
754
|
+
|
|
755
|
+
## Publishing Options
|
|
756
|
+
|
|
757
|
+
### Publish to Specific Client
|
|
758
|
+
|
|
759
|
+
For multi-client setups:
|
|
760
|
+
|
|
761
|
+
```javascript
|
|
762
|
+
dbi.register(({ ChatInput }) => {
|
|
763
|
+
ChatInput({
|
|
764
|
+
name: "admin-only",
|
|
765
|
+
description: "Admin bot command",
|
|
766
|
+
|
|
767
|
+
// Only publish to 'admin' client namespace
|
|
768
|
+
publish: "admin",
|
|
769
|
+
|
|
770
|
+
onExecute({ interaction }) {
|
|
771
|
+
// Only available on admin bot
|
|
772
|
+
}
|
|
773
|
+
});
|
|
774
|
+
});
|
|
775
|
+
```
|
|
776
|
+
|
|
777
|
+
### Conditional Registration with Flags
|
|
778
|
+
|
|
779
|
+
```javascript
|
|
780
|
+
dbi.register(({ ChatInput }) => {
|
|
781
|
+
ChatInput({
|
|
782
|
+
name: "debug",
|
|
783
|
+
description: "Debug command",
|
|
784
|
+
|
|
785
|
+
// Only loaded when 'debug' flag is passed to dbi.load()
|
|
786
|
+
flag: "debug",
|
|
787
|
+
|
|
788
|
+
onExecute({ interaction }) {
|
|
789
|
+
// Debug info...
|
|
790
|
+
}
|
|
791
|
+
});
|
|
792
|
+
});
|
|
793
|
+
|
|
794
|
+
// Load with flag
|
|
795
|
+
await dbi.load("debug");
|
|
796
|
+
|
|
797
|
+
// Or load without debug commands
|
|
798
|
+
await dbi.load();
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
---
|
|
802
|
+
|
|
803
|
+
## Next Steps
|
|
804
|
+
|
|
805
|
+
- [Components](./COMPONENTS.md) - Add interactive buttons and menus
|
|
806
|
+
- [Localization](./LOCALIZATION.md) - Support multiple languages
|
|
807
|
+
- [Advanced Features](./ADVANCED_FEATURES.md) - Rate limiting, references, and more
|