discord.js-selfbots-v13 0.0.1-security → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of discord.js-selfbots-v13 might be problematic. Click here for more details.

Files changed (343) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +127 -5
  3. package/package.json +101 -6
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +87 -0
  6. package/src/client/Client.js +1154 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +115 -0
  9. package/src/client/actions/ActionsManager.js +72 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +34 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -0
  44. package/src/client/actions/InteractionCreate.js +115 -0
  45. package/src/client/actions/InviteCreate.js +28 -0
  46. package/src/client/actions/InviteDelete.js +30 -0
  47. package/src/client/actions/MessageCreate.js +50 -0
  48. package/src/client/actions/MessageDelete.js +32 -0
  49. package/src/client/actions/MessageDeleteBulk.js +46 -0
  50. package/src/client/actions/MessageReactionAdd.js +56 -0
  51. package/src/client/actions/MessageReactionRemove.js +45 -0
  52. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  53. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  54. package/src/client/actions/MessageUpdate.js +26 -0
  55. package/src/client/actions/PresenceUpdate.js +45 -0
  56. package/src/client/actions/StageInstanceCreate.js +28 -0
  57. package/src/client/actions/StageInstanceDelete.js +33 -0
  58. package/src/client/actions/StageInstanceUpdate.js +30 -0
  59. package/src/client/actions/ThreadCreate.js +24 -0
  60. package/src/client/actions/ThreadDelete.js +32 -0
  61. package/src/client/actions/ThreadListSync.js +59 -0
  62. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  63. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  64. package/src/client/actions/TypingStart.js +29 -0
  65. package/src/client/actions/UserUpdate.js +35 -0
  66. package/src/client/actions/VoiceStateUpdate.js +57 -0
  67. package/src/client/actions/WebhooksUpdate.js +20 -0
  68. package/src/client/voice/ClientVoiceManager.js +51 -0
  69. package/src/client/websocket/WebSocketManager.js +412 -0
  70. package/src/client/websocket/WebSocketShard.js +908 -0
  71. package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
  72. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  73. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  74. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  76. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  77. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  78. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  79. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  80. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  81. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  82. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  83. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  84. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  85. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  86. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
  87. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  88. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  89. package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
  90. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
  94. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  98. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  99. package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
  100. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  101. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  102. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  103. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  104. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  105. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  106. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  107. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  108. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  109. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  110. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
  113. package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
  114. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
  115. package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
  116. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  117. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  118. package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
  119. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  120. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  121. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  122. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  123. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  124. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  125. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  126. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  127. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/READY.js +172 -0
  129. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
  130. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
  131. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
  132. package/src/client/websocket/handlers/RESUMED.js +14 -0
  133. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  134. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  135. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  136. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  137. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  138. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  139. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  140. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  141. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  142. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  143. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
  144. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
  146. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  147. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  148. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  149. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  150. package/src/client/websocket/handlers/index.js +86 -0
  151. package/src/errors/DJSError.js +61 -0
  152. package/src/errors/Messages.js +227 -0
  153. package/src/errors/index.js +4 -0
  154. package/src/index.js +190 -0
  155. package/src/main.js +1 -0
  156. package/src/managers/ApplicationCommandManager.js +267 -0
  157. package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
  158. package/src/managers/AutoModerationRuleManager.js +296 -0
  159. package/src/managers/BaseGuildEmojiManager.js +80 -0
  160. package/src/managers/BaseManager.js +19 -0
  161. package/src/managers/BillingManager.js +66 -0
  162. package/src/managers/CachedManager.js +71 -0
  163. package/src/managers/ChannelManager.js +139 -0
  164. package/src/managers/ClientUserSettingManager.js +490 -0
  165. package/src/managers/DataManager.js +61 -0
  166. package/src/managers/DeveloperPortalManager.js +104 -0
  167. package/src/managers/GuildApplicationCommandManager.js +28 -0
  168. package/src/managers/GuildBanManager.js +204 -0
  169. package/src/managers/GuildChannelManager.js +502 -0
  170. package/src/managers/GuildEmojiManager.js +171 -0
  171. package/src/managers/GuildEmojiRoleManager.js +118 -0
  172. package/src/managers/GuildFolderManager.js +24 -0
  173. package/src/managers/GuildForumThreadManager.js +114 -0
  174. package/src/managers/GuildInviteManager.js +213 -0
  175. package/src/managers/GuildManager.js +304 -0
  176. package/src/managers/GuildMemberManager.js +724 -0
  177. package/src/managers/GuildMemberRoleManager.js +191 -0
  178. package/src/managers/GuildScheduledEventManager.js +296 -0
  179. package/src/managers/GuildSettingManager.js +148 -0
  180. package/src/managers/GuildStickerManager.js +179 -0
  181. package/src/managers/GuildTextThreadManager.js +98 -0
  182. package/src/managers/InteractionManager.js +39 -0
  183. package/src/managers/MessageManager.js +393 -0
  184. package/src/managers/PermissionOverwriteManager.js +166 -0
  185. package/src/managers/PresenceManager.js +58 -0
  186. package/src/managers/ReactionManager.js +67 -0
  187. package/src/managers/ReactionUserManager.js +71 -0
  188. package/src/managers/RelationshipManager.js +258 -0
  189. package/src/managers/RoleManager.js +352 -0
  190. package/src/managers/SessionManager.js +57 -0
  191. package/src/managers/StageInstanceManager.js +162 -0
  192. package/src/managers/ThreadManager.js +207 -0
  193. package/src/managers/ThreadMemberManager.js +186 -0
  194. package/src/managers/UserManager.js +150 -0
  195. package/src/managers/VoiceStateManager.js +37 -0
  196. package/src/rest/APIRequest.js +136 -0
  197. package/src/rest/APIRouter.js +53 -0
  198. package/src/rest/CaptchaSolver.js +78 -0
  199. package/src/rest/DiscordAPIError.js +103 -0
  200. package/src/rest/HTTPError.js +62 -0
  201. package/src/rest/RESTManager.js +81 -0
  202. package/src/rest/RateLimitError.js +55 -0
  203. package/src/rest/RequestHandler.js +446 -0
  204. package/src/sharding/Shard.js +443 -0
  205. package/src/sharding/ShardClientUtil.js +275 -0
  206. package/src/sharding/ShardingManager.js +318 -0
  207. package/src/structures/AnonymousGuild.js +98 -0
  208. package/src/structures/ApplicationCommand.js +1028 -0
  209. package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
  210. package/src/structures/AutoModerationActionExecution.js +89 -0
  211. package/src/structures/AutoModerationRule.js +294 -0
  212. package/src/structures/AutocompleteInteraction.js +106 -0
  213. package/src/structures/Base.js +43 -0
  214. package/src/structures/BaseCommandInteraction.js +211 -0
  215. package/src/structures/BaseGuild.js +116 -0
  216. package/src/structures/BaseGuildEmoji.js +56 -0
  217. package/src/structures/BaseGuildTextChannel.js +193 -0
  218. package/src/structures/BaseGuildVoiceChannel.js +243 -0
  219. package/src/structures/BaseMessageComponent.js +114 -0
  220. package/src/structures/ButtonInteraction.js +11 -0
  221. package/src/structures/Call.js +58 -0
  222. package/src/structures/CategoryChannel.js +83 -0
  223. package/src/structures/Channel.js +271 -0
  224. package/src/structures/ClientApplication.js +204 -0
  225. package/src/structures/ClientPresence.js +84 -0
  226. package/src/structures/ClientUser.js +624 -0
  227. package/src/structures/CommandInteraction.js +41 -0
  228. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  229. package/src/structures/ContextMenuInteraction.js +65 -0
  230. package/src/structures/DMChannel.js +280 -0
  231. package/src/structures/DeveloperPortalApplication.js +520 -0
  232. package/src/structures/DirectoryChannel.js +20 -0
  233. package/src/structures/Emoji.js +148 -0
  234. package/src/structures/ForumChannel.js +271 -0
  235. package/src/structures/Guild.js +1744 -0
  236. package/src/structures/GuildAuditLogs.js +734 -0
  237. package/src/structures/GuildBan.js +59 -0
  238. package/src/structures/GuildBoost.js +108 -0
  239. package/src/structures/GuildChannel.js +454 -0
  240. package/src/structures/GuildEmoji.js +161 -0
  241. package/src/structures/GuildFolder.js +75 -0
  242. package/src/structures/GuildMember.js +686 -0
  243. package/src/structures/GuildPreview.js +191 -0
  244. package/src/structures/GuildPreviewEmoji.js +27 -0
  245. package/src/structures/GuildScheduledEvent.js +441 -0
  246. package/src/structures/GuildTemplate.js +236 -0
  247. package/src/structures/Integration.js +188 -0
  248. package/src/structures/IntegrationApplication.js +96 -0
  249. package/src/structures/Interaction.js +351 -0
  250. package/src/structures/InteractionCollector.js +248 -0
  251. package/src/structures/InteractionResponse.js +114 -0
  252. package/src/structures/InteractionWebhook.js +43 -0
  253. package/src/structures/Invite.js +375 -0
  254. package/src/structures/InviteGuild.js +23 -0
  255. package/src/structures/InviteStageInstance.js +86 -0
  256. package/src/structures/Message.js +1188 -0
  257. package/src/structures/MessageActionRow.js +103 -0
  258. package/src/structures/MessageAttachment.js +193 -0
  259. package/src/structures/MessageButton.js +231 -0
  260. package/src/structures/MessageCollector.js +146 -0
  261. package/src/structures/MessageComponentInteraction.js +120 -0
  262. package/src/structures/MessageContextMenuInteraction.js +20 -0
  263. package/src/structures/MessageEmbed.js +586 -0
  264. package/src/structures/MessageMentions.js +272 -0
  265. package/src/structures/MessagePayload.js +358 -0
  266. package/src/structures/MessageReaction.js +171 -0
  267. package/src/structures/MessageSelectMenu.js +391 -0
  268. package/src/structures/Modal.js +279 -0
  269. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  270. package/src/structures/ModalSubmitInteraction.js +119 -0
  271. package/src/structures/NewsChannel.js +32 -0
  272. package/src/structures/OAuth2Guild.js +28 -0
  273. package/src/structures/PartialGroupDMChannel.js +430 -0
  274. package/src/structures/PermissionOverwrites.js +196 -0
  275. package/src/structures/Presence.js +441 -0
  276. package/src/structures/ReactionCollector.js +229 -0
  277. package/src/structures/ReactionEmoji.js +31 -0
  278. package/src/structures/RichPresence.js +722 -0
  279. package/src/structures/Role.js +515 -0
  280. package/src/structures/SelectMenuInteraction.js +170 -0
  281. package/src/structures/Session.js +81 -0
  282. package/src/structures/StageChannel.js +104 -0
  283. package/src/structures/StageInstance.js +208 -0
  284. package/src/structures/Sticker.js +310 -0
  285. package/src/structures/StickerPack.js +95 -0
  286. package/src/structures/StoreChannel.js +56 -0
  287. package/src/structures/Team.js +167 -0
  288. package/src/structures/TeamMember.js +71 -0
  289. package/src/structures/TextChannel.js +33 -0
  290. package/src/structures/TextInputComponent.js +201 -0
  291. package/src/structures/ThreadChannel.js +626 -0
  292. package/src/structures/ThreadMember.js +105 -0
  293. package/src/structures/Typing.js +74 -0
  294. package/src/structures/User.js +697 -0
  295. package/src/structures/UserContextMenuInteraction.js +29 -0
  296. package/src/structures/VoiceChannel.js +110 -0
  297. package/src/structures/VoiceRegion.js +53 -0
  298. package/src/structures/VoiceState.js +306 -0
  299. package/src/structures/WebEmbed.js +401 -0
  300. package/src/structures/Webhook.js +461 -0
  301. package/src/structures/WelcomeChannel.js +60 -0
  302. package/src/structures/WelcomeScreen.js +48 -0
  303. package/src/structures/Widget.js +87 -0
  304. package/src/structures/WidgetMember.js +99 -0
  305. package/src/structures/interfaces/Application.js +190 -0
  306. package/src/structures/interfaces/Collector.js +300 -0
  307. package/src/structures/interfaces/InteractionResponses.js +313 -0
  308. package/src/structures/interfaces/TextBasedChannel.js +566 -0
  309. package/src/util/ActivityFlags.js +44 -0
  310. package/src/util/ApplicationFlags.js +74 -0
  311. package/src/util/BitField.js +170 -0
  312. package/src/util/ChannelFlags.js +45 -0
  313. package/src/util/Constants.js +1917 -0
  314. package/src/util/DataResolver.js +145 -0
  315. package/src/util/Formatters.js +214 -0
  316. package/src/util/GuildMemberFlags.js +43 -0
  317. package/src/util/Intents.js +74 -0
  318. package/src/util/LimitedCollection.js +131 -0
  319. package/src/util/MessageFlags.js +54 -0
  320. package/src/util/Options.js +360 -0
  321. package/src/util/Permissions.js +187 -0
  322. package/src/util/PremiumUsageFlags.js +31 -0
  323. package/src/util/PurchasedFlags.js +31 -0
  324. package/src/util/RemoteAuth.js +522 -0
  325. package/src/util/SnowflakeUtil.js +92 -0
  326. package/src/util/Sweepers.js +466 -0
  327. package/src/util/SystemChannelFlags.js +55 -0
  328. package/src/util/ThreadMemberFlags.js +30 -0
  329. package/src/util/UserFlags.js +104 -0
  330. package/src/util/Util.js +741 -0
  331. package/src/util/Voice.js +1456 -0
  332. package/src/util/arRPC/index.js +229 -0
  333. package/src/util/arRPC/process/detectable.json +1 -0
  334. package/src/util/arRPC/process/index.js +102 -0
  335. package/src/util/arRPC/process/native/index.js +5 -0
  336. package/src/util/arRPC/process/native/linux.js +37 -0
  337. package/src/util/arRPC/process/native/win32.js +25 -0
  338. package/src/util/arRPC/transports/ipc.js +281 -0
  339. package/src/util/arRPC/transports/websocket.js +128 -0
  340. package/typings/enums.d.ts +346 -0
  341. package/typings/index.d.ts +7725 -0
  342. package/typings/index.test-d.ts +0 -0
  343. package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,686 @@
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
+ const Util = require('../util/Util');
12
+
13
+ /**
14
+ * @type {WeakSet<GuildMember>}
15
+ * @private
16
+ * @internal
17
+ */
18
+ const deletedGuildMembers = new WeakSet();
19
+ let deprecationEmittedForDeleted = false;
20
+
21
+ /**
22
+ * Represents a member of a guild on Discord.
23
+ * @implements {TextBasedChannel}
24
+ * @extends {Base}
25
+ */
26
+ class GuildMember extends Base {
27
+ constructor(client, data, guild) {
28
+ super(client);
29
+
30
+ /**
31
+ * The guild that this member is part of
32
+ * @type {Guild}
33
+ */
34
+ this.guild = guild;
35
+
36
+ /**
37
+ * The timestamp the member joined the guild at
38
+ * @type {?number}
39
+ */
40
+ this.joinedTimestamp = null;
41
+
42
+ /**
43
+ * The last timestamp this member started boosting the guild
44
+ * @type {?number}
45
+ */
46
+ this.premiumSinceTimestamp = null;
47
+
48
+ /**
49
+ * The nickname of this member, if they have one
50
+ * @type {?string}
51
+ */
52
+ this.nickname = null;
53
+
54
+ /**
55
+ * Whether this member has yet to pass the guild's membership gate
56
+ * @type {boolean}
57
+ */
58
+ this.pending = false;
59
+
60
+ /**
61
+ * The timestamp this member's timeout will be removed
62
+ * @type {?number}
63
+ */
64
+ this.communicationDisabledUntilTimestamp = null;
65
+
66
+ /**
67
+ * The role ids of the member
68
+ * @type {Snowflake[]}
69
+ * @private
70
+ */
71
+ this._roles = [];
72
+ if (data) this._patch(data);
73
+ }
74
+
75
+ _patch(data) {
76
+ if ('user' in data) {
77
+ /**
78
+ * The user that this guild member instance represents
79
+ * @type {?User}
80
+ */
81
+ this.user = this.client.users._add(data.user, true);
82
+ }
83
+
84
+ if ('nick' in data) this.nickname = data.nick;
85
+ if ('avatar' in data) {
86
+ /**
87
+ * The guild member's avatar hash
88
+ * @type {?string}
89
+ */
90
+ this.avatar = data.avatar;
91
+ } else if (typeof this.avatar !== 'string') {
92
+ this.avatar = null;
93
+ }
94
+ if ('joined_at' in data) this.joinedTimestamp = new Date(data.joined_at).getTime();
95
+ if ('premium_since' in data) {
96
+ this.premiumSinceTimestamp = data.premium_since ? new Date(data.premium_since).getTime() : null;
97
+ }
98
+ if ('roles' in data) this._roles = data.roles;
99
+ this.pending = data.pending ?? false;
100
+
101
+ if ('communication_disabled_until' in data) {
102
+ this.communicationDisabledUntilTimestamp =
103
+ data.communication_disabled_until && Date.parse(data.communication_disabled_until);
104
+ }
105
+
106
+ if ('flags' in data) {
107
+ /**
108
+ * The flags of this member
109
+ * @type {Readonly<GuildMemberFlags>}
110
+ */
111
+ this.flags = new GuildMemberFlags(data.flags).freeze();
112
+ } else {
113
+ this.flags ??= new GuildMemberFlags().freeze();
114
+ }
115
+ }
116
+
117
+ _ProfilePatch(data) {
118
+ if ('accent_color' in data) {
119
+ /**
120
+ * The member's accent color
121
+ * <info>The user must be force fetched for this property to be present or be updated</info>
122
+ * @type {?number}
123
+ */
124
+ this.accentColor = data.accent_color;
125
+ }
126
+ if ('banner' in data) {
127
+ /**
128
+ * The member's banner hash
129
+ * <info>The user must be force fetched for this property to be present or be updated</info>
130
+ * @type {?string}
131
+ */
132
+ this.banner = data.banner;
133
+ }
134
+ if ('bio' in data) {
135
+ /**
136
+ * The member's biography (About me)
137
+ * <info>The user must be force fetched for this property to be present or be updated</info>
138
+ * @type {?string}
139
+ */
140
+ this.bio = data.bio;
141
+ }
142
+ if ('theme_colors' in data) {
143
+ /**
144
+ * The member's theme colors (Profile theme) [Primary, Accent]
145
+ * <info>The user must be force fetched for this property to be present or be updated</info>
146
+ * @type {?Array<number>}
147
+ */
148
+ this.themeColors = data.theme_colors;
149
+ }
150
+ }
151
+
152
+ /**
153
+ * The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]
154
+ * <info>The user must be force fetched for this property to be present or be updated</info>
155
+ * @type {?Array<string>}
156
+ * @readonly
157
+ */
158
+ get hexThemeColor() {
159
+ return this.themeColors?.map(c => `#${c.toString(16).padStart(6, '0')}`) || null;
160
+ }
161
+
162
+ _clone() {
163
+ const clone = super._clone();
164
+ clone._roles = this._roles.slice();
165
+ return clone;
166
+ }
167
+
168
+ /**
169
+ * Whether or not the structure has been deleted
170
+ * @type {boolean}
171
+ * @deprecated This will be removed in the next major version, see https://github.com/discordjs/discord.js/issues/7091
172
+ */
173
+ get deleted() {
174
+ if (!deprecationEmittedForDeleted) {
175
+ deprecationEmittedForDeleted = true;
176
+ process.emitWarning(
177
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
178
+ 'DeprecationWarning',
179
+ );
180
+ }
181
+
182
+ return deletedGuildMembers.has(this);
183
+ }
184
+
185
+ set deleted(value) {
186
+ if (!deprecationEmittedForDeleted) {
187
+ deprecationEmittedForDeleted = true;
188
+ process.emitWarning(
189
+ 'GuildMember#deleted is deprecated, see https://github.com/discordjs/discord.js/issues/7091.',
190
+ 'DeprecationWarning',
191
+ );
192
+ }
193
+
194
+ if (value) deletedGuildMembers.add(this);
195
+ else deletedGuildMembers.delete(this);
196
+ }
197
+
198
+ /**
199
+ * Whether this GuildMember is a partial
200
+ * @type {boolean}
201
+ * @readonly
202
+ */
203
+ get partial() {
204
+ return this.joinedTimestamp === null;
205
+ }
206
+
207
+ /**
208
+ * A manager for the roles belonging to this member
209
+ * @type {GuildMemberRoleManager}
210
+ * @readonly
211
+ */
212
+ get roles() {
213
+ return new GuildMemberRoleManager(this);
214
+ }
215
+
216
+ /**
217
+ * The voice state of this member
218
+ * @type {VoiceState}
219
+ * @readonly
220
+ */
221
+ get voice() {
222
+ return this.guild.voiceStates.cache.get(this.id) ?? new VoiceState(this.guild, { user_id: this.id });
223
+ }
224
+
225
+ /**
226
+ * A link to the member's guild avatar.
227
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
228
+ * @returns {?string}
229
+ */
230
+ avatarURL({ format, size, dynamic } = {}) {
231
+ if (!this.avatar) return null;
232
+ return this.client.rest.cdn.GuildMemberAvatar(this.guild.id, this.id, this.avatar, format, size, dynamic);
233
+ }
234
+
235
+ /**
236
+ * A link to the user's banner.
237
+ * <info>This method will throw an error if called before the user is force fetched Profile.
238
+ * See {@link GuildMember#banner} for more info</info>
239
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
240
+ * @returns {?string}
241
+ */
242
+ bannerURL({ format, size, dynamic } = {}) {
243
+ if (typeof this.banner === 'undefined') {
244
+ throw new Error('USER_BANNER_NOT_FETCHED');
245
+ }
246
+ if (!this.banner) return null;
247
+ return this.client.rest.cdn.GuildMemberBanner(this.guild.id, this.id, this.banner, format, size, dynamic);
248
+ }
249
+
250
+ /**
251
+ * A link to the member's guild avatar if they have one.
252
+ * Otherwise, a link to their {@link User#displayAvatarURL} will be returned.
253
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
254
+ * @returns {string}
255
+ */
256
+ displayAvatarURL(options) {
257
+ return this.avatarURL(options) ?? this.user.displayAvatarURL(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.resolve(this.id);
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?.color ?? 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 username if they don't have one
325
+ * @type {?string}
326
+ * @readonly
327
+ */
328
+ get displayName() {
329
+ return this.nickname ?? this.user.username;
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.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
+ * Sets the guild avatar of the logged in client.
449
+ * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
450
+ * @returns {Promise<GuildMember>}
451
+ */
452
+ setAvatar(avatar) {
453
+ if (this.user.id !== this.client.user.id) {
454
+ throw new Error('ONLY_ME');
455
+ }
456
+ if (this.client.user.nitroType !== 'NITRO_BOOST') {
457
+ throw new Error('NITRO_BOOST_REQUIRED', 'avatar');
458
+ }
459
+ return this.edit({ avatar });
460
+ }
461
+
462
+ /**
463
+ * Sets the guild banner of the logged in client.
464
+ * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
465
+ * @returns {Promise<GuildMember>}
466
+ */
467
+ setBanner(banner) {
468
+ if (this.user.id !== this.client.user.id) {
469
+ throw new Error('ONLY_ME');
470
+ }
471
+ if (this.client.user.nitroType !== 'NITRO_BOOST') {
472
+ throw new Error('NITRO_BOOST_REQUIRED', 'banner');
473
+ }
474
+ return this.edit({ banner });
475
+ }
476
+
477
+ /**
478
+ * Set Guild About me
479
+ * @param {string | null} bio Bio to set
480
+ * @returns {Promise<GuildMember>}
481
+ */
482
+ setAboutMe(bio = null) {
483
+ if (this.user.id !== this.client.user.id) {
484
+ throw new Error('ONLY_ME');
485
+ }
486
+ if (this.client.user.nitroType !== 'NITRO_BOOST') {
487
+ throw new Error('NITRO_BOOST_REQUIRED', 'bio');
488
+ }
489
+ return this.edit({ bio });
490
+ }
491
+
492
+ /**
493
+ * Change Theme color
494
+ * @param {ColorResolvable} primary The primary color of the user's profile
495
+ * @param {ColorResolvable} accent The accent color of the user's profile
496
+ * @returns {Promise<GuildMember>}
497
+ */
498
+ async setThemeColors(primary, accent) {
499
+ if (this.user.id !== this.client.user.id) {
500
+ throw new Error('ONLY_ME');
501
+ }
502
+ if (!primary || !accent) throw new Error('PRIMARY_COLOR or ACCENT_COLOR are required.');
503
+ // Check nitro
504
+ if (this.nitroType !== 'NITRO_BOOST') {
505
+ throw new Error('NITRO_BOOST_REQUIRED', 'themeColors');
506
+ }
507
+ primary = Util.resolveColor(primary) || this.themeColors ? this.themeColors[0] : 0;
508
+ accent = Util.resolveColor(accent) || this.themeColors ? this.themeColors[1] : 0;
509
+ const data_ = await this.client.api.guilds[this.guild.id].profile['@me'].patch({
510
+ data: {
511
+ theme_colors: [primary, accent],
512
+ },
513
+ });
514
+ this._ProfilePatch({
515
+ guild_member_profile: data_,
516
+ });
517
+ return this;
518
+ }
519
+
520
+ /**
521
+ * Creates a DM channel between the client and this member.
522
+ * @param {boolean} [force=false] Whether to skip the cache check and request the API
523
+ * @returns {Promise<DMChannel>}
524
+ */
525
+ createDM(force = false) {
526
+ return this.user.createDM(force);
527
+ }
528
+
529
+ /**
530
+ * Deletes any DMs with this member.
531
+ * @returns {Promise<DMChannel>}
532
+ */
533
+ deleteDM() {
534
+ return this.user.deleteDM();
535
+ }
536
+
537
+ /**
538
+ * Kicks this member from the guild.
539
+ * @param {string} [reason] Reason for kicking user
540
+ * @returns {Promise<GuildMember>}
541
+ */
542
+ kick(reason) {
543
+ return this.guild.members.kick(this, reason);
544
+ }
545
+
546
+ /**
547
+ * Bans this guild member.
548
+ * @param {BanOptions} [options] Options for the ban
549
+ * @returns {Promise<GuildMember>}
550
+ * @example
551
+ * // Ban a guild member, deleting a week's worth of messages
552
+ * guildMember.ban({ deleteMessageSeconds: 60 * 60 * 24 * 7, reason: 'They deserved it' })
553
+ * .then(console.log)
554
+ * .catch(console.error);
555
+ */
556
+ ban(options) {
557
+ return this.guild.bans.create(this, options);
558
+ }
559
+
560
+ /**
561
+ * Times this guild member out.
562
+ * @param {DateResolvable|null} communicationDisabledUntil The date or timestamp
563
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
564
+ * @param {string} [reason] The reason for this timeout.
565
+ * @returns {Promise<GuildMember>}
566
+ * @example
567
+ * // Time a guild member out for 5 minutes
568
+ * guildMember.disableCommunicationUntil(Date.now() + (5 * 60 * 1000), 'They deserved it')
569
+ * .then(console.log)
570
+ * .catch(console.error);
571
+ * @example
572
+ * // Remove the timeout of a guild member
573
+ * guildMember.disableCommunicationUntil(null)
574
+ * .then(member => console.log(`Removed timeout for ${member.displayName}`))
575
+ * .catch(console.error);
576
+ */
577
+ disableCommunicationUntil(communicationDisabledUntil, reason) {
578
+ return this.edit({ communicationDisabledUntil }, reason);
579
+ }
580
+
581
+ /**
582
+ * Times this guild member out.
583
+ * @param {number|null} timeout The time in milliseconds
584
+ * for the member's communication to be disabled until. Provide `null` to remove the timeout.
585
+ * @param {string} [reason] The reason for this timeout.
586
+ * @returns {Promise<GuildMember>}
587
+ * @example
588
+ * // Time a guild member out for 5 minutes
589
+ * guildMember.timeout(5 * 60 * 1000, 'They deserved it')
590
+ * .then(console.log)
591
+ * .catch(console.error);
592
+ */
593
+ timeout(timeout, reason) {
594
+ return this.disableCommunicationUntil(timeout && Date.now() + timeout, reason);
595
+ }
596
+
597
+ /**
598
+ * Fetches this GuildMember.
599
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
600
+ * @returns {Promise<GuildMember>}
601
+ */
602
+ fetch(force = true) {
603
+ return this.guild.members.fetch({ user: this.id, cache: true, force });
604
+ }
605
+
606
+ /**
607
+ * Whether this guild member equals another guild member. It compares all properties, so for most
608
+ * comparison it is advisable to just compare `member.id === member2.id` as it is significantly faster
609
+ * and is often what most users need.
610
+ * @param {GuildMember} member The member to compare with
611
+ * @returns {boolean}
612
+ */
613
+ equals(member) {
614
+ return (
615
+ member instanceof this.constructor &&
616
+ this.id === member.id &&
617
+ this.partial === member.partial &&
618
+ this.guild.id === member.guild.id &&
619
+ this.joinedTimestamp === member.joinedTimestamp &&
620
+ this.nickname === member.nickname &&
621
+ this.avatar === member.avatar &&
622
+ this.accentColor === member.accentColor &&
623
+ this.bio === member.bio &&
624
+ this.pending === member.pending &&
625
+ this.communicationDisabledUntilTimestamp === member.communicationDisabledUntilTimestamp &&
626
+ this.flags.equals(member.flags) &&
627
+ (this._roles === member._roles ||
628
+ (this._roles.length === member._roles.length && this._roles.every((role, i) => role === member._roles[i])))
629
+ );
630
+ }
631
+
632
+ /**
633
+ * Get profile guildMember
634
+ * @returns {Promise<User>}
635
+ */
636
+ getProfile() {
637
+ return this.user.getProfile(this.guild.id);
638
+ }
639
+
640
+ /**
641
+ * When concatenated with a string, this automatically returns the user's mention instead of the GuildMember object.
642
+ * @returns {string}
643
+ * @example
644
+ * // Logs: Hello from <@123456789012345678>!
645
+ * console.log(`Hello from ${member}!`);
646
+ */
647
+ toString() {
648
+ return `<@${this.nickname ? '!' : ''}${this.user.id}>`;
649
+ }
650
+
651
+ toJSON() {
652
+ const json = super.toJSON({
653
+ guild: 'guildId',
654
+ user: 'userId',
655
+ displayName: true,
656
+ roles: true,
657
+ });
658
+ json.avatarURL = this.avatarURL();
659
+ json.displayAvatarURL = this.displayAvatarURL();
660
+ return json;
661
+ }
662
+ }
663
+
664
+ /**
665
+ * Sends a message to this user.
666
+ * @method send
667
+ * @memberof GuildMember
668
+ * @instance
669
+ * @param {string|MessagePayload|MessageOptions} options The options to provide
670
+ * @returns {Promise<Message>}
671
+ * @example
672
+ * // Send a direct message
673
+ * guildMember.send('Hello!')
674
+ * .then(message => console.log(`Sent message: ${message.content} to ${guildMember.displayName}`))
675
+ * .catch(console.error);
676
+ */
677
+
678
+ TextBasedChannel.applyToClass(GuildMember);
679
+
680
+ exports.GuildMember = GuildMember;
681
+ exports.deletedGuildMembers = deletedGuildMembers;
682
+
683
+ /**
684
+ * @external APIGuildMember
685
+ * @see {@link https://discord.com/developers/docs/resources/guild#guild-member-object}
686
+ */