djs-selfbot-v13 3.2.2 → 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 (363) hide show
  1. package/README.md +37 -36
  2. package/package.json +89 -85
  3. package/src/WebSocket.js +39 -39
  4. package/src/client/BaseClient.js +86 -86
  5. package/src/client/Client.js +934 -836
  6. package/src/client/WebhookClient.js +61 -61
  7. package/src/client/actions/Action.js +116 -120
  8. package/src/client/actions/ActionsManager.js +80 -78
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -34
  10. package/src/client/actions/AutoModerationActionExecution.js +27 -27
  11. package/src/client/actions/AutoModerationRuleCreate.js +28 -28
  12. package/src/client/actions/AutoModerationRuleDelete.js +32 -32
  13. package/src/client/actions/AutoModerationRuleUpdate.js +30 -30
  14. package/src/client/actions/ChannelCreate.js +23 -23
  15. package/src/client/actions/ChannelDelete.js +39 -39
  16. package/src/client/actions/ChannelUpdate.js +43 -43
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -29
  18. package/src/client/actions/GuildBanAdd.js +20 -20
  19. package/src/client/actions/GuildBanRemove.js +25 -25
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -21
  21. package/src/client/actions/GuildDelete.js +65 -65
  22. package/src/client/actions/GuildEmojiCreate.js +20 -20
  23. package/src/client/actions/GuildEmojiDelete.js +21 -21
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -20
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -34
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -19
  27. package/src/client/actions/GuildMemberRemove.js +33 -32
  28. package/src/client/actions/GuildMemberUpdate.js +44 -43
  29. package/src/client/actions/GuildRoleCreate.js +25 -25
  30. package/src/client/actions/GuildRoleDelete.js +31 -31
  31. package/src/client/actions/GuildRoleUpdate.js +39 -39
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -21
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -27
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -31
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -30
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -32
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -32
  38. package/src/client/actions/GuildStickerCreate.js +20 -20
  39. package/src/client/actions/GuildStickerDelete.js +21 -21
  40. package/src/client/actions/GuildStickerUpdate.js +20 -20
  41. package/src/client/actions/GuildStickersUpdate.js +34 -34
  42. package/src/client/actions/GuildUpdate.js +33 -33
  43. package/src/client/actions/InviteCreate.js +28 -28
  44. package/src/client/actions/InviteDelete.js +30 -30
  45. package/src/client/actions/MessageCreate.js +50 -46
  46. package/src/client/actions/MessageDelete.js +32 -32
  47. package/src/client/actions/MessageDeleteBulk.js +46 -46
  48. package/src/client/actions/MessagePollVoteAdd.js +33 -0
  49. package/src/client/actions/MessagePollVoteRemove.js +33 -0
  50. package/src/client/actions/MessageReactionAdd.js +68 -56
  51. package/src/client/actions/MessageReactionRemove.js +50 -45
  52. package/src/client/actions/MessageReactionRemoveAll.js +33 -33
  53. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -28
  54. package/src/client/actions/MessageUpdate.js +26 -26
  55. package/src/client/actions/PresenceUpdate.js +50 -46
  56. package/src/client/actions/StageInstanceCreate.js +28 -28
  57. package/src/client/actions/StageInstanceDelete.js +33 -33
  58. package/src/client/actions/StageInstanceUpdate.js +30 -30
  59. package/src/client/actions/ThreadCreate.js +24 -24
  60. package/src/client/actions/ThreadDelete.js +32 -32
  61. package/src/client/actions/ThreadListSync.js +59 -59
  62. package/src/client/actions/ThreadMemberUpdate.js +30 -30
  63. package/src/client/actions/ThreadMembersUpdate.js +34 -34
  64. package/src/client/actions/TypingStart.js +29 -29
  65. package/src/client/actions/UserUpdate.js +35 -35
  66. package/src/client/actions/VoiceStateUpdate.js +50 -57
  67. package/src/client/actions/WebhooksUpdate.js +20 -20
  68. package/src/client/voice/ClientVoiceManager.js +151 -51
  69. package/src/client/voice/VoiceConnection.js +1249 -0
  70. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  71. package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
  72. package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
  73. package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
  74. package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
  75. package/src/client/voice/networking/VoiceUDPClient.js +173 -0
  76. package/src/client/voice/networking/VoiceWebSocket.js +286 -0
  77. package/src/client/voice/player/MediaPlayer.js +321 -0
  78. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  79. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  80. package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
  81. package/src/client/voice/receiver/PacketHandler.js +260 -0
  82. package/src/client/voice/receiver/Receiver.js +96 -0
  83. package/src/client/voice/receiver/Recorder.js +173 -0
  84. package/src/client/voice/util/Function.js +116 -0
  85. package/src/client/voice/util/PlayInterface.js +122 -0
  86. package/src/client/voice/util/Secretbox.js +64 -0
  87. package/src/client/voice/util/Silence.js +16 -0
  88. package/src/client/voice/util/Socket.js +62 -0
  89. package/src/client/voice/util/VolumeInterface.js +104 -0
  90. package/src/client/websocket/WebSocketManager.js +392 -392
  91. package/src/client/websocket/WebSocketShard.js +907 -906
  92. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -18
  93. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -20
  94. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -5
  95. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -20
  96. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -5
  97. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -5
  98. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -5
  99. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -5
  100. package/src/client/websocket/handlers/CALL_CREATE.js +14 -14
  101. package/src/client/websocket/handlers/CALL_DELETE.js +11 -11
  102. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -11
  103. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -5
  104. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -5
  105. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -22
  106. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -19
  107. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -16
  108. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -16
  109. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -5
  110. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -5
  111. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -5
  112. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -52
  113. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -5
  114. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -5
  115. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -5
  116. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -39
  117. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -19
  118. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -5
  119. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -5
  120. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -5
  121. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -5
  122. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -5
  123. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -5
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -5
  125. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -5
  126. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -5
  127. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -5
  128. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -5
  129. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -5
  130. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -12
  131. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -5
  132. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -5
  133. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -5
  134. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -5
  135. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -5
  136. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -22
  137. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -12
  138. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -5
  139. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -5
  140. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -5
  141. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -5
  142. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -16
  143. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -5
  144. package/src/client/websocket/handlers/READY.js +121 -120
  145. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -19
  146. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -17
  147. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -41
  148. package/src/client/websocket/handlers/RESUMED.js +14 -14
  149. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -5
  150. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -5
  151. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -5
  152. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -5
  153. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -5
  154. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -5
  155. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -5
  156. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -5
  157. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -16
  158. package/src/client/websocket/handlers/TYPING_START.js +5 -5
  159. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -6
  160. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -5
  161. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -78
  162. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -5
  163. package/src/client/websocket/handlers/USER_UPDATE.js +5 -5
  164. package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
  165. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -12
  166. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -6
  167. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -5
  168. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -5
  169. package/src/client/websocket/handlers/index.js +84 -83
  170. package/src/errors/DJSError.js +61 -61
  171. package/src/errors/Messages.js +217 -183
  172. package/src/errors/index.js +4 -4
  173. package/src/index.js +172 -159
  174. package/src/managers/ApplicationCommandManager.js +264 -264
  175. package/src/managers/ApplicationCommandPermissionsManager.js +417 -417
  176. package/src/managers/AutoModerationRuleManager.js +296 -296
  177. package/src/managers/BaseGuildEmojiManager.js +80 -80
  178. package/src/managers/BaseManager.js +19 -19
  179. package/src/managers/BillingManager.js +66 -66
  180. package/src/managers/CachedManager.js +71 -71
  181. package/src/managers/ChannelManager.js +148 -138
  182. package/src/managers/ClientUserSettingManager.js +372 -372
  183. package/src/managers/DataManager.js +61 -61
  184. package/src/managers/GuildBanManager.js +250 -250
  185. package/src/managers/GuildChannelManager.js +488 -488
  186. package/src/managers/GuildEmojiManager.js +171 -171
  187. package/src/managers/GuildEmojiRoleManager.js +118 -118
  188. package/src/managers/GuildForumThreadManager.js +108 -108
  189. package/src/managers/GuildInviteManager.js +213 -213
  190. package/src/managers/GuildManager.js +338 -304
  191. package/src/managers/GuildMemberManager.js +599 -597
  192. package/src/managers/GuildMemberRoleManager.js +195 -191
  193. package/src/managers/GuildScheduledEventManager.js +314 -296
  194. package/src/managers/GuildSettingManager.js +155 -155
  195. package/src/managers/GuildStickerManager.js +179 -179
  196. package/src/managers/GuildTextThreadManager.js +98 -98
  197. package/src/managers/InteractionManager.js +39 -39
  198. package/src/managers/MessageManager.js +423 -391
  199. package/src/managers/PermissionOverwriteManager.js +164 -166
  200. package/src/managers/PresenceManager.js +71 -58
  201. package/src/managers/ReactionManager.js +67 -67
  202. package/src/managers/ReactionUserManager.js +73 -71
  203. package/src/managers/RelationshipManager.js +278 -265
  204. package/src/managers/RoleManager.js +448 -352
  205. package/src/managers/SessionManager.js +66 -0
  206. package/src/managers/StageInstanceManager.js +162 -162
  207. package/src/managers/ThreadManager.js +175 -174
  208. package/src/managers/ThreadMemberManager.js +186 -186
  209. package/src/managers/UserManager.js +136 -146
  210. package/src/managers/UserNoteManager.js +53 -53
  211. package/src/managers/VoiceStateManager.js +59 -37
  212. package/src/rest/APIRequest.js +154 -160
  213. package/src/rest/APIRouter.js +53 -53
  214. package/src/rest/DiscordAPIError.js +119 -104
  215. package/src/rest/HTTPError.js +62 -62
  216. package/src/rest/RESTManager.js +67 -62
  217. package/src/rest/RateLimitError.js +55 -55
  218. package/src/rest/RequestHandler.js +466 -444
  219. package/src/sharding/Shard.js +444 -443
  220. package/src/sharding/ShardClientUtil.js +279 -275
  221. package/src/sharding/ShardingManager.js +319 -318
  222. package/src/structures/AnonymousGuild.js +98 -98
  223. package/src/structures/ApplicationCommand.js +593 -593
  224. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -48
  225. package/src/structures/AutoModerationActionExecution.js +89 -89
  226. package/src/structures/AutoModerationRule.js +294 -294
  227. package/src/structures/AutocompleteInteraction.js +107 -107
  228. package/src/structures/Base.js +43 -43
  229. package/src/structures/BaseCommandInteraction.js +211 -211
  230. package/src/structures/BaseGuild.js +116 -116
  231. package/src/structures/BaseGuildEmoji.js +56 -56
  232. package/src/structures/BaseGuildTextChannel.js +191 -191
  233. package/src/structures/BaseGuildVoiceChannel.js +241 -241
  234. package/src/structures/BaseMessageComponent.js +181 -114
  235. package/src/structures/ButtonInteraction.js +11 -11
  236. package/src/structures/CallState.js +63 -63
  237. package/src/structures/CategoryChannel.js +85 -85
  238. package/src/structures/Channel.js +284 -270
  239. package/src/structures/ClientPresence.js +77 -85
  240. package/src/structures/ClientUser.js +479 -448
  241. package/src/structures/CommandInteraction.js +41 -41
  242. package/src/structures/CommandInteractionOptionResolver.js +276 -276
  243. package/src/structures/ContainerComponent.js +68 -0
  244. package/src/structures/ContextMenuInteraction.js +65 -65
  245. package/src/structures/DMChannel.js +219 -217
  246. package/src/structures/DirectoryChannel.js +20 -20
  247. package/src/structures/Emoji.js +148 -148
  248. package/src/structures/FileComponent.js +49 -0
  249. package/src/structures/ForumChannel.js +31 -261
  250. package/src/structures/GroupDMChannel.js +394 -387
  251. package/src/structures/Guild.js +1643 -1608
  252. package/src/structures/GuildAuditLogs.js +746 -729
  253. package/src/structures/GuildBan.js +59 -59
  254. package/src/structures/GuildBoost.js +108 -108
  255. package/src/structures/GuildChannel.js +470 -468
  256. package/src/structures/GuildEmoji.js +161 -161
  257. package/src/structures/GuildMember.js +636 -568
  258. package/src/structures/GuildPreview.js +191 -191
  259. package/src/structures/GuildPreviewEmoji.js +27 -27
  260. package/src/structures/GuildScheduledEvent.js +536 -441
  261. package/src/structures/GuildTemplate.js +236 -236
  262. package/src/structures/Integration.js +188 -188
  263. package/src/structures/IntegrationApplication.js +96 -96
  264. package/src/structures/Interaction.js +290 -290
  265. package/src/structures/InteractionCollector.js +248 -248
  266. package/src/structures/InteractionWebhook.js +43 -43
  267. package/src/structures/Invite.js +358 -358
  268. package/src/structures/InviteGuild.js +23 -23
  269. package/src/structures/InviteStageInstance.js +86 -86
  270. package/src/structures/MediaChannel.js +11 -0
  271. package/src/structures/MediaGalleryComponent.js +41 -0
  272. package/src/structures/MediaGalleryItem.js +47 -0
  273. package/src/structures/Message.js +1252 -1227
  274. package/src/structures/MessageActionRow.js +105 -103
  275. package/src/structures/MessageAttachment.js +216 -204
  276. package/src/structures/MessageButton.js +166 -165
  277. package/src/structures/MessageCollector.js +146 -146
  278. package/src/structures/MessageComponentInteraction.js +120 -120
  279. package/src/structures/MessageContextMenuInteraction.js +20 -20
  280. package/src/structures/MessageEmbed.js +596 -586
  281. package/src/structures/MessageMentions.js +273 -273
  282. package/src/structures/MessagePayload.js +354 -318
  283. package/src/structures/MessageReaction.js +181 -171
  284. package/src/structures/MessageSelectMenu.js +141 -140
  285. package/src/structures/Modal.js +161 -161
  286. package/src/structures/ModalSubmitFieldsResolver.js +53 -53
  287. package/src/structures/ModalSubmitInteraction.js +119 -119
  288. package/src/structures/NewsChannel.js +32 -32
  289. package/src/structures/OAuth2Guild.js +28 -28
  290. package/src/structures/PermissionOverwrites.js +198 -196
  291. package/src/structures/Poll.js +108 -0
  292. package/src/structures/PollAnswer.js +88 -0
  293. package/src/structures/Presence.js +1105 -1101
  294. package/src/structures/ReactionCollector.js +229 -229
  295. package/src/structures/ReactionEmoji.js +31 -31
  296. package/src/structures/Role.js +590 -531
  297. package/src/structures/SectionComponent.js +48 -0
  298. package/src/structures/SelectMenuInteraction.js +21 -21
  299. package/src/structures/SeparatorComponent.js +48 -0
  300. package/src/structures/Session.js +81 -0
  301. package/src/structures/StageChannel.js +104 -104
  302. package/src/structures/StageInstance.js +208 -208
  303. package/src/structures/Sticker.js +310 -310
  304. package/src/structures/StickerPack.js +95 -95
  305. package/src/structures/StoreChannel.js +56 -56
  306. package/src/structures/Team.js +118 -118
  307. package/src/structures/TeamMember.js +80 -71
  308. package/src/structures/TextChannel.js +33 -33
  309. package/src/structures/TextDisplayComponent.js +40 -0
  310. package/src/structures/TextInputComponent.js +132 -131
  311. package/src/structures/ThreadChannel.js +605 -607
  312. package/src/structures/ThreadMember.js +105 -105
  313. package/src/structures/ThreadOnlyChannel.js +249 -0
  314. package/src/structures/ThumbnailComponent.js +57 -0
  315. package/src/structures/Typing.js +74 -74
  316. package/src/structures/UnfurledMediaItem.js +29 -0
  317. package/src/structures/User.js +640 -543
  318. package/src/structures/UserContextMenuInteraction.js +29 -29
  319. package/src/structures/VoiceChannel.js +110 -110
  320. package/src/structures/VoiceChannelEffect.js +69 -0
  321. package/src/structures/VoiceRegion.js +53 -53
  322. package/src/structures/VoiceState.js +354 -341
  323. package/src/structures/WebEmbed.js +373 -373
  324. package/src/structures/Webhook.js +478 -467
  325. package/src/structures/WelcomeChannel.js +60 -60
  326. package/src/structures/WelcomeScreen.js +48 -48
  327. package/src/structures/Widget.js +87 -87
  328. package/src/structures/WidgetMember.js +99 -99
  329. package/src/structures/interfaces/Application.js +825 -313
  330. package/src/structures/interfaces/Collector.js +300 -300
  331. package/src/structures/interfaces/InteractionResponses.js +313 -313
  332. package/src/structures/interfaces/TextBasedChannel.js +759 -719
  333. package/src/util/APITypes.js +59 -0
  334. package/src/util/ActivityFlags.js +44 -44
  335. package/src/util/ApplicationFlags.js +76 -76
  336. package/src/util/AttachmentFlags.js +38 -38
  337. package/src/util/BitField.js +170 -170
  338. package/src/util/ChannelFlags.js +45 -45
  339. package/src/util/Constants.js +1914 -1773
  340. package/src/util/DataResolver.js +146 -145
  341. package/src/util/Formatters.js +228 -228
  342. package/src/util/GuildMemberFlags.js +43 -43
  343. package/src/util/Intents.js +74 -74
  344. package/src/util/InviteFlags.js +34 -29
  345. package/src/util/LimitedCollection.js +131 -131
  346. package/src/util/MessageFlags.js +63 -54
  347. package/src/util/Options.js +358 -336
  348. package/src/util/Permissions.js +202 -202
  349. package/src/util/PremiumUsageFlags.js +31 -31
  350. package/src/util/PurchasedFlags.js +33 -33
  351. package/src/util/RemoteAuth.js +382 -379
  352. package/src/util/RoleFlags.js +37 -37
  353. package/src/util/SnowflakeUtil.js +92 -92
  354. package/src/util/Speaking.js +33 -0
  355. package/src/util/Sweepers.js +466 -466
  356. package/src/util/SystemChannelFlags.js +55 -55
  357. package/src/util/ThreadMemberFlags.js +30 -30
  358. package/src/util/UserFlags.js +104 -104
  359. package/src/util/Util.js +1048 -889
  360. package/typings/enums.d.ts +439 -297
  361. package/typings/index.d.ts +8247 -7432
  362. package/typings/rawDataTypes.d.ts +403 -342
  363. package/src/structures/MessagePoll.js +0 -238
