discord.js-selfbot-dmallfriends-v13 0.0.1-security → 2.15.2

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-selfbot-dmallfriends-v13 might be problematic. Click here for more details.

Files changed (342) 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 +170 -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 +189 -0
  155. package/src/managers/ApplicationCommandManager.js +267 -0
  156. package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
  157. package/src/managers/AutoModerationRuleManager.js +296 -0
  158. package/src/managers/BaseGuildEmojiManager.js +80 -0
  159. package/src/managers/BaseManager.js +19 -0
  160. package/src/managers/BillingManager.js +66 -0
  161. package/src/managers/CachedManager.js +71 -0
  162. package/src/managers/ChannelManager.js +139 -0
  163. package/src/managers/ClientUserSettingManager.js +490 -0
  164. package/src/managers/DataManager.js +61 -0
  165. package/src/managers/DeveloperPortalManager.js +104 -0
  166. package/src/managers/GuildApplicationCommandManager.js +28 -0
  167. package/src/managers/GuildBanManager.js +204 -0
  168. package/src/managers/GuildChannelManager.js +502 -0
  169. package/src/managers/GuildEmojiManager.js +171 -0
  170. package/src/managers/GuildEmojiRoleManager.js +118 -0
  171. package/src/managers/GuildFolderManager.js +24 -0
  172. package/src/managers/GuildForumThreadManager.js +114 -0
  173. package/src/managers/GuildInviteManager.js +213 -0
  174. package/src/managers/GuildManager.js +304 -0
  175. package/src/managers/GuildMemberManager.js +724 -0
  176. package/src/managers/GuildMemberRoleManager.js +191 -0
  177. package/src/managers/GuildScheduledEventManager.js +296 -0
  178. package/src/managers/GuildSettingManager.js +148 -0
  179. package/src/managers/GuildStickerManager.js +179 -0
  180. package/src/managers/GuildTextThreadManager.js +98 -0
  181. package/src/managers/InteractionManager.js +39 -0
  182. package/src/managers/MessageManager.js +393 -0
  183. package/src/managers/PermissionOverwriteManager.js +166 -0
  184. package/src/managers/PresenceManager.js +58 -0
  185. package/src/managers/ReactionManager.js +67 -0
  186. package/src/managers/ReactionUserManager.js +71 -0
  187. package/src/managers/RelationshipManager.js +258 -0
  188. package/src/managers/RoleManager.js +352 -0
  189. package/src/managers/SessionManager.js +57 -0
  190. package/src/managers/StageInstanceManager.js +162 -0
  191. package/src/managers/ThreadManager.js +207 -0
  192. package/src/managers/ThreadMemberManager.js +186 -0
  193. package/src/managers/UserManager.js +150 -0
  194. package/src/managers/VoiceStateManager.js +37 -0
  195. package/src/rest/APIRequest.js +136 -0
  196. package/src/rest/APIRouter.js +53 -0
  197. package/src/rest/CaptchaSolver.js +78 -0
  198. package/src/rest/DiscordAPIError.js +103 -0
  199. package/src/rest/HTTPError.js +62 -0
  200. package/src/rest/RESTManager.js +81 -0
  201. package/src/rest/RateLimitError.js +55 -0
  202. package/src/rest/RequestHandler.js +446 -0
  203. package/src/sharding/Shard.js +443 -0
  204. package/src/sharding/ShardClientUtil.js +275 -0
  205. package/src/sharding/ShardingManager.js +318 -0
  206. package/src/structures/AnonymousGuild.js +98 -0
  207. package/src/structures/ApplicationCommand.js +1028 -0
  208. package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
  209. package/src/structures/AutoModerationActionExecution.js +89 -0
  210. package/src/structures/AutoModerationRule.js +294 -0
  211. package/src/structures/AutocompleteInteraction.js +106 -0
  212. package/src/structures/Base.js +43 -0
  213. package/src/structures/BaseCommandInteraction.js +211 -0
  214. package/src/structures/BaseGuild.js +116 -0
  215. package/src/structures/BaseGuildEmoji.js +56 -0
  216. package/src/structures/BaseGuildTextChannel.js +193 -0
  217. package/src/structures/BaseGuildVoiceChannel.js +243 -0
  218. package/src/structures/BaseMessageComponent.js +114 -0
  219. package/src/structures/ButtonInteraction.js +11 -0
  220. package/src/structures/Call.js +58 -0
  221. package/src/structures/CategoryChannel.js +83 -0
  222. package/src/structures/Channel.js +271 -0
  223. package/src/structures/ClientApplication.js +204 -0
  224. package/src/structures/ClientPresence.js +84 -0
  225. package/src/structures/ClientUser.js +624 -0
  226. package/src/structures/CommandInteraction.js +41 -0
  227. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  228. package/src/structures/ContextMenuInteraction.js +65 -0
  229. package/src/structures/DMChannel.js +280 -0
  230. package/src/structures/DeveloperPortalApplication.js +520 -0
  231. package/src/structures/DirectoryChannel.js +20 -0
  232. package/src/structures/Emoji.js +148 -0
  233. package/src/structures/ForumChannel.js +271 -0
  234. package/src/structures/Guild.js +1744 -0
  235. package/src/structures/GuildAuditLogs.js +734 -0
  236. package/src/structures/GuildBan.js +59 -0
  237. package/src/structures/GuildBoost.js +108 -0
  238. package/src/structures/GuildChannel.js +454 -0
  239. package/src/structures/GuildEmoji.js +161 -0
  240. package/src/structures/GuildFolder.js +75 -0
  241. package/src/structures/GuildMember.js +686 -0
  242. package/src/structures/GuildPreview.js +191 -0
  243. package/src/structures/GuildPreviewEmoji.js +27 -0
  244. package/src/structures/GuildScheduledEvent.js +441 -0
  245. package/src/structures/GuildTemplate.js +236 -0
  246. package/src/structures/Integration.js +188 -0
  247. package/src/structures/IntegrationApplication.js +96 -0
  248. package/src/structures/Interaction.js +351 -0
  249. package/src/structures/InteractionCollector.js +248 -0
  250. package/src/structures/InteractionResponse.js +114 -0
  251. package/src/structures/InteractionWebhook.js +43 -0
  252. package/src/structures/Invite.js +375 -0
  253. package/src/structures/InviteGuild.js +23 -0
  254. package/src/structures/InviteStageInstance.js +86 -0
  255. package/src/structures/Message.js +1188 -0
  256. package/src/structures/MessageActionRow.js +103 -0
  257. package/src/structures/MessageAttachment.js +193 -0
  258. package/src/structures/MessageButton.js +231 -0
  259. package/src/structures/MessageCollector.js +146 -0
  260. package/src/structures/MessageComponentInteraction.js +120 -0
  261. package/src/structures/MessageContextMenuInteraction.js +20 -0
  262. package/src/structures/MessageEmbed.js +586 -0
  263. package/src/structures/MessageMentions.js +272 -0
  264. package/src/structures/MessagePayload.js +358 -0
  265. package/src/structures/MessageReaction.js +171 -0
  266. package/src/structures/MessageSelectMenu.js +391 -0
  267. package/src/structures/Modal.js +279 -0
  268. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  269. package/src/structures/ModalSubmitInteraction.js +119 -0
  270. package/src/structures/NewsChannel.js +32 -0
  271. package/src/structures/OAuth2Guild.js +28 -0
  272. package/src/structures/PartialGroupDMChannel.js +430 -0
  273. package/src/structures/PermissionOverwrites.js +196 -0
  274. package/src/structures/Presence.js +441 -0
  275. package/src/structures/ReactionCollector.js +229 -0
  276. package/src/structures/ReactionEmoji.js +31 -0
  277. package/src/structures/RichPresence.js +722 -0
  278. package/src/structures/Role.js +515 -0
  279. package/src/structures/SelectMenuInteraction.js +170 -0
  280. package/src/structures/Session.js +81 -0
  281. package/src/structures/StageChannel.js +104 -0
  282. package/src/structures/StageInstance.js +208 -0
  283. package/src/structures/Sticker.js +310 -0
  284. package/src/structures/StickerPack.js +95 -0
  285. package/src/structures/StoreChannel.js +56 -0
  286. package/src/structures/Team.js +167 -0
  287. package/src/structures/TeamMember.js +71 -0
  288. package/src/structures/TextChannel.js +33 -0
  289. package/src/structures/TextInputComponent.js +201 -0
  290. package/src/structures/ThreadChannel.js +626 -0
  291. package/src/structures/ThreadMember.js +105 -0
  292. package/src/structures/Typing.js +74 -0
  293. package/src/structures/User.js +697 -0
  294. package/src/structures/UserContextMenuInteraction.js +29 -0
  295. package/src/structures/VoiceChannel.js +110 -0
  296. package/src/structures/VoiceRegion.js +53 -0
  297. package/src/structures/VoiceState.js +306 -0
  298. package/src/structures/WebEmbed.js +401 -0
  299. package/src/structures/Webhook.js +461 -0
  300. package/src/structures/WelcomeChannel.js +60 -0
  301. package/src/structures/WelcomeScreen.js +48 -0
  302. package/src/structures/Widget.js +87 -0
  303. package/src/structures/WidgetMember.js +99 -0
  304. package/src/structures/interfaces/Application.js +190 -0
  305. package/src/structures/interfaces/Collector.js +300 -0
  306. package/src/structures/interfaces/InteractionResponses.js +313 -0
  307. package/src/structures/interfaces/TextBasedChannel.js +566 -0
  308. package/src/util/ActivityFlags.js +44 -0
  309. package/src/util/ApplicationFlags.js +74 -0
  310. package/src/util/BitField.js +170 -0
  311. package/src/util/ChannelFlags.js +45 -0
  312. package/src/util/Constants.js +1917 -0
  313. package/src/util/DataResolver.js +145 -0
  314. package/src/util/Formatters.js +214 -0
  315. package/src/util/GuildMemberFlags.js +43 -0
  316. package/src/util/Intents.js +74 -0
  317. package/src/util/LimitedCollection.js +131 -0
  318. package/src/util/MessageFlags.js +54 -0
  319. package/src/util/Options.js +360 -0
  320. package/src/util/Permissions.js +187 -0
  321. package/src/util/PremiumUsageFlags.js +31 -0
  322. package/src/util/PurchasedFlags.js +31 -0
  323. package/src/util/RemoteAuth.js +522 -0
  324. package/src/util/SnowflakeUtil.js +92 -0
  325. package/src/util/Sweepers.js +466 -0
  326. package/src/util/SystemChannelFlags.js +55 -0
  327. package/src/util/ThreadMemberFlags.js +30 -0
  328. package/src/util/UserFlags.js +104 -0
  329. package/src/util/Util.js +741 -0
  330. package/src/util/Voice.js +1456 -0
  331. package/src/util/arRPC/index.js +229 -0
  332. package/src/util/arRPC/process/detectable.json +1 -0
  333. package/src/util/arRPC/process/index.js +102 -0
  334. package/src/util/arRPC/process/native/index.js +5 -0
  335. package/src/util/arRPC/process/native/linux.js +37 -0
  336. package/src/util/arRPC/process/native/win32.js +25 -0
  337. package/src/util/arRPC/transports/ipc.js +281 -0
  338. package/src/util/arRPC/transports/websocket.js +128 -0
  339. package/typings/enums.d.ts +346 -0
  340. package/typings/index.d.ts +7725 -0
  341. package/typings/index.test-d.ts +0 -0
  342. package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,697 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const Base = require('./Base');
