discord-sb-v13 0.0.1-security → 2.0.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-sb-v13 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 +42 -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,624 @@
1
+ 'use strict';
2
+
3
+ const { setInterval } = require('node:timers');
4
+ const { Collection } = require('@discordjs/collection');
5
+ const Invite = require('./Invite');
6
+ const { Message } = require('./Message');
7
+ const User = require('./User');
8
+ const { Util } = require('..');
9
+ const { Error: Error_ } = require('../errors');
10
+ const { Opcodes, NitroType, HypeSquadType } = require('../util/Constants');
11
+ const DataResolver = require('../util/DataResolver');
12
+ const PremiumUsageFlags = require('../util/PremiumUsageFlags');
13
+ const PurchasedFlags = require('../util/PurchasedFlags');
14
+ /**
15
+ * Represents the logged in client's Discord user.
16
+ * @extends {User}
17
+ */
18
+ class ClientUser extends User {
19
+ _patch(data) {
20
+ super._patch(data);
21
+
22
+ if ('verified' in data) {
23
+ /**
24
+ * Whether or not this account has been verified
25
+ * @type {boolean}
26
+ */
27
+ this.verified = data.verified;
28
+ }
29
+
30
+ if ('mfa_enabled' in data) {
31
+ /**
32
+ * If the bot's {@link ClientApplication#owner Owner} has MFA enabled on their account
33
+ * @type {?boolean}
34
+ */
35
+ this.mfaEnabled = typeof data.mfa_enabled === 'boolean' ? data.mfa_enabled : null;
36
+ } else {
37
+ this.mfaEnabled ??= null;
38
+ }
39
+
40
+ if ('token' in data) this.client.token = data.token;
41
+
42
+ // Todo: Add (Selfbot)
43
+ if ('premium_type' in data) {
44
+ const nitro = NitroType[data.premium_type ?? 0];
45
+ /**
46
+ * Nitro type of the client user.
47
+ * @type {NitroType}
48
+ */
49
+ this.nitroType = nitro ?? `UNKNOWN_TYPE_${data.premium_type}`;
50
+ }
51
+ if ('purchased_flags' in data) {
52
+ /**
53
+ * Purchased state of the client user.
54
+ * @type {?PurchasedFlags}
55
+ */
56
+ this.purchasedFlags = new PurchasedFlags(data.purchased_flags || 0);
57
+ }
58
+ if ('premium_usage_flags' in data) {
59
+ /**
60
+ * Premium usage state of the client user.
61
+ * @type {?PremiumUsageFlags}
62
+ */
63
+ this.premiumUsageFlags = new PremiumUsageFlags(data.premium_usage_flags || 0);
64
+ }
65
+ // Key: premium = boolean;
66
+ if ('phone' in data) {
67
+ /**
68
+ * Phone number of the client user.
69
+ * @type {?string}
70
+ */
71
+ this.phoneNumber = data.phone;
72
+ }
73
+ if ('nsfw_allowed' in data) {
74
+ /**
75
+ * Whether or not the client user is allowed to send NSFW messages [iOS device].
76
+ * @type {?boolean}
77
+ */
78
+ this.nsfwAllowed = data.nsfw_allowed;
79
+ }
80
+ if ('email' in data) {
81
+ /**
82
+ * Email address of the client user.
83
+ * @type {?string}
84
+ */
85
+ this.emailAddress = data.email;
86
+ }
87
+ if ('bio' in data) {
88
+ this.bio = data.bio;
89
+ }
90
+ if ('global_name' in data) {
91
+ /**
92
+ * Display name of the client user.
93
+ * @type {?string}
94
+ */
95
+ this.displayName = data.global_name;
96
+ }
97
+
98
+ if (!this.friendNicknames?.size) {
99
+ /**
100
+ * The friend nicknames cache of the client user.
101
+ * @type {Collection<Snowflake, string>}
102
+ * @private
103
+ */
104
+ this.friendNicknames = new Collection();
105
+ }
106
+
107
+ if (!this._intervalSamsungPresence) {
108
+ this._intervalSamsungPresence = setInterval(() => {
109
+ this.client.emit('debug', `Samsung Presence: ${this._packageName}`);
110
+ if (!this._packageName) return;
111
+ this.setSamsungActivity(this._packageName, 'UPDATE');
112
+ }, 1000 * 60 * 10).unref();
113
+ // 20 minutes max
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Patch note
119
+ * @param {Object} data Note data
120
+ * @private
121
+ */
122
+ _patchNote(data) {
123
+ /**
124
+ * The notes cache of the client user.
125
+ * @type {Collection<Snowflake, string>}
126
+ * @private
127
+ */
128
+ this.notes = data ? new Collection(Object.entries(data)) : new Collection();
129
+ }
130
+
131
+ /**
132
+ * Represents the client user's presence
133
+ * @type {ClientPresence}
134
+ * @readonly
135
+ */
136
+ get presence() {
137
+ return this.client.presence;
138
+ }
139
+
140
+ /**
141
+ * Data used to edit the logged in client
142
+ * @typedef {Object} ClientUserEditData
143
+ * @property {string} [username] The new username
144
+ * @property {?(BufferResolvable|Base64Resolvable)} [avatar] The new avatar
145
+ * @property {?(BufferResolvable|Base64Resolvable)} [banner] The new banner
146
+ * @property {?string} [bio] The new bio
147
+ */
148
+
149
+ /**
150
+ * Edits the logged in client.
151
+ * @param {ClientUserEditData} options The new data
152
+ * @returns {Promise<ClientUser>}
153
+ */
154
+ async edit(options = {}) {
155
+ const data = await this.client.api.users('@me').patch({ data: options });
156
+ this.client.token = data.token;
157
+ const { updated } = this.client.actions.UserUpdate.handle(data);
158
+ return updated ?? this;
159
+ }
160
+
161
+ /**
162
+ * Sets the username of the logged in client.
163
+ * <info>Changing usernames in Discord is heavily rate limited, with only 2 requests
164
+ * every hour. Use this sparingly!</info>
165
+ * @param {string} username The new username
166
+ * @param {string} password The password of the account
167
+ * @returns {Promise<ClientUser>}
168
+ * @example
169
+ * // Set username
170
+ * client.user.setUsername('discordjs')
171
+ * .then(user => console.log(`My new username is ${user.username}`))
172
+ * .catch(console.error);
173
+ */
174
+ setUsername(username, password) {
175
+ if (!password && !this.client.password) {
176
+ throw new Error('A password is required to change a username.');
177
+ }
178
+ return this.edit({
179
+ username,
180
+ discriminator: this.discriminator,
181
+ password: this.client.password ? this.client.password : password,
182
+ });
183
+ }
184
+
185
+ /**
186
+ * Sets the avatar of the logged in client.
187
+ * @param {?(BufferResolvable|Base64Resolvable)} avatar The new avatar
188
+ * @returns {Promise<ClientUser>}
189
+ * @example
190
+ * // Set avatar
191
+ * client.user.setAvatar('./avatar.png')
192
+ * .then(user => console.log(`New avatar set!`))
193
+ * .catch(console.error);
194
+ */
195
+ async setAvatar(avatar) {
196
+ avatar = avatar && (await DataResolver.resolveImage(avatar));
197
+ return this.edit({ avatar });
198
+ }
199
+ /**
200
+ * Sets the banner of the logged in client.
201
+ * @param {?(BufferResolvable|Base64Resolvable)} banner The new banner
202
+ * @returns {Promise<ClientUser>}
203
+ * @example
204
+ * // Set banner
205
+ * client.user.setBanner('./banner.png')
206
+ * .then(user => console.log(`New banner set!`))
207
+ * .catch(console.error);
208
+ */
209
+ async setBanner(banner) {
210
+ if (this.nitroType !== 'NITRO_BOOST') {
211
+ throw new Error('You must be a Nitro Boosted User to change your banner.');
212
+ }
213
+ banner = banner && (await DataResolver.resolveImage(banner));
214
+ return this.edit({ banner });
215
+ }
216
+
217
+ /**
218
+ * Set HyperSquad House
219
+ * @param {HypeSquadType} type
220
+ * * `LEAVE`: 0
221
+ * * `HOUSE_BRAVERY`: 1
222
+ * * `HOUSE_BRILLIANCE`: 2
223
+ * * `HOUSE_BALANCE`: 3
224
+ * @returns {Promise<void>}
225
+ * @example
226
+ * // Set HyperSquad HOUSE_BRAVERY
227
+ * client.user.setHypeSquad(1); || client.user.setHypeSquad('HOUSE_BRAVERY');
228
+ * // Leave
229
+ * client.user.setHypeSquad(0);
230
+ */
231
+ async setHypeSquad(type) {
232
+ const id = typeof type === 'string' ? HypeSquadType[type] : type;
233
+ if (!id && id !== 0) throw new Error('Invalid HypeSquad type.');
234
+ if (id !== 0) {
235
+ const data = await this.client.api.hypesquad.online.post({
236
+ data: { house_id: id },
237
+ });
238
+ return data;
239
+ } else {
240
+ const data = await this.client.api.hypesquad.online.delete();
241
+ return data;
242
+ }
243
+ }
244
+
245
+ /**
246
+ * Set Accent color
247
+ * @param {ColorResolvable} color Color to set
248
+ * @returns {Promise<ClientUser>}
249
+ */
250
+ setAccentColor(color = null) {
251
+ return this.edit({ accent_color: color ? Util.resolveColor(color) : null });
252
+ }
253
+
254
+ /**
255
+ * Set discriminator
256
+ * @param {User.discriminator} discriminator It is #1234
257
+ * @param {string} password The password of the account
258
+ * @returns {Promise<ClientUser>}
259
+ */
260
+ setDiscriminator(discriminator, password) {
261
+ if (this.nitroType == 'NONE') throw new Error('You must be a Nitro User to change your discriminator.');
262
+ if (!password && !this.client.password) {
263
+ throw new Error('A password is required to change a discriminator.');
264
+ }
265
+ return this.edit({
266
+ discriminator,
267
+ username: this.username,
268
+ password: this.client.password ? this.client.password : password,
269
+ });
270
+ }
271
+
272
+ /**
273
+ * Set About me
274
+ * @param {string | null} bio Bio to set
275
+ * @returns {Promise<ClientUser>}
276
+ */
277
+ setAboutMe(bio = null) {
278
+ return this.edit({
279
+ bio,
280
+ });
281
+ }
282
+
283
+ /**
284
+ * Change the email
285
+ * @param {Email<string>} email Email to change
286
+ * @param {string} password Password of the account
287
+ * @returns {Promise<ClientUser>}
288
+ */
289
+ setEmail(email, password) {
290
+ throw new Error('This method is not available yet. Please use the official Discord client to change your email.');
291
+ // eslint-disable-next-line no-unreachable
292
+ if (!password && !this.client.password) {
293
+ throw new Error('A password is required to change a email.');
294
+ }
295
+ return this.edit({
296
+ email,
297
+ password: this.client.password ? this.client.password : password,
298
+ });
299
+ }
300
+
301
+ /**
302
+ * Set new password
303
+ * @param {string} oldPassword Old password
304
+ * @param {string} newPassword New password to set
305
+ * @returns {Promise<ClientUser>}
306
+ */
307
+ setPassword(oldPassword, newPassword) {
308
+ if (!oldPassword && !this.client.password) {
309
+ throw new Error('A password is required to change a password.');
310
+ }
311
+ if (!newPassword) throw new Error('New password is required.');
312
+ return this.edit({
313
+ password: this.client.password ? this.client.password : oldPassword,
314
+ new_password: newPassword,
315
+ });
316
+ }
317
+
318
+ /**
319
+ * Disable account
320
+ * @param {string} password Password of the account
321
+ * @returns {Promise<ClientUser>}
322
+ */
323
+ async disableAccount(password) {
324
+ if (!password && !this.client.password) {
325
+ throw new Error('A password is required to disable an account.');
326
+ }
327
+ const data = await this.client.api.users['@me'].disable.post({
328
+ data: {
329
+ password: this.client.password ? this.client.password : password,
330
+ },
331
+ });
332
+ return data;
333
+ }
334
+
335
+ /**
336
+ * Set selfdeaf (Global)
337
+ * @param {boolean} status Whether or not the ClientUser is deafened
338
+ * @returns {boolean}
339
+ */
340
+ setDeaf(status) {
341
+ if (typeof status !== 'boolean') throw new Error('Deaf status must be a boolean.');
342
+ this.client.ws.broadcast({
343
+ op: Opcodes.VOICE_STATE_UPDATE,
344
+ d: { self_deaf: status },
345
+ });
346
+ return status;
347
+ }
348
+
349
+ /**
350
+ * Set selfmute (Global)
351
+ * @param {boolean} status Whether or not the ClientUser is muted
352
+ * @returns {boolean}
353
+ */
354
+ setMute(status) {
355
+ if (typeof status !== 'boolean') throw new Error('Mute status must be a boolean.');
356
+ this.client.ws.broadcast({
357
+ op: Opcodes.VOICE_STATE_UPDATE,
358
+ d: { self_mute: status },
359
+ });
360
+ return status;
361
+ }
362
+
363
+ /**
364
+ * Delete account. Warning: Cannot be changed once used!
365
+ * @param {string} password Password of the account
366
+ * @returns {Promise<ClientUser>}
367
+ */
368
+ async deleteAccount(password) {
369
+ if (!password && !this.client.password) {
370
+ throw new Error('A password is required to delete an account.');
371
+ }
372
+ const data = await this.client.api.users['@me/delete'].post({
373
+ data: {
374
+ password: this.client.password ? this.client.password : password,
375
+ },
376
+ });
377
+ return data;
378
+ }
379
+
380
+ /**
381
+ * Options for setting activities
382
+ * @typedef {Object} ActivitiesOptions
383
+ * @property {string} [name] Name of the activity
384
+ * @property {ActivityType|number} [type] Type of the activity
385
+ * @property {string} [url] Twitch / YouTube stream URL
386
+ */
387
+
388
+ /**
389
+ * Data resembling a raw Discord presence.
390
+ * @typedef {Object} PresenceData
391
+ * @property {PresenceStatusData} [status] Status of the user
392
+ * @property {boolean} [afk] Whether the user is AFK
393
+ * @property {ActivitiesOptions[]|CustomStatus[]|RichPresence[]|SpotifyRPC[]} [activities] Activity the user is playing
394
+ * @property {number|number[]} [shardId] Shard id(s) to have the activity set on
395
+ */
396
+
397
+ /**
398
+ * Sets the full presence of the client user.
399
+ * @param {PresenceData} data Data for the presence
400
+ * @returns {ClientPresence}
401
+ * @example
402
+ * // Set the client user's presence
403
+ * client.user.setPresence({ activities: [{ name: 'with discord.js' }], status: 'idle' });
404
+ * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}
405
+ */
406
+ setPresence(data) {
407
+ return this.client.presence.set(data);
408
+ }
409
+
410
+ /**
411
+ * A user's status. Must be one of:
412
+ * * `online`
413
+ * * `idle`
414
+ * * `invisible`
415
+ * * `dnd` (do not disturb)
416
+ * @typedef {string} PresenceStatusData
417
+ */
418
+
419
+ /**
420
+ * Sets the status of the client user.
421
+ * @param {PresenceStatusData} status Status to change to
422
+ * @param {number|number[]} [shardId] Shard id(s) to have the activity set on
423
+ * @returns {ClientPresence}
424
+ * @example
425
+ * // Set the client user's status
426
+ * client.user.setStatus('idle');
427
+ */
428
+ setStatus(status, shardId) {
429
+ return this.setPresence({ status, shardId });
430
+ }
431
+
432
+ /**
433
+ * Options for setting an activity.
434
+ * @typedef {Object} ActivityOptions
435
+ * @property {string} [name] Name of the activity
436
+ * @property {string} [url] Twitch / YouTube stream URL
437
+ * @property {ActivityType|number} [type] Type of the activity
438
+ * @property {number|number[]} [shardId] Shard Id(s) to have the activity set on
439
+ */
440
+
441
+ /**
442
+ * Sets the activity the client user is playing.
443
+ * @param {string|ActivityOptions} [name] Activity being played, or options for setting the activity
444
+ * @param {ActivityOptions} [options] Options for setting the activity
445
+ * @returns {ClientPresence}
446
+ * @example
447
+ * // Set the client user's activity
448
+ * client.user.setActivity('discord.js', { type: 'WATCHING' });
449
+ * @see {@link https://github.com/aiko-chan-ai/discord.js-selfbot-v13/blob/main/Document/RichPresence.md}
450
+ */
451
+ setActivity(name, options = {}) {
452
+ if (!name) {
453
+ return this.setPresence({ activities: [], shardId: options.shardId });
454
+ }
455
+
456
+ const activity = Object.assign({}, options, typeof name === 'object' ? name : { name });
457
+ return this.setPresence({
458
+ activities: [activity],
459
+ shardId: activity.shardId,
460
+ });
461
+ }
462
+
463
+ /**
464
+ * Sets/removes the AFK flag for the client user.
465
+ * @param {boolean} [afk=true] Whether or not the user is AFK
466
+ * @param {number|number[]} [shardId] Shard Id(s) to have the AFK flag set on
467
+ * @returns {ClientPresence}
468
+ */
469
+ setAFK(afk = true, shardId) {
470
+ return this.setPresence({ afk, shardId });
471
+ }
472
+
473
+ /**
474
+ * Create an invite [Friend Invites]
475
+ * maxAge: 604800 | maxUses: 1
476
+ * @returns {Promise<Invite>}
477
+ * @see {@link https://github.com/13-05/hidden-disc-docs#js-snippet-for-creating-friend-invites}
478
+ * @example
479
+ * // Options not working
480
+ * client.user.createFriendInvite();
481
+ * .then(console.log)
482
+ * .catch(console.error);
483
+ */
484
+ async createFriendInvite() {
485
+ const data = await this.client.api.users['@me'].invites.post({
486
+ data: {},
487
+ });
488
+ return new Invite(this.client, data);
489
+ }
490
+
491
+ /**
492
+ * Get all friend invites
493
+ * @returns {Promise<Collection<string, Invite>>}
494
+ */
495
+ async getAllFriendInvites() {
496
+ const data = await this.client.api.users['@me'].invites.get();
497
+ const collection = new Collection();
498
+ for (const invite of data) {
499
+ collection.set(invite.code, new Invite(this.client, invite));
500
+ }
501
+ return collection;
502
+ }
503
+
504
+ /**
505
+ * Revoke all friend invites
506
+ * @returns {Promise<Collection<string, Invite>>}
507
+ */
508
+ async revokeAllFriendInvites() {
509
+ const data = await this.client.api.users['@me'].invites.delete();
510
+ const collection = new Collection();
511
+ for (const invite of data) {
512
+ collection.set(invite.code, new Invite(this.client, invite));
513
+ }
514
+ return collection;
515
+ }
516
+
517
+ /**
518
+ * Get a collection of messages mentioning clientUser
519
+ * @param {number} [limit=25] Maximum number of messages to get
520
+ * @param {boolean} [mentionRoles=true] Whether or not to mention roles
521
+ * @param {boolean} [mentionEveryone=true] Whether or not to mention `@everyone`
522
+ * @returns {Promise<Collection<Snowflake, Message>>}
523
+ */
524
+ async getMentions(limit = 25, mentionRoles = true, mentionEveryone = true) {
525
+ // https://canary.discord.com/api/v9/users/@me/mentions?limit=25&roles=true&everyone=true
526
+ const data = await this.client.api.users['@me'].mentions.get({
527
+ query: {
528
+ limit,
529
+ roles: mentionRoles,
530
+ everyone: mentionEveryone,
531
+ },
532
+ });
533
+ const collection = new Collection();
534
+ for (const msg of data) {
535
+ collection.set(msg.id, new Message(this.client, msg));
536
+ }
537
+ return collection;
538
+ }
539
+
540
+ /**
541
+ * Change Theme color
542
+ * @param {ColorResolvable} primary The primary color of the user's profile
543
+ * @param {ColorResolvable} accent The accent color of the user's profile
544
+ * @returns {Promise<ClientUser>}
545
+ */
546
+ async setThemeColors(primary, accent) {
547
+ if (!primary || !accent) throw new Error('PRIMARY_COLOR or ACCENT_COLOR are required.');
548
+ // Check nitro
549
+ if (this.nitroType !== 'NITRO_BOOST') {
550
+ throw new Error_('NITRO_BOOST_REQUIRED', 'themeColors');
551
+ }
552
+ primary = Util.resolveColor(primary) || this.themeColors[0];
553
+ accent = Util.resolveColor(accent) || this.themeColors[1];
554
+ const data_ = await this.client.api.users['@me'].profile.patch({
555
+ data: {
556
+ theme_colors: [primary, accent],
557
+ },
558
+ });
559
+ this._ProfilePatch({
560
+ user_profile: data_,
561
+ });
562
+ return this;
563
+ }
564
+
565
+ /**
566
+ * Sets Discord Playing status to "Playing on Samsung Galaxy". Only selected gamss from discords database works
567
+ * @param {string} packageName Android package name
568
+ * @param {?string} type Must be START, UPDATE, or STOP
569
+ * @returns {Promise<ClientUser>}
570
+ * @example
571
+ * // Set the client user's status
572
+ * client.user.setSamsungActivity('com.YostarJP.BlueArchive', 'START');
573
+ * // Update
574
+ * client.user.setSamsungActivity('com.miHoYo.bh3oversea', 'UPDATE');
575
+ * // Stop
576
+ * client.user.setSamsungActivity('com.miHoYo.GenshinImpact', 'STOP');
577
+ */
578
+ async setSamsungActivity(packageName, type = 'START') {
579
+ type = type.toUpperCase();
580
+ if (!packageName || typeof packageName !== 'string') throw new Error('Package name is required.');
581
+ if (!['START', 'UPDATE', 'STOP'].includes(type)) throw new Error('Invalid type (Must be START, UPDATE, or STOP)');
582
+ await this.client.api.presences.post({
583
+ data: {
584
+ package_name: packageName,
585
+ update: type,
586
+ },
587
+ });
588
+ if (type !== 'STOP') this._packageName = packageName;
589
+ else this._packageName = null;
590
+ return this;
591
+ }
592
+
593
+ /**
594
+ * Stop ringing
595
+ * @param {ChannelResolvable} channel DMChannel | GroupDMChannel
596
+ * @returns {Promise<void>}
597
+ */
598
+ stopRinging(channel) {
599
+ const id = this.client.channels.resolveId(channel);
600
+ if (!channel) return false;
601
+ return this.client.api.channels(id).call['stop-ringing'].post({
602
+ data: {},
603
+ });
604
+ }
605
+
606
+ /**
607
+ * Super Reactions
608
+ * @returns {Promise<number>}
609
+ */
610
+ fetchBurstCredit() {
611
+ return this.client.api.users['@me']['burst-credits'].get().then(d => d.amount);
612
+ }
613
+
614
+ /**
615
+ * Set display name
616
+ * @param {string} displayName The new display name
617
+ * @returns {Promise<ClientUser>}
618
+ */
619
+ setDisplayName(displayName = '') {
620
+ return this.edit({ global_name: displayName });
621
+ }
622
+ }
623
+
624
+ module.exports = ClientUser;
@@ -0,0 +1,41 @@
1
+ 'use strict';
2
+
3
+ const BaseCommandInteraction = require('./BaseCommandInteraction');
4
+ const CommandInteractionOptionResolver = require('./CommandInteractionOptionResolver');
5
+
6
+ /**
7
+ * Represents a command interaction.
8
+ * @extends {BaseCommandInteraction}
9
+ */
10
+ class CommandInteraction extends BaseCommandInteraction {
11
+ constructor(client, data) {
12
+ super(client, data);
13
+
14
+ /**
15
+ * The options passed to the command.
16
+ * @type {CommandInteractionOptionResolver}
17
+ */
18
+ this.options = new CommandInteractionOptionResolver(
19
+ this.client,
20
+ data.data.options?.map(option => this.transformOption(option, data.data.resolved)) ?? [],
21
+ this.transformResolved(data.data.resolved ?? {}),
22
+ );
23
+ }
24
+
25
+ /**
26
+ * Returns a string representation of the command interaction.
27
+ * This can then be copied by a user and executed again in a new command while keeping the option order.
28
+ * @returns {string}
29
+ */
30
+ toString() {
31
+ const properties = [
32
+ this.commandName,
33
+ this.options._group,
34
+ this.options._subcommand,
35
+ ...this.options._hoistedOptions.map(o => `${o.name}:${o.value}`),
36
+ ];
37
+ return `/${properties.filter(Boolean).join(' ')}`;
38
+ }
39
+ }
40
+
41
+ module.exports = CommandInteraction;