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,342 +1,358 @@
1
- 'use strict';
2
-
3
- const { UserAgent } = require('./Constants');
4
- const Intents = require('./Intents');
5
-
6
- /**
7
- * Rate limit data
8
- * @typedef {Object} RateLimitData
9
- * @property {number} timeout Time until this rate limit ends, in milliseconds
10
- * @property {number} limit The maximum amount of requests of this endpoint
11
- * @property {string} method The HTTP method of this request
12
- * @property {string} path The path of the request relative to the HTTP endpoint
13
- * @property {string} route The route of the request relative to the HTTP endpoint
14
- * @property {boolean} global Whether this is a global rate limit
15
- */
16
-
17
- /**
18
- * Whether this rate limit should throw an Error
19
- * @typedef {Function} RateLimitQueueFilter
20
- * @param {RateLimitData} rateLimitData The data of this rate limit
21
- * @returns {boolean|Promise<boolean>}
22
- */
23
-
24
- /**
25
- * @typedef {Function} CacheFactory
26
- * @param {Function} manager The manager class the cache is being requested from.
27
- * @param {Function} holds The class that the cache will hold.
28
- * @returns {Collection} A Collection used to store the cache of the manager.
29
- */
30
-
31
- /**
32
- * @typedef {Function} CaptchaSolver
33
- * @param {Captcha} captcha Discord Captcha
34
- * @param {string} UserAgent Current UserAgent
35
- * @returns {Promise<string>} HCaptcha Token
36
- * @example
37
- * const Captcha = require("2captcha")
38
- * // A new 'solver' instance with our API key
39
- * const solver = new Captcha.Solver("<Your 2captcha api key>")
40
- * function solveCaptcha(captcha, UA) {
41
- * return solver.hcaptcha(captcha.captcha_sitekey, 'discord.com', {
42
- * invisible: 1,
43
- * userAgent: UA,
44
- * data: captcha.captcha_rqdata,
45
- * }).then(res => res.data)
46
- * }
47
- */
48
-
49
- /**
50
- * Options for a client.
51
- * @typedef {Object} ClientOptions
52
- * @property {number} [DMChannelVoiceStatusSync=0] The amount of time in milliseconds that the Client to register the event with each DM channel (0=Disable)
53
- * @property {number} [captchaRetryLimit=3] Captcha retry limit
54
- * @property {CaptchaSolver} [captchaSolver] Captcha Solver
55
- * @property {number} [closeTimeout=5000] The amount of time in milliseconds to wait for the close frame to be received
56
- * from the WebSocket.
57
- * <info>Don't have this too high/low. It's best to have it between 2000-6000 ms.</info>
58
- * (e.g. recommended shard count, shard count of the ShardingManager)
59
- * @property {CacheFactory} [makeCache] Function to create a cache.
60
- * You can use your own function, or the {@link Options} class to customize the Collection used for the cache.
61
- * <warn>Overriding the cache used in `GuildManager`, `ChannelManager`, `GuildChannelManager`, `RoleManager`,
62
- * and `PermissionOverwriteManager` is unsupported and **will** break functionality</warn>
63
- * @property {number} [messageCacheLifetime=0] DEPRECATED: Pass `lifetime` to `sweepers.messages` instead.
64
- * How long a message should stay in the cache until it is considered sweepable (in seconds, 0 for forever)
65
- * @property {number} [messageSweepInterval=0] DEPRECATED: Pass `interval` to `sweepers.messages` instead.
66
- * How frequently to remove messages from the cache that are older than the message cache lifetime
67
- * (in seconds, 0 for never)
68
- * @property {MessageMentionOptions} [allowedMentions] Default value for {@link MessageOptions#allowedMentions}
69
- * @property {number} [invalidRequestWarningInterval=0] The number of invalid REST requests (those that return
70
- * 401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). That is, if set to 500,
71
- * warnings will be emitted at invalid request number 500, 1000, 1500, and so on.
72
- * @property {PartialType[]} [partials=['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT']] Structures allowed to be partial. This means events can be emitted even when
73
- * they're missing all the data for a particular structure. See the "Partial Structures" topic on the
74
- * [guide](https://discordjs.guide/popular-topics/partials.html) for some
75
- * important usage information, as partials require you to put checks in place when handling data.
76
- * @property {number} [restWsBridgeTimeout=5000] Maximum time permitted between REST responses and their
77
- * corresponding WebSocket events
78
- * @property {number} [restTimeOffset=500] Extra time in milliseconds to wait before continuing to make REST
79
- * requests (higher values will reduce rate-limiting errors on bad connections)
80
- * @property {number} [restRequestTimeout=15000] Time to wait before cancelling a REST request, in milliseconds
81
- * @property {number} [restSweepInterval=60] How frequently to delete inactive request buckets, in seconds
82
- * (or 0 for never)
83
- * @property {number} [restGlobalRateLimit=0] How many requests to allow sending per second (0 for unlimited, 50 for
84
- * the standard global limit used by Discord)
85
- * @property {string[]|RateLimitQueueFilter} [rejectOnRateLimit] Decides how rate limits and pre-emptive throttles
86
- * should be handled. If this option is an array containing the prefix of the request route (e.g. /channels to match any
87
- * route starting with /channels, such as /channels/222197033908436994/messages) or a function returning true, a
88
- * {@link RateLimitError} will be thrown. Otherwise the request will be queued for later
89
- * @property {number} [retryLimit=1] How many times to retry on 5XX errors
90
- * (Infinity for an indefinite amount of retries)
91
- * @property {boolean} [failIfNotExists=true] Default value for {@link ReplyMessageOptions#failIfNotExists}
92
- * @property {PresenceData} [presence={ status: 'online', since: 0, activities: [], afk: false }] Presence data to use upon login
93
- * @property {number} [waitGuildTimeout=15_000] Time in milliseconds that Clients with the GUILDS intent should wait for
94
- * missing guilds to be received before starting the bot. If not specified, the default is 15 seconds.
95
- * @property {SweeperOptions} [sweepers={}] Options for cache sweeping
96
- * @property {WebsocketOptions} [ws] Options for the WebSocket
97
- * @property {HTTPOptions} [http] HTTP options
98
- */
99
-
100
- /**
101
- * Options for {@link Sweepers} defining the behavior of cache sweeping
102
- * @typedef {Object<SweeperKey, SweepOptions>} SweeperOptions
103
- */
104
-
105
- /**
106
- * Options for sweeping a single type of item from cache
107
- * @typedef {Object} SweepOptions
108
- * @property {number} interval The interval (in seconds) at which to perform sweeping of the item
109
- * @property {number} [lifetime] How long an item should stay in cache until it is considered sweepable.
110
- * <warn>This property is only valid for the `invites`, `messages`, and `threads` keys. The `filter` property
111
- * is mutually exclusive to this property and takes priority</warn>
112
- * @property {GlobalSweepFilter} filter The function used to determine the function passed to the sweep method
113
- * <info>This property is optional when the key is `invites`, `messages`, or `threads` and `lifetime` is set</info>
114
- */
115
-
116
- /**
117
- * WebSocket options (these are left as snake_case to match the API)
118
- * @typedef {Object} WebsocketOptions
119
- * @property {AgentOptions} [agent={}] HTTPS Agent options (WS Proxy)
120
- * @property {boolean} [compress=false] Whether to compress data sent on the connection
121
- * @property {WebSocketProperties} [properties] Properties to identify the client with
122
- */
123
-
124
- /**
125
- * HTTPS Agent options.
126
- * @typedef {Object} AgentOptions
127
- * @see {@link https://nodejs.org/api/https.html#https_class_https_agent}
128
- * @see {@link https://nodejs.org/api/http.html#http_new_agent_options}
129
- */
130
-
131
- /**
132
- * HTTP options
133
- * @typedef {Object} HTTPOptions
134
- * @property {number} [version=9] API version to use
135
- * @property {AgentOptions} [agent={}] HTTPS Agent options
136
- * @property {string} [api='https://discord.com/api'] Base URL of the API
137
- * @property {string} [cdn='https://cdn.discordapp.com'] Base URL of the CDN
138
- * @property {string} [invite='https://discord.gg'] Base URL of invites
139
- * @property {string} [template='https://discord.new'] Base URL of templates
140
- * @property {Object} [headers] Additional headers to send for all API requests
141
- * @property {string} [scheduledEvent='https://discord.com/events'] Base URL of guild scheduled events
142
- */
143
-
144
- /**
145
- * Contains various utilities for client options.
146
- */
147
- class Options extends null {
148
- /**
149
- * The default client options.
150
- * @returns {ClientOptions}
151
- */
152
- static createDefault() {
153
- return {
154
- DMChannelVoiceStatusSync: 0,
155
- captchaRetryLimit: 3,
156
- captchaSolver: () => Promise.reject(new Error('CAPTCHA_SOLVER_NOT_IMPLEMENTED')),
157
- closeTimeout: 5_000,
158
- waitGuildTimeout: 15_000,
159
- shardCount: 1,
160
- shards: [0],
161
- makeCache: this.cacheWithLimits(this.defaultMakeCacheSettings),
162
- messageCacheLifetime: 0,
163
- messageSweepInterval: 0,
164
- invalidRequestWarningInterval: 0,
165
- intents: Intents.ALL,
166
- partials: ['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT'], // Enable the partials
167
- restWsBridgeTimeout: 5_000,
168
- restRequestTimeout: 15_000,
169
- restGlobalRateLimit: 0,
170
- retryLimit: 1,
171
- restTimeOffset: 500,
172
- restSweepInterval: 60,
173
- failIfNotExists: true,
174
- presence: { status: 'online', since: 0, activities: [], afk: false },
175
- sweepers: {},
176
- ws: {
177
- capabilities: 0, // https://discord-userdoccers.vercel.app/topics/gateway#gateway-capabilities
178
- properties: {
179
- os: 'Windows',
180
- browser: 'Chrome',
181
- device: '',
182
- system_locale: 'vi-VN',
183
- browser_user_agent: UserAgent,
184
- browser_version: '108.0.5359.215',
185
- os_version: '10',
186
- referrer: '',
187
- referring_domain: '',
188
- referrer_current: '',
189
- referring_domain_current: '',
190
- release_channel: 'stable',
191
- client_build_number: 261141,
192
- client_event_source: null,
193
- },
194
- compress: false,
195
- client_state: {
196
- guild_versions: {},
197
- highest_last_message_id: '0',
198
- read_state_version: 0,
199
- user_guild_settings_version: -1,
200
- user_settings_version: -1,
201
- private_channels_version: '0',
202
- api_code_version: 0,
203
- },
204
- version: 9,
205
- agent: {},
206
- },
207
- http: {
208
- agent: {},
209
- headers: {
210
- 'User-Agent': UserAgent,
211
- },
212
- version: 9,
213
- api: 'https://discord.com/api',
214
- cdn: 'https://cdn.discordapp.com',
215
- invite: 'https://discord.gg',
216
- template: 'https://discord.new',
217
- scheduledEvent: 'https://discord.com/events',
218
- },
219
- };
220
- }
221
-
222
- /**
223
- * Create a cache factory using predefined settings to sweep or limit.
224
- * @param {Object<string, LimitedCollectionOptions|number>} [settings={}] Settings passed to the relevant constructor.
225
- * If no setting is provided for a manager, it uses Collection.
226
- * If a number is provided for a manager, it uses that number as the max size for a LimitedCollection.
227
- * If LimitedCollectionOptions are provided for a manager, it uses those settings to form a LimitedCollection.
228
- * @returns {CacheFactory}
229
- * @example
230
- * // Store up to 200 messages per channel and discard archived threads if they were archived more than 4 hours ago.
231
- * // Note archived threads will remain in the guild and client caches with these settings
232
- * Options.cacheWithLimits({
233
- * MessageManager: 200,
234
- * ThreadManager: {
235
- * sweepInterval: 3600,
236
- * sweepFilter: LimitedCollection.filterByLifetime({
237
- * getComparisonTimestamp: e => e.archiveTimestamp,
238
- * excludeFromSweep: e => !e.archived,
239
- * }),
240
- * },
241
- * });
242
- * @example
243
- * // Sweep messages every 5 minutes, removing messages that have not been edited or created in the last 30 minutes
244
- * Options.cacheWithLimits({
245
- * // Keep default thread sweeping behavior
246
- * ...Options.defaultMakeCacheSettings,
247
- * // Override MessageManager
248
- * MessageManager: {
249
- * sweepInterval: 300,
250
- * sweepFilter: LimitedCollection.filterByLifetime({
251
- * lifetime: 1800,
252
- * getComparisonTimestamp: e => e.editedTimestamp ?? e.createdTimestamp,
253
- * })
254
- * }
255
- * });
256
- */
257
- static cacheWithLimits(settings = {}) {
258
- const { Collection } = require('@discordjs/collection');
259
- const LimitedCollection = require('./LimitedCollection');
260
-
261
- return manager => {
262
- const setting = settings[manager.name];
263
- /* eslint-disable-next-line eqeqeq */
264
- if (setting == null) {
265
- return new Collection();
266
- }
267
- if (typeof setting === 'number') {
268
- if (setting === Infinity) {
269
- return new Collection();
270
- }
271
- return new LimitedCollection({ maxSize: setting });
272
- }
273
- /* eslint-disable eqeqeq */
274
- const noSweeping =
275
- setting.sweepFilter == null ||
276
- setting.sweepInterval == null ||
277
- setting.sweepInterval <= 0 ||
278
- setting.sweepInterval === Infinity;
279
- const noLimit = setting.maxSize == null || setting.maxSize === Infinity;
280
- /* eslint-enable eqeqeq */
281
- if (noSweeping && noLimit) {
282
- return new Collection();
283
- }
284
- return new LimitedCollection(setting);
285
- };
286
- }
287
-
288
- /**
289
- * Create a cache factory that always caches everything.
290
- * @returns {CacheFactory}
291
- */
292
- static cacheEverything() {
293
- const { Collection } = require('@discordjs/collection');
294
- return () => new Collection();
295
- }
296
-
297
- /**
298
- * The default settings passed to {@link ClientOptions.makeCache}.
299
- * The caches that this changes are:
300
- * * `MessageManager` - Limit to 200 messages
301
- * * `ChannelManager` - Sweep archived threads
302
- * * `GuildChannelManager` - Sweep archived threads
303
- * * `ThreadManager` - Sweep archived threads
304
- * <info>If you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.
305
- * `makeCache: Options.cacheWithLimits({ ...Options.defaultMakeCacheSettings, ReactionManager: 0 })`</info>
306
- * @type {Object<string, LimitedCollectionOptions|number>}
307
- */
308
- static get defaultMakeCacheSettings() {
309
- return {
310
- MessageManager: 200,
311
- ChannelManager: {
312
- sweepInterval: 3600,
313
- sweepFilter: require('./Util').archivedThreadSweepFilter(),
314
- },
315
- GuildChannelManager: {
316
- sweepInterval: 3600,
317
- sweepFilter: require('./Util').archivedThreadSweepFilter(),
318
- },
319
- ThreadManager: {
320
- sweepInterval: 3600,
321
- sweepFilter: require('./Util').archivedThreadSweepFilter(),
322
- },
323
- };
324
- }
325
- }
326
-
327
- /**
328
- * The default settings passed to {@link ClientOptions.sweepers}.
329
- * The sweepers that this changes are:
330
- * * `threads` - Sweep archived threads every hour, removing those archived more than 4 hours ago
331
- * <info>If you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.
332
- * `sweepers: { ...Options.defaultSweeperSettings, messages: { interval: 300, lifetime: 600 } }`</info>
333
- * @type {SweeperOptions}
334
- */
335
- Options.defaultSweeperSettings = {
336
- threads: {
337
- interval: 3600,
338
- lifetime: 14400,
339
- },
340
- };
341
-
342
- module.exports = Options;
1
+ 'use strict';
2
+
3
+ const { randomUUID } = require('node:crypto');
4
+ const { UserAgent } = require('./Constants');
5
+ const Intents = require('./Intents');
6
+
7
+ /**
8
+ * Rate limit data
9
+ * @typedef {Object} RateLimitData
10
+ * @property {number} timeout Time until this rate limit ends, in milliseconds
11
+ * @property {number} limit The maximum amount of requests of this endpoint
12
+ * @property {string} method The HTTP method of this request
13
+ * @property {string} path The path of the request relative to the HTTP endpoint
14
+ * @property {string} route The route of the request relative to the HTTP endpoint
15
+ * @property {boolean} global Whether this is a global rate limit
16
+ */
17
+
18
+ /**
19
+ * Whether this rate limit should throw an Error
20
+ * @typedef {Function} RateLimitQueueFilter
21
+ * @param {RateLimitData} rateLimitData The data of this rate limit
22
+ * @returns {boolean|Promise<boolean>}
23
+ */
24
+
25
+ /**
26
+ * @typedef {Function} CacheFactory
27
+ * @param {Function} manager The manager class the cache is being requested from.
28
+ * @param {Function} holds The class that the cache will hold.
29
+ * @returns {Collection} A Collection used to store the cache of the manager.
30
+ */
31
+
32
+ /**
33
+ * @typedef {Function} CaptchaSolver
34
+ * @param {Captcha} captcha Discord Captcha
35
+ * @param {string} UserAgent Current UserAgent
36
+ * @returns {Promise<string>} HCaptcha Token
37
+ * @example
38
+ * const Captcha = require("2captcha")
39
+ * // A new 'solver' instance with our API key
40
+ * const solver = new Captcha.Solver("<Your 2captcha api key>")
41
+ * function solveCaptcha(captcha, UA) {
42
+ * return solver.hcaptcha(captcha.captcha_sitekey, 'discord.com', {
43
+ * invisible: 1,
44
+ * userAgent: UA,
45
+ * data: captcha.captcha_rqdata,
46
+ * }).then(res => res.data)
47
+ * }
48
+ */
49
+
50
+ /**
51
+ * Options for a client.
52
+ * @typedef {Object} ClientOptions
53
+ * @property {number} [DMChannelVoiceStatusSync=0] The amount of time in milliseconds that the Client to register the event with each DM channel (0=Disable)
54
+ * @property {number} [captchaRetryLimit=3] Captcha retry limit
55
+ * @property {CaptchaSolver} [captchaSolver] Captcha Solver
56
+ * @property {string} [TOTPKey] TOTP key / 2FA Key for two-factor authentication
57
+ * This is a 32-character Base32 string (excluding spaces), typically shown only once during your 2FA setup (QR code), or in the "Manual Entry" section.
58
+ * The library automatically removes spaces and converts the secret to uppercase.
59
+ * Example value: 'ftc3 uz6q 5lpw 2kew 4thr vtyp n2cu topn' or 'WSLIVE6EKYSRMVRBZLFGG2KVIVJMMQY5'
60
+ * @property {number} [closeTimeout=5000] The amount of time in milliseconds to wait for the close frame to be received
61
+ * from the WebSocket.
62
+ * <info>Don't have this too high/low. It's best to have it between 2000-6000 ms.</info>
63
+ * (e.g. recommended shard count, shard count of the ShardingManager)
64
+ * @property {CacheFactory} [makeCache] Function to create a cache.
65
+ * You can use your own function, or the {@link Options} class to customize the Collection used for the cache.
66
+ * <warn>Overriding the cache used in `GuildManager`, `ChannelManager`, `GuildChannelManager`, `RoleManager`,
67
+ * and `PermissionOverwriteManager` is unsupported and **will** break functionality</warn>
68
+ * @property {number} [messageCacheLifetime=0] DEPRECATED: Pass `lifetime` to `sweepers.messages` instead.
69
+ * How long a message should stay in the cache until it is considered sweepable (in seconds, 0 for forever)
70
+ * @property {number} [messageSweepInterval=0] DEPRECATED: Pass `interval` to `sweepers.messages` instead.
71
+ * How frequently to remove messages from the cache that are older than the message cache lifetime
72
+ * (in seconds, 0 for never)
73
+ * @property {MessageMentionOptions} [allowedMentions] Default value for {@link MessageOptions#allowedMentions}
74
+ * @property {number} [invalidRequestWarningInterval=0] The number of invalid REST requests (those that return
75
+ * 401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). That is, if set to 500,
76
+ * warnings will be emitted at invalid request number 500, 1000, 1500, and so on.
77
+ * @property {PartialType[]} [partials=['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT']] Structures allowed to be partial. This means events can be emitted even when
78
+ * they're missing all the data for a particular structure. See the "Partial Structures" topic on the
79
+ * [guide](https://discordjs.guide/popular-topics/partials.html) for some
80
+ * important usage information, as partials require you to put checks in place when handling data.
81
+ * @property {number} [restWsBridgeTimeout=5000] Maximum time permitted between REST responses and their
82
+ * corresponding WebSocket events
83
+ * @property {number} [restTimeOffset=500] Extra time in milliseconds to wait before continuing to make REST
84
+ * requests (higher values will reduce rate-limiting errors on bad connections)
85
+ * @property {number} [restRequestTimeout=15000] Time to wait before cancelling a REST request, in milliseconds
86
+ * @property {number} [restSweepInterval=60] How frequently to delete inactive request buckets, in seconds
87
+ * (or 0 for never)
88
+ * @property {number} [restGlobalRateLimit=0] How many requests to allow sending per second (0 for unlimited, 50 for
89
+ * the standard global limit used by Discord)
90
+ * @property {string[]|RateLimitQueueFilter} [rejectOnRateLimit] Decides how rate limits and pre-emptive throttles
91
+ * should be handled. If this option is an array containing the prefix of the request route (e.g. /channels to match any
92
+ * route starting with /channels, such as /channels/222197033908436994/messages) or a function returning true, a
93
+ * {@link RateLimitError} will be thrown. Otherwise the request will be queued for later
94
+ * @property {number} [retryLimit=1] How many times to retry on 5XX errors
95
+ * (Infinity for an indefinite amount of retries)
96
+ * @property {boolean} [failIfNotExists=true] Default value for {@link ReplyMessageOptions#failIfNotExists}
97
+ * @property {PresenceData} [presence={ status: 'online', since: 0, activities: [], afk: false }] Presence data to use upon login
98
+ * @property {number} [waitGuildTimeout=15_000] Time in milliseconds that Clients with the GUILDS intent should wait for
99
+ * missing guilds to be received before starting the bot. If not specified, the default is 15 seconds.
100
+ * @property {SweeperOptions} [sweepers={}] Options for cache sweeping
101
+ * @property {WebsocketOptions} [ws] Options for the WebSocket
102
+ * @property {HTTPOptions} [http] HTTP options
103
+ */
104
+
105
+ /**
106
+ * Options for {@link Sweepers} defining the behavior of cache sweeping
107
+ * @typedef {Object<SweeperKey, SweepOptions>} SweeperOptions
108
+ */
109
+
110
+ /**
111
+ * Options for sweeping a single type of item from cache
112
+ * @typedef {Object} SweepOptions
113
+ * @property {number} interval The interval (in seconds) at which to perform sweeping of the item
114
+ * @property {number} [lifetime] How long an item should stay in cache until it is considered sweepable.
115
+ * <warn>This property is only valid for the `invites`, `messages`, and `threads` keys. The `filter` property
116
+ * is mutually exclusive to this property and takes priority</warn>
117
+ * @property {GlobalSweepFilter} filter The function used to determine the function passed to the sweep method
118
+ * <info>This property is optional when the key is `invites`, `messages`, or `threads` and `lifetime` is set</info>
119
+ */
120
+
121
+ /**
122
+ * WebSocket options (these are left as snake_case to match the API)
123
+ * @typedef {Object} WebsocketOptions
124
+ * @property {AgentOptions} [agent={}] HTTPS Agent options (WS Proxy)
125
+ * @property {boolean} [compress=false] Whether to compress data sent on the connection
126
+ * @property {WebSocketProperties} [properties] Properties to identify the client with
127
+ */
128
+
129
+ /**
130
+ * HTTPS Agent options.
131
+ * @typedef {Object} AgentOptions
132
+ * @see {@link https://nodejs.org/api/https.html#https_class_https_agent}
133
+ * @see {@link https://nodejs.org/api/http.html#http_new_agent_options}
134
+ */
135
+
136
+ /**
137
+ * ProxyAgent options.
138
+ * @typedef {Object} ProxyAgentOptions
139
+ * @see {@link https://github.com/nodejs/undici/blob/main/docs/docs/api/ProxyAgent.md}
140
+ */
141
+
142
+ /**
143
+ * HTTP options
144
+ * @typedef {Object} HTTPOptions
145
+ * @property {number} [version=9] API version to use
146
+ * @property {ProxyAgentOptions} [agent={}] ProxyAgent options
147
+ * @property {string} [api='https://discord.com/api'] Base URL of the API
148
+ * @property {string} [cdn='https://cdn.discordapp.com'] Base URL of the CDN
149
+ * @property {string} [invite='https://discord.gg'] Base URL of invites
150
+ * @property {string} [template='https://discord.new'] Base URL of templates
151
+ * @property {Object} [headers] Additional headers to send for all API requests
152
+ * @property {string} [scheduledEvent='https://discord.com/events'] Base URL of guild scheduled events
153
+ */
154
+
155
+ /**
156
+ * Contains various utilities for client options.
157
+ */
158
+ class Options extends null {
159
+ /**
160
+ * The default client options.
161
+ * @returns {ClientOptions}
162
+ */
163
+ static createDefault() {
164
+ return {
165
+ DMChannelVoiceStatusSync: 0,
166
+ captchaRetryLimit: 3,
167
+ captchaSolver: () => {
168
+ const err = new Error('CAPTCHA_SOLVER_NOT_IMPLEMENTED');
169
+ err.cause =
170
+ 'You need to provide a captcha solver to use this feature\nExample: const client = new Client({ captchaSolver: yourAsyncFunction })';
171
+ throw err;
172
+ },
173
+ TOTPKey: null,
174
+ closeTimeout: 5_000,
175
+ waitGuildTimeout: 15_000,
176
+ shardCount: 1,
177
+ shards: [0],
178
+ makeCache: this.cacheWithLimits(this.defaultMakeCacheSettings),
179
+ messageCacheLifetime: 0,
180
+ messageSweepInterval: 0,
181
+ invalidRequestWarningInterval: 0,
182
+ intents: Intents.ALL,
183
+ partials: ['USER', 'CHANNEL', 'GUILD_MEMBER', 'MESSAGE', 'REACTION', 'GUILD_SCHEDULED_EVENT'], // Enable the partials
184
+ restWsBridgeTimeout: 5_000,
185
+ restRequestTimeout: 15_000,
186
+ restGlobalRateLimit: 0,
187
+ retryLimit: 1,
188
+ restTimeOffset: 500,
189
+ restSweepInterval: 60,
190
+ failIfNotExists: true,
191
+ presence: { status: 'online', since: 0, activities: [], afk: true },
192
+ sweepers: {},
193
+ ws: {
194
+ capabilities: 0, // https://discord-userdoccers.vercel.app/topics/gateway#gateway-capabilities
195
+ properties: {
196
+ os: 'Windows',
197
+ browser: 'Discord Client',
198
+ release_channel: 'stable',
199
+ client_version: '1.0.9210',
200
+ os_version: '10.0.19044',
201
+ os_arch: 'x64',
202
+ app_arch: 'x64',
203
+ system_locale: 'en-US',
204
+ has_client_mods: false,
205
+ client_launch_id: randomUUID(),
206
+ browser_user_agent: UserAgent,
207
+ browser_version: '35.3.0',
208
+ os_sdk_version: '19044',
209
+ client_build_number: 455964,
210
+ native_build_number: 69976,
211
+ client_event_source: null,
212
+ launch_signature: randomUUID(),
213
+ client_heartbeat_session_id: randomUUID(),
214
+ client_app_state: 'focused',
215
+ },
216
+ compress: false,
217
+ client_state: {
218
+ guild_versions: {},
219
+ },
220
+ version: 9,
221
+ agent: {},
222
+ },
223
+ http: {
224
+ agent: {},
225
+ headers: {
226
+ 'User-Agent': UserAgent,
227
+ },
228
+ version: 9,
229
+ api: 'https://discord.com/api',
230
+ cdn: 'https://cdn.discordapp.com',
231
+ invite: 'https://discord.gg',
232
+ template: 'https://discord.new',
233
+ scheduledEvent: 'https://discord.com/events',
234
+ },
235
+ };
236
+ }
237
+
238
+ /**
239
+ * Create a cache factory using predefined settings to sweep or limit.
240
+ * @param {Object<string, LimitedCollectionOptions|number>} [settings={}] Settings passed to the relevant constructor.
241
+ * If no setting is provided for a manager, it uses Collection.
242
+ * If a number is provided for a manager, it uses that number as the max size for a LimitedCollection.
243
+ * If LimitedCollectionOptions are provided for a manager, it uses those settings to form a LimitedCollection.
244
+ * @returns {CacheFactory}
245
+ * @example
246
+ * // Store up to 200 messages per channel and discard archived threads if they were archived more than 4 hours ago.
247
+ * // Note archived threads will remain in the guild and client caches with these settings
248
+ * Options.cacheWithLimits({
249
+ * MessageManager: 200,
250
+ * ThreadManager: {
251
+ * sweepInterval: 3600,
252
+ * sweepFilter: LimitedCollection.filterByLifetime({
253
+ * getComparisonTimestamp: e => e.archiveTimestamp,
254
+ * excludeFromSweep: e => !e.archived,
255
+ * }),
256
+ * },
257
+ * });
258
+ * @example
259
+ * // Sweep messages every 5 minutes, removing messages that have not been edited or created in the last 30 minutes
260
+ * Options.cacheWithLimits({
261
+ * // Keep default thread sweeping behavior
262
+ * ...Options.defaultMakeCacheSettings,
263
+ * // Override MessageManager
264
+ * MessageManager: {
265
+ * sweepInterval: 300,
266
+ * sweepFilter: LimitedCollection.filterByLifetime({
267
+ * lifetime: 1800,
268
+ * getComparisonTimestamp: e => e.editedTimestamp ?? e.createdTimestamp,
269
+ * })
270
+ * }
271
+ * });
272
+ */
273
+ static cacheWithLimits(settings = {}) {
274
+ const { Collection } = require('@discordjs/collection');
275
+ const LimitedCollection = require('./LimitedCollection');
276
+
277
+ return manager => {
278
+ const setting = settings[manager.name];
279
+ /* eslint-disable-next-line eqeqeq */
280
+ if (setting == null) {
281
+ return new Collection();
282
+ }
283
+ if (typeof setting === 'number') {
284
+ if (setting === Infinity) {
285
+ return new Collection();
286
+ }
287
+ return new LimitedCollection({ maxSize: setting });
288
+ }
289
+ /* eslint-disable eqeqeq */
290
+ const noSweeping =
291
+ setting.sweepFilter == null ||
292
+ setting.sweepInterval == null ||
293
+ setting.sweepInterval <= 0 ||
294
+ setting.sweepInterval === Infinity;
295
+ const noLimit = setting.maxSize == null || setting.maxSize === Infinity;
296
+ /* eslint-enable eqeqeq */
297
+ if (noSweeping && noLimit) {
298
+ return new Collection();
299
+ }
300
+ return new LimitedCollection(setting);
301
+ };
302
+ }
303
+
304
+ /**
305
+ * Create a cache factory that always caches everything.
306
+ * @returns {CacheFactory}
307
+ */
308
+ static cacheEverything() {
309
+ const { Collection } = require('@discordjs/collection');
310
+ return () => new Collection();
311
+ }
312
+
313
+ /**
314
+ * The default settings passed to {@link ClientOptions.makeCache}.
315
+ * The caches that this changes are:
316
+ * * `MessageManager` - Limit to 200 messages
317
+ * * `ChannelManager` - Sweep archived threads
318
+ * * `GuildChannelManager` - Sweep archived threads
319
+ * * `ThreadManager` - Sweep archived threads
320
+ * <info>If you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.
321
+ * `makeCache: Options.cacheWithLimits({ ...Options.defaultMakeCacheSettings, ReactionManager: 0 })`</info>
322
+ * @type {Object<string, LimitedCollectionOptions|number>}
323
+ */
324
+ static get defaultMakeCacheSettings() {
325
+ return {
326
+ MessageManager: 200,
327
+ ChannelManager: {
328
+ sweepInterval: 3600,
329
+ sweepFilter: require('./Util').archivedThreadSweepFilter(),
330
+ },
331
+ GuildChannelManager: {
332
+ sweepInterval: 3600,
333
+ sweepFilter: require('./Util').archivedThreadSweepFilter(),
334
+ },
335
+ ThreadManager: {
336
+ sweepInterval: 3600,
337
+ sweepFilter: require('./Util').archivedThreadSweepFilter(),
338
+ },
339
+ };
340
+ }
341
+ }
342
+
343
+ /**
344
+ * The default settings passed to {@link ClientOptions.sweepers}.
345
+ * The sweepers that this changes are:
346
+ * * `threads` - Sweep archived threads every hour, removing those archived more than 4 hours ago
347
+ * <info>If you want to keep default behavior and add on top of it you can use this object and add on to it, e.g.
348
+ * `sweepers: { ...Options.defaultSweeperSettings, messages: { interval: 300, lifetime: 600 } }`</info>
349
+ * @type {SweeperOptions}
350
+ */
351
+ Options.defaultSweeperSettings = {
352
+ threads: {
353
+ interval: 3600,
354
+ lifetime: 14400,
355
+ },
356
+ };
357
+
358
+ module.exports = Options;