@erinjs/core 1.0.0 → 1.2.4

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 (394) hide show
  1. package/{core/LICENSE → LICENSE} +203 -203
  2. package/README.md +46 -0
  3. package/dist/index.d.mts +2084 -0
  4. package/dist/index.d.ts +2084 -0
  5. package/dist/index.js +3867 -0
  6. package/dist/index.mjs +3809 -0
  7. package/package.json +50 -15
  8. package/core/.changeset/README.md +0 -8
  9. package/core/.changeset/community-bootstrap-release.md +0 -17
  10. package/core/.changeset/config.json +0 -11
  11. package/core/.changeset/no-changelog.js +0 -16
  12. package/core/.changeset/pre.json +0 -17
  13. package/core/.editorconfig +0 -13
  14. package/core/.gitattributes +0 -2
  15. package/core/.github/CODE_OF_CONDUCT.md +0 -23
  16. package/core/.github/FUNDING.yml +0 -7
  17. package/core/.github/ISSUE_TEMPLATE/bug_report.md +0 -31
  18. package/core/.github/ISSUE_TEMPLATE/feature_request.md +0 -23
  19. package/core/.github/PULL_REQUEST_TEMPLATE.md +0 -16
  20. package/core/.github/dependabot.yml +0 -16
  21. package/core/.github/workflows/autoapp.yml +0 -16
  22. package/core/.github/workflows/ci.yml +0 -187
  23. package/core/.github/workflows/codeql.yml +0 -30
  24. package/core/.github/workflows/deploy-docs.yml +0 -54
  25. package/core/.github/workflows/publish.yml +0 -43
  26. package/core/.lintstagedrc.json +0 -4
  27. package/core/.nvmrc +0 -1
  28. package/core/.prettierignore +0 -8
  29. package/core/.prettierrc +0 -11
  30. package/core/CONTRIBUTING.md +0 -70
  31. package/core/README.md +0 -61
  32. package/core/SECURITY.md +0 -21
  33. package/core/apps/docs/index.html +0 -28
  34. package/core/apps/docs/middleware.ts +0 -21
  35. package/core/apps/docs/package.json +0 -33
  36. package/core/apps/docs/public/@flux.png +0 -0
  37. package/core/apps/docs/public/docs/latest/guides.json +0 -1420
  38. package/core/apps/docs/public/docs/latest/main.json +0 -14981
  39. package/core/apps/docs/public/docs/latest/rag-index.json +0 -1
  40. package/core/apps/docs/public/docs/v1.0.5/guides.json +0 -226
  41. package/core/apps/docs/public/docs/v1.0.5/main.json +0 -7920
  42. package/core/apps/docs/public/docs/v1.0.6/guides.json +0 -226
  43. package/core/apps/docs/public/docs/v1.0.6/main.json +0 -7920
  44. package/core/apps/docs/public/docs/v1.0.7/guides.json +0 -259
  45. package/core/apps/docs/public/docs/v1.0.7/main.json +0 -8652
  46. package/core/apps/docs/public/docs/v1.0.8/guides.json +0 -313
  47. package/core/apps/docs/public/docs/v1.0.8/main.json +0 -9618
  48. package/core/apps/docs/public/docs/v1.0.9/guides.json +0 -319
  49. package/core/apps/docs/public/docs/v1.0.9/main.json +0 -10694
  50. package/core/apps/docs/public/docs/v1.1.0/guides.json +0 -589
  51. package/core/apps/docs/public/docs/v1.1.0/main.json +0 -12576
  52. package/core/apps/docs/public/docs/v1.1.2/guides.json +0 -650
  53. package/core/apps/docs/public/docs/v1.1.2/main.json +0 -13239
  54. package/core/apps/docs/public/docs/v1.1.3/guides.json +0 -650
  55. package/core/apps/docs/public/docs/v1.1.3/main.json +0 -13239
  56. package/core/apps/docs/public/docs/v1.1.4/guides.json +0 -708
  57. package/core/apps/docs/public/docs/v1.1.4/main.json +0 -13231
  58. package/core/apps/docs/public/docs/v1.1.5/guides.json +0 -1035
  59. package/core/apps/docs/public/docs/v1.1.5/main.json +0 -13838
  60. package/core/apps/docs/public/docs/v1.1.6/guides.json +0 -1041
  61. package/core/apps/docs/public/docs/v1.1.6/main.json +0 -14313
  62. package/core/apps/docs/public/docs/v1.1.8/guides.json +0 -1047
  63. package/core/apps/docs/public/docs/v1.1.8/main.json +0 -14421
  64. package/core/apps/docs/public/docs/v1.1.9/guides.json +0 -1047
  65. package/core/apps/docs/public/docs/v1.1.9/main.json +0 -14421
  66. package/core/apps/docs/public/docs/v1.2.0/guides.json +0 -1212
  67. package/core/apps/docs/public/docs/v1.2.0/main.json +0 -14663
  68. package/core/apps/docs/public/docs/v1.2.1/guides.json +0 -1293
  69. package/core/apps/docs/public/docs/v1.2.1/main.json +0 -14828
  70. package/core/apps/docs/public/docs/v1.2.2/guides.json +0 -1293
  71. package/core/apps/docs/public/docs/v1.2.2/main.json +0 -15025
  72. package/core/apps/docs/public/docs/v1.2.3/guides.json +0 -1420
  73. package/core/apps/docs/public/docs/v1.2.3/main.json +0 -14954
  74. package/core/apps/docs/public/docs/v1.2.4/guides.json +0 -1420
  75. package/core/apps/docs/public/docs/v1.2.4/main.json +0 -14981
  76. package/core/apps/docs/public/docs/versions.json +0 -24
  77. package/core/apps/docs/public/flux.png +0 -0
  78. package/core/apps/docs/public/locales/en.json +0 -50
  79. package/core/apps/docs/public/locales/guides-en.json +0 -512
  80. package/core/apps/docs/public/robots.txt +0 -4
  81. package/core/apps/docs/public/sitemap.xml +0 -33
  82. package/core/apps/docs/src/App.vue +0 -538
  83. package/core/apps/docs/src/components/ApiCategorySection.vue +0 -42
  84. package/core/apps/docs/src/components/ApiDiscordCompat.vue +0 -65
  85. package/core/apps/docs/src/components/ApiEndpointCard.vue +0 -313
  86. package/core/apps/docs/src/components/ApiSchemaBlock.vue +0 -131
  87. package/core/apps/docs/src/components/CodeBlock.vue +0 -177
  88. package/core/apps/docs/src/components/CommunityCallout.vue +0 -90
  89. package/core/apps/docs/src/components/ConstructorSection.vue +0 -82
  90. package/core/apps/docs/src/components/DocDescription.vue +0 -40
  91. package/core/apps/docs/src/components/FluxerLogo.vue +0 -3
  92. package/core/apps/docs/src/components/Footer.vue +0 -106
  93. package/core/apps/docs/src/components/GuideCodeBlock.vue +0 -102
  94. package/core/apps/docs/src/components/GuideDiscordCompat.vue +0 -77
  95. package/core/apps/docs/src/components/GuideDiscordCompatCallout.vue +0 -83
  96. package/core/apps/docs/src/components/GuideTable.vue +0 -77
  97. package/core/apps/docs/src/components/GuideTip.vue +0 -38
  98. package/core/apps/docs/src/components/MethodsSection.vue +0 -195
  99. package/core/apps/docs/src/components/ParamsTable.vue +0 -70
  100. package/core/apps/docs/src/components/PropertiesSection.vue +0 -143
  101. package/core/apps/docs/src/components/SearchBar.vue +0 -76
  102. package/core/apps/docs/src/components/SearchModal.vue +0 -361
  103. package/core/apps/docs/src/components/SidebarNav.vue +0 -225
  104. package/core/apps/docs/src/components/SponsorBanner.vue +0 -153
  105. package/core/apps/docs/src/components/TypeSignature.vue +0 -187
  106. package/core/apps/docs/src/components/VersionPicker.vue +0 -191
  107. package/core/apps/docs/src/composables/useSearchIndex.ts +0 -144
  108. package/core/apps/docs/src/composables/useVersionedPath.ts +0 -20
  109. package/core/apps/docs/src/data/apiEndpoints.ts +0 -1073
  110. package/core/apps/docs/src/data/changelog.ts +0 -717
  111. package/core/apps/docs/src/data/guides.ts +0 -2362
  112. package/core/apps/docs/src/env.d.ts +0 -7
  113. package/core/apps/docs/src/locales/guides-en.json +0 -512
  114. package/core/apps/docs/src/main.ts +0 -27
  115. package/core/apps/docs/src/pages/ApiReferenceLayout.vue +0 -175
  116. package/core/apps/docs/src/pages/ApiReferencePage.vue +0 -128
  117. package/core/apps/docs/src/pages/Changelog.vue +0 -288
  118. package/core/apps/docs/src/pages/ClassPage.vue +0 -319
  119. package/core/apps/docs/src/pages/ClassesList.vue +0 -100
  120. package/core/apps/docs/src/pages/DocsLayout.vue +0 -127
  121. package/core/apps/docs/src/pages/GuidePage.vue +0 -279
  122. package/core/apps/docs/src/pages/GuidesIndex.vue +0 -166
  123. package/core/apps/docs/src/pages/GuidesLayout.vue +0 -245
  124. package/core/apps/docs/src/pages/Home.vue +0 -125
  125. package/core/apps/docs/src/pages/NotFound.vue +0 -57
  126. package/core/apps/docs/src/pages/TypedefPage.vue +0 -230
  127. package/core/apps/docs/src/pages/TypedefsList.vue +0 -168
  128. package/core/apps/docs/src/pages/VersionLayout.vue +0 -15
  129. package/core/apps/docs/src/router.ts +0 -73
  130. package/core/apps/docs/src/stores/docs.ts +0 -54
  131. package/core/apps/docs/src/stores/guides.ts +0 -53
  132. package/core/apps/docs/src/stores/version.ts +0 -67
  133. package/core/apps/docs/src/styles/main.css +0 -278
  134. package/core/apps/docs/src/styles/prism.css +0 -95
  135. package/core/apps/docs/src/types/doc-schema.ts +0 -112
  136. package/core/apps/docs/tsconfig.json +0 -17
  137. package/core/apps/docs/tsconfig.node.json +0 -10
  138. package/core/apps/docs/vite.config.d.ts +0 -2
  139. package/core/apps/docs/vite.config.js +0 -26
  140. package/core/apps/docs/vite.config.ts +0 -28
  141. package/core/apps/docs-vitepress/.vitepress/config.ts +0 -141
  142. package/core/apps/docs-vitepress/api-data/latest/main.json +0 -15035
  143. package/core/apps/docs-vitepress/api-data/v1.2.4/main.json +0 -15035
  144. package/core/apps/docs-vitepress/api-data/versions.json +0 -6
  145. package/core/apps/docs-vitepress/index.md +0 -15
  146. package/core/apps/docs-vitepress/package-lock.json +0 -2924
  147. package/core/apps/docs-vitepress/package.json +0 -20
  148. package/core/apps/docs-vitepress/public/CNAME +0 -1
  149. package/core/apps/docs-vitepress/scripts/generate-api.ts +0 -243
  150. package/core/apps/docs-vitepress/scripts/migrate-guides.ts +0 -129
  151. package/core/apps/docs-vitepress/tsconfig.json +0 -11
  152. package/core/apps/docs-vitepress/v/latest/guides/attachments-by-url.md +0 -57
  153. package/core/apps/docs-vitepress/v/latest/guides/attachments.md +0 -62
  154. package/core/apps/docs-vitepress/v/latest/guides/basic-bot.md +0 -49
  155. package/core/apps/docs-vitepress/v/latest/guides/channels.md +0 -180
  156. package/core/apps/docs-vitepress/v/latest/guides/deprecated-apis.md +0 -58
  157. package/core/apps/docs-vitepress/v/latest/guides/discord-js-compatibility.md +0 -42
  158. package/core/apps/docs-vitepress/v/latest/guides/editing-embeds.md +0 -65
  159. package/core/apps/docs-vitepress/v/latest/guides/embed-media.md +0 -87
  160. package/core/apps/docs-vitepress/v/latest/guides/embeds.md +0 -166
  161. package/core/apps/docs-vitepress/v/latest/guides/emojis.md +0 -77
  162. package/core/apps/docs-vitepress/v/latest/guides/events.md +0 -202
  163. package/core/apps/docs-vitepress/v/latest/guides/gifs.md +0 -47
  164. package/core/apps/docs-vitepress/v/latest/guides/installation.md +0 -10
  165. package/core/apps/docs-vitepress/v/latest/guides/moderation.md +0 -89
  166. package/core/apps/docs-vitepress/v/latest/guides/permissions.md +0 -130
  167. package/core/apps/docs-vitepress/v/latest/guides/prefix-commands.md +0 -41
  168. package/core/apps/docs-vitepress/v/latest/guides/profile-urls.md +0 -58
  169. package/core/apps/docs-vitepress/v/latest/guides/reactions.md +0 -69
  170. package/core/apps/docs-vitepress/v/latest/guides/roles.md +0 -130
  171. package/core/apps/docs-vitepress/v/latest/guides/sending-without-reply.md +0 -172
  172. package/core/apps/docs-vitepress/v/latest/guides/voice.md +0 -109
  173. package/core/apps/docs-vitepress/v/latest/guides/wait-for-guilds.md +0 -37
  174. package/core/apps/docs-vitepress/v/latest/guides/webhook-attachments-embeds.md +0 -73
  175. package/core/apps/docs-vitepress/v/latest/guides/webhooks.md +0 -131
  176. package/core/eslint.config.js +0 -80
  177. package/core/examples/.env.example +0 -22
  178. package/core/examples/README.md +0 -68
  179. package/core/examples/first-steps-bot.js +0 -118
  180. package/core/examples/minimal-bot.js +0 -17
  181. package/core/examples/moderation-bot.js +0 -209
  182. package/core/examples/package.json +0 -14
  183. package/core/examples/ping-bot.js +0 -1146
  184. package/core/examples/reaction-bot.js +0 -70
  185. package/core/examples/reaction-roles-bot.js +0 -140
  186. package/core/examples/webhook-bot.js +0 -239
  187. package/core/flux.png +0 -0
  188. package/core/package.json +0 -78
  189. package/core/packages/builders/package.json +0 -51
  190. package/core/packages/builders/src/index.ts +0 -13
  191. package/core/packages/builders/src/messages/AttachmentBuilder.test.ts +0 -79
  192. package/core/packages/builders/src/messages/AttachmentBuilder.ts +0 -69
  193. package/core/packages/builders/src/messages/EmbedBuilder.test.ts +0 -266
  194. package/core/packages/builders/src/messages/EmbedBuilder.ts +0 -239
  195. package/core/packages/builders/src/messages/MessagePayload.test.ts +0 -118
  196. package/core/packages/builders/src/messages/MessagePayload.ts +0 -122
  197. package/core/packages/builders/tsconfig.json +0 -9
  198. package/core/packages/builders/tsup.config.ts +0 -9
  199. package/core/packages/builders/vitest.config.ts +0 -9
  200. package/core/packages/collection/package.json +0 -47
  201. package/core/packages/collection/src/Collection.test.ts +0 -232
  202. package/core/packages/collection/src/Collection.ts +0 -196
  203. package/core/packages/collection/src/index.ts +0 -1
  204. package/core/packages/collection/tsconfig.json +0 -9
  205. package/core/packages/collection/tsup.config.ts +0 -9
  206. package/core/packages/collection/vitest.config.ts +0 -9
  207. package/core/packages/docgen/package.json +0 -26
  208. package/core/packages/docgen/src/extract.ts +0 -262
  209. package/core/packages/docgen/src/formatType.ts +0 -24
  210. package/core/packages/docgen/src/index.ts +0 -103
  211. package/core/packages/docgen/src/schema.ts +0 -100
  212. package/core/packages/docgen/src/visitor.ts +0 -147
  213. package/core/packages/docgen/tsconfig.json +0 -9
  214. package/core/packages/docgen/tsup.config.ts +0 -9
  215. package/core/packages/fluxer-core/README.md +0 -26
  216. package/core/packages/fluxer-core/package.json +0 -60
  217. package/core/packages/fluxer-core/src/client/ChannelManager.ts +0 -143
  218. package/core/packages/fluxer-core/src/client/Client.gateway.test.ts +0 -84
  219. package/core/packages/fluxer-core/src/client/Client.resolveEmoji.test.ts +0 -45
  220. package/core/packages/fluxer-core/src/client/Client.ts +0 -558
  221. package/core/packages/fluxer-core/src/client/ClientUser.ts +0 -40
  222. package/core/packages/fluxer-core/src/client/EventHandlerRegistry.ts +0 -469
  223. package/core/packages/fluxer-core/src/client/GuildManager.ts +0 -79
  224. package/core/packages/fluxer-core/src/client/GuildMemberManager.ts +0 -91
  225. package/core/packages/fluxer-core/src/client/MessageManager.ts +0 -58
  226. package/core/packages/fluxer-core/src/client/UsersManager.ts +0 -122
  227. package/core/packages/fluxer-core/src/errors/ErrorCodes.test.ts +0 -19
  228. package/core/packages/fluxer-core/src/errors/ErrorCodes.ts +0 -12
  229. package/core/packages/fluxer-core/src/errors/FluxerError.test.ts +0 -32
  230. package/core/packages/fluxer-core/src/errors/FluxerError.ts +0 -15
  231. package/core/packages/fluxer-core/src/index.ts +0 -85
  232. package/core/packages/fluxer-core/src/structures/Base.ts +0 -7
  233. package/core/packages/fluxer-core/src/structures/Channel.ts +0 -508
  234. package/core/packages/fluxer-core/src/structures/Guild.test.ts +0 -189
  235. package/core/packages/fluxer-core/src/structures/Guild.ts +0 -734
  236. package/core/packages/fluxer-core/src/structures/GuildBan.ts +0 -35
  237. package/core/packages/fluxer-core/src/structures/GuildEmoji.ts +0 -57
  238. package/core/packages/fluxer-core/src/structures/GuildMember.test.ts +0 -203
  239. package/core/packages/fluxer-core/src/structures/GuildMember.ts +0 -213
  240. package/core/packages/fluxer-core/src/structures/GuildMemberRoleManager.ts +0 -121
  241. package/core/packages/fluxer-core/src/structures/GuildSticker.ts +0 -56
  242. package/core/packages/fluxer-core/src/structures/Invite.test.ts +0 -103
  243. package/core/packages/fluxer-core/src/structures/Invite.ts +0 -121
  244. package/core/packages/fluxer-core/src/structures/Message.test.ts +0 -109
  245. package/core/packages/fluxer-core/src/structures/Message.ts +0 -397
  246. package/core/packages/fluxer-core/src/structures/MessageReaction.ts +0 -72
  247. package/core/packages/fluxer-core/src/structures/PartialMessage.ts +0 -12
  248. package/core/packages/fluxer-core/src/structures/Role.test.ts +0 -77
  249. package/core/packages/fluxer-core/src/structures/Role.ts +0 -112
  250. package/core/packages/fluxer-core/src/structures/User.test.ts +0 -110
  251. package/core/packages/fluxer-core/src/structures/User.ts +0 -109
  252. package/core/packages/fluxer-core/src/structures/Webhook.test.ts +0 -109
  253. package/core/packages/fluxer-core/src/structures/Webhook.ts +0 -258
  254. package/core/packages/fluxer-core/src/util/Constants.test.ts +0 -16
  255. package/core/packages/fluxer-core/src/util/Constants.ts +0 -7
  256. package/core/packages/fluxer-core/src/util/Events.ts +0 -46
  257. package/core/packages/fluxer-core/src/util/MessageCollector.ts +0 -87
  258. package/core/packages/fluxer-core/src/util/Options.ts +0 -33
  259. package/core/packages/fluxer-core/src/util/ReactionCollector.ts +0 -116
  260. package/core/packages/fluxer-core/src/util/cdn.test.ts +0 -108
  261. package/core/packages/fluxer-core/src/util/cdn.ts +0 -130
  262. package/core/packages/fluxer-core/src/util/guildUtils.ts +0 -33
  263. package/core/packages/fluxer-core/src/util/messageUtils.test.ts +0 -74
  264. package/core/packages/fluxer-core/src/util/messageUtils.ts +0 -119
  265. package/core/packages/fluxer-core/src/util/permissions.test.ts +0 -95
  266. package/core/packages/fluxer-core/src/util/permissions.ts +0 -43
  267. package/core/packages/fluxer-core/tsconfig.json +0 -9
  268. package/core/packages/fluxer-core/tsup.config.ts +0 -9
  269. package/core/packages/fluxer-core/vitest.config.ts +0 -9
  270. package/core/packages/rest/package.json +0 -52
  271. package/core/packages/rest/src/REST.test.ts +0 -64
  272. package/core/packages/rest/src/REST.ts +0 -90
  273. package/core/packages/rest/src/RateLimitManager.test.ts +0 -71
  274. package/core/packages/rest/src/RateLimitManager.ts +0 -60
  275. package/core/packages/rest/src/RequestManager.test.ts +0 -87
  276. package/core/packages/rest/src/RequestManager.ts +0 -172
  277. package/core/packages/rest/src/errors/FluxerAPIError.test.ts +0 -57
  278. package/core/packages/rest/src/errors/FluxerAPIError.ts +0 -21
  279. package/core/packages/rest/src/errors/HTTPError.test.ts +0 -55
  280. package/core/packages/rest/src/errors/HTTPError.ts +0 -25
  281. package/core/packages/rest/src/errors/RateLimitError.test.ts +0 -41
  282. package/core/packages/rest/src/errors/RateLimitError.ts +0 -15
  283. package/core/packages/rest/src/errors/index.ts +0 -3
  284. package/core/packages/rest/src/index.ts +0 -6
  285. package/core/packages/rest/src/utils/constants.test.ts +0 -31
  286. package/core/packages/rest/src/utils/constants.ts +0 -5
  287. package/core/packages/rest/src/utils/files.test.ts +0 -37
  288. package/core/packages/rest/src/utils/files.ts +0 -75
  289. package/core/packages/rest/tsconfig.json +0 -9
  290. package/core/packages/rest/tsup.config.ts +0 -9
  291. package/core/packages/rest/vitest.config.ts +0 -9
  292. package/core/packages/types/package.json +0 -46
  293. package/core/packages/types/src/api/ban.ts +0 -8
  294. package/core/packages/types/src/api/channel.ts +0 -65
  295. package/core/packages/types/src/api/embed.ts +0 -82
  296. package/core/packages/types/src/api/emoji.ts +0 -12
  297. package/core/packages/types/src/api/errors.ts +0 -68
  298. package/core/packages/types/src/api/gateway.ts +0 -14
  299. package/core/packages/types/src/api/guild.ts +0 -123
  300. package/core/packages/types/src/api/index.ts +0 -15
  301. package/core/packages/types/src/api/instance.ts +0 -32
  302. package/core/packages/types/src/api/interaction.ts +0 -26
  303. package/core/packages/types/src/api/invite.ts +0 -28
  304. package/core/packages/types/src/api/message.ts +0 -140
  305. package/core/packages/types/src/api/role.ts +0 -41
  306. package/core/packages/types/src/api/sticker.ts +0 -14
  307. package/core/packages/types/src/api/user.ts +0 -79
  308. package/core/packages/types/src/api/webhook.ts +0 -41
  309. package/core/packages/types/src/common/index.ts +0 -1
  310. package/core/packages/types/src/common/snowflake.test.ts +0 -9
  311. package/core/packages/types/src/common/snowflake.ts +0 -8
  312. package/core/packages/types/src/gateway/events.ts +0 -189
  313. package/core/packages/types/src/gateway/index.ts +0 -3
  314. package/core/packages/types/src/gateway/opcodes.ts +0 -17
  315. package/core/packages/types/src/gateway/payloads.ts +0 -481
  316. package/core/packages/types/src/index.ts +0 -4
  317. package/core/packages/types/src/rest/index.ts +0 -1
  318. package/core/packages/types/src/rest/routes.test.ts +0 -169
  319. package/core/packages/types/src/rest/routes.ts +0 -109
  320. package/core/packages/types/tsconfig.json +0 -9
  321. package/core/packages/types/tsup.config.ts +0 -9
  322. package/core/packages/types/vitest.config.ts +0 -9
  323. package/core/packages/util/package.json +0 -51
  324. package/core/packages/util/src/BitField.test.ts +0 -96
  325. package/core/packages/util/src/BitField.ts +0 -105
  326. package/core/packages/util/src/MessageFlagsBitField.test.ts +0 -42
  327. package/core/packages/util/src/MessageFlagsBitField.ts +0 -20
  328. package/core/packages/util/src/PermissionsBitField.test.ts +0 -79
  329. package/core/packages/util/src/PermissionsBitField.ts +0 -97
  330. package/core/packages/util/src/SnowflakeUtil.test.ts +0 -69
  331. package/core/packages/util/src/SnowflakeUtil.ts +0 -65
  332. package/core/packages/util/src/UserFlagsBitField.test.ts +0 -39
  333. package/core/packages/util/src/UserFlagsBitField.ts +0 -48
  334. package/core/packages/util/src/deprecation.test.ts +0 -44
  335. package/core/packages/util/src/deprecation.ts +0 -28
  336. package/core/packages/util/src/emojiShortcodes.generated.ts +0 -5
  337. package/core/packages/util/src/emojiShortcodes.test.ts +0 -41
  338. package/core/packages/util/src/emojiShortcodes.ts +0 -22
  339. package/core/packages/util/src/formatters.test.ts +0 -65
  340. package/core/packages/util/src/formatters.ts +0 -35
  341. package/core/packages/util/src/index.ts +0 -34
  342. package/core/packages/util/src/resolvers.test.ts +0 -198
  343. package/core/packages/util/src/resolvers.ts +0 -127
  344. package/core/packages/util/src/tenorUtils.test.ts +0 -75
  345. package/core/packages/util/src/tenorUtils.ts +0 -86
  346. package/core/packages/util/tsconfig.json +0 -9
  347. package/core/packages/util/tsup.config.ts +0 -9
  348. package/core/packages/util/vitest.config.ts +0 -9
  349. package/core/packages/voice/README.md +0 -42
  350. package/core/packages/voice/package.json +0 -67
  351. package/core/packages/voice/src/LiveKitRtcConnection.receive.test.ts +0 -24
  352. package/core/packages/voice/src/LiveKitRtcConnection.ts +0 -1767
  353. package/core/packages/voice/src/VoiceConnection.ts +0 -413
  354. package/core/packages/voice/src/VoiceManager.receive.test.ts +0 -61
  355. package/core/packages/voice/src/VoiceManager.test.ts +0 -44
  356. package/core/packages/voice/src/VoiceManager.ts +0 -503
  357. package/core/packages/voice/src/exports.test.ts +0 -38
  358. package/core/packages/voice/src/index.ts +0 -51
  359. package/core/packages/voice/src/livekit.test.ts +0 -48
  360. package/core/packages/voice/src/livekit.ts +0 -33
  361. package/core/packages/voice/src/mp4box.d.ts +0 -32
  362. package/core/packages/voice/src/opusUtils.test.ts +0 -29
  363. package/core/packages/voice/src/opusUtils.ts +0 -86
  364. package/core/packages/voice/src/streamPreviewPlaceholder.test.ts +0 -16
  365. package/core/packages/voice/src/streamPreviewPlaceholder.ts +0 -8
  366. package/core/packages/voice/src/ws.d.ts +0 -1
  367. package/core/packages/voice/tsconfig.json +0 -5
  368. package/core/packages/voice/tsup.config.ts +0 -10
  369. package/core/packages/voice/vitest.config.ts +0 -9
  370. package/core/packages/ws/package.json +0 -52
  371. package/core/packages/ws/src/WebSocketManager.ts +0 -130
  372. package/core/packages/ws/src/WebSocketShard.ts +0 -296
  373. package/core/packages/ws/src/index.ts +0 -12
  374. package/core/packages/ws/src/utils/constants.test.ts +0 -46
  375. package/core/packages/ws/src/utils/constants.ts +0 -22
  376. package/core/packages/ws/src/utils/getWebSocket.ts +0 -55
  377. package/core/packages/ws/src/ws.d.ts +0 -10
  378. package/core/packages/ws/tsconfig.json +0 -9
  379. package/core/packages/ws/tsup.config.ts +0 -9
  380. package/core/pnpm-lock.yaml +0 -7033
  381. package/core/pnpm-workspace.yaml +0 -4
  382. package/core/scripts/generate-ai-rag.ts +0 -240
  383. package/core/scripts/generate-docs.ts +0 -143
  384. package/core/scripts/generate-emoji-shortcodes.ts +0 -58
  385. package/core/scripts/generate-types.ts +0 -6
  386. package/core/scripts/publish-ordered.js +0 -63
  387. package/core/scripts/test-cjs-require.mjs +0 -43
  388. package/core/scripts/test-esm-imports.mjs +0 -42
  389. package/core/scripts/test-package-exports.mjs +0 -98
  390. package/core/scripts/test-smoke.mjs +0 -103
  391. package/core/tsconfig.json +0 -18
  392. package/core/turbo.json +0 -30
  393. package/core/vitest.config.ts +0 -17
  394. package/core/wrangler.jsonc +0 -9
