djs-selfbot-v13 3.1.8 → 3.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +48 -37
  3. package/package.json +44 -26
  4. package/src/WebSocket.js +39 -39
  5. package/src/client/BaseClient.js +86 -86
  6. package/src/client/Client.js +934 -765
  7. package/src/client/WebhookClient.js +61 -61
  8. package/src/client/actions/Action.js +116 -120
  9. package/src/client/actions/ActionsManager.js +80 -78
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -34
  11. package/src/client/actions/AutoModerationActionExecution.js +27 -27
  12. package/src/client/actions/AutoModerationRuleCreate.js +28 -28
  13. package/src/client/actions/AutoModerationRuleDelete.js +32 -32
  14. package/src/client/actions/AutoModerationRuleUpdate.js +30 -30
  15. package/src/client/actions/ChannelCreate.js +23 -23
  16. package/src/client/actions/ChannelDelete.js +39 -39
  17. package/src/client/actions/ChannelUpdate.js +43 -43
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -29
  19. package/src/client/actions/GuildBanAdd.js +20 -20
  20. package/src/client/actions/GuildBanRemove.js +25 -25
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -21
  22. package/src/client/actions/GuildDelete.js +65 -65
  23. package/src/client/actions/GuildEmojiCreate.js +20 -20
  24. package/src/client/actions/GuildEmojiDelete.js +21 -21
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -20
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -34
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -19
  28. package/src/client/actions/GuildMemberRemove.js +33 -33
  29. package/src/client/actions/GuildMemberUpdate.js +44 -44
  30. package/src/client/actions/GuildRoleCreate.js +25 -25
  31. package/src/client/actions/GuildRoleDelete.js +31 -31
  32. package/src/client/actions/GuildRoleUpdate.js +39 -39
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -21
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -27
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -31
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -30
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -32
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -32
  39. package/src/client/actions/GuildStickerCreate.js +20 -20
  40. package/src/client/actions/GuildStickerDelete.js +21 -21
  41. package/src/client/actions/GuildStickerUpdate.js +20 -20
  42. package/src/client/actions/GuildStickersUpdate.js +34 -34
  43. package/src/client/actions/GuildUpdate.js +33 -33
  44. package/src/client/actions/InviteCreate.js +28 -28
  45. package/src/client/actions/InviteDelete.js +30 -30
  46. package/src/client/actions/MessageCreate.js +50 -46
  47. package/src/client/actions/MessageDelete.js +32 -32
  48. package/src/client/actions/MessageDeleteBulk.js +46 -46
  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 -56
  52. package/src/client/actions/MessageReactionRemove.js +50 -45
  53. package/src/client/actions/MessageReactionRemoveAll.js +33 -33
  54. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -28
  55. package/src/client/actions/MessageUpdate.js +26 -26
  56. package/src/client/actions/PresenceUpdate.js +50 -46
  57. package/src/client/actions/StageInstanceCreate.js +28 -28
  58. package/src/client/actions/StageInstanceDelete.js +33 -33
  59. package/src/client/actions/StageInstanceUpdate.js +30 -30
  60. package/src/client/actions/ThreadCreate.js +24 -24
  61. package/src/client/actions/ThreadDelete.js +32 -32
  62. package/src/client/actions/ThreadListSync.js +59 -59
  63. package/src/client/actions/ThreadMemberUpdate.js +30 -30
  64. package/src/client/actions/ThreadMembersUpdate.js +34 -34
  65. package/src/client/actions/TypingStart.js +29 -29
  66. package/src/client/actions/UserUpdate.js +35 -35
  67. package/src/client/actions/VoiceStateUpdate.js +50 -57
  68. package/src/client/actions/WebhooksUpdate.js +20 -20
  69. package/src/client/voice/ClientVoiceManager.js +151 -51
  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 -392
  92. package/src/client/websocket/WebSocketShard.js +907 -906
  93. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -18
  94. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -20
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -5
  96. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -20
  97. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -5
  98. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -5
  99. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -5
  100. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -5
  101. package/src/client/websocket/handlers/CALL_CREATE.js +14 -14
  102. package/src/client/websocket/handlers/CALL_DELETE.js +11 -11
  103. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -11
  104. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -5
  105. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -5
  106. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -22
  107. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -19
  108. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -16
  109. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -16
  110. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -5
  111. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -5
  112. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -5
  113. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -53
  114. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -5
  115. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -5
  116. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -5
  117. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -39
  118. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -20
  119. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -5
  120. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -5
  121. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -5
  122. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -5
  123. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -5
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -5
  125. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -5
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -5
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -5
  128. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -5
  129. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -5
  130. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -5
  131. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -12
  132. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -5
  133. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -5
  134. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -5
  135. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -5
  136. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -5
  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 -5
  140. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -5
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -5
  142. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -5
  143. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -16
  144. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -5
  145. package/src/client/websocket/handlers/READY.js +121 -80
  146. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -19
  147. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -17
  148. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -41
  149. package/src/client/websocket/handlers/RESUMED.js +14 -14
  150. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -5
  151. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -5
  152. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -5
  153. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -5
  154. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -5
  155. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -5
  156. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -5
  157. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -5
  158. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -16
  159. package/src/client/websocket/handlers/TYPING_START.js +5 -5
  160. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -6
  161. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -5
  162. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -78
  163. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -5
  164. package/src/client/websocket/handlers/USER_UPDATE.js +5 -5
  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 -12
  167. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -6
  168. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -5
  169. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -5
  170. package/src/client/websocket/handlers/index.js +84 -81
  171. package/src/errors/DJSError.js +61 -61
  172. package/src/errors/Messages.js +217 -182
  173. package/src/errors/index.js +4 -4
  174. package/src/index.js +172 -158
  175. package/src/managers/ApplicationCommandManager.js +264 -264
  176. package/src/managers/ApplicationCommandPermissionsManager.js +417 -417
  177. package/src/managers/AutoModerationRuleManager.js +296 -296
  178. package/src/managers/BaseGuildEmojiManager.js +80 -80
  179. package/src/managers/BaseManager.js +19 -19
  180. package/src/managers/BillingManager.js +66 -66
  181. package/src/managers/CachedManager.js +71 -71
  182. package/src/managers/ChannelManager.js +148 -138
  183. package/src/managers/ClientUserSettingManager.js +372 -372
  184. package/src/managers/DataManager.js +61 -61
  185. package/src/managers/GuildBanManager.js +250 -204
  186. package/src/managers/GuildChannelManager.js +488 -504
  187. package/src/managers/GuildEmojiManager.js +171 -171
  188. package/src/managers/GuildEmojiRoleManager.js +118 -118
  189. package/src/managers/GuildForumThreadManager.js +108 -108
  190. package/src/managers/GuildInviteManager.js +213 -213
  191. package/src/managers/GuildManager.js +338 -304
  192. package/src/managers/GuildMemberManager.js +599 -593
  193. package/src/managers/GuildMemberRoleManager.js +195 -191
  194. package/src/managers/GuildScheduledEventManager.js +314 -296
  195. package/src/managers/GuildSettingManager.js +155 -155
  196. package/src/managers/GuildStickerManager.js +179 -179
  197. package/src/managers/GuildTextThreadManager.js +98 -98
  198. package/src/managers/InteractionManager.js +39 -39
  199. package/src/managers/MessageManager.js +423 -391
  200. package/src/managers/PermissionOverwriteManager.js +164 -166
  201. package/src/managers/PresenceManager.js +71 -58
  202. package/src/managers/ReactionManager.js +67 -67
  203. package/src/managers/ReactionUserManager.js +73 -71
  204. package/src/managers/RelationshipManager.js +278 -265
  205. package/src/managers/RoleManager.js +448 -352
  206. package/src/managers/SessionManager.js +66 -0
  207. package/src/managers/StageInstanceManager.js +162 -162
  208. package/src/managers/ThreadManager.js +175 -174
  209. package/src/managers/ThreadMemberManager.js +186 -186
  210. package/src/managers/UserManager.js +136 -146
  211. package/src/managers/UserNoteManager.js +53 -53
  212. package/src/managers/VoiceStateManager.js +59 -37
  213. package/src/rest/APIRequest.js +154 -154
  214. package/src/rest/APIRouter.js +53 -53
  215. package/src/rest/DiscordAPIError.js +119 -104
  216. package/src/rest/HTTPError.js +62 -62
  217. package/src/rest/RESTManager.js +67 -62
  218. package/src/rest/RateLimitError.js +55 -55
  219. package/src/rest/RequestHandler.js +466 -444
  220. package/src/sharding/Shard.js +444 -443
  221. package/src/sharding/ShardClientUtil.js +279 -275
  222. package/src/sharding/ShardingManager.js +319 -318
  223. package/src/structures/AnonymousGuild.js +98 -98
  224. package/src/structures/ApplicationCommand.js +593 -593
  225. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -48
  226. package/src/structures/AutoModerationActionExecution.js +89 -89
  227. package/src/structures/AutoModerationRule.js +294 -294
  228. package/src/structures/AutocompleteInteraction.js +107 -107
  229. package/src/structures/Base.js +43 -43
  230. package/src/structures/BaseCommandInteraction.js +211 -211
  231. package/src/structures/BaseGuild.js +116 -116
  232. package/src/structures/BaseGuildEmoji.js +56 -56
  233. package/src/structures/BaseGuildTextChannel.js +191 -191
  234. package/src/structures/BaseGuildVoiceChannel.js +241 -241
  235. package/src/structures/BaseMessageComponent.js +181 -114
  236. package/src/structures/ButtonInteraction.js +11 -11
  237. package/src/structures/CallState.js +63 -63
  238. package/src/structures/CategoryChannel.js +85 -85
  239. package/src/structures/Channel.js +284 -270
  240. package/src/structures/ClientPresence.js +77 -88
  241. package/src/structures/ClientUser.js +479 -450
  242. package/src/structures/CommandInteraction.js +41 -41
  243. package/src/structures/CommandInteractionOptionResolver.js +276 -276
  244. package/src/structures/ContainerComponent.js +68 -0
  245. package/src/structures/ContextMenuInteraction.js +65 -65
  246. package/src/structures/DMChannel.js +219 -217
  247. package/src/structures/DirectoryChannel.js +20 -20
  248. package/src/structures/Emoji.js +148 -148
  249. package/src/structures/FileComponent.js +49 -0
  250. package/src/structures/ForumChannel.js +31 -261
  251. package/src/structures/GroupDMChannel.js +394 -387
  252. package/src/structures/Guild.js +1643 -1608
  253. package/src/structures/GuildAuditLogs.js +746 -729
  254. package/src/structures/GuildBan.js +59 -59
  255. package/src/structures/GuildBoost.js +108 -108
  256. package/src/structures/GuildChannel.js +470 -468
  257. package/src/structures/GuildEmoji.js +161 -161
  258. package/src/structures/GuildMember.js +636 -568
  259. package/src/structures/GuildPreview.js +191 -191
  260. package/src/structures/GuildPreviewEmoji.js +27 -27
  261. package/src/structures/GuildScheduledEvent.js +536 -441
  262. package/src/structures/GuildTemplate.js +236 -236
  263. package/src/structures/Integration.js +188 -188
  264. package/src/structures/IntegrationApplication.js +96 -96
  265. package/src/structures/Interaction.js +290 -290
  266. package/src/structures/InteractionCollector.js +248 -248
  267. package/src/structures/InteractionWebhook.js +43 -43
  268. package/src/structures/Invite.js +358 -358
  269. package/src/structures/InviteGuild.js +23 -23
  270. package/src/structures/InviteStageInstance.js +86 -86
  271. package/src/structures/MediaChannel.js +11 -0
  272. package/src/structures/MediaGalleryComponent.js +41 -0
  273. package/src/structures/MediaGalleryItem.js +47 -0
  274. package/src/structures/Message.js +1252 -1236
  275. package/src/structures/MessageActionRow.js +105 -103
  276. package/src/structures/MessageAttachment.js +216 -204
  277. package/src/structures/MessageButton.js +166 -165
  278. package/src/structures/MessageCollector.js +146 -146
  279. package/src/structures/MessageComponentInteraction.js +120 -120
  280. package/src/structures/MessageContextMenuInteraction.js +20 -20
  281. package/src/structures/MessageEmbed.js +596 -586
  282. package/src/structures/MessageMentions.js +273 -273
  283. package/src/structures/MessagePayload.js +354 -316
  284. package/src/structures/MessageReaction.js +181 -171
  285. package/src/structures/MessageSelectMenu.js +141 -140
  286. package/src/structures/Modal.js +161 -174
  287. package/src/structures/ModalSubmitFieldsResolver.js +53 -53
  288. package/src/structures/ModalSubmitInteraction.js +119 -119
  289. package/src/structures/NewsChannel.js +32 -32
  290. package/src/structures/OAuth2Guild.js +28 -28
  291. package/src/structures/PermissionOverwrites.js +198 -196
  292. package/src/structures/Poll.js +108 -0
  293. package/src/structures/PollAnswer.js +88 -0
  294. package/src/structures/Presence.js +1105 -443
  295. package/src/structures/ReactionCollector.js +229 -229
  296. package/src/structures/ReactionEmoji.js +31 -31
  297. package/src/structures/Role.js +590 -531
  298. package/src/structures/SectionComponent.js +48 -0
  299. package/src/structures/SelectMenuInteraction.js +21 -21
  300. package/src/structures/SeparatorComponent.js +48 -0
  301. package/src/structures/Session.js +81 -0
  302. package/src/structures/StageChannel.js +104 -104
  303. package/src/structures/StageInstance.js +208 -208
  304. package/src/structures/Sticker.js +310 -310
  305. package/src/structures/StickerPack.js +95 -95
  306. package/src/structures/StoreChannel.js +56 -56
  307. package/src/structures/Team.js +118 -118
  308. package/src/structures/TeamMember.js +80 -71
  309. package/src/structures/TextChannel.js +33 -33
  310. package/src/structures/TextDisplayComponent.js +40 -0
  311. package/src/structures/TextInputComponent.js +132 -131
  312. package/src/structures/ThreadChannel.js +605 -607
  313. package/src/structures/ThreadMember.js +105 -105
  314. package/src/structures/ThreadOnlyChannel.js +249 -0
  315. package/src/structures/ThumbnailComponent.js +57 -0
  316. package/src/structures/Typing.js +74 -74
  317. package/src/structures/UnfurledMediaItem.js +29 -0
  318. package/src/structures/User.js +640 -509
  319. package/src/structures/UserContextMenuInteraction.js +29 -29
  320. package/src/structures/VoiceChannel.js +110 -110
  321. package/src/structures/VoiceChannelEffect.js +69 -0
  322. package/src/structures/VoiceRegion.js +53 -53
  323. package/src/structures/VoiceState.js +354 -341
  324. package/src/structures/WebEmbed.js +373 -373
  325. package/src/structures/Webhook.js +478 -467
  326. package/src/structures/WelcomeChannel.js +60 -60
  327. package/src/structures/WelcomeScreen.js +48 -48
  328. package/src/structures/Widget.js +87 -87
  329. package/src/structures/WidgetMember.js +99 -99
  330. package/src/structures/interfaces/Application.js +825 -313
  331. package/src/structures/interfaces/Collector.js +300 -300
  332. package/src/structures/interfaces/InteractionResponses.js +313 -313
  333. package/src/structures/interfaces/TextBasedChannel.js +759 -721
  334. package/src/util/APITypes.js +59 -0
  335. package/src/util/ActivityFlags.js +44 -44
  336. package/src/util/ApplicationFlags.js +76 -76
  337. package/src/util/AttachmentFlags.js +38 -38
  338. package/src/util/BitField.js +170 -170
  339. package/src/util/ChannelFlags.js +45 -45
  340. package/src/util/Constants.js +1914 -1760
  341. package/src/util/DataResolver.js +146 -145
  342. package/src/util/Formatters.js +228 -228
  343. package/src/util/GuildMemberFlags.js +43 -43
  344. package/src/util/Intents.js +74 -74
  345. package/src/util/InviteFlags.js +34 -29
  346. package/src/util/LimitedCollection.js +131 -131
  347. package/src/util/MessageFlags.js +63 -54
  348. package/src/util/Options.js +358 -342
  349. package/src/util/Permissions.js +202 -192
  350. package/src/util/PremiumUsageFlags.js +31 -31
  351. package/src/util/PurchasedFlags.js +33 -33
  352. package/src/util/RemoteAuth.js +382 -379
  353. package/src/util/RoleFlags.js +37 -37
  354. package/src/util/SnowflakeUtil.js +92 -92
  355. package/src/util/Speaking.js +33 -0
  356. package/src/util/Sweepers.js +466 -466
  357. package/src/util/SystemChannelFlags.js +55 -55
  358. package/src/util/ThreadMemberFlags.js +30 -30
  359. package/src/util/UserFlags.js +104 -104
  360. package/src/util/Util.js +1048 -803
  361. package/typings/enums.d.ts +439 -291
  362. package/typings/index.d.ts +8247 -7390
  363. package/typings/rawDataTypes.d.ts +403 -342
  364. package/src/structures/RichPresence.js +0 -702
