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,636 @@
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const Base = require('./Base');
5
+ const VoiceState = require('./VoiceState');
6
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
7
+ const { Error } = require('../errors');
8
+ const GuildMemberRoleManager = require('../managers/GuildMemberRoleManager');
9
+ const GuildMemberFlags = require('../util/GuildMemberFlags');
10
+ const Permissions = require('../util/Permissions');
11
+
12
+ /**
13
+ * @type {WeakSet<GuildMember>}
14
+ * @private
15
+ * @internal
16
+ */
17
+ const deletedGuildMembers = new WeakSet();
18
+ let deprecationEmittedForDeleted = false;
19
+
20
+ /**
21
+ * Represents a member of a guild on Discord.
22
+ * @implements {TextBasedChannel}
23
+ * @extends {Base}
24
+ */
25
+ class GuildMember extends Base {
26
+ constructor(client, data, guild) {
27
+ super(client);
28
+
29
+ /**
30
+ * The guild that this member is part of
31
+ * @type {Guild}
32
+ */
33
+ this.guild = guild;
34
+
35
+ /**
36
+ * The timestamp the member joined the guild at
37
+ * @type {?number}
38
+ */
39
+ this.joinedTimestamp = null;
40
+
41
+ /**
42
+ * The last timestamp this member started boosting the guild
43
+ * @type {?number}
44
+ */
45
+ this.premiumSinceTimestamp = null;
46
+
47
+ /**
48
+ * The nickname of this member, if they have one
49
+ * @type {?string}
50
+ */
51
+ this.nickname = null;
52
+
53
+ /**
54
+ * Whether this member has yet to pass the guild's membership gate
55
+ * @type {boolean}
56
+ */
57
+ this.pending = false;
58
+
59
+ /**
60
+ * The timestamp this member's timeout will be removed
61
+ * @type {?number}
62
+ */
63
+ this.communicationDisabledUntilTimestamp = null;
64
+
65
+ /**
66
+ * The role ids of the member
67
+ * @type {Snowflake[]}
68
+ * @private
69
+ */
70
+ this._roles = [];
71
+ if (data) this._patch(data);
72
+ }
73
+
74
+ _patch(data) {
75
+ if ('user' in data) {
76
+ /**
77
+ * The user that this guild member instance represents
78
+ * @type {?User}
79
+ */
80
+ this.user = this.client.users._add(data.user, true);
81
+ }
82
+
83
+ if ('nick' in data) this.nickname = data.nick;
84
+ if ('avatar' in data) {
85
+ /**
86
+ * The guild member's avatar hash
87
+ * @type {?string}
88
+ */
89
+ this.avatar = data.avatar;
90
+ } else if (typeof this.avatar !== 'string') {
91
+ this.avatar = null;
92
+ }
93
+ if ('banner' in data) {
94
+ /**
95
+ * The guild member's banner hash.
96
+ * @type {?string}
97
+ */
98
+ this.banner = data.banner;
99
+ } else {
100
+ this.banner ??= null;
101
+ }
102
+
103
+ if ('joined_at' in data) this.joinedTimestamp = new Date(data.joined_at).getTime();
104
+ if ('premium_since' in data) {
105
+ this.premiumSinceTimestamp = data.premium_since ? new Date(data.premium_since).getTime() : null;
106
+ }
107
+ if ('roles' in data) this._roles = data.roles;
108
+ this.pending = data.pending ?? false;
109
+
110
+ if ('communication_disabled_until' in data) {
111
+ this.communicationDisabledUntilTimestamp =
112
+ data.communication_disabled_until && Date.parse(data.communication_disabled_until);
113
+ }
114
+ if ('flags' in data) {
115
+ /**
116
+ * The flags of this member
117
+ * @type {Readonly<GuildMemberFlags>}
118
+ */
119
+ this.flags = new GuildMemberFlags(data.flags).freeze();
120
+ } else {
121
+ this.flags ??= new GuildMemberFlags().freeze();
122
+ }
123
+
124
+ if (data.avatar_decoration_data) {
125
+ /**
126
+ * The member avatar decoration's data
127
+ * @type {?AvatarDecorationData}
128
+ */
129
+ this.avatarDecorationData = {
130
+ asset: data.avatar_decoration_data.asset,
131
+ skuId: data.avatar_decoration_data.sku_id,
132
+ };
133
+ } else {
134
+ this.avatarDecorationData = null;
135
+ }
136
+ }
137
+
138
+ _clone() {
139
+ const clone = super._clone();
140
+ clone._roles = this._roles.slice();
141
+ return clone;
142
+ }
143
+
144
+ /**
145
+ * Whether or not the structure has been deleted
146
+ * @type {boolean}
147
+ * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
148
+ */
149
+ get deleted() {
150
+ if (!deprecationEmittedForDeleted) {
151
+ deprecationEmittedForDeleted = true;
152
+ process.emitWarning(
153
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
154
+ 'DeprecationWarning',
155
+ );
156
+ }
157
+
158
+ return deletedGuildMembers.has(this);
159
+ }
160
+
161
+ set deleted(value) {
162
+ if (!deprecationEmittedForDeleted) {
163
+ deprecationEmittedForDeleted = true;
164
+ process.emitWarning(
165
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
166
+ 'DeprecationWarning',
167
+ );
168
+ }
169
+
170
+ if (value) deletedGuildMembers.add(this);
171
+ else deletedGuildMembers.delete(this);
172
+ }
173
+
174
+ /**
175
+ * Whether this GuildMember is a partial
176
+ * @type {boolean}
177
+ * @readonly
178
+ */
179
+ get partial() {
180
+ return this.joinedTimestamp === null;
181
+ }
182
+
183
+ /**
184
+ * A manager for the roles belonging to this member
185
+ * @type {GuildMemberRoleManager}
186
+ * @readonly
187
+ */
188
+ get roles() {
189
+ return new GuildMemberRoleManager(this);
190
+ }
191
+
192
+ /**
193
+ * The voice state of this member
194
+ * @type {VoiceState}
195
+ * @readonly
196
+ */
197
+ get voice() {
198
+ return this.guild.voiceStates.cache.get(this.id) ?? new VoiceState(this.guild, { user_id: this.id });
199
+ }
200
+
201
+ /**
202
+ * A link to the user's avatar decoration.
203
+ * @returns {?string}
204
+ */
205
+ avatarDecorationURL() {
206
+ if (!this.avatarDecorationData) return null;
207
+ return this.client.rest.cdn.AvatarDecoration(this.avatarDecorationData.asset);
208
+ }
209
+
210
+ /**
211
+ * A link to the member's guild avatar.
212
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
213
+ * @returns {?string}
214
+ */
215
+ avatarURL({ format, size, dynamic } = {}) {
216
+ if (!this.avatar) return null;
217
+ return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic);
218
+ }
219
+
220
+ /**
221
+ * A link to the member's banner.
222
+ * @param {ImageURLOptions} [options={}] Options for the banner URL
223
+ * @returns {?string}
224
+ */
225
+ bannerURL({ format, size, dynamic } = {}) {
226
+ return (
227
+ this.banner && this.client.rest.cdn.GuildMemberBanner(this.guild.id, this.id, this.banner, format, size, dynamic)
228
+ );
229
+ }
230
+
231
+ /**
232
+ * A link to the member's guild avatar decoration if they have one.
233
+ * Otherwise, a link to their {@link User#avatarDecorationURL} will be returned.
234
+ * @returns {?string}
235
+ */
236
+ displayAvatarDecorationURL() {
237
+ return this.avatarDecorationURL() ?? this.user.avatarDecorationURL();
238
+ }
239
+
240
+ /**
241
+ * A link to the member's guild avatar if they have one.
242
+ * Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
243
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
244
+ * @returns {string}
245
+ */
246
+ displayAvatarURL(options) {
247
+ return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
248
+ }
249
+
250
+ /**
251
+ * A link to the member's guild banner if they have one.
252
+ * Otherwise, a link to their {@link User#bannerURL} will be returned.
253
+ * @param {ImageURLOptions} [options={}] Options for the image URL
254
+ * @returns {?string}
255
+ */
256
+ displayBannerURL(options) {
257
+ return this.bannerURL(options) ?? this.user.bannerURL(options);
258
+ }
259
+
260
+ /**
261
+ * The time this member joined the guild
262
+ * @type {?Date}
263
+ * @readonly
264
+ */
265
+ get joinedAt() {
266
+ return this.joinedTimestamp ? new Date(this.joinedTimestamp) : null;
267
+ }
268
+
269
+ /**
270
+ * The time this member's timeout will be removed
271
+ * @type {?Date}
272
+ * @readonly
273
+ */
274
+ get communicationDisabledUntil() {
275
+ return this.communicationDisabledUntilTimestamp && new Date(this.communicationDisabledUntilTimestamp);
276
+ }
277
+
278
+ /**
279
+ * The last time this member started boosting the guild
280
+ * @type {?Date}
281
+ * @readonly
282
+ */
283
+ get premiumSince() {
284
+ return this.premiumSinceTimestamp ? new Date(this.premiumSinceTimestamp) : null;
285
+ }
286
+
287
+ /**
288
+ * The presence of this guild member
289
+ * @type {?Presence}
290
+ * @readonly
291
+ */
292
+ get presence() {
293
+ return this.guild.presences.cache.get(this.id) ?? null;
294
+ }
295
+
296
+ /**
297
+ * The displayed color of this member in base 10
298
+ * @type {number}
299
+ * @readonly
300
+ */
301
+ get displayColor() {
302
+ return this.roles.color?.colors.primaryColor ?? 0;
303
+ }
304
+
305
+ /**
306
+ * The displayed color of this member in hexadecimal
307
+ * @type {string}
308
+ * @readonly
309
+ */
310
+ get displayHexColor() {
311
+ return this.roles.color?.hexColor ?? '#000000';
312
+ }
313
+
314
+ /**
315
+ * The member's id
316
+ * @type {Snowflake}
317
+ * @readonly
318
+ */
319
+ get id() {
320
+ return this.user.id;
321
+ }
322
+
323
+ /**
324
+ * The nickname of this member, or their user display name if they don't have one
325
+ * @type {?string}
326
+ * @readonly
327
+ */
328
+ get displayName() {
329
+ return this.nickname ?? this.user.displayName;
330
+ }
331
+
332
+ /**
333
+ * The overall set of permissions for this member, taking only roles and owner status into account
334
+ * @type {Readonly<Permissions>}
335
+ * @readonly
336
+ */
337
+ get permissions() {
338
+ if (this.user.id === this.guild.ownerId) return new Permissions(Permissions.ALL).freeze();
339
+ return new Permissions(this.roles.cache.map(role => role.permissions)).freeze();
340
+ }
341
+
342
+ /**
343
+ * Whether the client user is above this user in the hierarchy, according to role position and guild ownership.
344
+ * This is a prerequisite for many moderative actions.
345
+ * @type {boolean}
346
+ * @readonly
347
+ */
348
+ get manageable() {
349
+ if (this.user.id === this.guild.ownerId) return false;
350
+ if (this.user.id === this.client.user.id) return false;
351
+ if (this.client.user.id === this.guild.ownerId) return true;
352
+ if (!this.guild.members.me) throw new Error('GUILD_UNCACHED_ME');
353
+ return this.guild.members.me.roles.highest.comparePositionTo(this.roles.highest) > 0;
354
+ }
355
+
356
+ /**
357
+ * Whether this member is kickable by the client user
358
+ * @type {boolean}
359
+ * @readonly
360
+ */
361
+ get kickable() {
362
+ return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.KICK_MEMBERS);
363
+ }
364
+
365
+ /**
366
+ * Whether this member is bannable by the client user
367
+ * @type {boolean}
368
+ * @readonly
369
+ */
370
+ get bannable() {
371
+ return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.BAN_MEMBERS);
372
+ }
373
+
374
+ /**
375
+ * Whether this member is moderatable by the client user
376
+ * @type {boolean}
377
+ * @readonly
378
+ */
379
+ get moderatable() {
380
+ return (
381
+ !this.permissions.has(Permissions.FLAGS.ADMINISTRATOR) &&
382
+ this.manageable &&
383
+ (this.guild.members.me?.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS) ?? false)
384
+ );
385
+ }
386
+
387
+ /**
388
+ * Whether this member is currently timed out
389
+ * @returns {boolean}
390
+ */
391
+ isCommunicationDisabled() {
392
+ return this.communicationDisabledUntilTimestamp > Date.now();
393
+ }
394
+
395
+ /**
396
+ * Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,
397
+ * taking into account roles and permission overwrites.
398
+ * @param {GuildChannelResolvable} channel The guild channel to use as context
399
+ * @returns {Readonly<Permissions>}
400
+ */
401
+ permissionsIn(channel) {
402
+ channel = this.guild.channels.resolve(channel);
403
+ if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
404
+ return channel.permissionsFor(this);
405
+ }
406
+
407
+ /**
408
+ * Edits this member.
409
+ * @param {GuildMemberEditData} data The data to edit the member with
410
+ * @param {string} [reason] Reason for editing this user
411
+ * @returns {Promise<GuildMember>}
412
+ */
413
+ edit(data, reason) {
414
+ return this.guild.members.edit(this, data, reason);
415
+ }
416
+
417
+ /**
418
+ * Sets the nickname for this member.
419
+ * @param {?string} nick The nickname for the guild member, or `null` if you want to reset their nickname
420
+ * @param {string} [reason] Reason for setting the nickname
421
+ * @returns {Promise<GuildMember>}
422
+ * @example
423
+ * // Set a nickname for a guild member
424
+ * guildMember.setNickname('cool nickname', 'Needed a new nickname')
425
+ * .then(member => console.log(`Set nickname of ${member.user.username}`))
426
+ * .catch(console.error);
427
+ * @example
428
+ * // Remove a nickname for a guild member
429
+ * guildMember.setNickname(null, 'No nicknames allowed!')
430
+ * .then(member => console.log(`Removed nickname for ${member.user.username}`))
431
+ * .catch(console.error);
432
+ */
433
+ setNickname(nick, reason) {
434
+ return this.edit({ nick }, reason);
435
+ }
436
+
437
+ /**
438
+ * Sets the flags for this member.
439
+ * @param {GuildMemberFlagsResolvable} flags The flags to set
440
+ * @param {string} [reason] Reason for setting the flags
441
+ * @returns {Promise<GuildMember>}
442
+ */
443
+ setFlags(flags, reason) {
444
+ return this.edit({ flags, reason });
445
+ }
446
+
447
+ /**
448
+ * Creates a DM channel between the client and this member.
449
+ * @param {boolean} [force=false] Whether to skip the cache check and request the API
450
+ * @returns {Promise<DMChannel>}
451
+ */
452
+ createDM(force = false) {
453
+ return this.user.createDM(force);
454
+ }
455
+
456
+ /**
457
+ * Deletes any DMs with this member.
458
+ * @returns {Promise<DMChannel>}
459
+ */
460
+ deleteDM() {
461
+ return this.user.deleteDM();
462
+ }
463
+
464
+ /**
465
+ * Kicks this member from the guild.
466
+ * @param {string} [reason] Reason for kicking user
467
+ * @returns {Promise<GuildMember>}
468
+ */
469
+ kick(reason) {
470
+ return this.guild.members.kick(this, reason);
471
+ }
472
+
473
+ /**
474
+ * Bans this guild member.
475
+ * @param {BanOptions} [options] Options for the ban
476
+ * @returns {Promise<GuildMember>}
477
+ * @example
478
+ * // Ban a guild member, deleting a week's worth of messages
479
+ * guildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })
480
+ * .then(console.log)
481
+ * .catch(console.error);
482
+ */
483
+ ban(options) {
484
+ return this.guild.bans.create(this, options);
485
+ }
486
+
487
+ /**
488
+ * Times this guild member out.
489
+ * @param {DateResolvable|null} communicationDisabledUntil The date or timestamp
490
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
491
+ * @param {string} [reason] The reason for this timeout.
492
+ * @returns {Promise<GuildMember>}
493
+ * @example
494
+ * // Time a guild member out for 5 minutes
495
+ * guildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')
496
+ * .then(console.log)
497
+ * .catch(console.error);
498
+ * @example
499
+ * // Remove the timeout of a guild member
500
+ * guildMember.disableCommunicationUntil(null)
501
+ * .then(member => console.log(`Removed timeout for ${member.displayName}`))
502
+ * .catch(console.error);
503
+ */
504
+ disableCommunicationUntil(communicationDisabledUntil, reason) {
505
+ return this.edit({ communicationDisabledUntil }, reason);
506
+ }
507
+
508
+ /**
509
+ * Times this guild member out.
510
+ * @param {number|null} timeout The time in milliseconds
511
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
512
+ * @param {string} [reason] The reason for this timeout.
513
+ * @returns {Promise<GuildMember>}
514
+ * @example
515
+ * // Time a guild member out for 5 minutes
516
+ * guildMember.timeout(5 * 60 * 1000, 'They deserved it')
517
+ * .then(console.log)
518
+ * .catch(console.error);
519
+ */
520
+ timeout(timeout, reason) {
521
+ return this.disableCommunicationUntil(timeout && Date.now() + timeout, reason);
522
+ }
523
+
524
+ /**
525
+ * Fetches this GuildMember.
526
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
527
+ * @returns {Promise<GuildMember>}
528
+ */
529
+ fetch(force = true) {
530
+ return this.guild.members.fetch({ user: this.id, cache: true, force });
531
+ }
532
+
533
+ /**
534
+ * Whether this guild member equals another guild member. It compares all properties, so for most
535
+ * comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
536
+ * and is often what most users need.
537
+ * @param {GuildMember} member The member to compare with
538
+ * @returns {boolean}
539
+ */
540
+ equals(member) {
541
+ return (
542
+ member instanceof this.constructor &&
543
+ this.id === member.id &&
544
+ this.partial === member.partial &&
545
+ this.guild.id === member.guild.id &&
546
+ this.joinedTimestamp === member.joinedTimestamp &&
547
+ this.nickname === member.nickname &&
548
+ this.avatar === member.avatar &&
549
+ this.banner === member.banner &&
550
+ this.pending === member.pending &&
551
+ this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
552
+ this.flags.equals(member.flags) &&
553
+ (this._roles === member._roles ||
554
+ (this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i]))) &&
555
+ this.avatarDecorationData?.asset === member.avatarDecorationData?.asset &&
556
+ this.avatarDecorationData?.skuId === member.avatarDecorationData?.skuId
557
+ );
558
+ }
559
+
560
+ /**
561
+ * When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
562
+ * @returns {string}
563
+ * @example
564
+ * // Logs: Hello from <@123456789012345678>!
565
+ * console.log(`Hello from ${member}!`);
566
+ */
567
+ toString() {
568
+ return `<@${this.nickname ? '!' : ''}${this.user.id}>`;
569
+ }
570
+
571
+ toJSON() {
572
+ const json = super.toJSON({
573
+ guild: 'guildId',
574
+ user: 'userId',
575
+ displayName: true,
576
+ roles: true,
577
+ });
578
+ json.avatarURL = this.avatarURL();
579
+ json.bannerURL = this.bannerURL();
580
+ json.displayAvatarURL = this.displayAvatarURL();
581
+ json.displayBannerURL = this.displayBannerURL();
582
+ json.avatarDecorationURL = this.avatarDecorationURL();
583
+ return json;
584
+ }
585
+
586
+ /**
587
+ * Sets the guild avatar of the logged in client.
588
+ * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
589
+ * @returns {Promise<GuildMember>}
590
+ */
591
+ setAvatar(avatar) {
592
+ return this.edit({ avatar });
593
+ }
594
+
595
+ /**
596
+ * Sets the guild banner of the logged in client.
597
+ * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
598
+ * @returns {Promise<GuildMember>}
599
+ */
600
+ setBanner(banner) {
601
+ return this.edit({ banner });
602
+ }
603
+
604
+ /**
605
+ * Set Guild About me
606
+ * @param {string | null} bio Bio to set
607
+ * @returns {Promise<GuildMember>}
608
+ */
609
+ setAboutMe(bio = null) {
610
+ return this.edit({ bio });
611
+ }
612
+ }
613
+
614
+ /**
615
+ * Sends a message to this user.
616
+ * @method send
617
+ * @memberof GuildMember
618
+ * @instance
619
+ * @param {string|MessagePayload|MessageOptions} options The options to provide
620
+ * @returns {Promise<Message>}
621
+ * @example
622
+ * // Send a direct message
623
+ * guildMember.send('Hello!')
624
+ * .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))
625
+ * .catch(console.error);
626
+ */
627
+
628
+ TextBasedChannel.applyToClass(GuildMember);
629
+
630
+ exports.GuildMember = GuildMember;
631
+ exports.deletedGuildMembers = deletedGuildMembers;
632
+
633
+ /**
634
+ * @external APIGuildMember
635
+ * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object}
636
+ */