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,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
+ */