@mostfeatured/dbi 0.1.47 → 0.2.1

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.
Files changed (299) hide show
  1. package/dist/src/DBI.d.ts.map +1 -0
  2. package/dist/src/DBI.js.map +1 -0
  3. package/dist/src/Events.d.ts.map +1 -0
  4. package/dist/src/Events.js.map +1 -0
  5. package/dist/src/index.d.ts.map +1 -0
  6. package/dist/src/index.js.map +1 -0
  7. package/dist/src/methods/handleMessageCommands.d.ts.map +1 -0
  8. package/dist/src/methods/handleMessageCommands.js.map +1 -0
  9. package/dist/src/methods/hookEventListeners.d.ts.map +1 -0
  10. package/dist/src/methods/hookEventListeners.js.map +1 -0
  11. package/dist/src/methods/hookInteractionListeners.d.ts.map +1 -0
  12. package/dist/{methods → src/methods}/hookInteractionListeners.js +22 -12
  13. package/dist/src/methods/hookInteractionListeners.js.map +1 -0
  14. package/dist/src/methods/publishInteractions.d.ts.map +1 -0
  15. package/dist/src/methods/publishInteractions.js.map +1 -0
  16. package/dist/src/types/ApplicationRoleConnectionMetadata.d.ts.map +1 -0
  17. package/dist/src/types/ApplicationRoleConnectionMetadata.js.map +1 -0
  18. package/dist/src/types/Builders/ButtonBuilder.d.ts.map +1 -0
  19. package/dist/src/types/Builders/ButtonBuilder.js.map +1 -0
  20. package/dist/src/types/Builders/ChannelSelectMenuBuilder.d.ts.map +1 -0
  21. package/dist/src/types/Builders/ChannelSelectMenuBuilder.js.map +1 -0
  22. package/dist/src/types/Builders/MentionableSelectMenuBuilder.d.ts.map +1 -0
  23. package/dist/src/types/Builders/MentionableSelectMenuBuilder.js.map +1 -0
  24. package/dist/src/types/Builders/ModalBuilder.d.ts.map +1 -0
  25. package/dist/src/types/Builders/ModalBuilder.js.map +1 -0
  26. package/dist/src/types/Builders/RoleSelectMenuBuilder.d.ts.map +1 -0
  27. package/dist/src/types/Builders/RoleSelectMenuBuilder.js.map +1 -0
  28. package/dist/src/types/Builders/StringSelectMenuBuilder.d.ts.map +1 -0
  29. package/dist/src/types/Builders/StringSelectMenuBuilder.js.map +1 -0
  30. package/dist/src/types/Builders/UserSelectMenuBuilder.d.ts.map +1 -0
  31. package/dist/src/types/Builders/UserSelectMenuBuilder.js.map +1 -0
  32. package/dist/src/types/ChatInput/ChatInput.d.ts.map +1 -0
  33. package/dist/src/types/ChatInput/ChatInput.js.map +1 -0
  34. package/dist/{types → src/types}/ChatInput/ChatInputOptions.d.ts +2 -2
  35. package/dist/src/types/ChatInput/ChatInputOptions.d.ts.map +1 -0
  36. package/dist/src/types/ChatInput/ChatInputOptions.js.map +1 -0
  37. package/dist/src/types/Components/Button.d.ts.map +1 -0
  38. package/dist/src/types/Components/Button.js.map +1 -0
  39. package/dist/src/types/Components/ChannelSelectMenu.d.ts.map +1 -0
  40. package/dist/src/types/Components/ChannelSelectMenu.js.map +1 -0
  41. package/dist/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts.map +1 -0
  42. package/dist/src/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js.map +1 -0
  43. package/dist/src/types/Components/HTMLComponentsV2/index.d.ts +91 -0
  44. package/dist/src/types/Components/HTMLComponentsV2/index.d.ts.map +1 -0
  45. package/dist/src/types/Components/HTMLComponentsV2/index.js +300 -0
  46. package/dist/src/types/Components/HTMLComponentsV2/index.js.map +1 -0
  47. package/dist/src/types/Components/HTMLComponentsV2/parser.d.ts.map +1 -0
  48. package/dist/{types → src/types}/Components/HTMLComponentsV2/parser.js +11 -4
  49. package/dist/src/types/Components/HTMLComponentsV2/parser.js.map +1 -0
  50. package/dist/src/types/Components/HTMLComponentsV2/svelteParser.d.ts +35 -0
  51. package/dist/src/types/Components/HTMLComponentsV2/svelteParser.d.ts.map +1 -0
  52. package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js +822 -0
  53. package/dist/src/types/Components/HTMLComponentsV2/svelteParser.js.map +1 -0
  54. package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.d.ts +24 -0
  55. package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.d.ts.map +1 -0
  56. package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js +294 -0
  57. package/dist/src/types/Components/HTMLComponentsV2/svelteRenderer.js.map +1 -0
  58. package/dist/src/types/Components/MentionableSelectMenu.d.ts.map +1 -0
  59. package/dist/src/types/Components/MentionableSelectMenu.js.map +1 -0
  60. package/dist/src/types/Components/Modal.d.ts.map +1 -0
  61. package/dist/src/types/Components/Modal.js.map +1 -0
  62. package/dist/src/types/Components/RoleSelectMenu.d.ts.map +1 -0
  63. package/dist/src/types/Components/RoleSelectMenu.js.map +1 -0
  64. package/dist/src/types/Components/StringSelectMenu.d.ts.map +1 -0
  65. package/dist/src/types/Components/StringSelectMenu.js.map +1 -0
  66. package/dist/src/types/Components/UserSelectMenu.d.ts.map +1 -0
  67. package/dist/src/types/Components/UserSelectMenu.js.map +1 -0
  68. package/dist/src/types/Event.d.ts.map +1 -0
  69. package/dist/src/types/Event.js.map +1 -0
  70. package/dist/src/types/Interaction.d.ts.map +1 -0
  71. package/dist/src/types/Interaction.js.map +1 -0
  72. package/dist/src/types/other/CustomEvent.d.ts.map +1 -0
  73. package/dist/src/types/other/CustomEvent.js.map +1 -0
  74. package/dist/src/types/other/FakeMessageInteraction.d.ts.map +1 -0
  75. package/dist/src/types/other/FakeMessageInteraction.js.map +1 -0
  76. package/dist/src/types/other/InteractionLocale.d.ts.map +1 -0
  77. package/dist/src/types/other/InteractionLocale.js.map +1 -0
  78. package/dist/src/types/other/Locale.d.ts.map +1 -0
  79. package/dist/src/types/other/Locale.js.map +1 -0
  80. package/dist/src/types/other/MessageContextMenu.d.ts.map +1 -0
  81. package/dist/src/types/other/MessageContextMenu.js.map +1 -0
  82. package/dist/src/types/other/UserContextMenu.d.ts.map +1 -0
  83. package/dist/src/types/other/UserContextMenu.js.map +1 -0
  84. package/dist/src/utils/MemoryStore.d.ts.map +1 -0
  85. package/dist/src/utils/MemoryStore.js.map +1 -0
  86. package/dist/src/utils/UtilTypes.d.ts.map +1 -0
  87. package/dist/src/utils/UtilTypes.js.map +1 -0
  88. package/dist/src/utils/customId.d.ts.map +1 -0
  89. package/dist/src/utils/customId.js.map +1 -0
  90. package/dist/src/utils/permissions.d.ts.map +1 -0
  91. package/dist/src/utils/permissions.js.map +1 -0
  92. package/dist/src/utils/recursiveImport.d.ts.map +1 -0
  93. package/dist/src/utils/recursiveImport.js.map +1 -0
  94. package/dist/src/utils/recursiveUnload.d.ts.map +1 -0
  95. package/dist/src/utils/recursiveUnload.js.map +1 -0
  96. package/dist/src/utils/unloadModule.d.ts.map +1 -0
  97. package/dist/src/utils/unloadModule.js.map +1 -0
  98. package/dist/test/index.d.ts +2 -0
  99. package/dist/test/index.d.ts.map +1 -0
  100. package/dist/test/index.js +103 -0
  101. package/dist/test/index.js.map +1 -0
  102. package/docs/ADVANCED_FEATURES.md +836 -0
  103. package/docs/API_REFERENCE.md +925 -0
  104. package/docs/CHAT_INPUT.md +807 -0
  105. package/docs/COMPONENTS.md +1035 -0
  106. package/docs/EVENTS.md +564 -0
  107. package/docs/GETTING_STARTED.md +394 -0
  108. package/docs/LOCALIZATION.md +773 -0
  109. package/docs/README.md +341 -0
  110. package/docs/SVELTE_COMPONENTS.md +955 -0
  111. package/generated/globals.d.ts +1 -0
  112. package/generated/index.d.ts +30 -0
  113. package/generated/svelte-dbi.d.ts +588 -0
  114. package/package.json +57 -47
  115. package/readme.md +168 -491
  116. package/src/methods/hookInteractionListeners.ts +23 -12
  117. package/src/types/Components/HTMLComponentsV2/index.ts +353 -12
  118. package/src/types/Components/HTMLComponentsV2/parser.ts +14 -4
  119. package/src/types/Components/HTMLComponentsV2/svelteParser.ts +904 -0
  120. package/src/types/Components/HTMLComponentsV2/svelteRenderer.ts +332 -0
  121. package/test/index.ts +105 -0
  122. package/test/product-showcase.svelte +199 -0
  123. package/tsconfig.json +13 -3
  124. package/dist/DBI.d.ts.map +0 -1
  125. package/dist/DBI.js.map +0 -1
  126. package/dist/Events.d.ts.map +0 -1
  127. package/dist/Events.js.map +0 -1
  128. package/dist/index.d.ts.map +0 -1
  129. package/dist/index.js.map +0 -1
  130. package/dist/methods/handleMessageCommands.d.ts.map +0 -1
  131. package/dist/methods/handleMessageCommands.js.map +0 -1
  132. package/dist/methods/hookEventListeners.d.ts.map +0 -1
  133. package/dist/methods/hookEventListeners.js.map +0 -1
  134. package/dist/methods/hookInteractionListeners.d.ts.map +0 -1
  135. package/dist/methods/hookInteractionListeners.js.map +0 -1
  136. package/dist/methods/publishInteractions.d.ts.map +0 -1
  137. package/dist/methods/publishInteractions.js.map +0 -1
  138. package/dist/types/ApplicationRoleConnectionMetadata.d.ts.map +0 -1
  139. package/dist/types/ApplicationRoleConnectionMetadata.js.map +0 -1
  140. package/dist/types/Builders/ButtonBuilder.d.ts.map +0 -1
  141. package/dist/types/Builders/ButtonBuilder.js.map +0 -1
  142. package/dist/types/Builders/ChannelSelectMenuBuilder.d.ts.map +0 -1
  143. package/dist/types/Builders/ChannelSelectMenuBuilder.js.map +0 -1
  144. package/dist/types/Builders/MentionableSelectMenuBuilder.d.ts.map +0 -1
  145. package/dist/types/Builders/MentionableSelectMenuBuilder.js.map +0 -1
  146. package/dist/types/Builders/ModalBuilder.d.ts.map +0 -1
  147. package/dist/types/Builders/ModalBuilder.js.map +0 -1
  148. package/dist/types/Builders/RoleSelectMenuBuilder.d.ts.map +0 -1
  149. package/dist/types/Builders/RoleSelectMenuBuilder.js.map +0 -1
  150. package/dist/types/Builders/StringSelectMenuBuilder.d.ts.map +0 -1
  151. package/dist/types/Builders/StringSelectMenuBuilder.js.map +0 -1
  152. package/dist/types/Builders/UserSelectMenuBuilder.d.ts.map +0 -1
  153. package/dist/types/Builders/UserSelectMenuBuilder.js.map +0 -1
  154. package/dist/types/ChatInput/ChatInput.d.ts.map +0 -1
  155. package/dist/types/ChatInput/ChatInput.js.map +0 -1
  156. package/dist/types/ChatInput/ChatInputOptions.d.ts.map +0 -1
  157. package/dist/types/ChatInput/ChatInputOptions.js.map +0 -1
  158. package/dist/types/Components/Button.d.ts.map +0 -1
  159. package/dist/types/Components/Button.js.map +0 -1
  160. package/dist/types/Components/ChannelSelectMenu.d.ts.map +0 -1
  161. package/dist/types/Components/ChannelSelectMenu.js.map +0 -1
  162. package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts.map +0 -1
  163. package/dist/types/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js.map +0 -1
  164. package/dist/types/Components/HTMLComponentsV2/index.d.ts +0 -19
  165. package/dist/types/Components/HTMLComponentsV2/index.d.ts.map +0 -1
  166. package/dist/types/Components/HTMLComponentsV2/index.js +0 -31
  167. package/dist/types/Components/HTMLComponentsV2/index.js.map +0 -1
  168. package/dist/types/Components/HTMLComponentsV2/parser.d.ts.map +0 -1
  169. package/dist/types/Components/HTMLComponentsV2/parser.js.map +0 -1
  170. package/dist/types/Components/MentionableSelectMenu.d.ts.map +0 -1
  171. package/dist/types/Components/MentionableSelectMenu.js.map +0 -1
  172. package/dist/types/Components/Modal.d.ts.map +0 -1
  173. package/dist/types/Components/Modal.js.map +0 -1
  174. package/dist/types/Components/RoleSelectMenu.d.ts.map +0 -1
  175. package/dist/types/Components/RoleSelectMenu.js.map +0 -1
  176. package/dist/types/Components/StringSelectMenu.d.ts.map +0 -1
  177. package/dist/types/Components/StringSelectMenu.js.map +0 -1
  178. package/dist/types/Components/UserSelectMenu.d.ts.map +0 -1
  179. package/dist/types/Components/UserSelectMenu.js.map +0 -1
  180. package/dist/types/Event.d.ts.map +0 -1
  181. package/dist/types/Event.js.map +0 -1
  182. package/dist/types/Interaction.d.ts.map +0 -1
  183. package/dist/types/Interaction.js.map +0 -1
  184. package/dist/types/other/CustomEvent.d.ts.map +0 -1
  185. package/dist/types/other/CustomEvent.js.map +0 -1
  186. package/dist/types/other/FakeMessageInteraction.d.ts.map +0 -1
  187. package/dist/types/other/FakeMessageInteraction.js.map +0 -1
  188. package/dist/types/other/InteractionLocale.d.ts.map +0 -1
  189. package/dist/types/other/InteractionLocale.js.map +0 -1
  190. package/dist/types/other/Locale.d.ts.map +0 -1
  191. package/dist/types/other/Locale.js.map +0 -1
  192. package/dist/types/other/MessageContextMenu.d.ts.map +0 -1
  193. package/dist/types/other/MessageContextMenu.js.map +0 -1
  194. package/dist/types/other/UserContextMenu.d.ts.map +0 -1
  195. package/dist/types/other/UserContextMenu.js.map +0 -1
  196. package/dist/utils/MemoryStore.d.ts.map +0 -1
  197. package/dist/utils/MemoryStore.js.map +0 -1
  198. package/dist/utils/UtilTypes.d.ts.map +0 -1
  199. package/dist/utils/UtilTypes.js.map +0 -1
  200. package/dist/utils/customId.d.ts.map +0 -1
  201. package/dist/utils/customId.js.map +0 -1
  202. package/dist/utils/permissions.d.ts.map +0 -1
  203. package/dist/utils/permissions.js.map +0 -1
  204. package/dist/utils/recursiveImport.d.ts.map +0 -1
  205. package/dist/utils/recursiveImport.js.map +0 -1
  206. package/dist/utils/recursiveUnload.d.ts.map +0 -1
  207. package/dist/utils/recursiveUnload.js.map +0 -1
  208. package/dist/utils/unloadModule.d.ts.map +0 -1
  209. package/dist/utils/unloadModule.js.map +0 -1
  210. package/examples/modal/dbi.js +0 -30
  211. package/examples/modal/login.js +0 -15
  212. package/examples/modal/package.json +0 -15
  213. package/examples/modal/publish.js +0 -13
  214. package/examples/modal/src/chatInput.js +0 -38
  215. package/examples/modal/src/components.js +0 -33
  216. package/examples/modal/src/event.js +0 -20
  217. package/examples/modal/src/interactionlocales.js +0 -24
  218. package/examples/modal/src/locales.js +0 -38
  219. package/examples/modal/src/modal.js +0 -28
  220. /package/dist/{DBI.d.ts → src/DBI.d.ts} +0 -0
  221. /package/dist/{DBI.js → src/DBI.js} +0 -0
  222. /package/dist/{Events.d.ts → src/Events.d.ts} +0 -0
  223. /package/dist/{Events.js → src/Events.js} +0 -0
  224. /package/dist/{data → src/data}/eventMap.json +0 -0
  225. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  226. /package/dist/{index.js → src/index.js} +0 -0
  227. /package/dist/{methods → src/methods}/handleMessageCommands.d.ts +0 -0
  228. /package/dist/{methods → src/methods}/handleMessageCommands.js +0 -0
  229. /package/dist/{methods → src/methods}/hookEventListeners.d.ts +0 -0
  230. /package/dist/{methods → src/methods}/hookEventListeners.js +0 -0
  231. /package/dist/{methods → src/methods}/hookInteractionListeners.d.ts +0 -0
  232. /package/dist/{methods → src/methods}/publishInteractions.d.ts +0 -0
  233. /package/dist/{methods → src/methods}/publishInteractions.js +0 -0
  234. /package/dist/{types → src/types}/ApplicationRoleConnectionMetadata.d.ts +0 -0
  235. /package/dist/{types → src/types}/ApplicationRoleConnectionMetadata.js +0 -0
  236. /package/dist/{types → src/types}/Builders/ButtonBuilder.d.ts +0 -0
  237. /package/dist/{types → src/types}/Builders/ButtonBuilder.js +0 -0
  238. /package/dist/{types → src/types}/Builders/ChannelSelectMenuBuilder.d.ts +0 -0
  239. /package/dist/{types → src/types}/Builders/ChannelSelectMenuBuilder.js +0 -0
  240. /package/dist/{types → src/types}/Builders/MentionableSelectMenuBuilder.d.ts +0 -0
  241. /package/dist/{types → src/types}/Builders/MentionableSelectMenuBuilder.js +0 -0
  242. /package/dist/{types → src/types}/Builders/ModalBuilder.d.ts +0 -0
  243. /package/dist/{types → src/types}/Builders/ModalBuilder.js +0 -0
  244. /package/dist/{types → src/types}/Builders/RoleSelectMenuBuilder.d.ts +0 -0
  245. /package/dist/{types → src/types}/Builders/RoleSelectMenuBuilder.js +0 -0
  246. /package/dist/{types → src/types}/Builders/StringSelectMenuBuilder.d.ts +0 -0
  247. /package/dist/{types → src/types}/Builders/StringSelectMenuBuilder.js +0 -0
  248. /package/dist/{types → src/types}/Builders/UserSelectMenuBuilder.d.ts +0 -0
  249. /package/dist/{types → src/types}/Builders/UserSelectMenuBuilder.js +0 -0
  250. /package/dist/{types → src/types}/ChatInput/ChatInput.d.ts +0 -0
  251. /package/dist/{types → src/types}/ChatInput/ChatInput.js +0 -0
  252. /package/dist/{types → src/types}/ChatInput/ChatInputOptions.js +0 -0
  253. /package/dist/{types → src/types}/Components/Button.d.ts +0 -0
  254. /package/dist/{types → src/types}/Components/Button.js +0 -0
  255. /package/dist/{types → src/types}/Components/ChannelSelectMenu.d.ts +0 -0
  256. /package/dist/{types → src/types}/Components/ChannelSelectMenu.js +0 -0
  257. /package/dist/{types → src/types}/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.d.ts +0 -0
  258. /package/dist/{types → src/types}/Components/HTMLComponentsV2/HTMLComponentsV2Handlers.js +0 -0
  259. /package/dist/{types → src/types}/Components/HTMLComponentsV2/parser.d.ts +0 -0
  260. /package/dist/{types → src/types}/Components/MentionableSelectMenu.d.ts +0 -0
  261. /package/dist/{types → src/types}/Components/MentionableSelectMenu.js +0 -0
  262. /package/dist/{types → src/types}/Components/Modal.d.ts +0 -0
  263. /package/dist/{types → src/types}/Components/Modal.js +0 -0
  264. /package/dist/{types → src/types}/Components/RoleSelectMenu.d.ts +0 -0
  265. /package/dist/{types → src/types}/Components/RoleSelectMenu.js +0 -0
  266. /package/dist/{types → src/types}/Components/StringSelectMenu.d.ts +0 -0
  267. /package/dist/{types → src/types}/Components/StringSelectMenu.js +0 -0
  268. /package/dist/{types → src/types}/Components/UserSelectMenu.d.ts +0 -0
  269. /package/dist/{types → src/types}/Components/UserSelectMenu.js +0 -0
  270. /package/dist/{types → src/types}/Event.d.ts +0 -0
  271. /package/dist/{types → src/types}/Event.js +0 -0
  272. /package/dist/{types → src/types}/Interaction.d.ts +0 -0
  273. /package/dist/{types → src/types}/Interaction.js +0 -0
  274. /package/dist/{types → src/types}/other/CustomEvent.d.ts +0 -0
  275. /package/dist/{types → src/types}/other/CustomEvent.js +0 -0
  276. /package/dist/{types → src/types}/other/FakeMessageInteraction.d.ts +0 -0
  277. /package/dist/{types → src/types}/other/FakeMessageInteraction.js +0 -0
  278. /package/dist/{types → src/types}/other/InteractionLocale.d.ts +0 -0
  279. /package/dist/{types → src/types}/other/InteractionLocale.js +0 -0
  280. /package/dist/{types → src/types}/other/Locale.d.ts +0 -0
  281. /package/dist/{types → src/types}/other/Locale.js +0 -0
  282. /package/dist/{types → src/types}/other/MessageContextMenu.d.ts +0 -0
  283. /package/dist/{types → src/types}/other/MessageContextMenu.js +0 -0
  284. /package/dist/{types → src/types}/other/UserContextMenu.d.ts +0 -0
  285. /package/dist/{types → src/types}/other/UserContextMenu.js +0 -0
  286. /package/dist/{utils → src/utils}/MemoryStore.d.ts +0 -0
  287. /package/dist/{utils → src/utils}/MemoryStore.js +0 -0
  288. /package/dist/{utils → src/utils}/UtilTypes.d.ts +0 -0
  289. /package/dist/{utils → src/utils}/UtilTypes.js +0 -0
  290. /package/dist/{utils → src/utils}/customId.d.ts +0 -0
  291. /package/dist/{utils → src/utils}/customId.js +0 -0
  292. /package/dist/{utils → src/utils}/permissions.d.ts +0 -0
  293. /package/dist/{utils → src/utils}/permissions.js +0 -0
  294. /package/dist/{utils → src/utils}/recursiveImport.d.ts +0 -0
  295. /package/dist/{utils → src/utils}/recursiveImport.js +0 -0
  296. /package/dist/{utils → src/utils}/recursiveUnload.d.ts +0 -0
  297. /package/dist/{utils → src/utils}/recursiveUnload.js +0 -0
  298. /package/dist/{utils → src/utils}/unloadModule.d.ts +0 -0
  299. /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