@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,773 @@
1
+ # Localization Guide
2
+
3
+ DBI provides a comprehensive localization system for creating multi-language Discord bots. This guide covers both content localization (text translations) and interaction localization (command names and descriptions).
4
+
5
+ ---
6
+
7
+ ## Table of Contents
8
+
9
+ - [Content Localization](#content-localization)
10
+ - [Interaction Localization](#interaction-localization)
11
+ - [Using Locales](#using-locales)
12
+ - [Dynamic Locale Selection](#dynamic-locale-selection)
13
+ - [Best Practices](#best-practices)
14
+
15
+ ---
16
+
17
+ ## Content Localization
18
+
19
+ Content localization translates the text your bot sends in messages, embeds, and replies.
20
+
21
+ ### Basic Locale Definition
22
+
23
+ ```javascript
24
+ dbi.register(({ Locale }) => {
25
+ // English locale
26
+ Locale({
27
+ name: "en",
28
+ data: {
29
+ greeting: "Hello!",
30
+ goodbye: "Goodbye!",
31
+ welcome: "Welcome to our server!",
32
+ help: {
33
+ title: "Help Menu",
34
+ description: "Here are the available commands:"
35
+ }
36
+ }
37
+ });
38
+
39
+ // Turkish locale
40
+ Locale({
41
+ name: "tr",
42
+ data: {
43
+ greeting: "Merhaba!",
44
+ goodbye: "Hoşça kal!",
45
+ welcome: "Sunucumuza hoş geldiniz!",
46
+ help: {
47
+ title: "Yardım Menüsü",
48
+ description: "İşte mevcut komutlar:"
49
+ }
50
+ }
51
+ });
52
+
53
+ // Spanish locale
54
+ Locale({
55
+ name: "es",
56
+ data: {
57
+ greeting: "¡Hola!",
58
+ goodbye: "¡Adiós!",
59
+ welcome: "¡Bienvenido a nuestro servidor!",
60
+ help: {
61
+ title: "Menú de Ayuda",
62
+ description: "Aquí están los comandos disponibles:"
63
+ }
64
+ }
65
+ });
66
+ });
67
+ ```
68
+
69
+ ### Using Variables in Translations
70
+
71
+ Use `{0}`, `{1}`, etc. as placeholders:
72
+
73
+ ```javascript
74
+ dbi.register(({ Locale }) => {
75
+ Locale({
76
+ name: "en",
77
+ data: {
78
+ // Simple variable
79
+ welcomeUser: "Welcome, {0}!",
80
+
81
+ // Multiple variables
82
+ levelUp: "{0} reached level {1}!",
83
+
84
+ // Complex message
85
+ orderConfirm: "Order #{0} confirmed. Total: ${1}. Ships to: {2}",
86
+
87
+ // Nested with variables
88
+ messages: {
89
+ ban: "{0} has been banned by {1}. Reason: {2}",
90
+ kick: "{0} has been kicked by {1}."
91
+ }
92
+ }
93
+ });
94
+
95
+ Locale({
96
+ name: "tr",
97
+ data: {
98
+ welcomeUser: "Hoş geldin, {0}!",
99
+ levelUp: "{0} seviye {1}'e ulaştı!",
100
+ orderConfirm: "Sipariş #{0} onaylandı. Toplam: {1}₺. Teslimat: {2}",
101
+ messages: {
102
+ ban: "{0}, {1} tarafından yasaklandı. Sebep: {2}",
103
+ kick: "{0}, {1} tarafından atıldı."
104
+ }
105
+ }
106
+ });
107
+ });
108
+ ```
109
+
110
+ ### Nested Locale Structure
111
+
112
+ Organize translations with nested objects:
113
+
114
+ ```javascript
115
+ dbi.register(({ Locale }) => {
116
+ Locale({
117
+ name: "en",
118
+ data: {
119
+ commands: {
120
+ help: {
121
+ title: "Help",
122
+ description: "List of commands",
123
+ noCommands: "No commands available"
124
+ },
125
+ settings: {
126
+ title: "Settings",
127
+ language: "Language",
128
+ notifications: "Notifications"
129
+ }
130
+ },
131
+ errors: {
132
+ notFound: "Item not found",
133
+ noPermission: "You don't have permission",
134
+ cooldown: "Please wait {0} seconds"
135
+ },
136
+ success: {
137
+ saved: "Settings saved!",
138
+ deleted: "Item deleted!"
139
+ }
140
+ }
141
+ });
142
+ });
143
+ ```
144
+
145
+ ---
146
+
147
+ ## Interaction Localization
148
+
149
+ Interaction localization translates command names, descriptions, options, and choices as they appear in Discord's UI.
150
+
151
+ ### Basic Interaction Locale
152
+
153
+ ```javascript
154
+ dbi.register(({ ChatInput, ChatInputOptions, InteractionLocale }) => {
155
+ // Define the command with your primary language
156
+ ChatInput({
157
+ name: "ayarlar",
158
+ description: "Bot ayarlarını değiştir",
159
+ options: [
160
+ ChatInputOptions.string({
161
+ name: "dil",
162
+ description: "Tercih ettiğiniz dil",
163
+ required: true,
164
+ choices: [
165
+ { name: "Türkçe", value: "tr" },
166
+ { name: "İngilizce", value: "en" }
167
+ ]
168
+ })
169
+ ],
170
+ onExecute({ interaction }) {
171
+ const lang = interaction.options.getString("dil");
172
+ interaction.reply(`Dil: ${lang}`);
173
+ }
174
+ });
175
+
176
+ // Add translations for other languages
177
+ InteractionLocale({
178
+ name: "ayarlar", // Must match the command name
179
+ data: {
180
+ // English translation
181
+ en: {
182
+ name: "settings",
183
+ description: "Change bot settings",
184
+ options: {
185
+ dil: {
186
+ name: "language",
187
+ description: "Your preferred language",
188
+ choices: {
189
+ "Türkçe": "Turkish",
190
+ "İngilizce": "English"
191
+ }
192
+ }
193
+ }
194
+ },
195
+
196
+ // Spanish translation
197
+ es: {
198
+ name: "ajustes",
199
+ description: "Cambiar configuración del bot",
200
+ options: {
201
+ dil: {
202
+ name: "idioma",
203
+ description: "Tu idioma preferido",
204
+ choices: {
205
+ "Türkçe": "Turco",
206
+ "İngilizce": "Inglés"
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
212
+ });
213
+ });
214
+ ```
215
+
216
+ ### Localization Structure
217
+
218
+ The `InteractionLocale` data structure follows this pattern:
219
+
220
+ ```javascript
221
+ InteractionLocale({
222
+ name: "command-name", // Original command name
223
+ data: {
224
+ "locale-code": {
225
+ name: "translated-name", // Command name
226
+ description: "translated-desc", // Command description
227
+ options: {
228
+ "original-option-name": {
229
+ name: "translated-option",
230
+ description: "translated-desc",
231
+ choices: {
232
+ "Original Choice": "Translated Choice"
233
+ }
234
+ }
235
+ }
236
+ }
237
+ }
238
+ });
239
+ ```
240
+
241
+ ### Supported Locale Codes
242
+
243
+ Discord supports these locale codes:
244
+
245
+ | Code | Language |
246
+ |------|----------|
247
+ | `en` | English |
248
+ | `bg` | Bulgarian |
249
+ | `zh` | Chinese |
250
+ | `hr` | Croatian |
251
+ | `cs` | Czech |
252
+ | `da` | Danish |
253
+ | `nl` | Dutch |
254
+ | `fi` | Finnish |
255
+ | `fr` | French |
256
+ | `de` | German |
257
+ | `el` | Greek |
258
+ | `hi` | Hindi |
259
+ | `hu` | Hungarian |
260
+ | `it` | Italian |
261
+ | `ja` | Japanese |
262
+ | `ko` | Korean |
263
+ | `no` | Norwegian |
264
+ | `pl` | Polish |
265
+ | `pt` | Portuguese |
266
+ | `ro` | Romanian |
267
+ | `ru` | Russian |
268
+ | `es` | Spanish |
269
+ | `sv` | Swedish |
270
+ | `th` | Thai |
271
+ | `tr` | Turkish |
272
+ | `uk` | Ukrainian |
273
+ | `vi` | Vietnamese |
274
+
275
+ ---
276
+
277
+ ## Using Locales
278
+
279
+ ### In Interactions
280
+
281
+ Access locales through the `locale` object in execution context:
282
+
283
+ ```javascript
284
+ dbi.register(({ ChatInput }) => {
285
+ ChatInput({
286
+ name: "greet",
287
+ description: "Greet the user",
288
+
289
+ onExecute({ interaction, locale }) {
290
+ // User's locale (based on Discord client language)
291
+ const userGreeting = locale.user.data.greeting();
292
+
293
+ // Guild's locale (based on guild's preferred locale)
294
+ const guildGreeting = locale.guild?.data.greeting?.();
295
+
296
+ interaction.reply(userGreeting);
297
+ }
298
+ });
299
+ });
300
+ ```
301
+
302
+ ### Function-style Access
303
+
304
+ Locale values are accessed as functions, allowing for variable substitution:
305
+
306
+ ```javascript
307
+ dbi.register(({ Locale, ChatInput }) => {
308
+ Locale({
309
+ name: "en",
310
+ data: {
311
+ welcome: "Welcome, {0}!",
312
+ levelUp: "{0} reached level {1}! 🎉"
313
+ }
314
+ });
315
+
316
+ ChatInput({
317
+ name: "welcome",
318
+ description: "Welcome someone",
319
+ options: [/* user option */],
320
+
321
+ onExecute({ interaction, locale }) {
322
+ const user = interaction.options.getUser("user");
323
+
324
+ // Pass variables to the locale function
325
+ const message = locale.user.data.welcome(user.username);
326
+
327
+ interaction.reply(message);
328
+ // Output: "Welcome, John!"
329
+ }
330
+ });
331
+ });
332
+ ```
333
+
334
+ ### Path-based Access
335
+
336
+ Access nested paths as chained function calls:
337
+
338
+ ```javascript
339
+ dbi.register(({ Locale, ChatInput }) => {
340
+ Locale({
341
+ name: "en",
342
+ data: {
343
+ commands: {
344
+ help: {
345
+ title: "Help Menu",
346
+ footer: "Page {0} of {1}"
347
+ }
348
+ }
349
+ }
350
+ });
351
+
352
+ ChatInput({
353
+ name: "help",
354
+ description: "Show help",
355
+
356
+ onExecute({ interaction, locale }) {
357
+ // Chain to access nested values
358
+ const title = locale.user.data.commands.help.title();
359
+ const footer = locale.user.data.commands.help.footer(1, 5);
360
+
361
+ interaction.reply({
362
+ embeds: [{
363
+ title: title,
364
+ footer: { text: footer }
365
+ }]
366
+ });
367
+ }
368
+ });
369
+ });
370
+ ```
371
+
372
+ ### Alternative Access Methods
373
+
374
+ ```javascript
375
+ // Using the get() method for dynamic paths
376
+ const path = "commands.help.title";
377
+ const value = locale.user.get(path); // Returns raw string or null
378
+
379
+ // Using format() for dynamic paths with variables
380
+ const formatted = locale.user.format("commands.help.footer", 1, 5);
381
+ ```
382
+
383
+ ### Accessing Locale by Name
384
+
385
+ ```javascript
386
+ dbi.register(({ ChatInput }) => {
387
+ ChatInput({
388
+ name: "translate",
389
+ description: "Show translation",
390
+
391
+ onExecute({ interaction, dbi }) {
392
+ // Get a specific locale by name
393
+ const enLocale = dbi.locale("en");
394
+ const trLocale = dbi.locale("tr");
395
+
396
+ const enGreeting = enLocale.data.greeting();
397
+ const trGreeting = trLocale.data.greeting();
398
+
399
+ interaction.reply(`EN: ${enGreeting}\nTR: ${trGreeting}`);
400
+ }
401
+ });
402
+ });
403
+ ```
404
+
405
+ ---
406
+
407
+ ## Dynamic Locale Selection
408
+
409
+ ### Based on User Settings
410
+
411
+ ```javascript
412
+ dbi.register(({ ChatInput }) => {
413
+ ChatInput({
414
+ name: "message",
415
+ description: "Send a message",
416
+
417
+ async onExecute({ interaction, dbi }) {
418
+ // Get user's saved language preference from database
419
+ const userLang = await getUserLanguage(interaction.user.id);
420
+
421
+ // Get the locale
422
+ const locale = dbi.locale(userLang) || dbi.locale("en");
423
+
424
+ const message = locale.data.welcomeMessage();
425
+ interaction.reply(message);
426
+ }
427
+ });
428
+ });
429
+ ```
430
+
431
+ ### Based on Guild Settings
432
+
433
+ ```javascript
434
+ dbi.register(({ Event }) => {
435
+ Event({
436
+ name: "guildMemberAdd",
437
+ id: "welcome-message",
438
+
439
+ async onExecute({ member, locale }) {
440
+ // Use guild's locale or default
441
+ const guildLocale = locale?.guild || dbi.locale("en");
442
+ const message = guildLocale.data.welcome(member.user.username);
443
+
444
+ const channel = member.guild.systemChannel;
445
+ if (channel) {
446
+ await channel.send(message);
447
+ }
448
+ }
449
+ });
450
+ });
451
+ ```
452
+
453
+ ---
454
+
455
+ ## Merging Locales
456
+
457
+ Locales with the same name are automatically merged:
458
+
459
+ ```javascript
460
+ // File 1: Base translations
461
+ dbi.register(({ Locale }) => {
462
+ Locale({
463
+ name: "en",
464
+ data: {
465
+ common: {
466
+ yes: "Yes",
467
+ no: "No",
468
+ cancel: "Cancel"
469
+ }
470
+ }
471
+ });
472
+ });
473
+
474
+ // File 2: Feature-specific translations
475
+ dbi.register(({ Locale }) => {
476
+ Locale({
477
+ name: "en",
478
+ data: {
479
+ shop: {
480
+ buy: "Buy",
481
+ sell: "Sell",
482
+ cart: "Cart"
483
+ }
484
+ }
485
+ });
486
+ });
487
+
488
+ // Result: Both 'common' and 'shop' are available in 'en' locale
489
+ ```
490
+
491
+ ---
492
+
493
+ ## Handling Missing Translations
494
+
495
+ ### Default Invalid Path Handler
496
+
497
+ ```javascript
498
+ const dbi = createDBI("my-bot", {
499
+ defaults: {
500
+ locale: {
501
+ name: "en",
502
+
503
+ // Custom message for missing translations
504
+ invalidPath: ({ path, locale }) => {
505
+ console.warn(`Missing translation: ${path} in ${locale.name}`);
506
+ return `[Missing: ${path}]`;
507
+ }
508
+ }
509
+ }
510
+ });
511
+ ```
512
+
513
+ ### Fallback to Default Locale
514
+
515
+ DBI automatically falls back to the default locale when a path is missing:
516
+
517
+ ```javascript
518
+ dbi.register(({ Locale }) => {
519
+ Locale({
520
+ name: "en",
521
+ data: {
522
+ greeting: "Hello!",
523
+ special: "Special message"
524
+ }
525
+ });
526
+
527
+ Locale({
528
+ name: "tr",
529
+ data: {
530
+ greeting: "Merhaba!"
531
+ // 'special' is missing - will fall back to English
532
+ }
533
+ });
534
+ });
535
+
536
+ // In a Turkish context:
537
+ const message = locale.user.data.special();
538
+ // Returns "Special message" (fallback to English)
539
+ ```
540
+
541
+ ---
542
+
543
+ ## Best Practices
544
+
545
+ ### 1. Organize by Feature
546
+
547
+ ```
548
+ src/
549
+ ├── locales/
550
+ │ ├── en/
551
+ │ │ ├── common.js
552
+ │ │ ├── commands.js
553
+ │ │ └── errors.js
554
+ │ └── tr/
555
+ │ ├── common.js
556
+ │ ├── commands.js
557
+ │ └── errors.js
558
+ ```
559
+
560
+ ### 2. Use Consistent Keys
561
+
562
+ ```javascript
563
+ // ✅ Good - Consistent naming
564
+ data: {
565
+ commands: {
566
+ help: { title: "...", description: "..." },
567
+ settings: { title: "...", description: "..." }
568
+ }
569
+ }
570
+
571
+ // ❌ Bad - Inconsistent naming
572
+ data: {
573
+ helpTitle: "...",
574
+ help_description: "...",
575
+ settingsHeader: "..."
576
+ }
577
+ ```
578
+
579
+ ### 3. Include Context for Translators
580
+
581
+ ```javascript
582
+ Locale({
583
+ name: "en",
584
+ data: {
585
+ // {0} = username, {1} = level number
586
+ levelUp: "{0} reached level {1}!",
587
+
588
+ // {0} = item name, {1} = price in dollars
589
+ itemPurchased: "Purchased {0} for ${1}!"
590
+ }
591
+ });
592
+ ```
593
+
594
+ ### 4. Test All Locales
595
+
596
+ ```javascript
597
+ // Helper to test all locale paths
598
+ function testLocales(dbi) {
599
+ const paths = ["greeting", "goodbye", "commands.help.title"];
600
+ const locales = ["en", "tr", "es"];
601
+
602
+ for (const localeName of locales) {
603
+ const locale = dbi.locale(localeName);
604
+ if (!locale) {
605
+ console.warn(`Missing locale: ${localeName}`);
606
+ continue;
607
+ }
608
+
609
+ for (const path of paths) {
610
+ const value = locale.get(path);
611
+ if (!value) {
612
+ console.warn(`Missing: ${localeName}.${path}`);
613
+ }
614
+ }
615
+ }
616
+ }
617
+ ```
618
+
619
+ ### 5. Handle Pluralization
620
+
621
+ ```javascript
622
+ Locale({
623
+ name: "en",
624
+ data: {
625
+ items: {
626
+ one: "1 item",
627
+ many: "{0} items"
628
+ }
629
+ }
630
+ });
631
+
632
+ // Usage
633
+ function formatItems(count, locale) {
634
+ if (count === 1) {
635
+ return locale.data.items.one();
636
+ }
637
+ return locale.data.items.many(count);
638
+ }
639
+ ```
640
+
641
+ ### 6. Use Conditional Registration
642
+
643
+ ```javascript
644
+ dbi.register(({ Locale }) => {
645
+ Locale({
646
+ name: "de",
647
+ flag: "german", // Only load with 'german' flag
648
+ data: {
649
+ greeting: "Hallo!"
650
+ }
651
+ });
652
+ });
653
+
654
+ // Load with German locale
655
+ await dbi.load("german");
656
+ ```
657
+
658
+ ---
659
+
660
+ ## Complete Example
661
+
662
+ ### File Structure
663
+
664
+ ```
665
+ src/
666
+ ├── locales/
667
+ │ ├── index.js
668
+ │ ├── en.js
669
+ │ └── tr.js
670
+ ├── commands/
671
+ │ └── shop.js
672
+ └── interactions/
673
+ └── shop.locale.js
674
+ ```
675
+
676
+ ### en.js
677
+
678
+ ```javascript
679
+ const dbi = require("../../dbi");
680
+
681
+ dbi.register(({ Locale }) => {
682
+ Locale({
683
+ name: "en",
684
+ data: {
685
+ shop: {
686
+ title: "🛒 Shop",
687
+ welcome: "Welcome to the shop, {0}!",
688
+ balance: "Your balance: ${0}",
689
+ items: {
690
+ sword: { name: "Sword", description: "A sharp blade" },
691
+ shield: { name: "Shield", description: "Protective armor" }
692
+ },
693
+ purchase: {
694
+ success: "Successfully purchased {0}!",
695
+ noFunds: "You don't have enough funds!",
696
+ confirm: "Buy {0} for ${1}?"
697
+ }
698
+ }
699
+ }
700
+ });
701
+ });
702
+ ```
703
+
704
+ ### tr.js
705
+
706
+ ```javascript
707
+ const dbi = require("../../dbi");
708
+
709
+ dbi.register(({ Locale }) => {
710
+ Locale({
711
+ name: "tr",
712
+ data: {
713
+ shop: {
714
+ title: "🛒 Mağaza",
715
+ welcome: "Mağazaya hoş geldin, {0}!",
716
+ balance: "Bakiyen: {0}₺",
717
+ items: {
718
+ sword: { name: "Kılıç", description: "Keskin bir bıçak" },
719
+ shield: { name: "Kalkan", description: "Koruyucu zırh" }
720
+ },
721
+ purchase: {
722
+ success: "{0} başarıyla satın alındı!",
723
+ noFunds: "Yeterli bakiyen yok!",
724
+ confirm: "{0}'ı {1}₺'ye satın al?"
725
+ }
726
+ }
727
+ }
728
+ });
729
+ });
730
+ ```
731
+
732
+ ### shop.js
733
+
734
+ ```javascript
735
+ const dbi = require("../../dbi");
736
+
737
+ dbi.register(({ ChatInput }) => {
738
+ ChatInput({
739
+ name: "shop",
740
+ description: "Open the shop",
741
+
742
+ onExecute({ interaction, locale }) {
743
+ const t = locale.user.data.shop;
744
+
745
+ interaction.reply({
746
+ embeds: [{
747
+ title: t.title(),
748
+ description: t.welcome(interaction.user.username),
749
+ fields: [
750
+ {
751
+ name: t.items.sword.name(),
752
+ value: t.items.sword.description()
753
+ },
754
+ {
755
+ name: t.items.shield.name(),
756
+ value: t.items.shield.description()
757
+ }
758
+ ],
759
+ footer: { text: t.balance(100) }
760
+ }]
761
+ });
762
+ }
763
+ });
764
+ });
765
+ ```
766
+
767
+ ---
768
+
769
+ ## Next Steps
770
+
771
+ - [Advanced Features](./ADVANCED_FEATURES.md) - Message commands, multi-client
772
+ - [Svelte Components](./SVELTE_COMPONENTS.md) - Reactive UI components
773
+ - [API Reference](./API_REFERENCE.md) - Complete API documentation