@@ -1,568 +1,636 @@
1
- 'use strict';
2
-
3
- const process = require('node:process');
4
- const Base = require('./Base');
5
- const VoiceState = require('./VoiceState');
6
- const TextBasedChannel = require('./interfaces/TextBasedChannel');
7
- const { Error } = require('../errors');
8
- const GuildMemberRoleManager = require('../managers/GuildMemberRoleManager');
9
- const GuildMemberFlags = require('../util/GuildMemberFlags');
10
- const Permissions = require('../util/Permissions');
11
-
12
- /**
13
- * @type {WeakSet<GuildMember>}
14
- * @private
15
- * @internal
16
- */
17
- const deletedGuildMembers = new WeakSet();
18
- let deprecationEmittedForDeleted = false;
19
-
20
- /**
21
- * Represents a member of a guild on Discord.
22
- * @implements {TextBasedChannel}
23
- * @extends {Base}
24
- */
25
- class GuildMember extends Base {
26
- constructor(client, data, guild) {
27
- super(client);
28
-
29
- /**
30
- * The guild that this member is part of
31
- * @type {Guild}
32
- */
33
- this.guild = guild;
34
-
35
- /**
36
- * The timestamp the member joined the guild at
37
- * @type {?number}
38
- */
39
- this.joinedTimestamp = null;
40
-
41
- /**
42
- * The last timestamp this member started boosting the guild
43
- * @type {?number}
44
- */
45
- this.premiumSinceTimestamp = null;
46
-
47
- /**
48
- * The nickname of this member, if they have one
49
- * @type {?string}
50
- */
51
- this.nickname = null;
52
-
53
- /**
54
- * Whether this member has yet to pass the guild's membership gate
55
- * @type {boolean}
56
- */
57
- this.pending = false;
58
-
59
- /**
60
- * The timestamp this member's timeout will be removed
61
- * @type {?number}
62
- */
63
- this.communicationDisabledUntilTimestamp = null;
64
-
65
- /**
66
- * The role ids of the member
67
- * @type {Snowflake[]}
68
- * @private
69
- */
70
- this._roles = [];
71
- if (data) this._patch(data);
72
- }
73
-
74
- _patch(data) {
75
- if ('user' in data) {
76
- /**
77
- * The user that this guild member instance represents
78
- * @type {?User}
79
- */
80
- this.user = this.client.users._add(data.user, true);
81
- }
82
-
83
- if ('nick' in data) this.nickname = data.nick;
84
- if ('avatar' in data) {
85
- /**
86
- * The guild member's avatar hash
87
- * @type {?string}
88
- */
89
- this.avatar = data.avatar;
90
- } else if (typeof this.avatar !== 'string') {
91
- this.avatar = null;
92
- }
93
- if ('joined_at' in data) this.joinedTimestamp = new Date(data.joined_at).getTime();
94
- if ('premium_since' in data) {
95
- this.premiumSinceTimestamp = data.premium_since ? new Date(data.premium_since).getTime() : null;
96
- }
97
- if ('roles' in data) this._roles = data.roles;
98
- this.pending = data.pending ?? false;
99
-
100
- if ('communication_disabled_until' in data) {
101
- this.communicationDisabledUntilTimestamp =
102
- data.communication_disabled_until && Date.parse(data.communication_disabled_until);
103
- }
104
- if ('flags' in data) {
105
- /**
106
- * The flags of this member
107
- * @type {Readonly<GuildMemberFlags>}
108
- */
109
- this.flags = new GuildMemberFlags(data.flags).freeze();
110
- } else {
111
- this.flags ??= new GuildMemberFlags().freeze();
112
- }
113
- }
114
-
115
- _clone() {
116
- const clone = super._clone();
117
- clone._roles = this._roles.slice();
118
- return clone;
119
- }
120
-
121
- /**
122
- * Whether or not the structure has been deleted
123
- * @type {boolean}
124
- * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
125
- */
126
- get deleted() {
127
- if (!deprecationEmittedForDeleted) {
128
- deprecationEmittedForDeleted = true;
129
- process.emitWarning(
130
- 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
131
- 'DeprecationWarning',
132
- );
133
- }
134
-
135
- return deletedGuildMembers.has(this);
136
- }
137
-
138
- set deleted(value) {
139
- if (!deprecationEmittedForDeleted) {
140
- deprecationEmittedForDeleted = true;
141
- process.emitWarning(
142
- 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
143
- 'DeprecationWarning',
144
- );
145
- }
146
-
147
- if (value) deletedGuildMembers.add(this);
148
- else deletedGuildMembers.delete(this);
149
- }
150
-
151
- /**
152
- * Whether this GuildMember is a partial
153
- * @type {boolean}
154
- * @readonly
155
- */
156
- get partial() {
157
- return this.joinedTimestamp === null;
158
- }
159
-
160
- /**
161
- * A manager for the roles belonging to this member
162
- * @type {GuildMemberRoleManager}
163
- * @readonly
164
- */
165
- get roles() {
166
- return new GuildMemberRoleManager(this);
167
- }
168
-
169
- /**
170
- * The voice state of this member
171
- * @type {VoiceState}
172
- * @readonly
173
- */
174
- get voice() {
175
- return this.guild.voiceStates.cache.get(this.id) ?? new VoiceState(this.guild, { user_id: this.id });
176
- }
177
-
178
- /**
179
- * A link to the member's guild avatar.
180
- * @param {ImageURLOptions} [options={}] Options for the Image URL
181
- * @returns {?string}
182
- */
183
- avatarURL({ format, size, dynamic } = {}) {
184
- if (!this.avatar) return null;
185
- return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic);
186
- }
187
-
188
- /**
189
- * A link to the member's guild avatar if they have one.
190
- * Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
191
- * @param {ImageURLOptions} [options={}] Options for the Image URL
192
- * @returns {string}
193
- */
194
- displayAvatarURL(options) {
195
- return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
196
- }
197
-
198
- /**
199
- * The time this member joined the guild
200
- * @type {?Date}
201
- * @readonly
202
- */
203
- get joinedAt() {
204
- return this.joinedTimestamp ? new Date(this.joinedTimestamp) : null;
205
- }
206
-
207
- /**
208
- * The time this member's timeout will be removed
209
- * @type {?Date}
210
- * @readonly
211
- */
212
- get communicationDisabledUntil() {
213
- return this.communicationDisabledUntilTimestamp && new Date(this.communicationDisabledUntilTimestamp);
214
- }
215
-
216
- /**
217
- * The last time this member started boosting the guild
218
- * @type {?Date}
219
- * @readonly
220
- */
221
- get premiumSince() {
222
- return this.premiumSinceTimestamp ? new Date(this.premiumSinceTimestamp) : null;
223
- }
224
-
225
- /**
226
- * The presence of this guild member
227
- * @type {?Presence}
228
- * @readonly
229
- */
230
- get presence() {
231
- return this.guild.presences.resolve(this.id);
232
- }
233
-
234
- /**
235
- * The displayed color of this member in base 10
236
- * @type {number}
237
- * @readonly
238
- */
239
- get displayColor() {
240
- return this.roles.color?.color ?? 0;
241
- }
242
-
243
- /**
244
- * The displayed color of this member in hexadecimal
245
- * @type {string}
246
- * @readonly
247
- */
248
- get displayHexColor() {
249
- return this.roles.color?.hexColor ?? '#000000';
250
- }
251
-
252
- /**
253
- * The member's id
254
- * @type {Snowflake}
255
- * @readonly
256
- */
257
- get id() {
258
- return this.user.id;
259
- }
260
-
261
- /**
262
- * The nickname of this member, or their user display name if they don't have one
263
- * @type {?string}
264
- * @readonly
265
- */
266
- get displayName() {
267
- return this.nickname ?? this.user.displayName;
268
- }
269
-
270
- /**
271
- * The overall set of permissions for this member, taking only roles and owner status into account
272
- * @type {Readonly<Permissions>}
273
- * @readonly
274
- */
275
- get permissions() {
276
- if (this.user.id === this.guild.ownerId) return new Permissions(Permissions.ALL).freeze();
277
- return new Permissions(this.roles.cache.map(role => role.permissions)).freeze();
278
- }
279
-
280
- /**
281
- * Whether the client user is above this user in the hierarchy, according to role position and guild ownership.
282
- * This is a prerequisite for many moderative actions.
283
- * @type {boolean}
284
- * @readonly
285
- */
286
- get manageable() {
287
- if (this.user.id === this.guild.ownerId) return false;
288
- if (this.user.id === this.client.user.id) return false;
289
- if (this.client.user.id === this.guild.ownerId) return true;
290
- if (!this.guild.members.me) throw new Error('GUILD_UNCACHED_ME');
291
- return this.guild.members.me.roles.highest.comparePositionTo(this.roles.highest) > 0;
292
- }
293
-
294
- /**
295
- * Whether this member is kickable by the client user
296
- * @type {boolean}
297
- * @readonly
298
- */
299
- get kickable() {
300
- return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.KICK_MEMBERS);
301
- }
302
-
303
- /**
304
- * Whether this member is bannable by the client user
305
- * @type {boolean}
306
- * @readonly
307
- */
308
- get bannable() {
309
- return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.BAN_MEMBERS);
310
- }
311
-
312
- /**
313
- * Whether this member is moderatable by the client user
314
- * @type {boolean}
315
- * @readonly
316
- */
317
- get moderatable() {
318
- return (
319
- !this.permissions.has(Permissions.FLAGS.ADMINISTRATOR) &&
320
- this.manageable &&
321
- (this.guild.members.me?.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS) ?? false)
322
- );
323
- }
324
-
325
- /**
326
- * Whether this member is currently timed out
327
- * @returns {boolean}
328
- */
329
- isCommunicationDisabled() {
330
- return this.communicationDisabledUntilTimestamp > Date.now();
331
- }
332
-
333
- /**
334
- * Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,
335
- * taking into account roles and permission overwrites.
336
- * @param {GuildChannelResolvable} channel The guild channel to use as context
337
- * @returns {Readonly<Permissions>}
338
- */
339
- permissionsIn(channel) {
340
- channel = this.guild.channels.resolve(channel);
341
- if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
342
- return channel.permissionsFor(this);
343
- }
344
-
345
- /**
346
- * Edits this member.
347
- * @param {GuildMemberEditData} data The data to edit the member with
348
- * @param {string} [reason] Reason for editing this user
349
- * @returns {Promise<GuildMember>}
350
- */
351
- edit(data, reason) {
352
- return this.guild.members.edit(this, data, reason);
353
- }
354
-
355
- /**
356
- * Sets the nickname for this member.
357
- * @param {?string} nick The nickname for the guild member, or `null` if you want to reset their nickname
358
- * @param {string} [reason] Reason for setting the nickname
359
- * @returns {Promise<GuildMember>}
360
- * @example
361
- * // Set a nickname for a guild member
362
- * guildMember.setNickname('cool nickname', 'Needed a new nickname')
363
- * .then(member => console.log(`Set nickname of ${member.user.username}`))
364
- * .catch(console.error);
365
- * @example
366
- * // Remove a nickname for a guild member
367
- * guildMember.setNickname(null, 'No nicknames allowed!')
368
- * .then(member => console.log(`Removed nickname for ${member.user.username}`))
369
- * .catch(console.error);
370
- */
371
- setNickname(nick, reason) {
372
- return this.edit({ nick }, reason);
373
- }
374
-
375
- /**
376
- * Sets the flags for this member.
377
- * @param {GuildMemberFlagsResolvable} flags The flags to set
378
- * @param {string} [reason] Reason for setting the flags
379
- * @returns {Promise<GuildMember>}
380
- */
381
- setFlags(flags, reason) {
382
- return this.edit({ flags, reason });
383
- }
384
-
385
- /**
386
- * Creates a DM channel between the client and this member.
387
- * @param {boolean} [force=false] Whether to skip the cache check and request the API
388
- * @returns {Promise<DMChannel>}
389
- */
390
- createDM(force = false) {
391
- return this.user.createDM(force);
392
- }
393
-
394
- /**
395
- * Deletes any DMs with this member.
396
- * @returns {Promise<DMChannel>}
397
- */
398
- deleteDM() {
399
- return this.user.deleteDM();
400
- }
401
-
402
- /**
403
- * Kicks this member from the guild.
404
- * @param {string} [reason] Reason for kicking user
405
- * @returns {Promise<GuildMember>}
406
- */
407
- kick(reason) {
408
- return this.guild.members.kick(this, reason);
409
- }
410
-
411
- /**
412
- * Bans this guild member.
413
- * @param {BanOptions} [options] Options for the ban
414
- * @returns {Promise<GuildMember>}
415
- * @example
416
- * // Ban a guild member, deleting a week's worth of messages
417
- * guildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })
418
- * .then(console.log)
419
- * .catch(console.error);
420
- */
421
- ban(options) {
422
- return this.guild.bans.create(this, options);
423
- }
424
-
425
- /**
426
- * Times this guild member out.
427
- * @param {DateResolvable|null} communicationDisabledUntil The date or timestamp
428
- * for the member's communication to be disabled until. Provide `null` to remove the timeout.
429
- * @param {string} [reason] The reason for this timeout.
430
- * @returns {Promise<GuildMember>}
431
- * @example
432
- * // Time a guild member out for 5 minutes
433
- * guildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')
434
- * .then(console.log)
435
- * .catch(console.error);
436
- * @example
437
- * // Remove the timeout of a guild member
438
- * guildMember.disableCommunicationUntil(null)
439
- * .then(member => console.log(`Removed timeout for ${member.displayName}`))
440
- * .catch(console.error);
441
- */
442
- disableCommunicationUntil(communicationDisabledUntil, reason) {
443
- return this.edit({ communicationDisabledUntil }, reason);
444
- }
445
-
446
- /**
447
- * Times this guild member out.
448
- * @param {number|null} timeout The time in milliseconds
449
- * for the member's communication to be disabled until. Provide `null` to remove the timeout.
450
- * @param {string} [reason] The reason for this timeout.
451
- * @returns {Promise<GuildMember>}
452
- * @example
453
- * // Time a guild member out for 5 minutes
454
- * guildMember.timeout(5 * 60 * 1000, 'They deserved it')
455
- * .then(console.log)
456
- * .catch(console.error);
457
- */
458
- timeout(timeout, reason) {
459
- return this.disableCommunicationUntil(timeout && Date.now() + timeout, reason);
460
- }
461
-
462
- /**
463
- * Fetches this GuildMember.
464
- * @param {boolean} [force=true] Whether to skip the cache check and request the API
465
- * @returns {Promise<GuildMember>}
466
- */
467
- fetch(force = true) {
468
- return this.guild.members.fetch({ user: this.id, cache: true, force });
469
- }
470
-
471
- /**
472
- * Whether this guild member equals another guild member. It compares all properties, so for most
473
- * comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
474
- * and is often what most users need.
475
- * @param {GuildMember} member The member to compare with
476
- * @returns {boolean}
477
- */
478
- equals(member) {
479
- return (
480
- member instanceof this.constructor &&
481
- this.id === member.id &&
482
- this.partial === member.partial &&
483
- this.guild.id === member.guild.id &&
484
- this.joinedTimestamp === member.joinedTimestamp &&
485
- this.nickname === member.nickname &&
486
- this.avatar === member.avatar &&
487
- this.pending === member.pending &&
488
- this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
489
- this.flags.equals(member.flags) &&
490
- (this._roles === member._roles ||
491
- (this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i])))
492
- );
493
- }
494
-
495
- /**
496
- * When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
497
- * @returns {string}
498
- * @example
499
- * // Logs: Hello from <@123456789012345678>!
500
- * console.log(`Hello from ${member}!`);
501
- */
502
- toString() {
503
- return `<@${this.nickname ? '!' : ''}${this.user.id}>`;
504
- }
505
-
506
- toJSON() {
507
- const json = super.toJSON({
508
- guild: 'guildId',
509
- user: 'userId',
510
- displayName: true,
511
- roles: true,
512
- });
513
- json.avatarURL = this.avatarURL();
514
- json.displayAvatarURL = this.displayAvatarURL();
515
- return json;
516
- }
517
-
518
- /**
519
- * Sets the guild avatar of the logged in client.
520
- * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
521
- * @returns {Promise<GuildMember>}
522
- */
523
- setAvatar(avatar) {
524
- return this.edit({ avatar });
525
- }
526
-
527
- /**
528
- * Sets the guild banner of the logged in client.
529
- * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
530
- * @returns {Promise<GuildMember>}
531
- */
532
- setBanner(banner) {
533
- return this.edit({ banner });
534
- }
535
-
536
- /**
537
- * Set Guild About me
538
- * @param {string | null} bio Bio to set
539
- * @returns {Promise<GuildMember>}
540
- */
541
- setAboutMe(bio = null) {
542
- return this.edit({ bio });
543
- }
544
- }
545
-
546
- /**
547
- * Sends a message to this user.
548
- * @method send
549
- * @memberof GuildMember
550
- * @instance
551
- * @param {string|MessagePayload|MessageOptions} options The options to provide
552
- * @returns {Promise<Message>}
553
- * @example
554
- * // Send a direct message
555
- * guildMember.send('Hello!')
556
- * .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))
557
- * .catch(console.error);
558
- */
559
-
560
- TextBasedChannel.applyToClass(GuildMember);
561
-
562
- exports.GuildMember = GuildMember;
563
- exports.deletedGuildMembers = deletedGuildMembers;
564
-
565
- /**
566
- * @external APIGuildMember
567
- * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object}
568
- */
1
+ 'use strict';
2
+
3
+ const process = require('node:process');
4
+ const Base = require('./Base');
5
+ const VoiceState = require('./VoiceState');
6
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
7
+ const { Error } = require('../errors');
8
+ const GuildMemberRoleManager = require('../managers/GuildMemberRoleManager');
9
+ const GuildMemberFlags = require('../util/GuildMemberFlags');
10
+ const Permissions = require('../util/Permissions');
11
+
12
+ /**
13
+ * @type {WeakSet<GuildMember>}
14
+ * @private
15
+ * @internal
16
+ */
17
+ const deletedGuildMembers = new WeakSet();
18
+ let deprecationEmittedForDeleted = false;
19
+
20
+ /**
21
+ * Represents a member of a guild on Discord.
22
+ * @implements {TextBasedChannel}
23
+ * @extends {Base}
24
+ */
25
+ class GuildMember extends Base {
26
+ constructor(client, data, guild) {
27
+ super(client);
28
+
29
+ /**
30
+ * The guild that this member is part of
31
+ * @type {Guild}
32
+ */
33
+ this.guild = guild;
34
+
35
+ /**
36
+ * The timestamp the member joined the guild at
37
+ * @type {?number}
38
+ */
39
+ this.joinedTimestamp = null;
40
+
41
+ /**
42
+ * The last timestamp this member started boosting the guild
43
+ * @type {?number}
44
+ */
45
+ this.premiumSinceTimestamp = null;
46
+
47
+ /**
48
+ * The nickname of this member, if they have one
49
+ * @type {?string}
50
+ */
51
+ this.nickname = null;
52
+
53
+ /**
54
+ * Whether this member has yet to pass the guild's membership gate
55
+ * @type {boolean}
56
+ */
57
+ this.pending = false;
58
+
59
+ /**
60
+ * The timestamp this member's timeout will be removed
61
+ * @type {?number}
62
+ */
63
+ this.communicationDisabledUntilTimestamp = null;
64
+
65
+ /**
66
+ * The role ids of the member
67
+ * @type {Snowflake[]}
68
+ * @private
69
+ */
70
+ this._roles = [];
71
+ if (data) this._patch(data);
72
+ }
73
+
74
+ _patch(data) {
75
+ if ('user' in data) {
76
+ /**
77
+ * The user that this guild member instance represents
78
+ * @type {?User}
79
+ */
80
+ this.user = this.client.users._add(data.user, true);
81
+ }
82
+
83
+ if ('nick' in data) this.nickname = data.nick;
84
+ if ('avatar' in data) {
85
+ /**
86
+ * The guild member's avatar hash
87
+ * @type {?string}
88
+ */
89
+ this.avatar = data.avatar;
90
+ } else if (typeof this.avatar !== 'string') {
91
+ this.avatar = null;
92
+ }
93
+ if ('banner' in data) {
94
+ /**
95
+ * The guild member's banner hash.
96
+ * @type {?string}
97
+ */
98
+ this.banner = data.banner;
99
+ } else {
100
+ this.banner ??= null;
101
+ }
102
+
103
+ if ('joined_at' in data) this.joinedTimestamp = new Date(data.joined_at).getTime();
104
+ if ('premium_since' in data) {
105
+ this.premiumSinceTimestamp = data.premium_since ? new Date(data.premium_since).getTime() : null;
106
+ }
107
+ if ('roles' in data) this._roles = data.roles;
108
+ this.pending = data.pending ?? false;
109
+
110
+ if ('communication_disabled_until' in data) {
111
+ this.communicationDisabledUntilTimestamp =
112
+ data.communication_disabled_until && Date.parse(data.communication_disabled_until);
113
+ }
114
+ if ('flags' in data) {
115
+ /**
116
+ * The flags of this member
117
+ * @type {Readonly<GuildMemberFlags>}
118
+ */
119
+ this.flags = new GuildMemberFlags(data.flags).freeze();
120
+ } else {
121
+ this.flags ??= new GuildMemberFlags().freeze();
122
+ }
123
+
124
+ if (data.avatar_decoration_data) {
125
+ /**
126
+ * The member avatar decoration's data
127
+ * @type {?AvatarDecorationData}
128
+ */
129
+ this.avatarDecorationData = {
130
+ asset: data.avatar_decoration_data.asset,
131
+ skuId: data.avatar_decoration_data.sku_id,
132
+ };
133
+ } else {
134
+ this.avatarDecorationData = null;
135
+ }
136
+ }
137
+
138
+ _clone() {
139
+ const clone = super._clone();
140
+ clone._roles = this._roles.slice();
141
+ return clone;
142
+ }
143
+
144
+ /**
145
+ * Whether or not the structure has been deleted
146
+ * @type {boolean}
147
+ * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
148
+ */
149
+ get deleted() {
150
+ if (!deprecationEmittedForDeleted) {
151
+ deprecationEmittedForDeleted = true;
152
+ process.emitWarning(
153
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
154
+ 'DeprecationWarning',
155
+ );
156
+ }
157
+
158
+ return deletedGuildMembers.has(this);
159
+ }
160
+
161
+ set deleted(value) {
162
+ if (!deprecationEmittedForDeleted) {
163
+ deprecationEmittedForDeleted = true;
164
+ process.emitWarning(
165
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
166
+ 'DeprecationWarning',
167
+ );
168
+ }
169
+
170
+ if (value) deletedGuildMembers.add(this);
171
+ else deletedGuildMembers.delete(this);
172
+ }
173
+
174
+ /**
175
+ * Whether this GuildMember is a partial
176
+ * @type {boolean}
177
+ * @readonly
178
+ */
179
+ get partial() {
180
+ return this.joinedTimestamp === null;
181
+ }
182
+
183
+ /**
184
+ * A manager for the roles belonging to this member
185
+ * @type {GuildMemberRoleManager}
186
+ * @readonly
187
+ */
188
+ get roles() {
189
+ return new GuildMemberRoleManager(this);
190
+ }
191
+
192
+ /**
193
+ * The voice state of this member
194
+ * @type {VoiceState}
195
+ * @readonly
196
+ */
197
+ get voice() {
198
+ return this.guild.voiceStates.cache.get(this.id) ?? new VoiceState(this.guild, { user_id: this.id });
199
+ }
200
+
201
+ /**
202
+ * A link to the user's avatar decoration.
203
+ * @returns {?string}
204
+ */
205
+ avatarDecorationURL() {
206
+ if (!this.avatarDecorationData) return null;
207
+ return this.client.rest.cdn.AvatarDecoration(this.avatarDecorationData.asset);
208
+ }
209
+
210
+ /**
211
+ * A link to the member's guild avatar.
212
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
213
+ * @returns {?string}
214
+ */
215
+ avatarURL({ format, size, dynamic } = {}) {
216
+ if (!this.avatar) return null;
217
+ return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic);
218
+ }
219
+
220
+ /**
221
+ * A link to the member's banner.
222
+ * @param {ImageURLOptions} [options={}] Options for the banner URL
223
+ * @returns {?string}
224
+ */
225
+ bannerURL({ format, size, dynamic } = {}) {
226
+ return (
227
+ this.banner && this.client.rest.cdn.GuildMemberBanner(this.guild.id, this.id, this.banner, format, size, dynamic)
228
+ );
229
+ }
230
+
231
+ /**
232
+ * A link to the member's guild avatar decoration if they have one.
233
+ * Otherwise, a link to their {@link User#avatarDecorationURL} will be returned.
234
+ * @returns {?string}
235
+ */
236
+ displayAvatarDecorationURL() {
237
+ return this.avatarDecorationURL() ?? this.user.avatarDecorationURL();
238
+ }
239
+
240
+ /**
241
+ * A link to the member's guild avatar if they have one.
242
+ * Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
243
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
244
+ * @returns {string}
245
+ */
246
+ displayAvatarURL(options) {
247
+ return this.avatarURL(options) ?? this.user.displayAvatarURL(options);
248
+ }
249
+
250
+ /**
251
+ * A link to the member's guild banner if they have one.
252
+ * Otherwise, a link to their {@link User#bannerURL} will be returned.
253
+ * @param {ImageURLOptions} [options={}] Options for the image URL
254
+ * @returns {?string}
255
+ */
256
+ displayBannerURL(options) {
257
+ return this.bannerURL(options) ?? this.user.bannerURL(options);
258
+ }
259
+
260
+ /**
261
+ * The time this member joined the guild
262
+ * @type {?Date}
263
+ * @readonly
264
+ */
265
+ get joinedAt() {
266
+ return this.joinedTimestamp ? new Date(this.joinedTimestamp) : null;
267
+ }
268
+
269
+ /**
270
+ * The time this member's timeout will be removed
271
+ * @type {?Date}
272
+ * @readonly
273
+ */
274
+ get communicationDisabledUntil() {
275
+ return this.communicationDisabledUntilTimestamp && new Date(this.communicationDisabledUntilTimestamp);
276
+ }
277
+
278
+ /**
279
+ * The last time this member started boosting the guild
280
+ * @type {?Date}
281
+ * @readonly
282
+ */
283
+ get premiumSince() {
284
+ return this.premiumSinceTimestamp ? new Date(this.premiumSinceTimestamp) : null;
285
+ }
286
+
287
+ /**
288
+ * The presence of this guild member
289
+ * @type {?Presence}
290
+ * @readonly
291
+ */
292
+ get presence() {
293
+ return this.guild.presences.cache.get(this.id) ?? null;
294
+ }
295
+
296
+ /**
297
+ * The displayed color of this member in base 10
298
+ * @type {number}
299
+ * @readonly
300
+ */
301
+ get displayColor() {
302
+ return this.roles.color?.colors.primaryColor ?? 0;
303
+ }
304
+
305
+ /**
306
+ * The displayed color of this member in hexadecimal
307
+ * @type {string}
308
+ * @readonly
309
+ */
310
+ get displayHexColor() {
311
+ return this.roles.color?.hexColor ?? '#000000';
312
+ }
313
+
314
+ /**
315
+ * The member's id
316
+ * @type {Snowflake}
317
+ * @readonly
318
+ */
319
+ get id() {
320
+ return this.user.id;
321
+ }
322
+
323
+ /**
324
+ * The nickname of this member, or their user display name if they don't have one
325
+ * @type {?string}
326
+ * @readonly
327
+ */
328
+ get displayName() {
329
+ return this.nickname ?? this.user.displayName;
330
+ }
331
+
332
+ /**
333
+ * The overall set of permissions for this member, taking only roles and owner status into account
334
+ * @type {Readonly<Permissions>}
335
+ * @readonly
336
+ */
337
+ get permissions() {
338
+ if (this.user.id === this.guild.ownerId) return new Permissions(Permissions.ALL).freeze();
339
+ return new Permissions(this.roles.cache.map(role => role.permissions)).freeze();
340
+ }
341
+
342
+ /**
343
+ * Whether the client user is above this user in the hierarchy, according to role position and guild ownership.
344
+ * This is a prerequisite for many moderative actions.
345
+ * @type {boolean}
346
+ * @readonly
347
+ */
348
+ get manageable() {
349
+ if (this.user.id === this.guild.ownerId) return false;
350
+ if (this.user.id === this.client.user.id) return false;
351
+ if (this.client.user.id === this.guild.ownerId) return true;
352
+ if (!this.guild.members.me) throw new Error('GUILD_UNCACHED_ME');
353
+ return this.guild.members.me.roles.highest.comparePositionTo(this.roles.highest) > 0;
354
+ }
355
+
356
+ /**
357
+ * Whether this member is kickable by the client user
358
+ * @type {boolean}
359
+ * @readonly
360
+ */
361
+ get kickable() {
362
+ return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.KICK_MEMBERS);
363
+ }
364
+
365
+ /**
366
+ * Whether this member is bannable by the client user
367
+ * @type {boolean}
368
+ * @readonly
369
+ */
370
+ get bannable() {
371
+ return this.manageable && this.guild.members.me.permissions.has(Permissions.FLAGS.BAN_MEMBERS);
372
+ }
373
+
374
+ /**
375
+ * Whether this member is moderatable by the client user
376
+ * @type {boolean}
377
+ * @readonly
378
+ */
379
+ get moderatable() {
380
+ return (
381
+ !this.permissions.has(Permissions.FLAGS.ADMINISTRATOR) &&
382
+ this.manageable &&
383
+ (this.guild.members.me?.permissions.has(Permissions.FLAGS.MODERATE_MEMBERS) ?? false)
384
+ );
385
+ }
386
+
387
+ /**
388
+ * Whether this member is currently timed out
389
+ * @returns {boolean}
390
+ */
391
+ isCommunicationDisabled() {
392
+ return this.communicationDisabledUntilTimestamp > Date.now();
393
+ }
394
+
395
+ /**
396
+ * Returns `channel.permissionsFor(guildMember)`. Returns permissions for a member in a guild channel,
397
+ * taking into account roles and permission overwrites.
398
+ * @param {GuildChannelResolvable} channel The guild channel to use as context
399
+ * @returns {Readonly<Permissions>}
400
+ */
401
+ permissionsIn(channel) {
402
+ channel = this.guild.channels.resolve(channel);
403
+ if (!channel) throw new Error('GUILD_CHANNEL_RESOLVE');
404
+ return channel.permissionsFor(this);
405
+ }
406
+
407
+ /**
408
+ * Edits this member.
409
+ * @param {GuildMemberEditData} data The data to edit the member with
410
+ * @param {string} [reason] Reason for editing this user
411
+ * @returns {Promise<GuildMember>}
412
+ */
413
+ edit(data, reason) {
414
+ return this.guild.members.edit(this, data, reason);
415
+ }
416
+
417
+ /**
418
+ * Sets the nickname for this member.
419
+ * @param {?string} nick The nickname for the guild member, or `null` if you want to reset their nickname
420
+ * @param {string} [reason] Reason for setting the nickname
421
+ * @returns {Promise<GuildMember>}
422
+ * @example
423
+ * // Set a nickname for a guild member
424
+ * guildMember.setNickname('cool nickname', 'Needed a new nickname')
425
+ * .then(member => console.log(`Set nickname of ${member.user.username}`))
426
+ * .catch(console.error);
427
+ * @example
428
+ * // Remove a nickname for a guild member
429
+ * guildMember.setNickname(null, 'No nicknames allowed!')
430
+ * .then(member => console.log(`Removed nickname for ${member.user.username}`))
431
+ * .catch(console.error);
432
+ */
433
+ setNickname(nick, reason) {
434
+ return this.edit({ nick }, reason);
435
+ }
436
+
437
+ /**
438
+ * Sets the flags for this member.
439
+ * @param {GuildMemberFlagsResolvable} flags The flags to set
440
+ * @param {string} [reason] Reason for setting the flags
441
+ * @returns {Promise<GuildMember>}
442
+ */
443
+ setFlags(flags, reason) {
444
+ return this.edit({ flags, reason });
445
+ }
446
+
447
+ /**
448
+ * Creates a DM channel between the client and this member.
449
+ * @param {boolean} [force=false] Whether to skip the cache check and request the API
450
+ * @returns {Promise<DMChannel>}
451
+ */
452
+ createDM(force = false) {
453
+ return this.user.createDM(force);
454
+ }
455
+
456
+ /**
457
+ * Deletes any DMs with this member.
458
+ * @returns {Promise<DMChannel>}
459
+ */
460
+ deleteDM() {
461
+ return this.user.deleteDM();
462
+ }
463
+
464
+ /**
465
+ * Kicks this member from the guild.
466
+ * @param {string} [reason] Reason for kicking user
467
+ * @returns {Promise<GuildMember>}
468
+ */
469
+ kick(reason) {
470
+ return this.guild.members.kick(this, reason);
471
+ }
472
+
473
+ /**
474
+ * Bans this guild member.
475
+ * @param {BanOptions} [options] Options for the ban
476
+ * @returns {Promise<GuildMember>}
477
+ * @example
478
+ * // Ban a guild member, deleting a week's worth of messages
479
+ * guildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })
480
+ * .then(console.log)
481
+ * .catch(console.error);
482
+ */
483
+ ban(options) {
484
+ return this.guild.bans.create(this, options);
485
+ }
486
+
487
+ /**
488
+ * Times this guild member out.
489
+ * @param {DateResolvable|null} communicationDisabledUntil The date or timestamp
490
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
491
+ * @param {string} [reason] The reason for this timeout.
492
+ * @returns {Promise<GuildMember>}
493
+ * @example
494
+ * // Time a guild member out for 5 minutes
495
+ * guildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')
496
+ * .then(console.log)
497
+ * .catch(console.error);
498
+ * @example
499
+ * // Remove the timeout of a guild member
500
+ * guildMember.disableCommunicationUntil(null)
501
+ * .then(member => console.log(`Removed timeout for ${member.displayName}`))
502
+ * .catch(console.error);
503
+ */
504
+ disableCommunicationUntil(communicationDisabledUntil, reason) {
505
+ return this.edit({ communicationDisabledUntil }, reason);
506
+ }
507
+
508
+ /**
509
+ * Times this guild member out.
510
+ * @param {number|null} timeout The time in milliseconds
511
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
512
+ * @param {string} [reason] The reason for this timeout.
513
+ * @returns {Promise<GuildMember>}
514
+ * @example
515
+ * // Time a guild member out for 5 minutes
516
+ * guildMember.timeout(5 * 60 * 1000, 'They deserved it')
517
+ * .then(console.log)
518
+ * .catch(console.error);
519
+ */
520
+ timeout(timeout, reason) {
521
+ return this.disableCommunicationUntil(timeout && Date.now() + timeout, reason);
522
+ }
523
+
524
+ /**
525
+ * Fetches this GuildMember.
526
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
527
+ * @returns {Promise<GuildMember>}
528
+ */
529
+ fetch(force = true) {
530
+ return this.guild.members.fetch({ user: this.id, cache: true, force });
531
+ }
532
+
533
+ /**
534
+ * Whether this guild member equals another guild member. It compares all properties, so for most
535
+ * comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
536
+ * and is often what most users need.
537
+ * @param {GuildMember} member The member to compare with
538
+ * @returns {boolean}
539
+ */
540
+ equals(member) {
541
+ return (
542
+ member instanceof this.constructor &&
543
+ this.id === member.id &&
544
+ this.partial === member.partial &&
545
+ this.guild.id === member.guild.id &&
546
+ this.joinedTimestamp === member.joinedTimestamp &&
547
+ this.nickname === member.nickname &&
548
+ this.avatar === member.avatar &&
549
+ this.banner === member.banner &&
550
+ this.pending === member.pending &&
551
+ this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
552
+ this.flags.equals(member.flags) &&
553
+ (this._roles === member._roles ||
554
+ (this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i]))) &&
555
+ this.avatarDecorationData?.asset === member.avatarDecorationData?.asset &&
556
+ this.avatarDecorationData?.skuId === member.avatarDecorationData?.skuId
557
+ );
558
+ }
559
+
560
+ /**
561
+ * When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
562
+ * @returns {string}
563
+ * @example
564
+ * // Logs: Hello from <@123456789012345678>!
565
+ * console.log(`Hello from ${member}!`);
566
+ */
567
+ toString() {
568
+ return `<@${this.nickname ? '!' : ''}${this.user.id}>`;
569
+ }
570
+
571
+ toJSON() {
572
+ const json = super.toJSON({
573
+ guild: 'guildId',
574
+ user: 'userId',
575
+ displayName: true,
576
+ roles: true,
577
+ });
578
+ json.avatarURL = this.avatarURL();
579
+ json.bannerURL = this.bannerURL();
580
+ json.displayAvatarURL = this.displayAvatarURL();
581
+ json.displayBannerURL = this.displayBannerURL();
582
+ json.avatarDecorationURL = this.avatarDecorationURL();
583
+ return json;
584
+ }
585
+
586
+ /**
587
+ * Sets the guild avatar of the logged in client.
588
+ * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
589
+ * @returns {Promise<GuildMember>}
590
+ */
591
+ setAvatar(avatar) {
592
+ return this.edit({ avatar });
593
+ }
594
+
595
+ /**
596
+ * Sets the guild banner of the logged in client.
597
+ * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
598
+ * @returns {Promise<GuildMember>}
599
+ */
600
+ setBanner(banner) {
601
+ return this.edit({ banner });
602
+ }
603
+
604
+ /**
605
+ * Set Guild About me
606
+ * @param {string | null} bio Bio to set
607
+ * @returns {Promise<GuildMember>}
608
+ */
609
+ setAboutMe(bio = null) {
610
+ return this.edit({ bio });
611
+ }
612
+ }
613
+
614
+ /**
615
+ * Sends a message to this user.
616
+ * @method send
617
+ * @memberof GuildMember
618
+ * @instance
619
+ * @param {string|MessagePayload|MessageOptions} options The options to provide
620
+ * @returns {Promise<Message>}
621
+ * @example
622
+ * // Send a direct message
623
+ * guildMember.send('Hello!')
624
+ * .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))
625
+ * .catch(console.error);
626
+ */
627
+
628
+ TextBasedChannel.applyToClass(GuildMember);
629
+
630
+ exports.GuildMember = GuildMember;
631
+ exports.deletedGuildMembers = deletedGuildMembers;
632
+
633
+ /**
634
+ * @external APIGuildMember
635
+ * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object}
636
+ */