@@ -1,296 +1,314 @@
1
- 'use strict';
2
-
3
- const { Collection } = require('@discordjs/collection');
4
- const CachedManager = require('./CachedManager');
5
- const { TypeError, Error } = require('../errors');
6
- const { GuildScheduledEvent } = require('../structures/GuildScheduledEvent');
7
- const { PrivacyLevels, GuildScheduledEventEntityTypes, GuildScheduledEventStatuses } = require('../util/Constants');
8
- const DataResolver = require('../util/DataResolver');
9
-
10
- /**
11
- * Manages API methods for GuildScheduledEvents and stores their cache.
12
- * @extends {CachedManager}
13
- */
14
- class GuildScheduledEventManager extends CachedManager {
15
- constructor(guild, iterable) {
16
- super(guild.client, GuildScheduledEvent, iterable);
17
-
18
- /**
19
- * The guild this manager belongs to
20
- * @type {Guild}
21
- */
22
- this.guild = guild;
23
- }
24
-
25
- /**
26
- * The cache of this manager
27
- * @type {Collection<Snowflake, GuildScheduledEvent>}
28
- * @name GuildScheduledEventManager#cache
29
- */
30
-
31
- /**
32
- * Data that resolves to give a GuildScheduledEvent object. This can be:
33
- * * A Snowflake
34
- * * A GuildScheduledEvent object
35
- * @typedef {Snowflake|GuildScheduledEvent} GuildScheduledEventResolvable
36
- */
37
-
38
- /**
39
- * Options used to create a guild scheduled event.
40
- * @typedef {Object} GuildScheduledEventCreateOptions
41
- * @property {string} name The name of the guild scheduled event
42
- * @property {DateResolvable} scheduledStartTime The time to schedule the event at
43
- * @property {DateResolvable} [scheduledEndTime] The time to end the event at
44
- * <warn>This is required if `entityType` is 'EXTERNAL'</warn>
45
- * @property {PrivacyLevel|number} privacyLevel The privacy level of the guild scheduled event
46
- * @property {GuildScheduledEventEntityType|number} entityType The scheduled entity type of the event
47
- * @property {string} [description] The description of the guild scheduled event
48
- * @property {GuildVoiceChannelResolvable} [channel] The channel of the guild scheduled event
49
- * <warn>This is required if `entityType` is 'STAGE_INSTANCE' or `VOICE`</warn>
50
- * @property {GuildScheduledEventEntityMetadataOptions} [entityMetadata] The entity metadata of the
51
- * guild scheduled event
52
- * <warn>This is required if `entityType` is 'EXTERNAL'</warn>
53
- * @property {?(BufferResolvable|Base64Resolvable)} [image] The cover image of the guild scheduled event
54
- * @property {string} [reason] The reason for creating the guild scheduled event
55
- */
56
-
57
- /**
58
- * Options used to set entity metadata of a guild scheduled event.
59
- * @typedef {Object} GuildScheduledEventEntityMetadataOptions
60
- * @property {string} [location] The location of the guild scheduled event
61
- * <warn>This is required if `entityType` is 'EXTERNAL'</warn>
62
- */
63
-
64
- /**
65
- * Creates a new guild scheduled event.
66
- * @param {GuildScheduledEventCreateOptions} options Options for creating the guild scheduled event
67
- * @returns {Promise<GuildScheduledEvent>}
68
- */
69
- async create(options) {
70
- if (typeof options !== 'object') throw new TypeError('INVALID_TYPE', 'options', 'object', true);
71
- let {
72
- privacyLevel,
73
- entityType,
74
- channel,
75
- name,
76
- scheduledStartTime,
77
- description,
78
- scheduledEndTime,
79
- entityMetadata,
80
- reason,
81
- image,
82
- } = options;
83
-
84
- if (typeof privacyLevel === 'string') privacyLevel = PrivacyLevels[privacyLevel];
85
- if (typeof entityType === 'string') entityType = GuildScheduledEventEntityTypes[entityType];
86
-
87
- let entity_metadata, channel_id;
88
- if (entityType === GuildScheduledEventEntityTypes.EXTERNAL) {
89
- channel_id = typeof channel === 'undefined' ? channel : null;
90
- entity_metadata = { location: entityMetadata?.location };
91
- } else {
92
- channel_id = this.guild.channels.resolveId(channel);
93
- if (!channel_id) throw new Error('GUILD_VOICE_CHANNEL_RESOLVE');
94
- entity_metadata = typeof entityMetadata === 'undefined' ? entityMetadata : null;
95
- }
96
-
97
- const data = await this.client.api.guilds(this.guild.id, 'scheduled-events').post({
98
- data: {
99
- channel_id,
100
- name,
101
- privacy_level: privacyLevel,
102
- scheduled_start_time: new Date(scheduledStartTime).toISOString(),
103
- scheduled_end_time: scheduledEndTime ? new Date(scheduledEndTime).toISOString() : scheduledEndTime,
104
- description,
105
- image: image && (await DataResolver.resolveImage(image)),
106
- entity_type: entityType,
107
- entity_metadata,
108
- },
109
- reason,
110
- });
111
-
112
- return this._add(data);
113
- }
114
-
115
- /**
116
- * Options used to fetch a single guild scheduled event from a guild.
117
- * @typedef {BaseFetchOptions} FetchGuildScheduledEventOptions
118
- * @property {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to fetch
119
- * @property {boolean} [withUserCount=true] Whether to fetch the number of users subscribed to the scheduled event
120
- */
121
-
122
- /**
123
- * Options used to fetch multiple guild scheduled events from a guild.
124
- * @typedef {Object} FetchGuildScheduledEventsOptions
125
- * @property {boolean} [cache] Whether or not to cache the fetched guild scheduled events
126
- * @property {boolean} [withUserCount=true] Whether to fetch the number of users subscribed to each scheduled event
127
- * should be returned
128
- */
129
-
130
- /**
131
- * Obtains one or more guild scheduled events from Discord, or the guild cache if it's already available.
132
- * @param {GuildScheduledEventResolvable|FetchGuildScheduledEventOptions|FetchGuildScheduledEventsOptions} [options]
133
- * The id of the guild scheduled event or options
134
- * @returns {Promise<GuildScheduledEvent|Collection<Snowflake, GuildScheduledEvent>>}
135
- */
136
- async fetch(options = {}) {
137
- const id = this.resolveId(options.guildScheduledEvent ?? options);
138
-
139
- if (id) {
140
- if (!options.force) {
141
- const existing = this.cache.get(id);
142
- if (existing) return existing;
143
- }
144
-
145
- const data = await this.client.api
146
- .guilds(this.guild.id, 'scheduled-events', id)
147
- .get({ query: { with_user_count: options.withUserCount ?? true } });
148
- return this._add(data, options.cache);
149
- }
150
-
151
- const data = await this.client.api
152
- .guilds(this.guild.id, 'scheduled-events')
153
- .get({ query: { with_user_count: options.withUserCount ?? true } });
154
-
155
- return data.reduce(
156
- (coll, rawGuildScheduledEventData) =>
157
- coll.set(
158
- rawGuildScheduledEventData.id,
159
- this.guild.scheduledEvents._add(rawGuildScheduledEventData, options.cache),
160
- ),
161
- new Collection(),
162
- );
163
- }
164
-
165
- /**
166
- * Options used to edit a guild scheduled event.
167
- * @typedef {Object} GuildScheduledEventEditOptions
168
- * @property {string} [name] The name of the guild scheduled event
169
- * @property {DateResolvable} [scheduledStartTime] The time to schedule the event at
170
- * @property {DateResolvable} [scheduledEndTime] The time to end the event at
171
- * @property {PrivacyLevel|number} [privacyLevel] The privacy level of the guild scheduled event
172
- * @property {GuildScheduledEventEntityType|number} [entityType] The scheduled entity type of the event
173
- * @property {string} [description] The description of the guild scheduled event
174
- * @property {?GuildVoiceChannelResolvable} [channel] The channel of the guild scheduled event
175
- * @property {GuildScheduledEventStatus|number} [status] The status of the guild scheduled event
176
- * @property {GuildScheduledEventEntityMetadataOptions} [entityMetadata] The entity metadata of the
177
- * guild scheduled event
178
- * <warn>This can be modified only if `entityType` of the `GuildScheduledEvent` to be edited is 'EXTERNAL'</warn>
179
- * @property {?(BufferResolvable|Base64Resolvable)} [image] The cover image of the guild scheduled event
180
- * @property {string} [reason] The reason for editing the guild scheduled event
181
- */
182
-
183
- /**
184
- * Edits a guild scheduled event.
185
- * @param {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to edit
186
- * @param {GuildScheduledEventEditOptions} options Options to edit the guild scheduled event
187
- * @returns {Promise<GuildScheduledEvent>}
188
- */
189
- async edit(guildScheduledEvent, options) {
190
- const guildScheduledEventId = this.resolveId(guildScheduledEvent);
191
- if (!guildScheduledEventId) throw new Error('GUILD_SCHEDULED_EVENT_RESOLVE');
192
-
193
- if (typeof options !== 'object') throw new TypeError('INVALID_TYPE', 'options', 'object', true);
194
- let {
195
- privacyLevel,
196
- entityType,
197
- channel,
198
- status,
199
- name,
200
- scheduledStartTime,
201
- description,
202
- scheduledEndTime,
203
- entityMetadata,
204
- reason,
205
- image,
206
- } = options;
207
-
208
- if (typeof privacyLevel === 'string') privacyLevel = PrivacyLevels[privacyLevel];
209
- if (typeof entityType === 'string') entityType = GuildScheduledEventEntityTypes[entityType];
210
- if (typeof status === 'string') status = GuildScheduledEventStatuses[status];
211
-
212
- let entity_metadata;
213
- if (entityMetadata) {
214
- entity_metadata = {
215
- location: entityMetadata.location,
216
- };
217
- }
218
-
219
- const data = await this.client.api.guilds(this.guild.id, 'scheduled-events', guildScheduledEventId).patch({
220
- data: {
221
- channel_id: typeof channel === 'undefined' ? channel : this.guild.channels.resolveId(channel),
222
- name,
223
- privacy_level: privacyLevel,
224
- scheduled_start_time: scheduledStartTime ? new Date(scheduledStartTime).toISOString() : undefined,
225
- scheduled_end_time: scheduledEndTime ? new Date(scheduledEndTime).toISOString() : scheduledEndTime,
226
- description,
227
- entity_type: entityType,
228
- status,
229
- image: image && (await DataResolver.resolveImage(image)),
230
- entity_metadata,
231
- },
232
- reason,
233
- });
234
-
235
- return this._add(data);
236
- }
237
-
238
- /**
239
- * Deletes a guild scheduled event.
240
- * @param {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to delete
241
- * @returns {Promise<void>}
242
- */
243
- async delete(guildScheduledEvent) {
244
- const guildScheduledEventId = this.resolveId(guildScheduledEvent);
245
- if (!guildScheduledEventId) throw new Error('GUILD_SCHEDULED_EVENT_RESOLVE');
246
-
247
- await this.client.api.guilds(this.guild.id, 'scheduled-events', guildScheduledEventId).delete();
248
- }
249
-
250
- /**
251
- * Options used to fetch subscribers of a guild scheduled event
252
- * @typedef {Object} FetchGuildScheduledEventSubscribersOptions
253
- * @property {number} [limit] The maximum numbers of users to fetch
254
- * @property {boolean} [withMember] Whether to fetch guild member data of the users
255
- * @property {Snowflake} [before] Consider only users before this user id
256
- * @property {Snowflake} [after] Consider only users after this user id
257
- * <warn>If both `before` and `after` are provided, only `before` is respected</warn>
258
- */
259
-
260
- /**
261
- * Represents a subscriber of a {@link GuildScheduledEvent}
262
- * @typedef {Object} GuildScheduledEventUser
263
- * @property {Snowflake} guildScheduledEventId The id of the guild scheduled event which the user subscribed to
264
- * @property {User} user The user that subscribed to the guild scheduled event
265
- * @property {?GuildMember} member The guild member associated with the user, if any
266
- */
267
-
268
- /**
269
- * Fetches subscribers of a guild scheduled event.
270
- * @param {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to fetch subscribers of
271
- * @param {FetchGuildScheduledEventSubscribersOptions} [options={}] Options for fetching the subscribers
272
- * @returns {Promise<Collection<Snowflake, GuildScheduledEventUser>>}
273
- */
274
- async fetchSubscribers(guildScheduledEvent, options = {}) {
275
- const guildScheduledEventId = this.resolveId(guildScheduledEvent);
276
- if (!guildScheduledEventId) throw new Error('GUILD_SCHEDULED_EVENT_RESOLVE');
277
-
278
- let { limit, withMember, before, after } = options;
279
-
280
- const data = await this.client.api.guilds(this.guild.id, 'scheduled-events', guildScheduledEventId).users.get({
281
- query: { limit, with_member: withMember, before, after },
282
- });
283
-
284
- return data.reduce(
285
- (coll, rawData) =>
286
- coll.set(rawData.user.id, {
287
- guildScheduledEventId: rawData.guild_scheduled_event_id,
288
- user: this.client.users._add(rawData.user),
289
- member: rawData.member ? this.guild.members._add({ ...rawData.member, user: rawData.user }) : null,
290
- }),
291
- new Collection(),
292
- );
293
- }
294
- }
295
-
296
- module.exports = GuildScheduledEventManager;
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const CachedManager = require('./CachedManager');
5
+ const { TypeError, Error } = require('../errors');
6
+ const { GuildScheduledEvent } = require('../structures/GuildScheduledEvent');
7
+ const { PrivacyLevels, GuildScheduledEventEntityTypes, GuildScheduledEventStatuses } = require('../util/Constants');
8
+ const DataResolver = require('../util/DataResolver');
9
+ const Util = require('../util/Util');
10
+
11
+ /**
12
+ * Manages API methods for GuildScheduledEvents and stores their cache.
13
+ * @extends {CachedManager}
14
+ */
15
+ class GuildScheduledEventManager extends CachedManager {
16
+ constructor(guild, iterable) {
17
+ super(guild.client, GuildScheduledEvent, iterable);
18
+
19
+ /**
20
+ * The guild this manager belongs to
21
+ * @type {Guild}
22
+ */
23
+ this.guild = guild;
24
+ }
25
+
26
+ /**
27
+ * The cache of this manager
28
+ * @type {Collection<Snowflake, GuildScheduledEvent>}
29
+ * @name GuildScheduledEventManager#cache
30
+ */
31
+
32
+ /**
33
+ * Data that resolves to give a GuildScheduledEvent object. This can be:
34
+ * * A Snowflake
35
+ * * A GuildScheduledEvent object
36
+ * @typedef {Snowflake|GuildScheduledEvent} GuildScheduledEventResolvable
37
+ */
38
+
39
+ /**
40
+ * Options for setting a recurrence rule for a guild scheduled event.
41
+ * @typedef {Object} GuildScheduledEventRecurrenceRuleOptions
42
+ * @property {DateResolvable} startAt The time the recurrence rule interval starts at
43
+ * @property {GuildScheduledEventRecurrenceRuleFrequency} frequency How often the event occurs
44
+ * @property {number} interval The spacing between the events
45
+ * @property {?GuildScheduledEventRecurrenceRuleWeekday[]} byWeekday The days within a week to recur on
46
+ * @property {?GuildScheduledEventRecurrenceRuleNWeekday[]} byNWeekday The days within a week to recur on
47
+ * @property {?GuildScheduledEventRecurrenceRuleMonth[]} byMonth The months to recur on
48
+ * @property {?number[]} byMonthDay The days within a month to recur on
49
+ */
50
+
51
+ /**
52
+ * Options used to create a guild scheduled event.
53
+ * @typedef {Object} GuildScheduledEventCreateOptions
54
+ * @property {string} name The name of the guild scheduled event
55
+ * @property {DateResolvable} scheduledStartTime The time to schedule the event at
56
+ * @property {DateResolvable} [scheduledEndTime] The time to end the event at
57
+ * <warn>This is required if `entityType` is 'EXTERNAL'</warn>
58
+ * @property {PrivacyLevel|number} privacyLevel The privacy level of the guild scheduled event
59
+ * @property {GuildScheduledEventEntityType|number} entityType The scheduled entity type of the event
60
+ * @property {string} [description] The description of the guild scheduled event
61
+ * @property {GuildVoiceChannelResolvable} [channel] The channel of the guild scheduled event
62
+ * <warn>This is required if `entityType` is 'STAGE_INSTANCE' or `VOICE`</warn>
63
+ * @property {GuildScheduledEventEntityMetadataOptions} [entityMetadata] The entity metadata of the
64
+ * guild scheduled event
65
+ * <warn>This is required if `entityType` is 'EXTERNAL'</warn>
66
+ * @property {?(BufferResolvable|Base64Resolvable)} [image] The cover image of the guild scheduled event
67
+ * @property {string} [reason] The reason for creating the guild scheduled event
68
+ * @property {GuildScheduledEventRecurrenceRuleOptions} [recurrenceRule]
69
+ * The recurrence rule of the guild scheduled event
70
+ */
71
+
72
+ /**
73
+ * Options used to set entity metadata of a guild scheduled event.
74
+ * @typedef {Object} GuildScheduledEventEntityMetadataOptions
75
+ * @property {string} [location] The location of the guild scheduled event
76
+ * <warn>This is required if `entityType` is 'EXTERNAL'</warn>
77
+ */
78
+
79
+ /**
80
+ * Creates a new guild scheduled event.
81
+ * @param {GuildScheduledEventCreateOptions} options Options for creating the guild scheduled event
82
+ * @returns {Promise<GuildScheduledEvent>}
83
+ */
84
+ async create(options) {
85
+ if (typeof options !== 'object') throw new TypeError('INVALID_TYPE', 'options', 'object', true);
86
+ let {
87
+ privacyLevel,
88
+ entityType,
89
+ channel,
90
+ name,
91
+ scheduledStartTime,
92
+ description,
93
+ scheduledEndTime,
94
+ entityMetadata,
95
+ reason,
96
+ image,
97
+ recurrenceRule,
98
+ } = options;
99
+
100
+ if (typeof privacyLevel === 'string') privacyLevel = PrivacyLevels[privacyLevel];
101
+ if (typeof entityType === 'string') entityType = GuildScheduledEventEntityTypes[entityType];
102
+
103
+ let entity_metadata, channel_id;
104
+ if (entityType === GuildScheduledEventEntityTypes.EXTERNAL) {
105
+ channel_id = typeof channel === 'undefined' ? channel : null;
106
+ entity_metadata = { location: entityMetadata?.location };
107
+ } else {
108
+ channel_id = this.guild.channels.resolveId(channel);
109
+ if (!channel_id) throw new Error('GUILD_VOICE_CHANNEL_RESOLVE');
110
+ entity_metadata = typeof entityMetadata === 'undefined' ? entityMetadata : null;
111
+ }
112
+
113
+ const data = await this.client.api.guilds(this.guild.id, 'scheduled-events').post({
114
+ data: {
115
+ channel_id,
116
+ name,
117
+ privacy_level: privacyLevel,
118
+ scheduled_start_time: new Date(scheduledStartTime).toISOString(),
119
+ scheduled_end_time: scheduledEndTime ? new Date(scheduledEndTime).toISOString() : scheduledEndTime,
120
+ description,
121
+ image: image && (await DataResolver.resolveImage(image)),
122
+ entity_type: entityType,
123
+ entity_metadata,
124
+ recurrence_rule: recurrenceRule && Util.transformGuildScheduledEventRecurrenceRule(recurrenceRule),
125
+ },
126
+ reason,
127
+ });
128
+
129
+ return this._add(data);
130
+ }
131
+
132
+ /**
133
+ * Options used to fetch a single guild scheduled event from a guild.
134
+ * @typedef {BaseFetchOptions} FetchGuildScheduledEventOptions
135
+ * @property {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to fetch
136
+ * @property {boolean} [withUserCount=true] Whether to fetch the number of users subscribed to the scheduled event
137
+ */
138
+
139
+ /**
140
+ * Options used to fetch multiple guild scheduled events from a guild.
141
+ * @typedef {Object} FetchGuildScheduledEventsOptions
142
+ * @property {boolean} [cache] Whether or not to cache the fetched guild scheduled events
143
+ * @property {boolean} [withUserCount=true] Whether to fetch the number of users subscribed to each scheduled event
144
+ * should be returned
145
+ */
146
+
147
+ /**
148
+ * Obtains one or more guild scheduled events from Discord, or the guild cache if it's already available.
149
+ * @param {GuildScheduledEventResolvable|FetchGuildScheduledEventOptions|FetchGuildScheduledEventsOptions} [options]
150
+ * The id of the guild scheduled event or options
151
+ * @returns {Promise<GuildScheduledEvent|Collection<Snowflake, GuildScheduledEvent>>}
152
+ */
153
+ async fetch(options = {}) {
154
+ const id = this.resolveId(options.guildScheduledEvent ?? options);
155
+
156
+ if (id) {
157
+ if (!options.force) {
158
+ const existing = this.cache.get(id);
159
+ if (existing) return existing;
160
+ }
161
+
162
+ const data = await this.client.api
163
+ .guilds(this.guild.id, 'scheduled-events', id)
164
+ .get({ query: { with_user_count: options.withUserCount ?? true } });
165
+ return this._add(data, options.cache);
166
+ }
167
+
168
+ const data = await this.client.api
169
+ .guilds(this.guild.id, 'scheduled-events')
170
+ .get({ query: { with_user_count: options.withUserCount ?? true } });
171
+
172
+ return data.reduce(
173
+ (coll, rawGuildScheduledEventData) =>
174
+ coll.set(rawGuildScheduledEventData.id, this._add(rawGuildScheduledEventData, options.cache)),
175
+ new Collection(),
176
+ );
177
+ }
178
+
179
+ /**
180
+ * Options used to edit a guild scheduled event.
181
+ * @typedef {Object} GuildScheduledEventEditOptions
182
+ * @property {string} [name] The name of the guild scheduled event
183
+ * @property {DateResolvable} [scheduledStartTime] The time to schedule the event at
184
+ * @property {DateResolvable} [scheduledEndTime] The time to end the event at
185
+ * @property {PrivacyLevel|number} [privacyLevel] The privacy level of the guild scheduled event
186
+ * @property {GuildScheduledEventEntityType|number} [entityType] The scheduled entity type of the event
187
+ * @property {string} [description] The description of the guild scheduled event
188
+ * @property {?GuildVoiceChannelResolvable} [channel] The channel of the guild scheduled event
189
+ * @property {GuildScheduledEventStatus|number} [status] The status of the guild scheduled event
190
+ * @property {GuildScheduledEventEntityMetadataOptions} [entityMetadata] The entity metadata of the
191
+ * guild scheduled event
192
+ * <warn>This can be modified only if `entityType` of the `GuildScheduledEvent` to be edited is 'EXTERNAL'</warn>
193
+ * @property {?(BufferResolvable|Base64Resolvable)} [image] The cover image of the guild scheduled event
194
+ * @property {string} [reason] The reason for editing the guild scheduled event
195
+ * @property {?GuildScheduledEventRecurrenceRuleOptions} [recurrenceRule]
196
+ * The recurrence rule of the guild scheduled event
197
+ */
198
+
199
+ /**
200
+ * Edits a guild scheduled event.
201
+ * @param {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to edit
202
+ * @param {GuildScheduledEventEditOptions} options Options to edit the guild scheduled event
203
+ * @returns {Promise<GuildScheduledEvent>}
204
+ */
205
+ async edit(guildScheduledEvent, options) {
206
+ const guildScheduledEventId = this.resolveId(guildScheduledEvent);
207
+ if (!guildScheduledEventId) throw new Error('GUILD_SCHEDULED_EVENT_RESOLVE');
208
+
209
+ if (typeof options !== 'object') throw new TypeError('INVALID_TYPE', 'options', 'object', true);
210
+ let {
211
+ privacyLevel,
212
+ entityType,
213
+ channel,
214
+ status,
215
+ name,
216
+ scheduledStartTime,
217
+ description,
218
+ scheduledEndTime,
219
+ entityMetadata,
220
+ reason,
221
+ image,
222
+ recurrenceRule,
223
+ } = options;
224
+
225
+ if (typeof privacyLevel === 'string') privacyLevel = PrivacyLevels[privacyLevel];
226
+ if (typeof entityType === 'string') entityType = GuildScheduledEventEntityTypes[entityType];
227
+ if (typeof status === 'string') status = GuildScheduledEventStatuses[status];
228
+
229
+ let entity_metadata;
230
+ if (entityMetadata) {
231
+ entity_metadata = {
232
+ location: entityMetadata.location,
233
+ };
234
+ }
235
+
236
+ const data = await this.client.api.guilds(this.guild.id, 'scheduled-events', guildScheduledEventId).patch({
237
+ data: {
238
+ channel_id: typeof channel === 'undefined' ? channel : this.guild.channels.resolveId(channel),
239
+ name,
240
+ privacy_level: privacyLevel,
241
+ scheduled_start_time: scheduledStartTime ? new Date(scheduledStartTime).toISOString() : undefined,
242
+ scheduled_end_time: scheduledEndTime ? new Date(scheduledEndTime).toISOString() : scheduledEndTime,
243
+ description,
244
+ entity_type: entityType,
245
+ status,
246
+ image: image && (await DataResolver.resolveImage(image)),
247
+ entity_metadata,
248
+ recurrence_rule: recurrenceRule && Util.transformGuildScheduledEventRecurrenceRule(recurrenceRule),
249
+ },
250
+ reason,
251
+ });
252
+
253
+ return this._add(data);
254
+ }
255
+
256
+ /**
257
+ * Deletes a guild scheduled event.
258
+ * @param {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to delete
259
+ * @returns {Promise<void>}
260
+ */
261
+ async delete(guildScheduledEvent) {
262
+ const guildScheduledEventId = this.resolveId(guildScheduledEvent);
263
+ if (!guildScheduledEventId) throw new Error('GUILD_SCHEDULED_EVENT_RESOLVE');
264
+
265
+ await this.client.api.guilds(this.guild.id, 'scheduled-events', guildScheduledEventId).delete();
266
+ }
267
+
268
+ /**
269
+ * Options used to fetch subscribers of a guild scheduled event
270
+ * @typedef {Object} FetchGuildScheduledEventSubscribersOptions
271
+ * @property {number} [limit] The maximum numbers of users to fetch
272
+ * @property {boolean} [withMember] Whether to fetch guild member data of the users
273
+ * @property {Snowflake} [before] Consider only users before this user id
274
+ * @property {Snowflake} [after] Consider only users after this user id
275
+ * <warn>If both `before` and `after` are provided, only `before` is respected</warn>
276
+ */
277
+
278
+ /**
279
+ * Represents a subscriber of a {@link GuildScheduledEvent}
280
+ * @typedef {Object} GuildScheduledEventUser
281
+ * @property {Snowflake} guildScheduledEventId The id of the guild scheduled event which the user subscribed to
282
+ * @property {User} user The user that subscribed to the guild scheduled event
283
+ * @property {?GuildMember} member The guild member associated with the user, if any
284
+ */
285
+
286
+ /**
287
+ * Fetches subscribers of a guild scheduled event.
288
+ * @param {GuildScheduledEventResolvable} guildScheduledEvent The guild scheduled event to fetch subscribers of
289
+ * @param {FetchGuildScheduledEventSubscribersOptions} [options={}] Options for fetching the subscribers
290
+ * @returns {Promise<Collection<Snowflake, GuildScheduledEventUser>>}
291
+ */
292
+ async fetchSubscribers(guildScheduledEvent, options = {}) {
293
+ const guildScheduledEventId = this.resolveId(guildScheduledEvent);
294
+ if (!guildScheduledEventId) throw new Error('GUILD_SCHEDULED_EVENT_RESOLVE');
295
+
296
+ let { limit, withMember, before, after } = options;
297
+
298
+ const data = await this.client.api.guilds(this.guild.id, 'scheduled-events', guildScheduledEventId).users.get({
299
+ query: { limit, with_member: withMember, before, after },
300
+ });
301
+
302
+ return data.reduce(
303
+ (coll, rawData) =>
304
+ coll.set(rawData.user.id, {
305
+ guildScheduledEventId: rawData.guild_scheduled_event_id,
306
+ user: this.client.users._add(rawData.user),
307
+ member: rawData.member ? this.guild.members._add({ ...rawData.member, user: rawData.user }) : null,
308
+ }),
309
+ new Collection(),
310
+ );
311
+ }
312
+ }
313
+
314
+ module.exports = GuildScheduledEventManager;