5
+ const ClientApplication = require('./ClientApplication');
6
+ const VoiceState = require('./VoiceState');
7
+ const TextBasedChannel = require('./interfaces/TextBasedChannel');
8
+ const { Error } = require('../errors');
9
+ const { RelationshipTypes, NitroType } = require('../util/Constants');
10
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
11
+ const UserFlags = require('../util/UserFlags');
12
+
13
+ /**
14
+ * Represents a user on Discord.
15
+ * @implements {TextBasedChannel}
16
+ * @extends {Base}
17
+ */
18
+ class User extends Base {
19
+ constructor(client, data, application) {
20
+ super(client);
21
+ /**
22
+ * The user's id
23
+ * @type {Snowflake}
24
+ */
25
+ this.id = data.id;
26
+
27
+ this.bot = null;
28
+
29
+ this.system = null;
30
+
31
+ this.flags = null;
32
+
33
+ /**
34
+ * An array of object (connected accounts), containing the following properties:
35
+ * @property {string} type The account type (twitch, youtube, etc)
36
+ * @property {string} name The account name
37
+ * @property {string} id The account id
38
+ * @property {boolean} verified Whether the account is verified
39
+ * @see {@link https://discord.com/developers/docs/resources/user#connection-object}
40
+ * @typedef {Object} ConnectionAccount
41
+ */
42
+
43
+ /**
44
+ * Accounts connected to this user
45
+ * <info>The user must be force fetched for this property to be present or be updated</info>
46
+ * @type {?ConnectionAccount[]}
47
+ */
48
+ this.connectedAccounts = [];
49
+ /**
50
+ * Time that User has nitro (Unix Timestamp)
51
+ * <info>The user must be force fetched for this property to be present or be updated</info>
52
+ * @type {?number}
53
+ * @readonly
54
+ */
55
+ this.premiumSince = null;
56
+ /**
57
+ * Time that User has nitro and boost server (Unix Timestamp)
58
+ * @type {?number}
59
+ * @readonly
60
+ */
61
+ this.premiumGuildSince = null;
62
+ /**
63
+ * About me (User)
64
+ * <info>The user must be force fetched for this property to be present or be updated</info>
65
+ * @type {?string}
66
+ * @readonly
67
+ */
68
+ this.bio = null;
69
+ /**
70
+ * This user is on the same servers as Client User
71
+ * <info>The user must be force fetched for this property to be present or be updated</info>
72
+ * @type {Collection<Snowflake, Guild>}
73
+ * @readonly
74
+ */
75
+ this.mutualGuilds = new Collection();
76
+ /**
77
+ * [Bot] Application
78
+ * @type {?ClientApplication}
79
+ * @readonly
80
+ */
81
+ this.application = application ? new ClientApplication(this.client, application, this) : null;
82
+ this._partial = true;
83
+ this._patch(data);
84
+ }
85
+
86
+ _patch(data) {
87
+ if ('username' in data) {
88
+ /**
89
+ * The username of the user
90
+ * @type {?string}
91
+ */
92
+ this.username = data.username;
93
+ } else {
94
+ this.username ??= null;
95
+ }
96
+
97
+ if ('bot' in data) {
98
+ /**
99
+ * Whether or not the user is a bot
100
+ * @type {?boolean}
101
+ */
102
+ this.bot = Boolean(data.bot);
103
+ if (this.bot === true && !this.application) {
104
+ this.application = new ClientApplication(this.client, { id: this.id }, this);
105
+ this.botInGuildsCount = null;
106
+ }
107
+ } else if (!this.partial && typeof this.bot !== 'boolean') {
108
+ this.bot = false;
109
+ }
110
+
111
+ if ('discriminator' in data) {
112
+ /**
113
+ * A discriminator based on username for the user
114
+ * @type {?string}
115
+ */
116
+ this.discriminator = data.discriminator;
117
+ } else {
118
+ this.discriminator ??= null;
119
+ }
120
+
121
+ if ('avatar' in data) {
122
+ /**
123
+ * The user avatar's hash
124
+ * @type {?string}
125
+ */
126
+ this.avatar = data.avatar;
127
+ } else {
128
+ this.avatar ??= null;
129
+ }
130
+
131
+ if ('banner' in data) {
132
+ /**
133
+ * The user banner's hash
134
+ * <info>The user must be force fetched for this property to be present or be updated</info>
135
+ * @type {?string}
136
+ */
137
+ this.banner = data.banner;
138
+ } else if (this.banner !== null) {
139
+ this.banner ??= undefined;
140
+ }
141
+
142
+ if ('accent_color' in data) {
143
+ /**
144
+ * The base 10 accent color of the user's banner
145
+ * <info>The user must be force fetched for this property to be present or be updated</info>
146
+ * @type {?number}
147
+ */
148
+ this.accentColor = data.accent_color;
149
+ } else if (this.accentColor !== null) {
150
+ this.accentColor ??= undefined;
151
+ }
152
+
153
+ if ('system' in data) {
154
+ /**
155
+ * Whether the user is an Official Discord System user (part of the urgent message system)
156
+ * @type {?boolean}
157
+ */
158
+ this.system = Boolean(data.system);
159
+ } else if (!this.partial && typeof this.system !== 'boolean') {
160
+ this.system = false;
161
+ }
162
+
163
+ if ('public_flags' in data) {
164
+ /**
165
+ * The flags for this user
166
+ * @type {?UserFlags}
167
+ */
168
+ this.flags = new UserFlags(data.public_flags);
169
+ }
170
+
171
+ if ('approximate_guild_count' in data) {
172
+ /**
173
+ * Check how many guilds the bot is in (Probably only approximate) (application.fetch() first)
174
+ * @type {?number}
175
+ */
176
+ this.botInGuildsCount = data.approximate_guild_count;
177
+ }
178
+
179
+ if ('avatar_decoration' in data) {
180
+ /**
181
+ * The user avatar decoration's hash
182
+ * @type {?string}
183
+ */
184
+ this.avatarDecoration = data.avatar_decoration;
185
+ } else {
186
+ this.avatarDecoration ??= null;
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Get all mutual friends (Client -> User)
192
+ * @type {Promise<Collection<Snowflake, User>>}
193
+ * @readonly
194
+ */
195
+ get mutualFriends() {
196
+ // eslint-disable-next-line no-async-promise-executor
197
+ return new Promise(async resolve => {
198
+ const all = new Collection();
199
+ if (this.bot || this.client.user.id === this.id) return resolve(all);
200
+ const data = await this.client.api.users(this.id).relationships.get();
201
+ for (const u of data) {
202
+ all.set(u.id, this.client.users._add(u));
203
+ }
204
+ return resolve(all);
205
+ });
206
+ }
207
+
208
+ /**
209
+ * Check relationship status (Client -> User)
210
+ * @type {RelationshipTypes}
211
+ * @readonly
212
+ */
213
+ get relationships() {
214
+ const i = this.client.relationships.cache.get(this.id) ?? 0;
215
+ return RelationshipTypes[parseInt(i)];
216
+ }
217
+
218
+ /**
219
+ * Check note
220
+ * @type {?string}
221
+ * @readonly
222
+ */
223
+ get note() {
224
+ return this.client.user.notes.get(this.id);
225
+ }
226
+
227
+ /**
228
+ * Get friend nickname
229
+ * @type {?string}
230
+ * @readonly
231
+ */
232
+ get nickname() {
233
+ return this.client.user.friendNicknames.get(this.id);
234
+ }
235
+
236
+ /**
237
+ * The voice state of this member
238
+ * @type {VoiceState}
239
+ * @readonly
240
+ */
241
+ get voice() {
242
+ return (
243
+ this.client.voiceStates.cache.get(this.id) ??
244
+ this.client.guilds.cache.find(g => g?.voiceStates?.cache?.get(this.id))?.voiceStates?.cache?.get(this.id) ??
245
+ new VoiceState({ client: this.client }, { user_id: this.id })
246
+ );
247
+ }
248
+
249
+ _ProfilePatch(data) {
250
+ if (!data) return;
251
+
252
+ this._partial = false;
253
+
254
+ if (data.connected_accounts.length > 0) {
255
+ this.connectedAccounts = data.connected_accounts;
256
+ }
257
+
258
+ if ('premium_since' in data) {
259
+ const date = new Date(data.premium_since);
260
+ this.premiumSince = date.getTime();
261
+ }
262
+
263
+ if ('premium_guild_since' in data) {
264
+ const date = new Date(data.premium_guild_since);
265
+ this.premiumGuildSince = date.getTime();
266
+ }
267
+
268
+ if ('premium_type' in data) {
269
+ const nitro = NitroType[data.premium_type ?? 0];
270
+ /**
271
+ * Nitro type of the user.
272
+ * @type {NitroType}
273
+ */
274
+ this.nitroType = nitro ?? `UNKNOWN_TYPE_${data.premium_type}`;
275
+ }
276
+
277
+ if ('user_profile' in data) {
278
+ this.bio = data.user_profile.bio;
279
+ /**
280
+ * The user's theme colors (Profile theme) [Primary, Accent]
281
+ * <info>The user must be force fetched for this property to be present or be updated</info>
282
+ * @type {?Array<number>}
283
+ */
284
+ this.themeColors = data.user_profile.theme_colors;
285
+ }
286
+
287
+ if ('guild_member_profile' in data && 'guild_member' in data) {
288
+ const guild = this.client.guilds.cache.get(data.guild_member_profile.guild_id);
289
+ const member = guild?.members._add(data.guild_member);
290
+ member._ProfilePatch(data.guild_member_profile);
291
+ }
292
+
293
+ if ('application' in data) {
294
+ this.application = new ClientApplication(this.client, data.application, this);
295
+ }
296
+
297
+ if ('badges' in data) {
298
+ /**
299
+ * @callback BadgeIcon
300
+ * @returns {string}
301
+ */
302
+
303
+ /**
304
+ * @typedef {Object} UserBadge
305
+ * @property {string} id The id of the badge
306
+ * @property {string} description The description of the badge
307
+ * @property {string} icon The icon hash of the badge
308
+ * @property {?string} link The link of the badge
309
+ * @property {BadgeIcon} iconURL The iconURL of the badge
310
+ */
311
+
312
+ /**
313
+ * User badges (Boost, Slash, AutoMod, etc.)
314
+ * @type {?Array<UserBadge>}
315
+ */
316
+ this.badges = data.badges.map(o => ({ ...o, iconURL: () => this.client.rest.cdn.BadgeIcon(o.icon) }));
317
+ }
318
+
319
+ if ('guild_badges' in data) {
320
+ // Unknown
321
+ }
322
+
323
+ this.mutualGuilds = new Collection(data.mutual_guilds.map(obj => [obj.id, obj]));
324
+ }
325
+
326
+ /**
327
+ * Get profile from Discord, if client is in a server with the target.
328
+ * @type {User}
329
+ * @param {Snowflake | null} guildId The guild id to get the profile from
330
+ * @returns {Promise<User>}
331
+ */
332
+ async getProfile(guildId) {
333
+ if (this.client.bot) throw new Error('INVALID_BOT_METHOD');
334
+ const query = guildId
335
+ ? {
336
+ with_mutual_guilds: true,
337
+ guild_id: guildId,
338
+ }
339
+ : {
340
+ with_mutual_guilds: true,
341
+ };
342
+ const data = await this.client.api.users(this.id).profile.get({
343
+ query,
344
+ });
345
+ this._ProfilePatch(data);
346
+ return this;
347
+ }
348
+
349
+ /**
350
+ * Friends the user [If incoming request]
351
+ * @type {boolean}
352
+ * @returns {Promise<boolean>}
353
+ */
354
+ setFriend() {
355
+ return this.client.relationships.addFriend(this);
356
+ }
357
+
358
+ /**
359
+ * Changes the nickname of the friend
360
+ * @param {?string} nickname The nickname to change
361
+ * @type {boolean}
362
+ * @returns {Promise<boolean>}
363
+ */
364
+ setNickname(nickname) {
365
+ return this.client.user.setNickname(this.id, nickname);
366
+ }
367
+
368
+ /**
369
+ * Send Friend Request to the user
370
+ * @type {boolean}
371
+ * @returns {Promise<boolean>}
372
+ */
373
+ sendFriendRequest() {
374
+ return this.client.relationships.sendFriendRequest(this.username, this.discriminator);
375
+ }
376
+ /**
377
+ * Blocks the user
378
+ * @type {boolean}
379
+ * @returns {Promise<boolean>}
380
+ */
381
+ setBlock() {
382
+ return this.client.relationships.addBlocked(this);
383
+ }
384
+
385
+ /**
386
+ * Removes the user from your blocks list
387
+ * @type {boolean}
388
+ * @returns {Promise<boolean>}
389
+ */
390
+ unBlock() {
391
+ return this.client.relationships.deleteBlocked(this);
392
+ }
393
+
394
+ /**
395
+ * Removes the user from your friends list
396
+ * @type {boolean}
397
+ * @returns {Promise<boolean>}
398
+ */
399
+ unFriend() {
400
+ return this.client.relationships.deleteFriend(this);
401
+ }
402
+
403
+ /**
404
+ * Whether this User is a partial
405
+ * @type {boolean}
406
+ * @readonly
407
+ */
408
+ get partial() {
409
+ return typeof this.username !== 'string';
410
+ }
411
+
412
+ /**
413
+ * The timestamp the user was created at
414
+ * @type {number}
415
+ * @readonly
416
+ */
417
+ get createdTimestamp() {
418
+ return SnowflakeUtil.timestampFrom(this.id);
419
+ }
420
+
421
+ /**
422
+ * The time the user was created at
423
+ * @type {Date}
424
+ * @readonly
425
+ */
426
+ get createdAt() {
427
+ return new Date(this.createdTimestamp);
428
+ }
429
+
430
+ /**
431
+ * A link to the user's avatar.
432
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
433
+ * @returns {?string}
434
+ */
435
+ avatarURL({ format, size, dynamic } = {}) {
436
+ if (!this.avatar) return null;
437
+ return this.client.rest.cdn.Avatar(this.id, this.avatar, format, size, dynamic);
438
+ }
439
+
440
+ /**
441
+ * A link to the user's avatar decoration.
442
+ * @param {StaticImageURLOptions} [options={}] Options for the image URL
443
+ * @returns {?string}
444
+ */
445
+ avatarDecorationURL({ format, size } = {}) {
446
+ if (!this.avatarDecoration) return null;
447
+ return this.client.rest.cdn.AvatarDecoration(this.id, this.avatarDecoration, format, size);
448
+ }
449
+
450
+ /**
451
+ * A link to the user's default avatar
452
+ * @type {string}
453
+ * @readonly
454
+ */
455
+ get defaultAvatarURL() {
456
+ return this.client.rest.cdn.DefaultAvatar(this.discriminator % 5);
457
+ }
458
+
459
+ /**
460
+ * A link to the user's avatar if they have one.
461
+ * Otherwise a link to their default avatar will be returned.
462
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
463
+ * @returns {string}
464
+ */
465
+ displayAvatarURL(options) {
466
+ return this.avatarURL(options) ?? this.defaultAvatarURL;
467
+ }
468
+
469
+ /**
470
+ * The hexadecimal version of the user accent color, with a leading hash
471
+ * <info>The user must be force fetched for this property to be present</info>
472
+ * @type {?string}
473
+ * @readonly
474
+ */
475
+ get hexAccentColor() {
476
+ if (typeof this.accentColor !== 'number') return this.accentColor;
477
+ return `#${this.accentColor.toString(16).padStart(6, '0')}`;
478
+ }
479
+
480
+ /**
481
+ * A link to the user's banner.
482
+ * <info>This method will throw an error if called before the user is force fetched.
483
+ * See {@link User#banner} for more info</info>
484
+ * @param {ImageURLOptions} [options={}] Options for the Image URL
485
+ * @returns {?string}
486
+ */
487
+ bannerURL({ format, size, dynamic } = {}) {
488
+ if (typeof this.banner === 'undefined') {
489
+ throw new Error('USER_BANNER_NOT_FETCHED');
490
+ }
491
+ if (!this.banner) return null;
492
+ return this.client.rest.cdn.Banner(this.id, this.banner, format, size, dynamic);
493
+ }
494
+
495
+ /**
496
+ * Ring the user's phone / PC (call)
497
+ * @returns {Promise<boolean>}
498
+ */
499
+ ring() {
500
+ if (this.relationships !== 'FRIEND') return Promise.reject(new Error('USER_NOT_FRIEND'));
501
+ if (!this.client.user.voice?.channelId || !this.client.callVoice) {
502
+ return Promise.reject(new Error('CLIENT_NO_CALL'));
503
+ }
504
+ return new Promise((resolve, reject) => {
505
+ this.client.api
506
+ .channels(this.dmChannel.id)
507
+ .call.ring.post({
508
+ data: {
509
+ recipients: [this.id],
510
+ },
511
+ })
512
+ .then(() => resolve(true))
513
+ .catch(e => {
514
+ reject(e);
515
+ });
516
+ });
517
+ }
518
+
519
+ /**
520
+ * The hexadecimal version of the user theme color, with a leading hash [Primary, Accent]
521
+ * <info>The user must be force fetched for this property to be present or be updated</info>
522
+ * @type {?Array<string>}
523
+ * @readonly
524
+ */
525
+ get hexThemeColor() {
526
+ return this.themeColors?.map(c => `#${c.toString(16).padStart(6, '0')}`) || null;
527
+ }
528
+
529
+ /**
530
+ * The Discord "tag" (e.g. `hydrabolt#0001`) for this user
531
+ * @type {?string}
532
+ * @readonly
533
+ */
534
+ get tag() {
535
+ return typeof this.username === 'string' ? `${this.username}#${this.discriminator}` : null;
536
+ }
537
+
538
+ /**
539
+ * The DM between the client's user and this user
540
+ * @type {?DMChannel}
541
+ * @readonly
542
+ */
543
+ get dmChannel() {
544
+ return this.client.users.dmChannel(this.id);
545
+ }
546
+
547
+ /**
548
+ * Creates a DM channel between the client and the user.
549
+ * @param {boolean} [force=false] Whether to skip the cache check and request the API
550
+ * @returns {Promise<DMChannel>}
551
+ */
552
+ createDM(force = false) {
553
+ return this.client.users.createDM(this.id, force);
554
+ }
555
+
556
+ /**
557
+ * Deletes a DM channel (if one exists) between the client and the user. Resolves with the channel if successful.
558
+ * @returns {Promise<DMChannel>}
559
+ */
560
+ deleteDM() {
561
+ return this.client.users.deleteDM(this.id);
562
+ }
563
+
564
+ /**
565
+ * Checks if the user is equal to another.
566
+ * It compares id, username, discriminator, avatar, banner, accent color, and bot flags.
567
+ * It is recommended to compare equality by using `user.id === user2.id` unless you want to compare all properties.
568
+ * @param {User} user User to compare with
569
+ * @returns {boolean}
570
+ */
571
+ equals(user) {
572
+ return (
573
+ user &&
574
+ this.id === user.id &&
575
+ this.username === user.username &&
576
+ this.discriminator === user.discriminator &&
577
+ this.avatar === user.avatar &&
578
+ this.flags?.bitfield === user.flags?.bitfield &&
579
+ this.banner === user.banner &&
580
+ this.accentColor === user.accentColor &&
581
+ this.bio === user.bio
582
+ );
583
+ }
584
+
585
+ /**
586
+ * Compares the user with an API user object
587
+ * @param {APIUser} user The API user object to compare
588
+ * @returns {boolean}
589
+ * @private
590
+ */
591
+ _equals(user) {
592
+ return (
593
+ user &&
594
+ this.id === user.id &&
595
+ this.username === user.username &&
596
+ this.discriminator === user.discriminator &&
597
+ this.avatar === user.avatar &&
598
+ this.flags?.bitfield === user.public_flags &&
599
+ ('banner' in user ? this.banner === user.banner : true) &&
600
+ ('accent_color' in user ? this.accentColor === user.accent_color : true)
601
+ );
602
+ }
603
+
604
+ /**
605
+ * Fetches this user's flags.
606
+ * @param {boolean} [force=false] Whether to skip the cache check and request the API
607
+ * @returns {Promise<UserFlags>}
608
+ */
609
+ fetchFlags(force = false) {
610
+ return this.client.users.fetchFlags(this.id, { force });
611
+ }
612
+
613
+ /**
614
+ * Fetches this user.
615
+ * @param {boolean} [force=true] Whether to skip the cache check and request the API
616
+ * @returns {Promise<User>}
617
+ */
618
+ fetch(force = true) {
619
+ return this.client.users.fetch(this.id, { force });
620
+ }
621
+
622
+ /**
623
+ * When concatenated with a string, this automatically returns the user's mention instead of the User object.
624
+ * @returns {string}
625
+ * @example
626
+ * // Logs: Hello from <@123456789012345678>!
627
+ * console.log(`Hello from ${user}!`);
628
+ */
629
+ toString() {
630
+ return `<@${this.id}>`;
631
+ }
632
+
633
+ toJSON(...props) {
634
+ const json = super.toJSON(
635
+ {
636
+ createdTimestamp: true,
637
+ defaultAvatarURL: true,
638
+ hexAccentColor: true,
639
+ tag: true,
640
+ },
641
+ ...props,
642
+ );
643
+ json.avatarURL = this.avatarURL();
644
+ json.displayAvatarURL = this.displayAvatarURL();
645
+ json.bannerURL = this.banner ? this.bannerURL() : this.banner;
646
+ return json;
647
+ }
648
+
649
+ /**
650
+ * Set note to user
651
+ * @param {string} note Note to set
652
+ * @returns {Promise<User>}
653
+ */
654
+ async setNote(note = null) {
655
+ await this.client.api.users['@me'].notes(this.id).put({ data: { note } });
656
+ return this;
657
+ }
658
+
659
+ /**
660
+ * Get presence (~ v12)
661
+ * @returns {Promise<Presence | null>}
662
+ */
663
+ async presenceFetch() {
664
+ let data = null;
665
+ await Promise.all(
666
+ this.client.guilds.cache.map(async guild => {
667
+ const res_ = await guild.presences.resolve(this.id);
668
+ if (res_) return (data = res_);
669
+ return true;
670
+ }),
671
+ );
672
+ return data;
673
+ }
674
+ }
675
+
676
+ /**
677
+ * Sends a message to this user.
678
+ * @method send
679
+ * @memberof User
680
+ * @instance
681
+ * @param {string|MessagePayload|MessageOptions} options The options to provide
682
+ * @returns {Promise<Message>}
683
+ * @example
684
+ * // Send a direct message
685
+ * user.send('Hello!')
686
+ * .then(message => console.log(`Sent message: ${message.content} to ${user.tag}`))
687
+ * .catch(console.error);
688
+ */
689
+
690
+ TextBasedChannel.applyToClass(User);
691
+
692
+ module.exports = User;
693
+
694
+ /**
695
+ * @external APIUser
696
+ * @see {@link https://discord.com/developers/docs/resources/user#user-object}
697
+ */
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ const ContextMenuInteraction = require('./ContextMenuInteraction');
4
+
5
+ /**
6
+ * Represents a user context menu interaction.
7
+ * @extends {ContextMenuInteraction}
8
+ */
9
+ class UserContextMenuInteraction extends ContextMenuInteraction {
10
+ /**
11
+ * The user this interaction was sent from
12
+ * @type {User}
13
+ * @readonly
14
+ */
15
+ get targetUser() {
16
+ return this.options.getUser('user');
17
+ }
18
+
19
+ /**
20
+ * The member this interaction was sent from
21
+ * @type {?(GuildMember|APIGuildMember)}
22
+ * @readonly
23
+ */
24
+ get targetMember() {
25
+ return this.options.getMember('user');
26
+ }
27
+ }
28
+
29
+ module.exports = UserContextMenuInteraction;