@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,836 @@
1
+ # Advanced Features
2
+
3
+ This guide covers advanced DBI features including message commands, multi-client support, rate limiting, references, sharding, and more.
4
+
5
+ ---
6
+
7
+ ## Table of Contents
8
+
9
+ - [Message Commands](#message-commands)
10
+ - [Reference System](#reference-system)
11
+ - [Rate Limiting](#rate-limiting)
12
+ - [Multi-Client Support](#multi-client-support)
13
+ - [Sharding](#sharding)
14
+ - [Hot Reloading](#hot-reloading)
15
+ - [Persistent Store](#persistent-store)
16
+ - [Flag-based Loading](#flag-based-loading)
17
+ - [Data Management](#data-management)
18
+
19
+ ---
20
+
21
+ ## Message Commands
22
+
23
+ DBI can automatically convert slash commands to message-based commands, allowing users to use traditional prefix commands.
24
+
25
+ ### Enabling Message Commands
26
+
27
+ ```javascript
28
+ const dbi = createDBI("my-bot", {
29
+ discord: {
30
+ token: process.env.DISCORD_TOKEN,
31
+ options: {
32
+ intents: [
33
+ "Guilds",
34
+ "GuildMessages",
35
+ "MessageContent" // Required for message commands
36
+ ]
37
+ }
38
+ },
39
+
40
+ // Enable message commands
41
+ messageCommands: {
42
+ // Prefixes to listen for
43
+ prefixes: ["!", ".", "?"],
44
+
45
+ // Or dynamic prefixes
46
+ // prefixes: async ({ message }) => {
47
+ // const guildPrefix = await getGuildPrefix(message.guild?.id);
48
+ // return [guildPrefix, "!"];
49
+ // },
50
+
51
+ // Type aliases for boolean parsing
52
+ typeAliases: {
53
+ booleans: {
54
+ "yes": true,
55
+ "no": false,
56
+ "true": true,
57
+ "false": false,
58
+ "on": true,
59
+ "off": false,
60
+ "1": true,
61
+ "0": false
62
+ }
63
+ }
64
+ },
65
+
66
+ defaults: {
67
+ messageCommands: {
68
+ // Content shown while processing
69
+ deferReplyContent: "Processing..."
70
+ // Or dynamic:
71
+ // deferReplyContent: ({ interaction }) => `Processing ${interaction.commandName}...`
72
+ }
73
+ }
74
+ });
75
+ ```
76
+
77
+ ### How It Works
78
+
79
+ Message commands emulate slash commands:
80
+ - `!ping` → `/ping`
81
+ - `!user info @John` → `/user info user:@John`
82
+ - `!ban @User spam` → `/ban user:@User reason:spam`
83
+
84
+ ```javascript
85
+ dbi.register(({ ChatInput, ChatInputOptions }) => {
86
+ // This command works with both slash and message commands
87
+ ChatInput({
88
+ name: "greet",
89
+ description: "Greet someone",
90
+ options: [
91
+ ChatInputOptions.user({
92
+ name: "user",
93
+ description: "User to greet",
94
+ required: true
95
+ }),
96
+ ChatInputOptions.string({
97
+ name: "message",
98
+ description: "Custom message",
99
+ required: false
100
+ })
101
+ ],
102
+
103
+ onExecute({ interaction }) {
104
+ const user = interaction.options.getUser("user");
105
+ const message = interaction.options.getString("message") || "Hello!";
106
+
107
+ interaction.reply(`${message} ${user}`);
108
+ }
109
+ });
110
+ });
111
+
112
+ // Usage:
113
+ // Slash: /greet user:@John message:Welcome!
114
+ // Message: !greet @John Welcome!
115
+ ```
116
+
117
+ ### Message Command Aliases
118
+
119
+ ```javascript
120
+ dbi.register(({ ChatInput }) => {
121
+ ChatInput({
122
+ name: "help",
123
+ description: "Show help",
124
+
125
+ other: {
126
+ messageCommand: {
127
+ // Additional command aliases
128
+ aliases: ["h", "?", "commands", "cmds"],
129
+
130
+ // Set to true to disable message command for this
131
+ ignore: false
132
+ }
133
+ },
134
+
135
+ onExecute({ interaction }) {
136
+ interaction.reply("Help information...");
137
+ }
138
+ });
139
+ });
140
+
141
+ // Now works with: !help, !h, !?, !commands, !cmds
142
+ ```
143
+
144
+ ### Rest String Arguments
145
+
146
+ Capture remaining text in a single string:
147
+
148
+ ```javascript
149
+ dbi.register(({ ChatInput, ChatInputOptions }) => {
150
+ ChatInput({
151
+ name: "say",
152
+ description: "Make the bot say something",
153
+ options: [
154
+ ChatInputOptions.string({
155
+ name: "message",
156
+ description: "The message",
157
+ required: true,
158
+ messageCommands: {
159
+ rest: true // Capture all remaining text
160
+ }
161
+ })
162
+ ],
163
+
164
+ onExecute({ interaction }) {
165
+ const message = interaction.options.getString("message");
166
+ interaction.reply(message);
167
+ }
168
+ });
169
+ });
170
+
171
+ // !say Hello world, how are you?
172
+ // message = "Hello world, how are you?"
173
+ ```
174
+
175
+ ### Handling Message Command Errors
176
+
177
+ ```javascript
178
+ const { ApplicationCommandOptionType } = require("discord.js");
179
+
180
+ // Argument validation error
181
+ dbi.events.on("messageCommandArgumentError", ({ message, error, dbiInteraction }) => {
182
+ const option = error.option;
183
+ const errorMessages = {
184
+ MissingRequiredOption: `Missing required argument: \`${option.name}\``,
185
+ MinLength: `\`${option.name}\` must be at least ${option.minLength} characters`,
186
+ MaxLength: `\`${option.name}\` must be at most ${option.maxLength} characters`,
187
+ InvalidChoice: `\`${option.name}\` must be one of: ${error.extra?.map(c => c.name).join(", ")}`,
188
+ InvalidInteger: `\`${option.name}\` must be a whole number`,
189
+ InvalidNumber: `\`${option.name}\` must be a number`,
190
+ InvalidBoolean: `\`${option.name}\` must be yes/no or true/false`,
191
+ InvalidUser: `\`${option.name}\` must be a valid user mention`,
192
+ InvalidChannel: `\`${option.name}\` must be a valid channel mention`,
193
+ InvalidRole: `\`${option.name}\` must be a valid role mention`
194
+ };
195
+
196
+ message.reply(`❌ ${errorMessages[error.type] || "Invalid argument"}`);
197
+ return false;
198
+ });
199
+
200
+ // DM usage when not allowed
201
+ dbi.events.on("messageCommandDirectMessageUsageError", ({ message }) => {
202
+ message.reply("❌ This command can only be used in servers.");
203
+ return false;
204
+ });
205
+
206
+ // Missing permissions
207
+ dbi.events.on("messageCommandDefaultMemberPermissionsError", ({ message, permissions }) => {
208
+ message.reply(`❌ You need these permissions: ${permissions.join(", ")}`);
209
+ return false;
210
+ });
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Reference System
216
+
217
+ The reference system allows passing data through Discord's component custom IDs.
218
+
219
+ ### Custom ID Encoding
220
+
221
+ DBI encodes different types in the custom ID:
222
+
223
+ | Type | Encoding | Example |
224
+ |------|----------|---------|
225
+ | String | Raw | `"hello"` → `hello` |
226
+ | Number | `π` prefix | `42` → `π42` |
227
+ | BigInt | `ᙖ` prefix | `12345n` → `ᙖ12345` |
228
+ | Boolean | `𝞫` prefix | `true` → `𝞫1` |
229
+ | `undefined` | `🗶u` | `undefined` → `🗶u` |
230
+ | `null` | `🗶n` | `null` → `🗶n` |
231
+ | Object | `¤` + ref ID | `{...}` → `¤abc123` |
232
+
233
+ ### Using References
234
+
235
+ ```javascript
236
+ dbi.register(({ Button }) => {
237
+ Button({
238
+ name: "action",
239
+ options: { style: Discord.ButtonStyle.Primary, label: "Action" },
240
+
241
+ onExecute({ interaction, data }) {
242
+ // data is an array of the referenced values
243
+ const [userId, action, metadata] = data;
244
+
245
+ console.log(`User: ${userId}`); // string
246
+ console.log(`Action: ${action}`); // string
247
+ console.log(`Metadata:`, metadata); // object (if was object)
248
+
249
+ if (metadata?.$ref) {
250
+ // This is an object reference
251
+ console.log(`Ref ID: ${metadata.$ref}`);
252
+
253
+ // Clean up when done
254
+ metadata.$unRef();
255
+ }
256
+
257
+ interaction.reply("Done!");
258
+ }
259
+ });
260
+ });
261
+
262
+ // Creating the button:
263
+ const button = dbi.interaction("action").toJSON({
264
+ reference: {
265
+ data: [
266
+ "123456789", // String - encoded in custom ID
267
+ "approve", // String - encoded in custom ID
268
+ { complex: "object", nested: {} } // Object - stored in memory
269
+ ],
270
+ ttl: 300000 // Optional: auto-expire in 5 minutes
271
+ }
272
+ });
273
+ ```
274
+
275
+ ### Reference Configuration
276
+
277
+ ```javascript
278
+ const dbi = createDBI("my-bot", {
279
+ references: {
280
+ autoClear: {
281
+ ttl: 3600000, // Default TTL: 1 hour
282
+ check: 60000 // Check every minute
283
+ }
284
+ }
285
+ });
286
+ ```
287
+
288
+ ### Manual Reference Management
289
+
290
+ ```javascript
291
+ // Access references directly
292
+ const refs = dbi.data.refs;
293
+
294
+ // Get a reference
295
+ const ref = refs.get("refId");
296
+ console.log(ref.value); // The stored object
297
+ console.log(ref.at); // Timestamp when created
298
+ console.log(ref.ttl); // Time-to-live in ms
299
+
300
+ // Delete a reference
301
+ refs.delete("refId");
302
+
303
+ // Check if reference exists
304
+ refs.has("refId");
305
+ ```
306
+
307
+ ---
308
+
309
+ ## Rate Limiting
310
+
311
+ DBI provides built-in rate limiting for interactions.
312
+
313
+ ### Declarative Rate Limits
314
+
315
+ ```javascript
316
+ dbi.register(({ ChatInput }) => {
317
+ ChatInput({
318
+ name: "daily",
319
+ description: "Claim daily reward",
320
+
321
+ // Static rate limits
322
+ rateLimits: [
323
+ {
324
+ type: "User",
325
+ duration: 86400000 // 24 hours in ms
326
+ }
327
+ ],
328
+
329
+ onExecute({ interaction }) {
330
+ interaction.reply("Here's your daily reward! 🎁");
331
+ }
332
+ });
333
+ });
334
+ ```
335
+
336
+ ### Rate Limit Types
337
+
338
+ | Type | Description |
339
+ |------|-------------|
340
+ | `User` | Per-user across all servers |
341
+ | `Channel` | Per-channel |
342
+ | `Guild` | Per-server |
343
+ | `Member` | Per-member (user+guild combination) |
344
+ | `Message` | Per-message |
345
+
346
+ ### Dynamic Rate Limits
347
+
348
+ ```javascript
349
+ dbi.register(({ ChatInput }) => {
350
+ ChatInput({
351
+ name: "action",
352
+ description: "Do something",
353
+
354
+ async onExecute({ interaction, setRateLimit }) {
355
+ const isPremium = await checkPremium(interaction.user.id);
356
+
357
+ // Set different cooldowns based on status
358
+ if (isPremium) {
359
+ await setRateLimit("User", 30000); // 30 seconds for premium
360
+ } else {
361
+ await setRateLimit("User", 300000); // 5 minutes for free
362
+ }
363
+
364
+ // ... do the action
365
+ interaction.reply("Done!");
366
+ }
367
+ });
368
+ });
369
+ ```
370
+
371
+ ### Rate Limit Events
372
+
373
+ ```javascript
374
+ dbi.events.on("interactionRateLimit", async ({
375
+ interaction,
376
+ dbiInteraction,
377
+ rateLimit,
378
+ remainingTime
379
+ }) => {
380
+ const seconds = Math.ceil(remainingTime / 1000);
381
+ const minutes = Math.floor(seconds / 60);
382
+
383
+ let timeText;
384
+ if (minutes > 0) {
385
+ timeText = `${minutes}m ${seconds % 60}s`;
386
+ } else {
387
+ timeText = `${seconds}s`;
388
+ }
389
+
390
+ await interaction.reply({
391
+ content: `⏳ Cooldown! Try again in **${timeText}**.`,
392
+ ephemeral: true
393
+ });
394
+
395
+ return false; // Don't execute
396
+ });
397
+ ```
398
+
399
+ ---
400
+
401
+ ## Multi-Client Support
402
+
403
+ DBI supports running multiple Discord clients simultaneously.
404
+
405
+ ### Configuration
406
+
407
+ ```javascript
408
+ const dbi = createDBI("my-bot", {
409
+ discord: [
410
+ {
411
+ namespace: "main",
412
+ token: process.env.MAIN_BOT_TOKEN,
413
+ options: {
414
+ intents: ["Guilds", "GuildMessages"]
415
+ }
416
+ },
417
+ {
418
+ namespace: "music",
419
+ token: process.env.MUSIC_BOT_TOKEN,
420
+ options: {
421
+ intents: ["Guilds", "GuildVoiceStates"]
422
+ }
423
+ },
424
+ {
425
+ namespace: "moderation",
426
+ token: process.env.MOD_BOT_TOKEN,
427
+ options: {
428
+ intents: ["Guilds", "GuildMembers", "GuildBans"]
429
+ }
430
+ }
431
+ ]
432
+ });
433
+ ```
434
+
435
+ ### Accessing Clients
436
+
437
+ ```javascript
438
+ // Get first/default client
439
+ const defaultClient = dbi.client();
440
+
441
+ // Get specific client by namespace
442
+ const musicClient = dbi.client("music");
443
+ const modClient = dbi.client("moderation");
444
+
445
+ // Access Discord.js client
446
+ const discordClient = musicClient.client;
447
+ console.log(discordClient.user.tag);
448
+
449
+ // Get all clients
450
+ const allClients = dbi.data.clients;
451
+
452
+ // Round-robin selection
453
+ const nextClient = dbi.data.clients.next(); // Global round-robin
454
+ const nextMusic = dbi.data.clients.next("music"); // Key-specific round-robin
455
+
456
+ // Random client
457
+ const randomClient = dbi.data.clients.random();
458
+ const randomThree = dbi.data.clients.random(3); // Array of 3 random clients
459
+ ```
460
+
461
+ ### Publishing to Specific Clients
462
+
463
+ ```javascript
464
+ dbi.register(({ ChatInput }) => {
465
+ ChatInput({
466
+ name: "play",
467
+ description: "Play music",
468
+
469
+ // Only publish to music bot
470
+ publish: "music",
471
+
472
+ onExecute({ interaction, clientNamespace }) {
473
+ console.log(`Handled by: ${clientNamespace}`);
474
+ // ...
475
+ }
476
+ });
477
+ });
478
+ ```
479
+
480
+ ### Events with Multiple Clients
481
+
482
+ ```javascript
483
+ dbi.register(({ Event }) => {
484
+ Event({
485
+ name: "guildCreate",
486
+ id: "guild-logger",
487
+
488
+ // Control which client handles
489
+ triggerType: "OneByOneGlobal", // Default: sequential globally
490
+ // triggerType: "Random", // Random client
491
+ // triggerType: "First", // Always first client
492
+
493
+ onExecute({ guild, nextClient }) {
494
+ console.log(`${nextClient.namespace} joined: ${guild.name}`);
495
+ }
496
+ });
497
+ });
498
+ ```
499
+
500
+ ---
501
+
502
+ ## Sharding
503
+
504
+ DBI supports both default Discord.js sharding and discord-hybrid-sharding.
505
+
506
+ ### Default Sharding
507
+
508
+ ```javascript
509
+ const dbi = createDBI("my-bot", {
510
+ sharding: "default",
511
+ discord: {
512
+ token: process.env.DISCORD_TOKEN,
513
+ options: {
514
+ intents: ["Guilds"]
515
+ }
516
+ }
517
+ });
518
+ ```
519
+
520
+ ### Hybrid Sharding
521
+
522
+ For discord-hybrid-sharding (recommended for large bots):
523
+
524
+ ```javascript
525
+ const dbi = createDBI("my-bot", {
526
+ sharding: "hybrid",
527
+ discord: {
528
+ token: process.env.DISCORD_TOKEN,
529
+ options: {
530
+ intents: ["Guilds"]
531
+ }
532
+ }
533
+ });
534
+
535
+ // Access cluster info
536
+ if (dbi.cluster) {
537
+ console.log(`Cluster ID: ${dbi.cluster.id}`);
538
+ console.log(`Shard IDs: ${dbi.cluster.shards}`);
539
+ }
540
+ ```
541
+
542
+ ### Shard Manager (separate file)
543
+
544
+ ```javascript
545
+ const { ClusterManager } = require("discord-hybrid-sharding");
546
+
547
+ const manager = new ClusterManager("./bot.js", {
548
+ totalShards: "auto",
549
+ shardsPerClusters: 2,
550
+ token: process.env.DISCORD_TOKEN
551
+ });
552
+
553
+ manager.on("clusterCreate", cluster => {
554
+ console.log(`Launched cluster ${cluster.id}`);
555
+ });
556
+
557
+ manager.spawn();
558
+ ```
559
+
560
+ ---
561
+
562
+ ## Hot Reloading
563
+
564
+ DBI supports unloading and reloading features dynamically.
565
+
566
+ ### Using onUnload
567
+
568
+ ```javascript
569
+ dbi.register(({ ChatInput, Event, onUnload }) => {
570
+ let interval;
571
+
572
+ Event({
573
+ name: "clientReady",
574
+ id: "stats-updater",
575
+
576
+ onExecute({ client }) {
577
+ interval = setInterval(() => {
578
+ updateStats(client);
579
+ }, 60000);
580
+ }
581
+ });
582
+
583
+ // Cleanup when unloading
584
+ onUnload(() => {
585
+ if (interval) {
586
+ clearInterval(interval);
587
+ }
588
+ console.log("Stats updater cleaned up");
589
+ });
590
+
591
+ ChatInput({
592
+ name: "reload-safe",
593
+ description: "Safe command",
594
+ onExecute({ interaction }) {
595
+ interaction.reply("Hello!");
596
+ }
597
+ });
598
+ });
599
+ ```
600
+
601
+ ### Reload Flow
602
+
603
+ ```javascript
604
+ // Unload current features
605
+ await dbi.unload();
606
+
607
+ // Clear require cache for updated files
608
+ Utils.recursiveUnload("./src");
609
+
610
+ // Re-import files
611
+ await Utils.recursiveImport("./src");
612
+
613
+ // Load again
614
+ await dbi.load();
615
+
616
+ console.log("Bot reloaded!");
617
+ ```
618
+
619
+ ### Utils for Hot Reloading
620
+
621
+ ```javascript
622
+ const { Utils } = require("@mostfeatured/dbi");
623
+
624
+ // Import all files in a directory
625
+ await Utils.recursiveImport("./src");
626
+
627
+ // Unload modules from require cache
628
+ Utils.recursiveUnload("./src");
629
+
630
+ // Unload a single module
631
+ Utils.unloadModule("./src/commands/ping.js");
632
+ ```
633
+
634
+ ---
635
+
636
+ ## Persistent Store
637
+
638
+ DBI includes a store interface for persistent data.
639
+
640
+ ### Default MemoryStore
641
+
642
+ ```javascript
643
+ const { MemoryStore } = require("@mostfeatured/dbi");
644
+
645
+ const dbi = createDBI("my-bot", {
646
+ store: new MemoryStore() // Default - not persistent
647
+ });
648
+ ```
649
+
650
+ ### Custom Store Implementation
651
+
652
+ ```javascript
653
+ // Implement the DBIStore interface
654
+ class RedisStore {
655
+ constructor(redis) {
656
+ this.redis = redis;
657
+ }
658
+
659
+ async get(key, defaultValue) {
660
+ const value = await this.redis.get(key);
661
+ return value ? JSON.parse(value) : defaultValue;
662
+ }
663
+
664
+ async set(key, value) {
665
+ await this.redis.set(key, JSON.stringify(value));
666
+ }
667
+
668
+ async delete(key) {
669
+ await this.redis.del(key);
670
+ }
671
+
672
+ async has(key) {
673
+ return (await this.redis.exists(key)) === 1;
674
+ }
675
+ }
676
+
677
+ // Use custom store
678
+ const dbi = createDBI("my-bot", {
679
+ store: new RedisStore(redisClient)
680
+ });
681
+
682
+ // Use the store
683
+ await dbi.config.store.set("key", { data: "value" });
684
+ const data = await dbi.config.store.get("key");
685
+ ```
686
+
687
+ ---
688
+
689
+ ## Flag-based Loading
690
+
691
+ Load different features based on flags.
692
+
693
+ ### Defining Flags
694
+
695
+ ```javascript
696
+ dbi.register(({ ChatInput, Event }) => {
697
+ // Always loaded
698
+ ChatInput({
699
+ name: "ping",
700
+ description: "Ping",
701
+ onExecute({ interaction }) {
702
+ interaction.reply("Pong!");
703
+ }
704
+ });
705
+
706
+ // Only loaded with 'debug' flag
707
+ ChatInput({
708
+ name: "debug-info",
709
+ description: "Debug information",
710
+ flag: "debug",
711
+
712
+ onExecute({ interaction }) {
713
+ interaction.reply("Debug info...");
714
+ }
715
+ });
716
+
717
+ // Only loaded with 'admin' flag
718
+ ChatInput({
719
+ name: "eval",
720
+ description: "Evaluate code",
721
+ flag: "admin",
722
+
723
+ onExecute({ interaction }) {
724
+ // Dangerous!
725
+ }
726
+ });
727
+ });
728
+ ```
729
+
730
+ ### Loading with Flags
731
+
732
+ ```javascript
733
+ // Load only non-flagged features
734
+ await dbi.load();
735
+
736
+ // Load with specific flags
737
+ await dbi.load("debug");
738
+ await dbi.load("debug", "admin");
739
+
740
+ // Load everything
741
+ await dbi.load("all");
742
+ ```
743
+
744
+ ---
745
+
746
+ ## Data Management
747
+
748
+ DBI provides utilities for managing shared data.
749
+
750
+ ### Using dbi.data.other
751
+
752
+ ```javascript
753
+ // Store data
754
+ dbi.set("config", { prefix: "!", language: "en" });
755
+ dbi.set("cache.users", new Map());
756
+
757
+ // Get data
758
+ const config = dbi.get("config");
759
+ const cache = dbi.get("cache.users");
760
+
761
+ // Get with default
762
+ const settings = dbi.get("settings", { theme: "dark" });
763
+
764
+ // Check existence
765
+ if (dbi.has("config")) {
766
+ // ...
767
+ }
768
+
769
+ // Delete data
770
+ dbi.delete("cache");
771
+ ```
772
+
773
+ ### Constructor Data
774
+
775
+ ```javascript
776
+ const dbi = createDBI("my-bot", {
777
+ data: {
778
+ other: {
779
+ // Pre-populated data
780
+ startTime: Date.now(),
781
+ version: "1.0.0",
782
+ customData: {}
783
+ },
784
+ refs: new Map() // Pre-existing references
785
+ }
786
+ });
787
+ ```
788
+
789
+ ### Accessing Registered Features
790
+
791
+ ```javascript
792
+ // Get an interaction by name
793
+ const ping = dbi.interaction("ping");
794
+ const button = dbi.interaction("my-button");
795
+
796
+ // Get an event by ID
797
+ const readyEvent = dbi.event("ready-handler");
798
+
799
+ // Get a locale by name
800
+ const enLocale = dbi.locale("en");
801
+
802
+ // Access collections directly
803
+ const allInteractions = dbi.data.interactions; // Discord.Collection
804
+ const allEvents = dbi.data.events;
805
+ const allLocales = dbi.data.locales;
806
+ ```
807
+
808
+ ---
809
+
810
+ ## Strict Mode
811
+
812
+ Strict mode enforces best practices:
813
+
814
+ ```javascript
815
+ const dbi = createDBI("my-bot", {
816
+ strict: true // Default is true
817
+ });
818
+ ```
819
+
820
+ With strict mode:
821
+ - Duplicate interaction names throw errors
822
+ - Duplicate event IDs throw errors
823
+ - Duplicate locale names throw errors
824
+ - Custom IDs over 100 characters throw errors
825
+ - Missing event IDs throw errors
826
+
827
+ Without strict mode:
828
+ - Duplicates are silently ignored/overwritten
829
+ - Long custom IDs are truncated
830
+
831
+ ---
832
+
833
+ ## Next Steps
834
+
835
+ - [Svelte Components](./SVELTE_COMPONENTS.md) - Build reactive Discord UIs
836
+ - [API Reference](./API_REFERENCE.md) - Complete API documentation