@@ -1,202 +0,0 @@
1
- # Events
2
-
3
- Listen to gateway events with client.on. Handle messages, guild updates, voice state changes, and more.
4
-
5
- ## Basic Usage
6
-
7
- Use client.on(Events.X, handler) to subscribe to events. Handlers receive event-specific payloads.
8
-
9
- ::: tip
10
- client.events.X(handler) offers the same API with chaining and better autocomplete.
11
- :::
12
-
13
- ::: code-group
14
- ```javascript [Default]
15
- import { Client, Events } from '@erinjs/core';
16
-
17
- const client = new Client({ intents: 0 });
18
-
19
- client.on(Events.Ready, () => {
20
- console.log('Bot is ready!');
21
- });
22
-
23
- client.on(Events.MessageCreate, async (message) => {
24
- console.log(message.content);
25
- });
26
-
27
- await client.login(process.env.ERIN_BOT_TOKEN);
28
- ```
29
- ```javascript [client.events]
30
- import { Client, Events } from '@erinjs/core';
31
-
32
- const client = new Client({ intents: 0 });
33
-
34
- client
35
- .events.Ready(() => console.log('Bot is ready!'))
36
- .events.MessageCreate(async (message) => console.log(message.content));
37
-
38
- await client.login(process.env.ERIN_BOT_TOKEN);
39
- ```
40
- :::
41
-
42
- ## Common Events
43
-
44
- Essential events for most bots.
45
-
46
- ```javascript
47
- // Bot finished loading
48
- client.on(Events.Ready, () => {});
49
-
50
- // New message (DM or guild)
51
- client.on(Events.MessageCreate, async (message) => {});
52
-
53
- // Reaction events
54
- client.on(Events.MessageReactionAdd, (reaction, user, messageId, channelId, emoji, userId) => {});
55
- client.on(Events.MessageReactionRemove, (reaction, user, messageId, channelId, emoji, userId) => {});
56
-
57
- // Guild joined/left/updated
58
- client.on(Events.GuildCreate, (guild) => {});
59
- client.on(Events.GuildDelete, (guild) => {});
60
-
61
- // Channel created/updated/deleted
62
- client.on(Events.ChannelCreate, (channel) => {});
63
- client.on(Events.ChannelDelete, (channel) => {});
64
-
65
- // Member joined/left/updated
66
- client.on(Events.GuildMemberAdd, (member) => {});
67
- client.on(Events.GuildMemberRemove, (member) => {});
68
-
69
- // Voice state changed (for @erinjs/voice)
70
- client.on(Events.VoiceStateUpdate, (data) => {});
71
- client.on(Events.VoiceServerUpdate, (data) => {});
72
- ```
73
-
74
- ## Reaction Events
75
-
76
- Listen for when users add or remove reactions. Handlers receive (reaction, user, messageId, channelId, emoji, userId). Use MessageReactionRemoveAll and MessageReactionRemoveEmoji for moderator actions.
77
-
78
- ```javascript
79
- import { Client, Events } from '@erinjs/core';
80
-
81
- const client = new Client({ intents: 0 });
82
-
83
- client.on(Events.MessageReactionAdd, (reaction, user, messageId, channelId, emoji, userId) => {
84
- const emojiStr = emoji.id ? `<:${emoji.name}:${emoji.id}>` : emoji.name;
85
- console.log(`User ${userId} reacted with ${emojiStr} on message ${messageId}`);
86
-
87
- // Filter for specific message (e.g. poll) or emoji
88
- if (emoji.name === '👍') {
89
- console.log('Someone voted yes!');
90
- }
91
- });
92
-
93
- client.on(Events.MessageReactionRemove, (reaction, user, messageId, channelId, emoji, userId) => {
94
- console.log(`User ${userId} removed ${emoji.name} from message ${messageId}`);
95
- });
96
-
97
- client.on(Events.MessageReactionRemoveAll, (data) => {
98
- console.log(`All reactions cleared from message ${data.message_id}`);
99
- });
100
-
101
- client.on(Events.MessageReactionRemoveEmoji, (data) => {
102
- console.log(`All ${data.emoji.name} reactions removed from message ${data.message_id}`);
103
- });
104
-
105
- await client.login(process.env.ERIN_BOT_TOKEN);
106
- ```
107
-
108
- ## Error Handling
109
-
110
- ```javascript
111
- client.on(Events.Error, (err) => {
112
- console.error('Client error:', err);
113
- });
114
- ```
115
-
116
- ## Gateway Dispatch Events Reference
117
-
118
- All events the erin.js gateway can send. Use GatewayDispatchEvents from @erinjs/types for type-safe checks.
119
-
120
- | Category | Events |
121
- | --- | --- |
122
- | Connection & Session | `Ready, Resumed, SessionsReplace` |
123
- | User | `UserUpdate, UserSettingsUpdate, UserGuildSettingsUpdate, UserPinnedDmsUpdate, UserNoteUpdate, RecentMentionDelete` |
124
- | Saved Messages & Auth | `SavedMessageCreate, SavedMessageDelete, AuthSessionChange` |
125
- | Presence | `PresenceUpdate` |
126
- | Guild | `GuildCreate, GuildUpdate, GuildDelete, GuildMemberAdd, GuildMemberUpdate, GuildMemberRemove, GuildMembersChunk, GuildMemberListUpdate, GuildSync` |
127
- | Roles | `GuildRoleCreate, GuildRoleUpdate, GuildRoleUpdateBulk, GuildRoleDelete` |
128
- | Guild Assets | `GuildEmojisUpdate, GuildStickersUpdate` |
129
- | Moderation | `GuildBanAdd, GuildBanRemove` |
130
- | Channels | `ChannelCreate, ChannelUpdate, ChannelUpdateBulk, ChannelDelete, ChannelRecipientAdd, ChannelRecipientRemove, ChannelPinsUpdate, ChannelPinsAck` |
131
- | Passive | `PassiveUpdates` |
132
- | Invites | `InviteCreate, InviteDelete` |
133
- | Messages | `MessageCreate, MessageUpdate, MessageDelete, MessageDeleteBulk, MessageReactionAdd, MessageReactionRemove, MessageReactionRemoveAll, MessageReactionRemoveEmoji, MessageAck` |
134
- | Typing | `TypingStart` |
135
- | Webhooks | `WebhooksUpdate` |
136
- | Relationships | `RelationshipAdd, RelationshipUpdate, RelationshipRemove` |
137
- | Voice | `VoiceStateUpdate, VoiceServerUpdate` |
138
- | Calls | `CallCreate, CallUpdate, CallDelete` |
139
- | Favorites | `FavoriteMemeCreate, FavoriteMemeUpdate, FavoriteMemeDelete` |
140
- | SDK / Compatibility | `InteractionCreate, GuildIntegrationsUpdate, GuildScheduledEventCreate, GuildScheduledEventUpdate, GuildScheduledEventDelete` |
141
-
142
- ## Event Payload Reference
143
-
144
- Payload structure for each event. Handler receives (data) or (message), (reaction, user, ...) etc. Types: Gateway*DispatchData from @erinjs/types.
145
-
146
- | Event | Payload |
147
- | --- | --- |
148
- | `READY` | `{ v, user, guilds, session_id, shard?, application: { id, flags } }` |
149
- | `RESUMED` | `(no payload)` |
150
- | `SESSIONS_REPLACE` | `Array of session objects` |
151
- | `USER_UPDATE` | `APIUser — id, username, discriminator, global_name, avatar, etc.` |
152
- | `GUILD_CREATE` | `APIGuild — id, name, icon, owner_id, channels[], members[], roles[], ...` |
153
- | `GUILD_UPDATE` | `APIGuild — full guild object` |
154
- | `GUILD_DELETE` | `{ id, unavailable? }` |
155
- | `GUILD_MEMBER_ADD` | `APIGuildMember & { guild_id } — user, roles, nick, joined_at, ...` |
156
- | `GUILD_MEMBER_UPDATE` | `{ guild_id, roles, user, nick?, avatar?, joined_at?, ... }` |
157
- | `GUILD_MEMBER_REMOVE` | `{ guild_id, user }` |
158
- | `GUILD_MEMBERS_CHUNK` | `{ guild_id, members[], chunk_index, chunk_count, presences?, nonce? }` |
159
- | `GUILD_MEMBER_LIST_UPDATE` | `{ guild_id, id, member_count, online_count, groups[], ops[] }` |
160
- | `GUILD_ROLE_CREATE` | `{ guild_id, role: APIRole }` |
161
- | `GUILD_ROLE_UPDATE` | `{ guild_id, role: APIRole }` |
162
- | `GUILD_ROLE_UPDATE_BULK` | `{ guild_id, roles: APIRole[] }` |
163
- | `GUILD_ROLE_DELETE` | `{ guild_id, role_id }` |
164
- | `GUILD_EMOJIS_UPDATE` | `{ guild_id, emojis: APIEmoji[] }` |
165
- | `GUILD_STICKERS_UPDATE` | `{ guild_id, stickers: APISticker[] }` |
166
- | `GUILD_BAN_ADD` | `{ guild_id, user, reason? }` |
167
- | `GUILD_BAN_REMOVE` | `{ guild_id, user }` |
168
- | `CHANNEL_CREATE` | `APIChannel — id, name, type, guild_id?, parent_id, ...` |
169
- | `CHANNEL_UPDATE` | `APIChannel` |
170
- | `CHANNEL_UPDATE_BULK` | `{ channels: APIChannel[] }` |
171
- | `CHANNEL_DELETE` | `APIChannel` |
172
- | `CHANNEL_RECIPIENT_ADD` | `{ channel_id, user }` |
173
- | `CHANNEL_RECIPIENT_REMOVE` | `{ channel_id, user }` |
174
- | `CHANNEL_PINS_UPDATE` | `{ channel_id, guild_id?, last_pin_timestamp? }` |
175
- | `CHANNEL_PINS_ACK` | `{ channel_id, last_pin_timestamp? }` |
176
- | `INVITE_CREATE` | `APIInvite — code, guild, channel, inviter?, expires_at?, ...` |
177
- | `INVITE_DELETE` | `{ code, channel_id, guild_id? }` |
178
- | `MESSAGE_CREATE` | `APIMessage — id, channel_id, author, content, embeds, attachments, member?, ...` |
179
- | `MESSAGE_UPDATE` | `APIMessage — partial (edited fields)` |
180
- | `MESSAGE_DELETE` | `{ id, channel_id, guild_id?, content?, author_id? }` |
181
- | `MESSAGE_DELETE_BULK` | `{ ids[], channel_id, guild_id? }` |
182
- | `MESSAGE_REACTION_ADD` | `{ message_id, channel_id, user_id, guild_id?, emoji: { id, name, animated? } }` |
183
- | `MESSAGE_REACTION_REMOVE` | `{ message_id, channel_id, user_id, guild_id?, emoji }` |
184
- | `MESSAGE_REACTION_REMOVE_ALL` | `{ message_id, channel_id, guild_id? }` |
185
- | `MESSAGE_REACTION_REMOVE_EMOJI` | `{ message_id, channel_id, guild_id?, emoji }` |
186
- | `MESSAGE_ACK` | `{ message_id, channel_id } — read receipt` |
187
- | `TYPING_START` | `{ channel_id, user_id, timestamp, guild_id?, member? }` |
188
- | `VOICE_STATE_UPDATE` | `{ guild_id?, channel_id, user_id, member?, session_id, deaf?, mute?, ... }` |
189
- | `VOICE_SERVER_UPDATE` | `{ token, guild_id, endpoint, connection_id? }` |
190
- | `WEBHOOKS_UPDATE` | `{ guild_id, channel_id }` |
191
- | `PRESENCE_UPDATE` | `{ user: { id }, guild_id?, status?, activities?, custom_status? }` |
192
- | `GUILD_INTEGRATIONS_UPDATE` | `{ guild_id }` |
193
- | `GUILD_SCHEDULED_EVENT_CREATE` | `{ guild_id, id }` |
194
- | `GUILD_SCHEDULED_EVENT_UPDATE` | `{ guild_id, id }` |
195
- | `GUILD_SCHEDULED_EVENT_DELETE` | `{ guild_id, id }` |
196
- | `USER_NOTE_UPDATE` | `{ id, note? }` |
197
- | `SAVED_MESSAGE_CREATE` | `APIMessage` |
198
- | `SAVED_MESSAGE_DELETE` | `{ id }` |
199
- | `RELATIONSHIP_ADD / UPDATE` | `{ id, type }` |
200
- | `RELATIONSHIP_REMOVE` | `{ id }` |
201
- | `CALL_CREATE / UPDATE / DELETE` | `{ id, channel_id, ... }` |
202
- | `INTERACTION_CREATE` | `APIApplicationCommandInteraction` |
@@ -1,47 +0,0 @@
1
- # GIFs (Tenor)
2
-
3
- Send Tenor GIFs as content (gifv) or in embeds using resolveTenorToImageUrl() for GIF URLs.
4
-
5
- ## How Tenor GIFs Work
6
-
7
- Tenor embeds are created by the erin.js unfurler when you send a Tenor URL as message content. Do not use custom embeds for Tenor GIFs—the API turns the URL into a type: "gifv" embed.
8
-
9
- ## Send a Tenor GIF
10
-
11
- Send the Tenor URL as content. No embeds needed. The unfurler detects the URL and creates the gifv embed.
12
-
13
- ```javascript
14
- import { Client, Events } from '@erinjs/core';
15
-
16
- const client = new Client({ intents: 0 });
17
-
18
- client.on(Events.MessageCreate, async (message) => {
19
- if (message.content === '!gif') {
20
- const tenorUrl = 'https://tenor.com/view/stressed-gif-7048057395502071840';
21
- await message.reply({ content: tenorUrl });
22
- }
23
- });
24
- ```
25
-
26
- ## Tenor URL in an embed
27
-
28
- Tenor page URLs do not work as setImage() URLs. Use resolveTenorToImageUrl() to fetch the Tenor page or oEmbed, derive the GIF URL (embeds require GIF, not MP4), and return { url, flags: IS_ANIMATED }. For full gifv embeds, send the Tenor URL as content.
29
-
30
- ```javascript
31
- import { EmbedBuilder, resolveTenorToImageUrl } from '@erinjs/core';
32
-
33
- const tenorUrl = 'https://tenor.com/view/stressed-gif-7048057395502071840';
34
- const media = await resolveTenorToImageUrl(tenorUrl);
35
- if (media) {
36
- const embed = new EmbedBuilder()
37
- .setTitle('Tenor in embed')
38
- .setDescription('GIF URL + IS_ANIMATED flag')
39
- .setImage(media)
40
- .setColor(0x5865f2);
41
- await message.reply({ embeds: [embed] });
42
- }
43
- ```
44
-
45
- ## Important
46
-
47
- Custom embeds cannot create gifv embeds. For full animated gifv, send the Tenor URL as content. resolveTenorToImageUrl() returns GIF URL + IS_ANIMATED (derived from media.tenor.com path).
@@ -1,10 +0,0 @@
1
- # Installation
2
-
3
- Install the package and configure your bot token.
4
-
5
- ```bash
6
- npm install @erinjs/core
7
-
8
- # Run your bot (Node 18+)
9
- ERIN_BOT_TOKEN=your_token node your-bot.js
10
- ```
@@ -1,89 +0,0 @@
1
- # Moderation
2
-
3
- Implement ban, kick, and unban commands. Check permissions first (see Permissions guide).
4
-
5
- ## Overview
6
-
7
- Use guild.ban(), guild.kick(), and guild.unban() for moderation. Always check member permissions before allowing moderation commands—see the Permissions guide.
8
-
9
- ## Ban a member
10
-
11
- guild.ban(userId, options) bans a user. Pass reason for the audit log. Requires BanMembers permission.
12
-
13
- ```javascript
14
- const userId = parseUserMention(target);
15
- if (userId) {
16
- await guild.ban(userId, { reason: rest.join(' ') || undefined });
17
- await message.reply(`Banned <@${userId}>.`);
18
- }
19
- ```
20
-
21
- ## Kick a member
22
-
23
- guild.kick(userId, options) kicks a user from the guild. Pass reason for the audit log. Requires KickMembers permission.
24
-
25
- ```javascript
26
- const userId = parseUserMention(target);
27
- if (userId) {
28
- await guild.kick(userId, { reason: rest.join(' ') || undefined });
29
- await message.reply(`Kicked <@${userId}>.`);
30
- }
31
- ```
32
-
33
- ## Unban a user
34
-
35
- guild.unban(userId, reason?) removes a ban. Requires BanMembers permission.
36
-
37
- ```javascript
38
- const userId = parseUserMention(target);
39
- if (userId) {
40
- await guild.unban(userId, rest.join(' ') || undefined);
41
- await message.reply(`Unbanned <@${userId}>.`);
42
- }
43
- ```
44
-
45
- ## Full moderation example
46
-
47
- See examples/moderation-bot.js for a complete bot with !ban, !kick, !unban, and !perms commands.
48
-
49
- ```javascript
50
- import { Client, Events, PermissionFlags, parseUserMention } from '@erinjs/core';
51
-
52
- const PREFIX = '!';
53
- const client = new Client({ intents: 0 });
54
-
55
- async function getModeratorPerms(message) {
56
- const guild = message.guild ?? await message.client.guilds.resolve(message.guildId);
57
- if (!guild) return null;
58
- const member = guild.members.get(message.author.id);
59
- const resolved = member ?? await guild.fetchMember(message.author.id);
60
- return resolved?.permissions ?? null;
61
- }
62
-
63
- client.on(Events.MessageCreate, async (message) => {
64
- if (message.author.bot || !message.content?.startsWith(PREFIX)) return;
65
- const [cmd, target, ...rest] = message.content.slice(PREFIX.length).trim().split(/\s+/);
66
- const perms = await getModeratorPerms(message);
67
- if (!perms) return;
68
-
69
- const guild = message.guild ?? await message.client.guilds.resolve(message.guildId);
70
- if (!guild) return;
71
-
72
- if (cmd === 'ban' && (perms.has(PermissionFlags.BanMembers) || perms.has(PermissionFlags.Administrator))) {
73
- const userId = parseUserMention(target);
74
- if (userId) {
75
- await guild.ban(userId, { reason: rest.join(' ') || undefined });
76
- await message.reply(`Banned <@${userId}>.`);
77
- }
78
- }
79
- if (cmd === 'kick' && (perms.has(PermissionFlags.KickMembers) || perms.has(PermissionFlags.Administrator))) {
80
- const userId = parseUserMention(target);
81
- if (userId) {
82
- await guild.kick(userId, { reason: rest.join(' ') || undefined });
83
- await message.reply(`Kicked <@${userId}>.`);
84
- }
85
- }
86
- });
87
-
88
- await client.login(process.env.ERIN_BOT_TOKEN);
89
- ```
@@ -1,130 +0,0 @@
1
- # Permissions
2
-
3
- Check member permissions (guild-level and channel-specific), bot permissions via guild.members.me, owner override, and PermissionFlags.
4
-
5
- ## Overview
6
-
7
- Use member.permissions for guild-level checks (roles only) and member.permissionsIn(channel) for channel-specific permissions (includes overwrites). The server owner always has all permissions.
8
-
9
- ## Guild-level permissions
10
-
11
- member.permissions returns an object with has(permission). Use it for server-wide actions like ban, kick, manage roles.
12
-
13
- ```javascript
14
- import { Client, Events, PermissionFlags } from '@erinjs/core';
15
-
16
- const client = new Client({ intents: 0 });
17
-
18
- async function getMemberPerms(message) {
19
- const guild = message.guild ?? await message.client.guilds.resolve(message.guildId);
20
- if (!guild) return null;
21
- const member = guild.members.get(message.author.id) ?? await guild.fetchMember(message.author.id);
22
- return member?.permissions ?? null;
23
- }
24
-
25
- client.on(Events.MessageCreate, async (message) => {
26
- const perms = await getMemberPerms(message);
27
- if (!perms) return;
28
-
29
- if (perms.has(PermissionFlags.BanMembers)) {
30
- await message.reply('You can ban members.');
31
- }
32
- if (perms.has(PermissionFlags.Administrator)) {
33
- await message.reply('You have Administrator.');
34
- }
35
- });
36
-
37
- await client.login(process.env.ERIN_BOT_TOKEN);
38
- ```
39
-
40
- ## Bot's own permissions (guild.members.me)
41
-
42
- ::: info Discord.js Compatible
43
- See [API reference](/v/latest/api/classes/GuildMemberManager) for full details.
44
- :::
45
-
46
- Use guild.members.me to get the bot's GuildMember. Returns null if not cached. Use guild.members.fetchMe() to load it. Discord.js parity.
47
-
48
- ```javascript
49
- // Check if the bot can ban members in this guild
50
- const guild = message.guild ?? await message.client.guilds.resolve(message.guildId);
51
- const me = guild?.members.me ?? (guild ? await guild.members.fetchMe() : null);
52
- if (me?.permissions.has(PermissionFlags.BanMembers)) {
53
- await message.reply('I have Ban Members permission.');
54
- }
55
- ```
56
-
57
- ## Editing the bot's guild profile (nickname)
58
-
59
- Use guild.members.me.edit({ nick }) to change the bot's nickname in that guild. Pass nick: null to clear and show the username. Requires Change Nickname permission (or bot has Manage Nicknames). See examples/ping-bot.js for a !setnick command.
60
-
61
- ```javascript
62
- const guild = message.guild ?? await client.guilds.resolve(message.guildId);
63
- const me = guild?.members.me ?? (guild ? await guild.members.fetchMe() : null);
64
- if (me) {
65
- await me.edit({ nick: 'My Custom Nick' });
66
- await message.reply('Nickname updated!');
67
- }
68
- // Clear nickname (show username)
69
- await me.edit({ nick: null });
70
- ```
71
-
72
- ## Owner override
73
-
74
- The guild owner automatically receives all permissions regardless of roles. No need to give the owner a role with Administrator.
75
-
76
- ```javascript
77
- // When the message author is the server owner:
78
- const perms = member.permissions;
79
- perms.has(PermissionFlags.BanMembers); // true
80
- perms.has(PermissionFlags.ManageRoles); // true
81
- perms.has(PermissionFlags.Administrator); // true
82
- // ... all permission flags return true for the owner
83
- ```
84
-
85
- ## Channel-specific permissions
86
-
87
- member.permissionsIn(channel) applies channel overwrites. Use it when checking if a user can send messages, read history, or connect to voice in a specific channel.
88
-
89
- ```javascript
90
- const channel = message.channel;
91
- if (channel?.canSendMessage?.()) {
92
- const perms = member.permissionsIn(channel);
93
- if (perms.has(PermissionFlags.SendMessages)) {
94
- await channel.send('You can send here!');
95
- }
96
- }
97
- ```
98
-
99
- ## Managing roles
100
-
101
- Create, fetch, edit, and delete roles with guild.createRole(), guild.fetchRoles(), guild.fetchRole(roleId), role.edit(), and role.delete(). Use resolvePermissionsToBitfield() for permission bitfields. See the Roles guide for full examples.
102
-
103
- ```javascript
104
- // Create a role with specific permissions
105
- const role = await guild.createRole({
106
- name: 'Mod',
107
- permissions: ['KickMembers', 'BanMembers', 'ManageMessages'],
108
- });
109
-
110
- // Add/remove roles from members
111
- await guild.addRoleToMember(userId, roleId);
112
- await guild.removeRoleFromMember(userId, roleId);
113
- ```
114
-
115
- ## PermissionFlags reference
116
-
117
- Common flags: BanMembers, KickMembers, Administrator, ManageRoles, ManageChannels, ManageGuild, ViewAuditLog, ManageMessages, SendMessages, EmbedLinks, AttachFiles, ReadMessageHistory, MentionEveryone, Connect, Speak, MuteMembers, ModerateMembers, CreateExpressions, PinMessages, BypassSlowmode.
118
-
119
- ```javascript
120
- import { PermissionFlags } from '@erinjs/core';
121
-
122
- // Check multiple
123
- const canModerate = perms.has(PermissionFlags.BanMembers) || perms.has(PermissionFlags.Administrator);
124
-
125
- // List all permissions the user has
126
- const names = Object.keys(PermissionFlags).filter((name) =>
127
- perms.has(PermissionFlags[name])
128
- );
129
- await message.reply(`Your permissions: ${names.join(', ')}`);
130
- ```
@@ -1,41 +0,0 @@
1
- # Prefix Commands
2
-
3
- Handle !commands by listening to MessageCreate and parsing the content.
4
-
5
- ## Basic Structure
6
-
7
- Check for a prefix, split args, and dispatch to command handlers.
8
-
9
- ```javascript
10
- import { Client, Events } from '@erinjs/core';
11
-
12
- const PREFIX = '!';
13
- const client = new Client({ intents: 0 });
14
-
15
- client.on(Events.MessageCreate, async (message) => {
16
- if (message.author.bot || !message.content) return;
17
- if (!message.content.startsWith(PREFIX)) return;
18
-
19
- const args = message.content.slice(PREFIX.length).trim().split(/\s+/);
20
- const command = args.shift()?.toLowerCase();
21
-
22
- if (command === 'ping') {
23
- await message.reply('Pong!');
24
- }
25
- if (command === 'hello') {
26
- const name = args[0] ?? 'there';
27
- await message.reply(`Hello, ${name}!`);
28
- }
29
- });
30
-
31
- await client.login(process.env.ERIN_BOT_TOKEN);
32
- ```
33
-
34
- ## Guild-Only Commands
35
-
36
- ```javascript
37
- if (!message.guildId) {
38
- await message.reply('This command only works in a server.');
39
- return;
40
- }
41
- ```
@@ -1,58 +0,0 @@
1
- # Profile URLs
2
-
3
- Get avatar, banner, and other CDN URLs easily with User/Webhook/GuildMember methods or standalone CDN helpers for raw API data.
4
-
5
- ## User avatar and banner
6
-
7
- When you have a User object (e.g. message.author), use avatarURL(), displayAvatarURL(), and bannerURL(). These handle animated avatars (a_ prefix) and default fallbacks.
8
-
9
- ```javascript
10
- import { Client, Events, EmbedBuilder } from '@erinjs/core';
11
-
12
- const client = new Client({ intents: 0 });
13
-
14
- client.on(Events.MessageCreate, async (message) => {
15
- if (message.content === '!avatar') {
16
- const user = message.author;
17
- // avatarURL() returns null if no custom avatar; displayAvatarURL() uses default
18
- const avatarUrl = user.displayAvatarURL({ size: 256 });
19
- const bannerUrl = user.bannerURL({ size: 512 });
20
-
21
- const embed = new EmbedBuilder()
22
- .setTitle(`${user.username}'s profile`)
23
- .setThumbnail(avatarUrl)
24
- .setColor(user.avatarColor ?? 0x5865f2);
25
- if (bannerUrl) embed.setImage(bannerUrl);
26
- await message.reply({ embeds: [embed] });
27
- }
28
- });
29
- ```
30
-
31
- ## Raw API data: CDN helpers
32
-
33
- When you have raw API data (e.g. from client.rest.get(Routes.user(id))), use the standalone CDN helpers. They work with id + hash and support size and extension options.
34
-
35
- ```javascript
36
- import { cdnAvatarURL, cdnBannerURL } from '@erinjs/core';
37
-
38
- // From REST response
39
- const userData = await client.rest.get(Routes.user(userId));
40
- const avatarUrl = cdnAvatarURL(userData.id, userData.avatar, { size: 256 });
41
- const bannerUrl = cdnBannerURL(userData.id, profile?.banner ?? null, { size: 512 });
42
-
43
- // Or use User: client.getOrCreateUser(userData) then user.displayAvatarURL()
44
- const user = client.getOrCreateUser(userData);
45
- const avatarUrl2 = user.displayAvatarURL({ size: 256 });
46
- ```
47
-
48
- ## Guild member and webhook avatars
49
-
50
- GuildMember has displayAvatarURL() (guild avatar or fallback to user) and bannerURL(). Webhook has avatarURL().
51
-
52
- ```javascript
53
- // Member avatar (guild-specific or user fallback)
54
- const memberAvatar = member.displayAvatarURL({ size: 128 });
55
-
56
- // Webhook avatar
57
- const webhookAvatar = webhook.avatarURL({ size: 64 });
58
- ```
@@ -1,69 +0,0 @@
1
- # Reactions
2
-
3
- Add, remove, and listen for message reactions with Message.react(), removeReaction(), and reaction events.
4
-
5
- ## Add a Reaction
6
-
7
- Use message.react() to add an emoji reaction as the bot. Pass a unicode emoji string or custom emoji { name, id }.
8
-
9
- ```javascript
10
- const reply = await message.reply('React to this!');
11
- await reply.react('👍');
12
- await reply.react({ name: 'customemoji', id: '123456789012345678' });
13
- ```
14
-
15
- ## Remove Reactions
16
-
17
- Remove the bot's reaction with removeReaction(emoji). Remove a specific user's reaction with removeReaction(emoji, userId). Clear all reactions with removeAllReactions() or removeReactionEmoji(emoji).
18
-
19
- ```javascript
20
- // Remove the bot's reaction
21
- await message.removeReaction('👍');
22
-
23
- // Remove a specific user's reaction (requires moderator permissions)
24
- await message.removeReaction('👍', userId);
25
-
26
- // Remove all reactions of one emoji from the message
27
- await message.removeReactionEmoji('👍');
28
-
29
- // Remove all reactions from the message
30
- await message.removeAllReactions();
31
- ```
32
-
33
- ## Listen for Reactions
34
-
35
- MessageReactionAdd and MessageReactionRemove emit (reaction, user, messageId, channelId, emoji, userId). Use client.on(Events.X, handler) or client.events.MessageReactionAdd(handler).
36
-
37
- ```javascript
38
- client.on(Events.MessageReactionAdd, async (reaction, user, messageId, channelId, emoji, userId) => {
39
- if (emoji.name === '👍') {
40
- console.log(`User ${userId} voted yes on message ${messageId}`);
41
- const message = await reaction.fetchMessage();
42
- if (message) await message.react('✅');
43
- }
44
- });
45
-
46
- client.on(Events.MessageReactionRemove, (reaction, user, messageId, channelId, emoji, userId) => {
47
- console.log(`User ${userId} removed ${emoji.name} from message ${messageId}`);
48
- });
49
- ```
50
-
51
- ## Reaction Roles Example
52
-
53
- ::: info Discord.js Compatible
54
- See [API reference](/v/latest/api/classes/GuildMemberRoleManager) for full details.
55
- :::
56
-
57
- See examples/reaction-roles-bot.js for a full bot that assigns roles when users react to a message. Uses (reaction, user), Guild.fetchMember(), member.roles.add() (Discord.js parity), and guild.createRole() if you need to create roles programmatically. See the Roles guide for role CRUD.
58
-
59
- ```javascript
60
- // Simplified reaction-roles logic
61
- client.on(Events.MessageReactionAdd, async (reaction, user) => {
62
- if (!reaction.guildId || reaction.messageId !== rolesMessageId) return;
63
- const roleId = ROLE_EMOJI_MAP[reaction.emoji.name];
64
- if (!roleId) return;
65
- const guild = client.guilds.get(reaction.guildId);
66
- const member = await guild?.fetchMember(user.id);
67
- if (member && !member.roles.cache.has(roleId)) await member.roles.add(roleId);
68
- });
69
- ```