discord-sb.js 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +2 -0
  3. package/package.json +91 -0
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +86 -0
  6. package/src/client/Client.js +978 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +116 -0
  9. package/src/client/actions/ActionsManager.js +80 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +27 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +28 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +32 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +43 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -0
  44. package/src/client/actions/InviteCreate.js +28 -0
  45. package/src/client/actions/InviteDelete.js +30 -0
  46. package/src/client/actions/MessageCreate.js +50 -0
  47. package/src/client/actions/MessageDelete.js +32 -0
  48. package/src/client/actions/MessageDeleteBulk.js +46 -0
  49. package/src/client/actions/MessagePollVoteAdd.js +33 -0
  50. package/src/client/actions/MessagePollVoteRemove.js +33 -0
  51. package/src/client/actions/MessageReactionAdd.js +68 -0
  52. package/src/client/actions/MessageReactionRemove.js +50 -0
  53. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  54. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  55. package/src/client/actions/MessageUpdate.js +26 -0
  56. package/src/client/actions/PresenceUpdate.js +50 -0
  57. package/src/client/actions/StageInstanceCreate.js +28 -0
  58. package/src/client/actions/StageInstanceDelete.js +33 -0
  59. package/src/client/actions/StageInstanceUpdate.js +30 -0
  60. package/src/client/actions/ThreadCreate.js +24 -0
  61. package/src/client/actions/ThreadDelete.js +32 -0
  62. package/src/client/actions/ThreadListSync.js +59 -0
  63. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  64. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  65. package/src/client/actions/TypingStart.js +29 -0
  66. package/src/client/actions/UserUpdate.js +35 -0
  67. package/src/client/actions/VoiceStateUpdate.js +50 -0
  68. package/src/client/actions/WebhooksUpdate.js +20 -0
  69. package/src/client/voice/ClientVoiceManager.js +151 -0
  70. package/src/client/voice/VoiceConnection.js +1249 -0
  71. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  72. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  73. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  74. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  75. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  76. package/src/client/voice/networking/VoiceUDPClient.js +173 -0
  77. package/src/client/voice/networking/VoiceWebSocket.js +286 -0
  78. package/src/client/voice/player/MediaPlayer.js +321 -0
  79. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  80. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  81. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  82. package/src/client/voice/receiver/PacketHandler.js +260 -0
  83. package/src/client/voice/receiver/Receiver.js +96 -0
  84. package/src/client/voice/receiver/Recorder.js +173 -0
  85. package/src/client/voice/util/Function.js +116 -0
  86. package/src/client/voice/util/PlayInterface.js +122 -0
  87. package/src/client/voice/util/Secretbox.js +64 -0
  88. package/src/client/voice/util/Silence.js +16 -0
  89. package/src/client/voice/util/Socket.js +62 -0
  90. package/src/client/voice/util/VolumeInterface.js +104 -0
  91. package/src/client/websocket/WebSocketManager.js +392 -0
  92. package/src/client/websocket/WebSocketShard.js +907 -0
  93. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  94. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  97. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  98. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  99. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  100. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  101. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  102. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  103. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  104. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  105. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  106. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  107. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  108. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  109. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  110. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  112. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  113. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
  114. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  115. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  118. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  119. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  121. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  122. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  129. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  130. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  131. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  132. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  133. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  134. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  135. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  136. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  140. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  143. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  144. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/READY.js +121 -0
  146. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  147. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  148. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  149. package/src/client/websocket/handlers/RESUMED.js +14 -0
  150. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  151. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  152. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  153. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  154. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  155. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  156. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  157. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  158. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  159. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  160. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  161. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  162. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  163. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  164. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  166. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  167. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  168. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  169. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  170. package/src/client/websocket/handlers/index.js +84 -0
  171. package/src/errors/DJSError.js +61 -0
  172. package/src/errors/Messages.js +217 -0
  173. package/src/errors/index.js +4 -0
  174. package/src/index.js +172 -0
  175. package/src/managers/ApplicationCommandManager.js +264 -0
  176. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  177. package/src/managers/AutoModerationRuleManager.js +296 -0
  178. package/src/managers/BaseGuildEmojiManager.js +80 -0
  179. package/src/managers/BaseManager.js +19 -0
  180. package/src/managers/BillingManager.js +66 -0
  181. package/src/managers/CachedManager.js +71 -0
  182. package/src/managers/ChannelManager.js +148 -0
  183. package/src/managers/ClientUserSettingManager.js +372 -0
  184. package/src/managers/DataManager.js +61 -0
  185. package/src/managers/DeveloperManager.js +254 -0
  186. package/src/managers/GuildBanManager.js +250 -0
  187. package/src/managers/GuildChannelManager.js +488 -0
  188. package/src/managers/GuildEmojiManager.js +171 -0
  189. package/src/managers/GuildEmojiRoleManager.js +118 -0
  190. package/src/managers/GuildForumThreadManager.js +108 -0
  191. package/src/managers/GuildInviteManager.js +213 -0
  192. package/src/managers/GuildManager.js +338 -0
  193. package/src/managers/GuildMemberManager.js +599 -0
  194. package/src/managers/GuildMemberRoleManager.js +195 -0
  195. package/src/managers/GuildScheduledEventManager.js +314 -0
  196. package/src/managers/GuildSettingManager.js +155 -0
  197. package/src/managers/GuildStickerManager.js +179 -0
  198. package/src/managers/GuildTextThreadManager.js +98 -0
  199. package/src/managers/InteractionManager.js +39 -0
  200. package/src/managers/MessageManager.js +423 -0
  201. package/src/managers/PermissionOverwriteManager.js +164 -0
  202. package/src/managers/PresenceManager.js +71 -0
  203. package/src/managers/QuestManager.js +353 -0
  204. package/src/managers/ReactionManager.js +67 -0
  205. package/src/managers/ReactionUserManager.js +73 -0
  206. package/src/managers/RelationshipManager.js +278 -0
  207. package/src/managers/RoleManager.js +448 -0
  208. package/src/managers/SessionManager.js +66 -0
  209. package/src/managers/StageInstanceManager.js +162 -0
  210. package/src/managers/ThreadManager.js +175 -0
  211. package/src/managers/ThreadMemberManager.js +186 -0
  212. package/src/managers/UserManager.js +136 -0
  213. package/src/managers/UserNoteManager.js +53 -0
  214. package/src/managers/VoiceStateManager.js +59 -0
  215. package/src/rest/APIRequest.js +154 -0
  216. package/src/rest/APIRouter.js +53 -0
  217. package/src/rest/DiscordAPIError.js +119 -0
  218. package/src/rest/HTTPError.js +62 -0
  219. package/src/rest/RESTManager.js +67 -0
  220. package/src/rest/RateLimitError.js +55 -0
  221. package/src/rest/RequestHandler.js +466 -0
  222. package/src/sharding/Shard.js +444 -0
  223. package/src/sharding/ShardClientUtil.js +279 -0
  224. package/src/sharding/ShardingManager.js +319 -0
  225. package/src/structures/AnonymousGuild.js +98 -0
  226. package/src/structures/ApplicationCommand.js +593 -0
  227. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  228. package/src/structures/AutoModerationActionExecution.js +89 -0
  229. package/src/structures/AutoModerationRule.js +294 -0
  230. package/src/structures/AutocompleteInteraction.js +107 -0
  231. package/src/structures/Base.js +43 -0
  232. package/src/structures/BaseCommandInteraction.js +211 -0
  233. package/src/structures/BaseGuild.js +116 -0
  234. package/src/structures/BaseGuildEmoji.js +56 -0
  235. package/src/structures/BaseGuildTextChannel.js +191 -0
  236. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  237. package/src/structures/BaseMessageComponent.js +181 -0
  238. package/src/structures/ButtonInteraction.js +11 -0
  239. package/src/structures/CallState.js +63 -0
  240. package/src/structures/CategoryChannel.js +85 -0
  241. package/src/structures/Channel.js +284 -0
  242. package/src/structures/ClientPresence.js +77 -0
  243. package/src/structures/ClientUser.js +655 -0
  244. package/src/structures/CommandInteraction.js +41 -0
  245. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  246. package/src/structures/ContainerComponent.js +68 -0
  247. package/src/structures/ContextMenuInteraction.js +65 -0
  248. package/src/structures/DMChannel.js +219 -0
  249. package/src/structures/DirectoryChannel.js +20 -0
  250. package/src/structures/Emoji.js +148 -0
  251. package/src/structures/FileComponent.js +49 -0
  252. package/src/structures/ForumChannel.js +31 -0
  253. package/src/structures/GroupDMChannel.js +394 -0
  254. package/src/structures/Guild.js +1791 -0
  255. package/src/structures/GuildAuditLogs.js +746 -0
  256. package/src/structures/GuildBan.js +59 -0
  257. package/src/structures/GuildBoost.js +108 -0
  258. package/src/structures/GuildChannel.js +470 -0
  259. package/src/structures/GuildEmoji.js +161 -0
  260. package/src/structures/GuildMember.js +636 -0
  261. package/src/structures/GuildPreview.js +191 -0
  262. package/src/structures/GuildPreviewEmoji.js +27 -0
  263. package/src/structures/GuildScheduledEvent.js +536 -0
  264. package/src/structures/GuildTemplate.js +236 -0
  265. package/src/structures/Integration.js +188 -0
  266. package/src/structures/IntegrationApplication.js +96 -0
  267. package/src/structures/Interaction.js +290 -0
  268. package/src/structures/InteractionCollector.js +248 -0
  269. package/src/structures/InteractionWebhook.js +43 -0
  270. package/src/structures/Invite.js +358 -0
  271. package/src/structures/InviteGuild.js +23 -0
  272. package/src/structures/InviteStageInstance.js +86 -0
  273. package/src/structures/MediaChannel.js +11 -0
  274. package/src/structures/MediaGalleryComponent.js +41 -0
  275. package/src/structures/MediaGalleryItem.js +47 -0
  276. package/src/structures/Message.js +1252 -0
  277. package/src/structures/MessageActionRow.js +105 -0
  278. package/src/structures/MessageAttachment.js +216 -0
  279. package/src/structures/MessageButton.js +166 -0
  280. package/src/structures/MessageCollector.js +146 -0
  281. package/src/structures/MessageComponentInteraction.js +120 -0
  282. package/src/structures/MessageContextMenuInteraction.js +20 -0
  283. package/src/structures/MessageEmbed.js +596 -0
  284. package/src/structures/MessageMentions.js +273 -0
  285. package/src/structures/MessagePayload.js +354 -0
  286. package/src/structures/MessageReaction.js +181 -0
  287. package/src/structures/MessageSelectMenu.js +141 -0
  288. package/src/structures/Modal.js +161 -0
  289. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  290. package/src/structures/ModalSubmitInteraction.js +119 -0
  291. package/src/structures/NewsChannel.js +32 -0
  292. package/src/structures/OAuth2Guild.js +28 -0
  293. package/src/structures/PermissionOverwrites.js +198 -0
  294. package/src/structures/Poll.js +108 -0
  295. package/src/structures/PollAnswer.js +88 -0
  296. package/src/structures/Presence.js +1157 -0
  297. package/src/structures/ReactionCollector.js +229 -0
  298. package/src/structures/ReactionEmoji.js +31 -0
  299. package/src/structures/Role.js +590 -0
  300. package/src/structures/SectionComponent.js +48 -0
  301. package/src/structures/SelectMenuInteraction.js +21 -0
  302. package/src/structures/SeparatorComponent.js +48 -0
  303. package/src/structures/Session.js +81 -0
  304. package/src/structures/StageChannel.js +104 -0
  305. package/src/structures/StageInstance.js +208 -0
  306. package/src/structures/Sticker.js +310 -0
  307. package/src/structures/StickerPack.js +95 -0
  308. package/src/structures/StoreChannel.js +56 -0
  309. package/src/structures/Team.js +118 -0
  310. package/src/structures/TeamMember.js +80 -0
  311. package/src/structures/TextChannel.js +33 -0
  312. package/src/structures/TextDisplayComponent.js +40 -0
  313. package/src/structures/TextInputComponent.js +132 -0
  314. package/src/structures/ThreadChannel.js +605 -0
  315. package/src/structures/ThreadMember.js +105 -0
  316. package/src/structures/ThreadOnlyChannel.js +249 -0
  317. package/src/structures/ThumbnailComponent.js +57 -0
  318. package/src/structures/Typing.js +74 -0
  319. package/src/structures/UnfurledMediaItem.js +29 -0
  320. package/src/structures/User.js +640 -0
  321. package/src/structures/UserContextMenuInteraction.js +29 -0
  322. package/src/structures/VoiceChannel.js +110 -0
  323. package/src/structures/VoiceChannelEffect.js +69 -0
  324. package/src/structures/VoiceRegion.js +53 -0
  325. package/src/structures/VoiceState.js +354 -0
  326. package/src/structures/WebEmbed.js +373 -0
  327. package/src/structures/Webhook.js +478 -0
  328. package/src/structures/WelcomeChannel.js +60 -0
  329. package/src/structures/WelcomeScreen.js +48 -0
  330. package/src/structures/Widget.js +87 -0
  331. package/src/structures/WidgetMember.js +99 -0
  332. package/src/structures/interfaces/Application.js +953 -0
  333. package/src/structures/interfaces/Collector.js +300 -0
  334. package/src/structures/interfaces/InteractionResponses.js +313 -0
  335. package/src/structures/interfaces/TextBasedChannel.js +821 -0
  336. package/src/util/APITypes.js +59 -0
  337. package/src/util/ActivityFlags.js +44 -0
  338. package/src/util/ApplicationFlags.js +76 -0
  339. package/src/util/AttachmentFlags.js +38 -0
  340. package/src/util/BitField.js +170 -0
  341. package/src/util/ChannelFlags.js +45 -0
  342. package/src/util/Constants.js +1914 -0
  343. package/src/util/DataResolver.js +146 -0
  344. package/src/util/Formatters.js +228 -0
  345. package/src/util/GuildMemberFlags.js +43 -0
  346. package/src/util/Intents.js +74 -0
  347. package/src/util/InviteFlags.js +34 -0
  348. package/src/util/LimitedCollection.js +131 -0
  349. package/src/util/MessageFlags.js +63 -0
  350. package/src/util/Options.js +358 -0
  351. package/src/util/Permissions.js +202 -0
  352. package/src/util/PremiumUsageFlags.js +31 -0
  353. package/src/util/PurchasedFlags.js +33 -0
  354. package/src/util/RemoteAuth.js +415 -0
  355. package/src/util/RoleFlags.js +37 -0
  356. package/src/util/SnowflakeUtil.js +92 -0
  357. package/src/util/Speaking.js +33 -0
  358. package/src/util/Sweepers.js +466 -0
  359. package/src/util/SystemChannelFlags.js +55 -0
  360. package/src/util/ThreadMemberFlags.js +30 -0
  361. package/src/util/UserFlags.js +104 -0
  362. package/src/util/Util.js +1048 -0
  363. package/typings/enums.d.ts +439 -0
  364. package/typings/index.d.ts +8505 -0
  365. package/typings/index.test-d.ts +0 -0
  366. package/typings/rawDataTypes.d.ts +403 -0
