discord-selfbot-v13.js 0.0.1-security → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (343) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +119 -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 +48 -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
+ */