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,338 @@
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const { setTimeout } = require('node:timers');
5
+ const { Collection } = require('@discordjs/collection');
6
+ const CachedManager = require('./CachedManager');
7
+ const { Guild } = require('../structures/Guild');
8
+ const GuildChannel = require('../structures/GuildChannel');
9
+ const GuildEmoji = require('../structures/GuildEmoji');
10
+ const { GuildMember } = require('../structures/GuildMember');
11
+ const Invite = require('../structures/Invite');
12
+ const OAuth2Guild = require('../structures/OAuth2Guild');
13
+ const { Role } = require('../structures/Role');
14
+ const {
15
+ ChannelTypes,
16
+ Events,
17
+ OverwriteTypes,
18
+ VerificationLevels,
19
+ DefaultMessageNotificationLevels,
20
+ ExplicitContentFilterLevels,
21
+ VideoQualityModes,
22
+ } = require('../util/Constants');
23
+ const DataResolver = require('../util/DataResolver');
24
+ const Permissions = require('../util/Permissions');
25
+ const SystemChannelFlags = require('../util/SystemChannelFlags');
26
+ const { resolveColor } = require('../util/Util');
27
+ const Util = require('../util/Util');
28
+
29
+ let cacheWarningEmitted = false;
30
+
31
+ /**
32
+ * Manages API methods for Guilds and stores their cache.
33
+ * @extends {CachedManager}
34
+ */
35
+ class GuildManager extends CachedManager {
36
+ constructor(client, iterable) {
37
+ super(client, Guild, iterable);
38
+ if (!cacheWarningEmitted && this._cache.constructor.name !== 'Collection') {
39
+ cacheWarningEmitted = true;
40
+ process.emitWarning(
41
+ `Overriding the cache handling for ${this.constructor.name} is unsupported and breaks functionality.`,
42
+ 'UnsupportedCacheOverwriteWarning',
43
+ );
44
+ }
45
+ }
46
+
47
+ /**
48
+ * The cache of this Manager
49
+ * @type {Collection<Snowflake, Guild>}
50
+ * @name GuildManager#cache
51
+ */
52
+
53
+ /**
54
+ * Data that resolves to give a Guild object. This can be:
55
+ * * A Guild object
56
+ * * A GuildChannel object
57
+ * * A GuildEmoji object
58
+ * * A Role object
59
+ * * A Snowflake
60
+ * * An Invite object
61
+ * @typedef {Guild|GuildChannel|GuildMember|GuildEmoji|Role|Snowflake|Invite} GuildResolvable
62
+ */
63
+
64
+ /**
65
+ * Partial data for a Role.
66
+ * @typedef {Object} PartialRoleData
67
+ * @property {Snowflake|number} [id] The role's id, used to set channel overrides,
68
+ * this is a placeholder and will be replaced by the API after consumption
69
+ * @property {string} [name] The name of the role
70
+ * @property {ColorResolvable} [color] The color of the role, either a hex string or a base 10 number
71
+ * @property {boolean} [hoist] Whether or not the role should be hoisted
72
+ * @property {number} [position] The position of the role
73
+ * @property {PermissionResolvable} [permissions] The permissions of the role
74
+ * @property {boolean} [mentionable] Whether or not the role should be mentionable
75
+ */
76
+
77
+ /**
78
+ * Partial overwrite data.
79
+ * @typedef {Object} PartialOverwriteData
80
+ * @property {Snowflake|number} id The id of the {@link Role} or {@link User} this overwrite belongs to
81
+ * @property {OverwriteType} [type] The type of this overwrite
82
+ * @property {PermissionResolvable} [allow] The permissions to allow
83
+ * @property {PermissionResolvable} [deny] The permissions to deny
84
+ */
85
+
86
+ /**
87
+ * Partial data for a Channel.
88
+ * @typedef {Object} PartialChannelData
89
+ * @property {Snowflake|number} [id] The channel's id, used to set its parent,
90
+ * this is a placeholder and will be replaced by the API after consumption
91
+ * @property {Snowflake|number} [parentId] The parent id for this channel
92
+ * @property {ChannelType|number} [type] The type of the channel
93
+ * @property {string} name The name of the channel
94
+ * @property {string} [topic] The topic of the text channel
95
+ * @property {boolean} [nsfw] Whether the channel is NSFW
96
+ * @property {number} [bitrate] The bitrate of the voice channel
97
+ * @property {number} [userLimit] The user limit of the channel
98
+ * @property {?string} [rtcRegion] The RTC region of the channel
99
+ * @property {VideoQualityMode|number} [videoQualityMode] The camera video quality mode of the channel
100
+ * @property {PartialOverwriteData[]} [permissionOverwrites]
101
+ * Overwrites of the channel
102
+ * @property {number} [rateLimitPerUser] The rate limit per user (slowmode) of the channel in seconds
103
+ */
104
+
105
+ /**
106
+ * Resolves a GuildResolvable to a Guild object.
107
+ * @method resolve
108
+ * @memberof GuildManager
109
+ * @instance
110
+ * @param {GuildResolvable} guild The guild resolvable to identify
111
+ * @returns {?Guild}
112
+ */
113
+ resolve(guild) {
114
+ if (
115
+ guild instanceof GuildChannel ||
116
+ guild instanceof GuildMember ||
117
+ guild instanceof GuildEmoji ||
118
+ guild instanceof Role ||
119
+ (guild instanceof Invite && guild.guild)
120
+ ) {
121
+ return super.resolve(guild.guild);
122
+ }
123
+ return super.resolve(guild);
124
+ }
125
+
126
+ /**
127
+ * Resolves a {@link GuildResolvable} to a {@link Guild} id string.
128
+ * @method resolveId
129
+ * @memberof GuildManager
130
+ * @instance
131
+ * @param {GuildResolvable} guild The guild resolvable to identify
132
+ * @returns {?Snowflake}
133
+ */
134
+ resolveId(guild) {
135
+ if (
136
+ guild instanceof GuildChannel ||
137
+ guild instanceof GuildMember ||
138
+ guild instanceof GuildEmoji ||
139
+ guild instanceof Role ||
140
+ (guild instanceof Invite && guild.guild)
141
+ ) {
142
+ return super.resolveId(guild.guild.id);
143
+ }
144
+ return super.resolveId(guild);
145
+ }
146
+
147
+ /**
148
+ * Options used to create a guild.
149
+ * @typedef {Object} GuildCreateOptions
150
+ * @property {Snowflake|number} [afkChannelId] The AFK channel's id
151
+ * @property {number} [afkTimeout] The AFK timeout in seconds
152
+ * @property {PartialChannelData[]} [channels=[]] The channels for this guild
153
+ * @property {DefaultMessageNotificationLevel|number} [defaultMessageNotifications] The default message notifications
154
+ * for the guild
155
+ * @property {ExplicitContentFilterLevel} [explicitContentFilter] The explicit content filter level for the guild
156
+ * @property {?(BufferResolvable|Base64Resolvable)} [icon=null] The icon for the guild
157
+ * @property {PartialRoleData[]} [roles=[]] The roles for this guild,
158
+ * the first element of this array is used to change properties of the guild's everyone role.
159
+ * @property {Snowflake|number} [systemChannelId] The system channel's id
160
+ * @property {SystemChannelFlagsResolvable} [systemChannelFlags] The flags of the system channel
161
+ * @property {VerificationLevel} [verificationLevel] The verification level for the guild
162
+ */
163
+
164
+ /**
165
+ * Creates a guild.
166
+ * @param {string} name The name of the guild
167
+ * @param {GuildCreateOptions} [options] Options for creating the guild
168
+ * @returns {Promise<Guild>} The guild that was created
169
+ */
170
+ async create(
171
+ name,
172
+ {
173
+ afkChannelId,
174
+ afkTimeout,
175
+ channels = [],
176
+ defaultMessageNotifications,
177
+ explicitContentFilter,
178
+ icon = null,
179
+ roles = [],
180
+ systemChannelId,
181
+ systemChannelFlags,
182
+ verificationLevel,
183
+ } = {},
184
+ ) {
185
+ icon = await DataResolver.resolveImage(icon);
186
+ if (typeof verificationLevel === 'string') {
187
+ verificationLevel = VerificationLevels[verificationLevel];
188
+ }
189
+ if (typeof defaultMessageNotifications === 'string') {
190
+ defaultMessageNotifications = DefaultMessageNotificationLevels[defaultMessageNotifications];
191
+ }
192
+ if (typeof explicitContentFilter === 'string') {
193
+ explicitContentFilter = ExplicitContentFilterLevels[explicitContentFilter];
194
+ }
195
+ for (const channel of channels) {
196
+ channel.type &&= typeof channel.type === 'number' ? channel.type : ChannelTypes[channel.type];
197
+ channel.parent_id = channel.parentId;
198
+ delete channel.parentId;
199
+ channel.user_limit = channel.userLimit;
200
+ delete channel.userLimit;
201
+ channel.rate_limit_per_user = channel.rateLimitPerUser;
202
+ delete channel.rateLimitPerUser;
203
+ channel.rtc_region = channel.rtcRegion;
204
+ delete channel.rtcRegion;
205
+ channel.video_quality_mode =
206
+ typeof channel.videoQualityMode === 'string'
207
+ ? VideoQualityModes[channel.videoQualityMode]
208
+ : channel.videoQualityMode;
209
+ delete channel.videoQualityMode;
210
+
211
+ if (!channel.permissionOverwrites) continue;
212
+ for (const overwrite of channel.permissionOverwrites) {
213
+ if (typeof overwrite.type === 'string') {
214
+ overwrite.type = OverwriteTypes[overwrite.type];
215
+ }
216
+ overwrite.allow &&= Permissions.resolve(overwrite.allow).toString();
217
+ overwrite.deny &&= Permissions.resolve(overwrite.deny).toString();
218
+ }
219
+ channel.permission_overwrites = channel.permissionOverwrites;
220
+ delete channel.permissionOverwrites;
221
+ }
222
+ for (const role of roles) {
223
+ role.color &&= resolveColor(role.color);
224
+ role.permissions &&= Permissions.resolve(role.permissions).toString();
225
+ }
226
+ systemChannelFlags &&= SystemChannelFlags.resolve(systemChannelFlags);
227
+
228
+ const data = await this.client.api.guilds.post({
229
+ data: {
230
+ name,
231
+ icon,
232
+ verification_level: verificationLevel,
233
+ default_message_notifications: defaultMessageNotifications,
234
+ explicit_content_filter: explicitContentFilter,
235
+ roles,
236
+ channels,
237
+ afk_channel_id: afkChannelId,
238
+ afk_timeout: afkTimeout,
239
+ system_channel_id: systemChannelId,
240
+ system_channel_flags: systemChannelFlags,
241
+ guild_template_code: '2TffvPucqHkN', // From Discord
242
+ },
243
+ });
244
+
245
+ if (this.client.guilds.cache.has(data.id)) return this.client.guilds.cache.get(data.id);
246
+
247
+ return new Promise(resolve => {
248
+ const handleGuild = guild => {
249
+ if (guild.id === data.id) {
250
+ clearTimeout(timeout);
251
+ this.client.removeListener(Events.GUILD_CREATE, handleGuild);
252
+ this.client.decrementMaxListeners();
253
+ resolve(guild);
254
+ }
255
+ };
256
+ this.client.incrementMaxListeners();
257
+ this.client.on(Events.GUILD_CREATE, handleGuild);
258
+
259
+ const timeout = setTimeout(() => {
260
+ this.client.removeListener(Events.GUILD_CREATE, handleGuild);
261
+ this.client.decrementMaxListeners();
262
+ resolve(this.client.guilds._add(data));
263
+ }, 10_000).unref();
264
+ });
265
+ }
266
+
267
+ /**
268
+ * Options used to fetch a single guild.
269
+ * @typedef {BaseFetchOptions} FetchGuildOptions
270
+ * @property {GuildResolvable} guild The guild to fetch
271
+ * @property {boolean} [withCounts=true] Whether the approximate member and presence counts should be returned
272
+ */
273
+
274
+ /**
275
+ * Options used to fetch multiple guilds.
276
+ * @typedef {Object} FetchGuildsOptions
277
+ * @property {Snowflake} [before] Get guilds before this guild id
278
+ * @property {Snowflake} [after] Get guilds after this guild id
279
+ * @property {number} [limit=200] Maximum number of guilds to request (1-200)
280
+ */
281
+
282
+ /**
283
+ * Obtains one or multiple guilds from Discord, or the guild cache if it's already available.
284
+ * @param {GuildResolvable|FetchGuildOptions|FetchGuildsOptions} [options] The guild's id or options
285
+ * @returns {Promise<Guild|Collection<Snowflake, OAuth2Guild>>}
286
+ */
287
+ async fetch(options = {}) {
288
+ const id = this.resolveId(options) ?? this.resolveId(options.guild);
289
+
290
+ if (id) {
291
+ if (!options.force) {
292
+ const existing = this.cache.get(id);
293
+ if (existing) return existing;
294
+ }
295
+
296
+ const data = await this.client.api.guilds(id).get({ query: { with_counts: options.withCounts ?? true } });
297
+ return this._add(data, options.cache);
298
+ }
299
+
300
+ const data = await this.client.api.users('@me').guilds.get({ query: options });
301
+ return data.reduce((coll, guild) => coll.set(guild.id, new OAuth2Guild(this.client, guild)), new Collection());
302
+ }
303
+
304
+ /**
305
+ * Options used to set incident actions. Supplying `null` to any option will disable the action.
306
+ * @typedef {Object} IncidentActionsEditOptions
307
+ * @property {?DateResolvable} [invitesDisabledUntil] When invites should be enabled again
308
+ * @property {?DateResolvable} [dmsDisabledUntil] When direct messages should be enabled again
309
+ */
310
+
311
+ /**
312
+ * Sets the incident actions for a guild.
313
+ * @param {GuildResolvable} guild The guild
314
+ * @param {IncidentActionsEditOptions} incidentActions The incident actions to set
315
+ * @returns {Promise<IncidentActions>}
316
+ */
317
+ async setIncidentActions(guild, { invitesDisabledUntil, dmsDisabledUntil }) {
318
+ const guildId = this.resolveId(guild);
319
+
320
+ const data = await this.client.api.guilds(guildId)['incident-actions'].put({
321
+ data: {
322
+ invites_disabled_until: invitesDisabledUntil && new Date(invitesDisabledUntil).toISOString(),
323
+ dms_disabled_until: dmsDisabledUntil && new Date(dmsDisabledUntil).toISOString(),
324
+ },
325
+ });
326
+
327
+ const parsedData = Util.transformAPIIncidentsData(data);
328
+ const resolvedGuild = this.resolve(guild);
329
+
330
+ if (resolvedGuild) {
331
+ resolvedGuild.incidentsData = parsedData;
332
+ }
333
+
334
+ return parsedData;
335
+ }
336
+ }
337
+
338
+ module.exports = GuildManager;