@@ -0,0 +1,372 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const BaseManager = require('./BaseManager');
5
+ const { TypeError } = require('../errors/DJSError');
6
+ const { CustomStatus } = require('../structures/Presence');
7
+ const { ActivityTypes } = require('../util/Constants');
8
+
9
+ /**
10
+ * Manages API methods for users and stores their cache.
11
+ * @extends {BaseManager}
12
+ * @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html}
13
+ */
14
+ class ClientUserSettingManager extends BaseManager {
15
+ #rawSetting = {};
16
+ constructor(client) {
17
+ super(client);
18
+ /**
19
+ * WHO CAN ADD YOU AS A FRIEND ?
20
+ * @type {?object}
21
+ * @see {@link https://luna.gitlab.io/discord-unofficial-docs/user_settings.html#friend-source-flags-structure}
22
+ */
23
+ this.addFriendFrom = {
24
+ all: null,
25
+ mutual_friends: null,
26
+ mutual_guilds: null,
27
+ };
28
+ }
29
+ /**
30
+ * Patch data file
31
+ * https://luna.gitlab.io/discord-unofficial-docs/docs/user_settings
32
+ * @private
33
+ * @param {Object} data Raw Data to patch
34
+ */
35
+ _patch(data = {}) {
36
+ this.#rawSetting = Object.assign(this.#rawSetting, data);
37
+ this.client.emit('debug', `[SETTING > ClientUser] Sync setting`);
38
+ if ('locale' in data) {
39
+ /**
40
+ * The user's chosen language option
41
+ * @type {?string}
42
+ * @see {@link https://discord.com/developers/docs/reference#locales}
43
+ */
44
+ this.locale = data.locale;
45
+ }
46
+ if ('show_current_game' in data) {
47
+ /**
48
+ * Show playing status for detected/added games
49
+ * <info>Setting => ACTIVITY SETTINGS => Activity Status => Display current activity as a status message</info>
50
+ * @type {?boolean}
51
+ */
52
+ this.activityDisplay = data.show_current_game;
53
+ }
54
+ if ('default_guilds_restricted' in data) {
55
+ /**
56
+ * Allow DMs from guild members by default on guild join
57
+ * @type {?boolean}
58
+ */
59
+ this.allowDMsFromGuild = data.default_guilds_restricted;
60
+ }
61
+ if ('inline_attachment_media' in data) {
62
+ /**
63
+ * Display images and video when uploaded directly
64
+ * @type {?boolean}
65
+ */
66
+ this.displayImage = data.inline_attachment_media;
67
+ }
68
+ if ('inline_embed_media' in data) {
69
+ /**
70
+ * Display images and video when linked
71
+ * @type {?boolean}
72
+ */
73
+ this.linkedImageDisplay = data.inline_embed_media;
74
+ }
75
+ if ('gif_auto_play' in data) {
76
+ /**
77
+ * Play GIFs without hovering over them
78
+ * <info>Setting => APP SETTINGS => Accessibility => Automatically play GIFs when Discord is focused.</info>
79
+ * @type {?boolean}
80
+ */
81
+ this.autoplayGIF = data.gif_auto_play;
82
+ }
83
+ if ('render_embeds' in data) {
84
+ /**
85
+ * Show embeds and preview website links pasted into chat
86
+ * @type {?boolean}
87
+ */
88
+ this.previewLink = data.render_embeds;
89
+ }
90
+ if ('animate_emoji' in data) {
91
+ /**
92
+ * Play animated emoji without hovering over them
93
+ * <info>Setting => APP SETTINGS => Accessibility => Play Animated Emojis</info>
94
+ * @type {?boolean}
95
+ */
96
+ this.animatedEmoji = data.animate_emoji;
97
+ }
98
+ if ('enable_tts_command' in data) {
99
+ /**
100
+ * Enable /tts command and playback
101
+ * <info>Setting => APP SETTINGS => Accessibility => Text-to-speech => Allow playback</info>
102
+ * @type {?boolean}
103
+ */
104
+ this.allowTTS = data.enable_tts_command;
105
+ }
106
+ if ('message_display_compact' in data) {
107
+ /**
108
+ * Use compact mode
109
+ * <info>Setting => APP SETTINGS => Appearance => Message Display => Compact Mode</info>
110
+ * @type {?boolean}
111
+ */
112
+ this.compactMode = data.message_display_compact;
113
+ }
114
+ if ('convert_emoticons' in data) {
115
+ /**
116
+ * Convert "old fashioned" emoticons to emojis
117
+ * <info>Setting => APP SETTINGS => Text & Images => Emoji => Convert Emoticons</info>
118
+ * @type {?boolean}
119
+ */
120
+ this.convertEmoticons = data.convert_emoticons;
121
+ }
122
+ if ('explicit_content_filter' in data) {
123
+ /**
124
+ * Content filter level
125
+ * <info>
126
+ * * `0`: Off
127
+ * * `1`: Friends excluded
128
+ * * `2`: Scan everyone
129
+ * </info>
130
+ * @type {?number}
131
+ */
132
+ this.DMScanLevel = data.explicit_content_filter;
133
+ }
134
+ if ('theme' in data) {
135
+ /**
136
+ * Client theme
137
+ * <info>Setting => APP SETTINGS => Appearance => Theme
138
+ * * `dark`
139
+ * * `light`
140
+ * </info>
141
+ * @type {?string}
142
+ */
143
+ this.theme = data.theme;
144
+ }
145
+ if ('developer_mode' in data) {
146
+ /**
147
+ * Show the option to copy ids in right click menus
148
+ * @type {?boolean}
149
+ */
150
+ this.developerMode = data.developer_mode;
151
+ }
152
+ if ('afk_timeout' in data) {
153
+ /**
154
+ * How many seconds being idle before the user is marked as "AFK"; this handles when push notifications are sent
155
+ * @type {?number}
156
+ */
157
+ this.afkTimeout = data.afk_timeout;
158
+ }
159
+ if ('animate_stickers' in data) {
160
+ /**
161
+ * When stickers animate
162
+ * <info>
163
+ * * `0`: Always
164
+ * * `1`: On hover/focus
165
+ * * `2`: Never
166
+ * </info>
167
+ * @type {?number}
168
+ */
169
+ this.stickerAnimationMode = data.animate_stickers;
170
+ }
171
+ if ('render_reactions' in data) {
172
+ /**
173
+ * Display reactions
174
+ * <info>Setting => APP SETTINGS => Text & Images => Emoji => Show emoji reactions</info>
175
+ * @type {?boolean}
176
+ */
177
+ this.showEmojiReactions = data.render_reactions;
178
+ }
179
+ if ('status' in data) {
180
+ this.client.presence.status = data.status;
181
+ if (!('custom_status' in data)) {
182
+ this.client.emit('debug', '[SETTING > ClientUser] Sync status');
183
+ this.client.user.setStatus(data.status);
184
+ }
185
+ }
186
+ if ('custom_status' in data) {
187
+ this.customStatus = data.custom_status;
188
+ const activities = this.client.presence.activities.filter(
189
+ a => ![ActivityTypes.CUSTOM, 'CUSTOM'].includes(a.type),
190
+ );
191
+ if (data.custom_status) {
192
+ const custom = new CustomStatus(this.client);
193
+ custom.setState(data.custom_status.text);
194
+ let emoji;
195
+ if (data.custom_status.emoji_id) {
196
+ emoji = this.client.emojis.cache.get(data.custom_status.emoji_id);
197
+ } else if (data.custom_status.emoji_name) {
198
+ emoji = `:${data.custom_status.emoji_name}:`;
199
+ }
200
+ if (emoji) custom.setEmoji(emoji);
201
+ activities.push(custom);
202
+ }
203
+ this.client.emit('debug', '[SETTING > ClientUser] Sync activities & status');
204
+ this.client.user.setPresence({ activities });
205
+ }
206
+ if ('friend_source_flags' in data) {
207
+ // Todo
208
+ }
209
+ if ('restricted_guilds' in data) {
210
+ /**
211
+ * Disable Direct Message from servers
212
+ * @type {Collection<Snowflake, Guild>}
213
+ */
214
+ this.disableDMfromGuilds = new Collection(
215
+ data.restricted_guilds.map(guildId => [guildId, this.client.guilds.cache.get(guildId)]),
216
+ );
217
+ }
218
+ }
219
+
220
+ /**
221
+ * Raw data
222
+ * @type {Object}
223
+ */
224
+ get raw() {
225
+ return this.#rawSetting;
226
+ }
227
+
228
+ async fetch() {
229
+ const data = await this.client.api.users('@me').settings.get();
230
+ this._patch(data);
231
+ return this;
232
+ }
233
+
234
+ /**
235
+ * Edit data
236
+ * @param {any} data Data to edit
237
+ */
238
+ async edit(data) {
239
+ const res = await this.client.api.users('@me').settings.patch({ data });
240
+ this._patch(res);
241
+ return this;
242
+ }
243
+
244
+ /**
245
+ * Toggle compact mode
246
+ * @returns {Promise<this>}
247
+ */
248
+ toggleCompactMode() {
249
+ return this.edit({ message_display_compact: !this.compactMode });
250
+ }
251
+ /**
252
+ * Discord Theme
253
+ * @param {string} value Theme to set (dark | light)
254
+ * @returns {Promise<this>}
255
+ */
256
+ setTheme(value) {
257
+ const validValues = ['dark', 'light'];
258
+ if (!validValues.includes(value)) {
259
+ throw new TypeError('INVALID_TYPE', 'value', 'dark | light', true);
260
+ }
261
+ return this.edit({ theme: value });
262
+ }
263
+
264
+ /**
265
+ * CustomStatus Object
266
+ * @typedef {Object} CustomStatusOption
267
+ * @property {string | null} text Text to set
268
+ * @property {string | null} status The status to set: 'online', 'idle', 'dnd', 'invisible' or null.
269
+ * @property {EmojiResolvable | null} emoji UnicodeEmoji, DiscordEmoji, or null.
270
+ * @property {number | null} expires The number of seconds until the status expires, or null.
271
+ */
272
+
273
+ /**
274
+ * Set custom status
275
+ * @param {?CustomStatus | CustomStatusOption} options CustomStatus
276
+ * @returns {Promise<this>}
277
+ */
278
+ setCustomStatus(options) {
279
+ if (typeof options !== 'object') {
280
+ return this.edit({ custom_status: null });
281
+ } else if (options instanceof CustomStatus) {
282
+ options = options.toJSON();
283
+ let data = {
284
+ emoji_name: null,
285
+ expires_at: null,
286
+ text: null,
287
+ };
288
+ if (typeof options.state === 'string') {
289
+ data.text = options.state;
290
+ }
291
+ if (options.emoji) {
292
+ if (options.emoji?.id) {
293
+ data.emoji_name = options.emoji?.name;
294
+ data.emoji_id = options.emoji?.id;
295
+ } else {
296
+ data.emoji_name = typeof options.emoji?.name === 'string' ? options.emoji?.name : null;
297
+ }
298
+ }
299
+ return this.edit({ custom_status: data });
300
+ } else {
301
+ let data = {
302
+ emoji_name: null,
303
+ expires_at: null,
304
+ text: null,
305
+ };
306
+ if (typeof options.text === 'string') {
307
+ if (options.text.length > 128) {
308
+ throw new RangeError('[INVALID_VALUE] Custom status text must be less than 128 characters');
309
+ }
310
+ data.text = options.text;
311
+ }
312
+ if (options.emoji) {
313
+ const emoji = this.client.emojis.resolve(options.emoji);
314
+ if (emoji) {
315
+ data.emoji_name = emoji.name;
316
+ data.emoji_id = emoji.id;
317
+ } else {
318
+ data.emoji_name = typeof options.emoji === 'string' ? options.emoji : null;
319
+ }
320
+ }
321
+ if (typeof options.expires === 'number') {
322
+ if (options.expires < Date.now()) {
323
+ throw new RangeError(`[INVALID_VALUE] Custom status expiration must be greater than ${Date.now()}`);
324
+ }
325
+ data.expires_at = new Date(options.expires).toISOString();
326
+ }
327
+ if (['online', 'idle', 'dnd', 'invisible'].includes(options.status)) this.edit({ status: options.status });
328
+ return this.edit({ custom_status: data });
329
+ }
330
+ }
331
+
332
+ /**
333
+ * Restricted guilds setting
334
+ * @param {boolean} status Restricted status
335
+ * @returns {Promise}
336
+ */
337
+ restrictedGuilds(status) {
338
+ if (typeof status !== 'boolean') {
339
+ throw new TypeError('INVALID_TYPE', 'status', 'boolean', true);
340
+ }
341
+ return this.edit({
342
+ default_guilds_restricted: status,
343
+ restricted_guilds: status ? this.client.guilds.cache.map(v => v.id) : [],
344
+ });
345
+ }
346
+ /**
347
+ * Add a guild to the list of restricted guilds.
348
+ * @param {GuildIDResolve} guildId The guild to add
349
+ * @returns {Promise}
350
+ */
351
+ addRestrictedGuild(guildId) {
352
+ const temp = Object.assign(
353
+ [],
354
+ this.disableDMfromServer.map((v, k) => k),
355
+ );
356
+ if (temp.includes(guildId)) throw new Error('Guild is already restricted');
357
+ temp.push(guildId);
358
+ return this.edit({ restricted_guilds: temp });
359
+ }
360
+
361
+ /**
362
+ * Remove a guild from the list of restricted guilds.
363
+ * @param {GuildIDResolve} guildId The guild to remove
364
+ * @returns {Promise}
365
+ */
366
+ removeRestrictedGuild(guildId) {
367
+ if (!this.disableDMfromServer.delete(guildId)) throw new Error('Guild is already restricted');
368
+ return this.edit({ restricted_guilds: this.disableDMfromServer.map((v, k) => k) });
369
+ }
370
+ }
371
+
372
+ module.exports = ClientUserSettingManager;
@@ -0,0 +1,61 @@
1
+ 'use strict';
2
+
3
+ const BaseManager = require('./BaseManager');
4
+ const { Error } = require('../errors');
5
+
6
+ /**
7
+ * Manages the API methods of a data model along with a collection of instances.
8
+ * @extends {BaseManager}
9
+ * @abstract
10
+ */
11
+ class DataManager extends BaseManager {
12
+ constructor(client, holds) {
13
+ super(client);
14
+
15
+ /**
16
+ * The data structure belonging to this manager.
17
+ * @name DataManager#holds
18
+ * @type {Function}
19
+ * @private
20
+ * @readonly
21
+ */
22
+ Object.defineProperty(this, 'holds', { value: holds });
23
+ }
24
+
25
+ /**
26
+ * The cache of items for this manager.
27
+ * @type {Collection}
28
+ * @abstract
29
+ */
30
+ get cache() {
31
+ throw new Error('NOT_IMPLEMENTED', 'get cache', this.constructor.name);
32
+ }
33
+
34
+ /**
35
+ * Resolves a data entry to a data Object.
36
+ * @param {string|Object} idOrInstance The id or instance of something in this Manager
37
+ * @returns {?Object} An instance from this Manager
38
+ */
39
+ resolve(idOrInstance) {
40
+ if (idOrInstance instanceof this.holds) return idOrInstance;
41
+ if (typeof idOrInstance === 'string') return this.cache.get(idOrInstance) ?? null;
42
+ return null;
43
+ }
44
+
45
+ /**
46
+ * Resolves a data entry to an instance id.
47
+ * @param {string|Object} idOrInstance The id or instance of something in this Manager
48
+ * @returns {?Snowflake}
49
+ */
50
+ resolveId(idOrInstance) {
51
+ if (idOrInstance instanceof this.holds) return idOrInstance.id;
52
+ if (typeof idOrInstance === 'string') return idOrInstance;
53
+ return null;
54
+ }
55
+
56
+ valueOf() {
57
+ return this.cache;
58
+ }
59
+ }
60
+
61
+ module.exports = DataManager;
@@ -0,0 +1,254 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const BaseManager = require('./BaseManager');
5
+ const Application = require('../structures/interfaces/Application');
6
+ const DataResolver = require('../util/DataResolver');
7
+
8
+ /**
9
+ * Manages API methods for developer applications and provides utilities you might need.
10
+ * @extends {BaseManager}
11
+ */
12
+ class DeveloperManager extends BaseManager {
13
+ constructor(client) {
14
+ super(client);
15
+ }
16
+
17
+ /**
18
+ * Fetches all applications owned by the current user
19
+ * @param {boolean} [withTeamApplications=true] Whether to include team applications
20
+ * @returns {Promise<Collection<Snowflake, Application>>}
21
+ * @example
22
+ * // Fetch all developer applications
23
+ * client.developers.get()
24
+ * .then(applications => console.log(`Found ${applications.size} applications`))
25
+ * .catch(console.error);
26
+ */
27
+ async get(withTeamApplications = true) {
28
+ const data = await this.client.api.applications.get({
29
+ query: {
30
+ with_team_applications: withTeamApplications,
31
+ },
32
+ });
33
+
34
+ const applications = new Collection();
35
+ for (const app of data) {
36
+ applications.set(app.id, new Application(this.client, app));
37
+ }
38
+
39
+ return applications;
40
+ }
41
+
42
+ /**
43
+ * Alias for get() method
44
+ * @param {boolean} [withTeamApplications=true] Whether to include team applications
45
+ * @returns {Promise<Collection<Snowflake, Application>>}
46
+ */
47
+ list(withTeamApplications = true) {
48
+ return this.get(withTeamApplications);
49
+ }
50
+
51
+ /**
52
+ * Fetches a specific application by ID
53
+ * @param {Snowflake} applicationId The ID of the application to fetch
54
+ * @returns {Promise<Application>}
55
+ * @example
56
+ * // Fetch a specific application
57
+ * client.developers.fetch('1234567890123456789')
58
+ * .then(app => console.log(`Application: ${app.name}`))
59
+ * .catch(console.error);
60
+ */
61
+ async fetch(applicationId) {
62
+ const data = await this.client.api.applications(applicationId).get();
63
+ return new Application(this.client, data);
64
+ }
65
+
66
+ /**
67
+ * Edits an application
68
+ * @param {Snowflake} applicationId The ID of the application to edit
69
+ * @param {ApplicationEditData} data The data to edit the application with
70
+ * @returns {Promise<Application>}
71
+ * @example
72
+ * // Edit an application
73
+ * client.developers.edit('1234567890123456789', {
74
+ * name: 'My New Bot Name',
75
+ * description: 'A cool bot description',
76
+ * tags: ['utility', 'moderation']
77
+ * })
78
+ * .then(app => console.log(`Updated: ${app.name}`))
79
+ * .catch(console.error);
80
+ */
81
+ async edit(applicationId, data) {
82
+ const _data = {};
83
+
84
+ if (data.name) _data.name = data.name;
85
+ if (data.description !== undefined) _data.description = data.description;
86
+ if (data.icon !== undefined) _data.icon = await DataResolver.resolveImage(data.icon);
87
+ if (data.tags) _data.tags = data.tags;
88
+ if (data.interactionsEndpointUrl !== undefined) _data.interactions_endpoint_url = data.interactionsEndpointUrl;
89
+ if (data.roleConnectionsVerificationUrl !== undefined)
90
+ _data.role_connections_verification_url = data.roleConnectionsVerificationUrl;
91
+ if (data.termsOfServiceUrl !== undefined) _data.terms_of_service_url = data.termsOfServiceUrl;
92
+ if (data.privacyPolicyUrl !== undefined) _data.privacy_policy_url = data.privacyPolicyUrl;
93
+
94
+ const result = await this.client.api.applications(applicationId).patch({ data: _data });
95
+ return new Application(this.client, result);
96
+ }
97
+
98
+ /**
99
+ * Sets the avatar of an application
100
+ * @param {Snowflake} applicationId The ID of the application
101
+ * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
102
+ * @returns {Promise<Application>}
103
+ * @example
104
+ * // Set application avatar
105
+ * client.developers.setAvatar('1234567890123456789', './avatar.png')
106
+ * .then(app => console.log(`Updated avatar for ${app.name}`))
107
+ * .catch(console.error);
108
+ */
109
+ setAvatar(applicationId, avatar) {
110
+ return this.edit(applicationId, { icon: avatar });
111
+ }
112
+
113
+ /**
114
+ * Sets the name of an application
115
+ * @param {Snowflake} applicationId The ID of the application
116
+ * @param {string} name The new name
117
+ * @returns {Promise<Application>}
118
+ * @example
119
+ * // Set application name
120
+ * client.developers.setName('1234567890123456789', 'My Cool Bot')
121
+ * .then(app => console.log(`Renamed to ${app.name}`))
122
+ * .catch(console.error);
123
+ */
124
+ setName(applicationId, name) {
125
+ return this.edit(applicationId, { name });
126
+ }
127
+
128
+ /**
129
+ * Sets the description of an application
130
+ * @param {Snowflake} applicationId The ID of the application
131
+ * @param {string} description The new description
132
+ * @returns {Promise<Application>}
133
+ * @example
134
+ * // Set application description
135
+ * client.developers.setDescription('1234567890123456789', 'A helpful utility bot')
136
+ * .then(app => console.log(`Updated description for ${app.name}`))
137
+ * .catch(console.error);
138
+ */
139
+ setDescription(applicationId, description) {
140
+ return this.edit(applicationId, { description });
141
+ }
142
+
143
+ /**
144
+ * Sets the tags of an application (max 5 tags)
145
+ * @param {Snowflake} applicationId The ID of the application
146
+ * @param {string[]} tags Array of tags (max 5)
147
+ * @returns {Promise<Application>}
148
+ * @example
149
+ * // Set application tags
150
+ * client.developers.setTags('1234567890123456789', ['utility', 'moderation', 'fun'])
151
+ * .then(app => console.log(`Updated tags for ${app.name}`))
152
+ * .catch(console.error);
153
+ */
154
+ setTags(applicationId, tags) {
155
+ if (tags.length > 5) {
156
+ throw new Error('Maximum of 5 tags allowed');
157
+ }
158
+ return this.edit(applicationId, { tags });
159
+ }
160
+
161
+ /**
162
+ * Adds a tag to an application
163
+ * @param {Snowflake} applicationId The ID of the application
164
+ * @param {string} tag The tag to add
165
+ * @returns {Promise<Application>}
166
+ * @example
167
+ * // Add a tag to application
168
+ * client.developers.addTag('1234567890123456789', 'music')
169
+ * .then(app => console.log(`Added tag to ${app.name}`))
170
+ * .catch(console.error);
171
+ */
172
+ async addTag(applicationId, tag) {
173
+ const app = await this.fetch(applicationId);
174
+ const currentTags = app.tags || [];
175
+
176
+ if (currentTags.includes(tag)) {
177
+ throw new Error('Tag already exists');
178
+ }
179
+
180
+ if (currentTags.length >= 5) {
181
+ throw new Error('Maximum of 5 tags allowed');
182
+ }
183
+
184
+ const newTags = [...currentTags, tag];
185
+ return this.edit(applicationId, { tags: newTags });
186
+ }
187
+
188
+ /**
189
+ * Removes a tag from an application
190
+ * @param {Snowflake} applicationId The ID of the application
191
+ * @param {string} tag The tag to remove
192
+ * @returns {Promise<Application>}
193
+ * @example
194
+ * // Remove a tag from application
195
+ * client.developers.delTag('1234567890123456789', 'music')
196
+ * .then(app => console.log(`Removed tag from ${app.name}`))
197
+ * .catch(console.error);
198
+ */
199
+ async delTag(applicationId, tag) {
200
+ const app = await this.fetch(applicationId);
201
+ const currentTags = app.tags || [];
202
+
203
+ if (!currentTags.includes(tag)) {
204
+ throw new Error('Tag does not exist');
205
+ }
206
+
207
+ const newTags = currentTags.filter(t => t !== tag);
208
+ return this.edit(applicationId, { tags: newTags });
209
+ }
210
+
211
+ /**
212
+ * Enables intents for a bot application
213
+ * @param {Snowflake} applicationId The ID of the application
214
+ * @returns {Promise<Application>}
215
+ * @example
216
+ * // Enable intents for bot
217
+ * client.developers.enableIntents('1234567890123456789')
218
+ * .then(app => console.log(`Enabled intents for ${app.name}`))
219
+ * .catch(console.error);
220
+ */
221
+ async enableIntents(applicationId) {
222
+ const data = await this.client.api.applications(applicationId).patch({
223
+ data: {
224
+ bot_public: true,
225
+ bot_require_code_grant: false,
226
+ flags: 25731072, // Flags with intents enabled
227
+ },
228
+ });
229
+ return new Application(this.client, data);
230
+ }
231
+
232
+ /**
233
+ * Disables intents for a bot application
234
+ * @param {Snowflake} applicationId The ID of the application
235
+ * @returns {Promise<Application>}
236
+ * @example
237
+ * // Disable intents for bot
238
+ * client.developers.disableIntents('1234567890123456789')
239
+ * .then(app => console.log(`Disabled intents for ${app.name}`))
240
+ * .catch(console.error);
241
+ */
242
+ async disableIntents(applicationId) {
243
+ const data = await this.client.api.applications(applicationId).patch({
244
+ data: {
245
+ bot_public: true,
246
+ bot_require_code_grant: false,
247
+ flags: 25165824, // Flags with intents disabled
248
+ },
249
+ });
250
+ return new Application(this.client, data);
251
+ }
252
+ }
253
+
254
+ module.exports = DeveloperManager;