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

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

Potentially problematic release.


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

Files changed (343) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +127 -5
  3. package/package.json +101 -6
  4. package/src/WebSocket.js +39 -0
  5. package/src/client/BaseClient.js +87 -0
  6. package/src/client/Client.js +1154 -0
  7. package/src/client/WebhookClient.js +61 -0
  8. package/src/client/actions/Action.js +115 -0
  9. package/src/client/actions/ActionsManager.js +72 -0
  10. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  11. package/src/client/actions/AutoModerationActionExecution.js +26 -0
  12. package/src/client/actions/AutoModerationRuleCreate.js +27 -0
  13. package/src/client/actions/AutoModerationRuleDelete.js +31 -0
  14. package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
  15. package/src/client/actions/ChannelCreate.js +23 -0
  16. package/src/client/actions/ChannelDelete.js +39 -0
  17. package/src/client/actions/ChannelUpdate.js +34 -0
  18. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  19. package/src/client/actions/GuildBanAdd.js +20 -0
  20. package/src/client/actions/GuildBanRemove.js +25 -0
  21. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  22. package/src/client/actions/GuildDelete.js +65 -0
  23. package/src/client/actions/GuildEmojiCreate.js +20 -0
  24. package/src/client/actions/GuildEmojiDelete.js +21 -0
  25. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  26. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  27. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  28. package/src/client/actions/GuildMemberRemove.js +33 -0
  29. package/src/client/actions/GuildMemberUpdate.js +44 -0
  30. package/src/client/actions/GuildRoleCreate.js +25 -0
  31. package/src/client/actions/GuildRoleDelete.js +31 -0
  32. package/src/client/actions/GuildRoleUpdate.js +39 -0
  33. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  34. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  35. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  36. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  37. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  38. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  39. package/src/client/actions/GuildStickerCreate.js +20 -0
  40. package/src/client/actions/GuildStickerDelete.js +21 -0
  41. package/src/client/actions/GuildStickerUpdate.js +20 -0
  42. package/src/client/actions/GuildStickersUpdate.js +34 -0
  43. package/src/client/actions/GuildUpdate.js +33 -0
  44. package/src/client/actions/InteractionCreate.js +115 -0
  45. package/src/client/actions/InviteCreate.js +28 -0
  46. package/src/client/actions/InviteDelete.js +30 -0
  47. package/src/client/actions/MessageCreate.js +50 -0
  48. package/src/client/actions/MessageDelete.js +32 -0
  49. package/src/client/actions/MessageDeleteBulk.js +46 -0
  50. package/src/client/actions/MessageReactionAdd.js +56 -0
  51. package/src/client/actions/MessageReactionRemove.js +45 -0
  52. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  53. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  54. package/src/client/actions/MessageUpdate.js +26 -0
  55. package/src/client/actions/PresenceUpdate.js +45 -0
  56. package/src/client/actions/StageInstanceCreate.js +28 -0
  57. package/src/client/actions/StageInstanceDelete.js +33 -0
  58. package/src/client/actions/StageInstanceUpdate.js +30 -0
  59. package/src/client/actions/ThreadCreate.js +24 -0
  60. package/src/client/actions/ThreadDelete.js +32 -0
  61. package/src/client/actions/ThreadListSync.js +59 -0
  62. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  63. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  64. package/src/client/actions/TypingStart.js +29 -0
  65. package/src/client/actions/UserUpdate.js +35 -0
  66. package/src/client/actions/VoiceStateUpdate.js +57 -0
  67. package/src/client/actions/WebhooksUpdate.js +20 -0
  68. package/src/client/voice/ClientVoiceManager.js +51 -0
  69. package/src/client/websocket/WebSocketManager.js +412 -0
  70. package/src/client/websocket/WebSocketShard.js +908 -0
  71. package/src/client/websocket/handlers/APPLICATION_COMMAND_AUTOCOMPLETE_RESPONSE.js +23 -0
  72. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  73. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  74. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  75. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  76. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  77. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  78. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  79. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  80. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  81. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  82. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  83. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  84. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  85. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  86. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +16 -0
  87. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  88. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  89. package/src/client/websocket/handlers/GUILD_APPLICATION_COMMANDS_UPDATE.js +11 -0
  90. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  91. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  92. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  93. package/src/client/websocket/handlers/GUILD_CREATE.js +46 -0
  94. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  95. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  96. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  97. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  98. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  99. package/src/client/websocket/handlers/GUILD_MEMBER_LIST_UPDATE.js +55 -0
  100. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  101. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  102. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  103. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  104. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  105. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  106. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  107. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  108. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  109. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  110. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/INTERACTION_CREATE.js +16 -0
  113. package/src/client/websocket/handlers/INTERACTION_FAILURE.js +18 -0
  114. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +11 -0
  115. package/src/client/websocket/handlers/INTERACTION_SUCCESS.js +30 -0
  116. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  117. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  118. package/src/client/websocket/handlers/MESSAGE_ACK.js +16 -0
  119. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  120. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  121. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  122. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  123. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  124. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  125. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  126. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  127. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  128. package/src/client/websocket/handlers/READY.js +172 -0
  129. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +17 -0
  130. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +15 -0
  131. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +18 -0
  132. package/src/client/websocket/handlers/RESUMED.js +14 -0
  133. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  134. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  135. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  136. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  137. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  138. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  139. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  140. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  141. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  142. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  143. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +12 -0
  144. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  145. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +9 -0
  146. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  147. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  148. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  149. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  150. package/src/client/websocket/handlers/index.js +86 -0
  151. package/src/errors/DJSError.js +61 -0
  152. package/src/errors/Messages.js +227 -0
  153. package/src/errors/index.js +4 -0
  154. package/src/index.js +190 -0
  155. package/src/main.js +1 -0
  156. package/src/managers/ApplicationCommandManager.js +267 -0
  157. package/src/managers/ApplicationCommandPermissionsManager.js +425 -0
  158. package/src/managers/AutoModerationRuleManager.js +296 -0
  159. package/src/managers/BaseGuildEmojiManager.js +80 -0
  160. package/src/managers/BaseManager.js +19 -0
  161. package/src/managers/BillingManager.js +66 -0
  162. package/src/managers/CachedManager.js +71 -0
  163. package/src/managers/ChannelManager.js +139 -0
  164. package/src/managers/ClientUserSettingManager.js +490 -0
  165. package/src/managers/DataManager.js +61 -0
  166. package/src/managers/DeveloperPortalManager.js +104 -0
  167. package/src/managers/GuildApplicationCommandManager.js +28 -0
  168. package/src/managers/GuildBanManager.js +204 -0
  169. package/src/managers/GuildChannelManager.js +502 -0
  170. package/src/managers/GuildEmojiManager.js +171 -0
  171. package/src/managers/GuildEmojiRoleManager.js +118 -0
  172. package/src/managers/GuildFolderManager.js +24 -0
  173. package/src/managers/GuildForumThreadManager.js +114 -0
  174. package/src/managers/GuildInviteManager.js +213 -0
  175. package/src/managers/GuildManager.js +304 -0
  176. package/src/managers/GuildMemberManager.js +724 -0
  177. package/src/managers/GuildMemberRoleManager.js +191 -0
  178. package/src/managers/GuildScheduledEventManager.js +296 -0
  179. package/src/managers/GuildSettingManager.js +148 -0
  180. package/src/managers/GuildStickerManager.js +179 -0
  181. package/src/managers/GuildTextThreadManager.js +98 -0
  182. package/src/managers/InteractionManager.js +39 -0
  183. package/src/managers/MessageManager.js +393 -0
  184. package/src/managers/PermissionOverwriteManager.js +166 -0
  185. package/src/managers/PresenceManager.js +58 -0
  186. package/src/managers/ReactionManager.js +67 -0
  187. package/src/managers/ReactionUserManager.js +71 -0
  188. package/src/managers/RelationshipManager.js +258 -0
  189. package/src/managers/RoleManager.js +352 -0
  190. package/src/managers/SessionManager.js +57 -0
  191. package/src/managers/StageInstanceManager.js +162 -0
  192. package/src/managers/ThreadManager.js +207 -0
  193. package/src/managers/ThreadMemberManager.js +186 -0
  194. package/src/managers/UserManager.js +150 -0
  195. package/src/managers/VoiceStateManager.js +37 -0
  196. package/src/rest/APIRequest.js +136 -0
  197. package/src/rest/APIRouter.js +53 -0
  198. package/src/rest/CaptchaSolver.js +78 -0
  199. package/src/rest/DiscordAPIError.js +103 -0
  200. package/src/rest/HTTPError.js +62 -0
  201. package/src/rest/RESTManager.js +81 -0
  202. package/src/rest/RateLimitError.js +55 -0
  203. package/src/rest/RequestHandler.js +446 -0
  204. package/src/sharding/Shard.js +443 -0
  205. package/src/sharding/ShardClientUtil.js +275 -0
  206. package/src/sharding/ShardingManager.js +318 -0
  207. package/src/structures/AnonymousGuild.js +98 -0
  208. package/src/structures/ApplicationCommand.js +1028 -0
  209. package/src/structures/ApplicationRoleConnectionMetadata.js +45 -0
  210. package/src/structures/AutoModerationActionExecution.js +89 -0
  211. package/src/structures/AutoModerationRule.js +294 -0
  212. package/src/structures/AutocompleteInteraction.js +106 -0
  213. package/src/structures/Base.js +43 -0
  214. package/src/structures/BaseCommandInteraction.js +211 -0
  215. package/src/structures/BaseGuild.js +116 -0
  216. package/src/structures/BaseGuildEmoji.js +56 -0
  217. package/src/structures/BaseGuildTextChannel.js +193 -0
  218. package/src/structures/BaseGuildVoiceChannel.js +243 -0
  219. package/src/structures/BaseMessageComponent.js +114 -0
  220. package/src/structures/ButtonInteraction.js +11 -0
  221. package/src/structures/Call.js +58 -0
  222. package/src/structures/CategoryChannel.js +83 -0
  223. package/src/structures/Channel.js +271 -0
  224. package/src/structures/ClientApplication.js +204 -0
  225. package/src/structures/ClientPresence.js +84 -0
  226. package/src/structures/ClientUser.js +624 -0
  227. package/src/structures/CommandInteraction.js +41 -0
  228. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  229. package/src/structures/ContextMenuInteraction.js +65 -0
  230. package/src/structures/DMChannel.js +280 -0
  231. package/src/structures/DeveloperPortalApplication.js +520 -0
  232. package/src/structures/DirectoryChannel.js +20 -0
  233. package/src/structures/Emoji.js +148 -0
  234. package/src/structures/ForumChannel.js +271 -0
  235. package/src/structures/Guild.js +1744 -0
  236. package/src/structures/GuildAuditLogs.js +734 -0
  237. package/src/structures/GuildBan.js +59 -0
  238. package/src/structures/GuildBoost.js +108 -0
  239. package/src/structures/GuildChannel.js +454 -0
  240. package/src/structures/GuildEmoji.js +161 -0
  241. package/src/structures/GuildFolder.js +75 -0
  242. package/src/structures/GuildMember.js +686 -0
  243. package/src/structures/GuildPreview.js +191 -0
  244. package/src/structures/GuildPreviewEmoji.js +27 -0
  245. package/src/structures/GuildScheduledEvent.js +441 -0
  246. package/src/structures/GuildTemplate.js +236 -0
  247. package/src/structures/Integration.js +188 -0
  248. package/src/structures/IntegrationApplication.js +96 -0
  249. package/src/structures/Interaction.js +351 -0
  250. package/src/structures/InteractionCollector.js +248 -0
  251. package/src/structures/InteractionResponse.js +114 -0
  252. package/src/structures/InteractionWebhook.js +43 -0
  253. package/src/structures/Invite.js +375 -0
  254. package/src/structures/InviteGuild.js +23 -0
  255. package/src/structures/InviteStageInstance.js +86 -0
  256. package/src/structures/Message.js +1188 -0
  257. package/src/structures/MessageActionRow.js +103 -0
  258. package/src/structures/MessageAttachment.js +193 -0
  259. package/src/structures/MessageButton.js +231 -0
  260. package/src/structures/MessageCollector.js +146 -0
  261. package/src/structures/MessageComponentInteraction.js +120 -0
  262. package/src/structures/MessageContextMenuInteraction.js +20 -0
  263. package/src/structures/MessageEmbed.js +586 -0
  264. package/src/structures/MessageMentions.js +272 -0
  265. package/src/structures/MessagePayload.js +358 -0
  266. package/src/structures/MessageReaction.js +171 -0
  267. package/src/structures/MessageSelectMenu.js +391 -0
  268. package/src/structures/Modal.js +279 -0
  269. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  270. package/src/structures/ModalSubmitInteraction.js +119 -0
  271. package/src/structures/NewsChannel.js +32 -0
  272. package/src/structures/OAuth2Guild.js +28 -0
  273. package/src/structures/PartialGroupDMChannel.js +430 -0
  274. package/src/structures/PermissionOverwrites.js +196 -0
  275. package/src/structures/Presence.js +441 -0
  276. package/src/structures/ReactionCollector.js +229 -0
  277. package/src/structures/ReactionEmoji.js +31 -0
  278. package/src/structures/RichPresence.js +722 -0
  279. package/src/structures/Role.js +515 -0
  280. package/src/structures/SelectMenuInteraction.js +170 -0
  281. package/src/structures/Session.js +81 -0
  282. package/src/structures/StageChannel.js +104 -0
  283. package/src/structures/StageInstance.js +208 -0
  284. package/src/structures/Sticker.js +310 -0
  285. package/src/structures/StickerPack.js +95 -0
  286. package/src/structures/StoreChannel.js +56 -0
  287. package/src/structures/Team.js +167 -0
  288. package/src/structures/TeamMember.js +71 -0
  289. package/src/structures/TextChannel.js +33 -0
  290. package/src/structures/TextInputComponent.js +201 -0
  291. package/src/structures/ThreadChannel.js +626 -0
  292. package/src/structures/ThreadMember.js +105 -0
  293. package/src/structures/Typing.js +74 -0
  294. package/src/structures/User.js +697 -0
  295. package/src/structures/UserContextMenuInteraction.js +29 -0
  296. package/src/structures/VoiceChannel.js +110 -0
  297. package/src/structures/VoiceRegion.js +53 -0
  298. package/src/structures/VoiceState.js +306 -0
  299. package/src/structures/WebEmbed.js +401 -0
  300. package/src/structures/Webhook.js +461 -0
  301. package/src/structures/WelcomeChannel.js +60 -0
  302. package/src/structures/WelcomeScreen.js +48 -0
  303. package/src/structures/Widget.js +87 -0
  304. package/src/structures/WidgetMember.js +99 -0
  305. package/src/structures/interfaces/Application.js +190 -0
  306. package/src/structures/interfaces/Collector.js +300 -0
  307. package/src/structures/interfaces/InteractionResponses.js +313 -0
  308. package/src/structures/interfaces/TextBasedChannel.js +566 -0
  309. package/src/util/ActivityFlags.js +44 -0
  310. package/src/util/ApplicationFlags.js +74 -0
  311. package/src/util/BitField.js +170 -0
  312. package/src/util/ChannelFlags.js +45 -0
  313. package/src/util/Constants.js +1917 -0
  314. package/src/util/DataResolver.js +145 -0
  315. package/src/util/Formatters.js +214 -0
  316. package/src/util/GuildMemberFlags.js +43 -0
  317. package/src/util/Intents.js +74 -0
  318. package/src/util/LimitedCollection.js +131 -0
  319. package/src/util/MessageFlags.js +54 -0
  320. package/src/util/Options.js +360 -0
  321. package/src/util/Permissions.js +187 -0
  322. package/src/util/PremiumUsageFlags.js +31 -0
  323. package/src/util/PurchasedFlags.js +31 -0
  324. package/src/util/RemoteAuth.js +522 -0
  325. package/src/util/SnowflakeUtil.js +92 -0
  326. package/src/util/Sweepers.js +466 -0
  327. package/src/util/SystemChannelFlags.js +55 -0
  328. package/src/util/ThreadMemberFlags.js +30 -0
  329. package/src/util/UserFlags.js +104 -0
  330. package/src/util/Util.js +741 -0
  331. package/src/util/Voice.js +1456 -0
  332. package/src/util/arRPC/index.js +229 -0
  333. package/src/util/arRPC/process/detectable.json +1 -0
  334. package/src/util/arRPC/process/index.js +102 -0
  335. package/src/util/arRPC/process/native/index.js +5 -0
  336. package/src/util/arRPC/process/native/linux.js +37 -0
  337. package/src/util/arRPC/process/native/win32.js +25 -0
  338. package/src/util/arRPC/transports/ipc.js +281 -0
  339. package/src/util/arRPC/transports/websocket.js +128 -0
  340. package/typings/enums.d.ts +346 -0
  341. package/typings/index.d.ts +7725 -0
  342. package/typings/index.test-d.ts +0 -0
  343. package/typings/rawDataTypes.d.ts +283 -0
@@ -0,0 +1,171 @@
1
+ 'use strict';
2
+
3
+ const GuildEmoji = require('./GuildEmoji');
4
+ const ReactionEmoji = require('./ReactionEmoji');
5
+ const ReactionUserManager = require('../managers/ReactionUserManager');
6
+ const Util = require('../util/Util');
7
+
8
+ /**
9
+ * Represents a reaction to a message.
10
+ */
11
+ class MessageReaction {
12
+ constructor(client, data, message) {
13
+ /**
14
+ * The client that instantiated this message reaction
15
+ * @name MessageReaction#client
16
+ * @type {Client}
17
+ * @readonly
18
+ */
19
+ Object.defineProperty(this, 'client', { value: client });
20
+
21
+ /**
22
+ * The message that this reaction refers to
23
+ * @type {Message}
24
+ */
25
+ this.message = message;
26
+
27
+ /**
28
+ * Whether the client has given this reaction
29
+ * @type {boolean}
30
+ */
31
+ this.me = data.me || data.me_burst;
32
+
33
+ /**
34
+ * Super reaction
35
+ * @type {boolean}
36
+ */
37
+ this.isBurst = Boolean(data.me_burst || data.burst);
38
+
39
+ /**
40
+ * A manager of the users that have given this reaction
41
+ * @type {ReactionUserManager}
42
+ */
43
+ this.users = new ReactionUserManager(this, this.me ? [client.user] : []);
44
+
45
+ this._emoji = new ReactionEmoji(this, data.emoji);
46
+
47
+ this._patch(data);
48
+ }
49
+
50
+ _patch(data) {
51
+ if ('count' in data) {
52
+ /**
53
+ * The number of people that have given the same reaction
54
+ * @type {?number}
55
+ */
56
+ this.count ??= data.count;
57
+ }
58
+
59
+ if ('burst_count' in data) {
60
+ /**
61
+ * The number of people that have given the same super reaction
62
+ * @type {?number}
63
+ */
64
+ this.burstCount ??= data.burst_count;
65
+ }
66
+
67
+ if ('burst_colors' in data) {
68
+ /**
69
+ * HEX colors used for super reaction
70
+ * @type {string[]}
71
+ */
72
+ this.burstColors = data.burst_colors;
73
+ }
74
+
75
+ if ('count_details' in data) {
76
+ /**
77
+ * The reaction count details object contains information about super and normal reaction counts.
78
+ * @typedef {Object} ReactionCountDetailsData
79
+ * @property {number} burst Count of super reaction
80
+ * @property {number} normal Count of normal reaction
81
+ */
82
+
83
+ /**
84
+ * The reaction count details object contains information about super and normal reaction counts.
85
+ * @type {?ReactionCountDetailsData}
86
+ */
87
+ this.countDetails = {
88
+ burst: data.count_details.burst,
89
+ normal: data.count_details.normal,
90
+ };
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Removes all users from this reaction.
96
+ * @returns {Promise<MessageReaction>}
97
+ */
98
+ async remove() {
99
+ await this.client.api
100
+ .channels(this.message.channelId)
101
+ .messages(this.message.id)
102
+ .reactions(this._emoji.identifier)
103
+ .delete();
104
+ return this;
105
+ }
106
+
107
+ /**
108
+ * The emoji of this reaction. Either a {@link GuildEmoji} object for known custom emojis, or a {@link ReactionEmoji}
109
+ * object which has fewer properties. Whatever the prototype of the emoji, it will still have
110
+ * `name`, `id`, `identifier` and `toString()`
111
+ * @type {GuildEmoji|ReactionEmoji}
112
+ * @readonly
113
+ */
114
+ get emoji() {
115
+ if (this._emoji instanceof GuildEmoji) return this._emoji;
116
+ // Check to see if the emoji has become known to the client
117
+ if (this._emoji.id) {
118
+ const emojis = this.message.client.emojis.cache;
119
+ if (emojis.has(this._emoji.id)) {
120
+ const emoji = emojis.get(this._emoji.id);
121
+ this._emoji = emoji;
122
+ return emoji;
123
+ }
124
+ }
125
+ return this._emoji;
126
+ }
127
+
128
+ /**
129
+ * Whether or not this reaction is a partial
130
+ * @type {boolean}
131
+ * @readonly
132
+ */
133
+ get partial() {
134
+ return this.count === null;
135
+ }
136
+
137
+ /**
138
+ * Fetch this reaction.
139
+ * @returns {Promise<MessageReaction>}
140
+ */
141
+ async fetch() {
142
+ const message = await this.message.fetch();
143
+ const existing = message.reactions.cache.get(this.emoji.id ?? this.emoji.name);
144
+ // The reaction won't get set when it has been completely removed
145
+ this._patch(existing ?? { count: 0 });
146
+ return this;
147
+ }
148
+
149
+ toJSON() {
150
+ return Util.flatten(this, { emoji: 'emojiId', message: 'messageId' });
151
+ }
152
+
153
+ _add(user) {
154
+ if (this.partial) return;
155
+ this.users.cache.set(user.id, user);
156
+ if (!this.me || user.id !== this.message.client.user.id || this.count === 0) this.count++;
157
+ this.me ||= user.id === this.message.client.user.id;
158
+ }
159
+
160
+ _remove(user) {
161
+ if (this.partial) return;
162
+ this.users.cache.delete(user.id);
163
+ if (!this.me || user.id !== this.message.client.user.id) this.count--;
164
+ if (user.id === this.message.client.user.id) this.me = false;
165
+ if (this.count <= 0 && this.users.cache.size === 0) {
166
+ this.message.reactions.cache.delete(this.emoji.id ?? this.emoji.name);
167
+ }
168
+ }
169
+ }
170
+
171
+ module.exports = MessageReaction;
@@ -0,0 +1,391 @@
1
+ 'use strict';
2
+
3
+ const { setTimeout } = require('node:timers');
4
+ const BaseMessageComponent = require('./BaseMessageComponent');
5
+ const {
6
+ ChannelTypes,
7
+ MessageComponentTypes,
8
+ SelectMenuComponentTypes,
9
+ InteractionTypes,
10
+ } = require('../util/Constants');
11
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
12
+ const { lazy } = require('../util/Util');
13
+ const Message = lazy(() => require('./Message').Message);
14
+ const Util = require('../util/Util');
15
+
16
+ /**
17
+ * Represents a select menu message component
18
+ * @extends {BaseMessageComponent}
19
+ */
20
+ class MessageSelectMenu extends BaseMessageComponent {
21
+ /**
22
+ * @typedef {BaseMessageComponentOptions} MessageSelectMenuOptions
23
+ * @property {string} [customId] A unique string to be sent in the interaction when clicked
24
+ * @property {string} [placeholder] Custom placeholder text to display when nothing is selected
25
+ * @property {number} [minValues] The minimum number of selections required
26
+ * @property {number} [maxValues] The maximum number of selections allowed
27
+ * @property {MessageSelectOption[]} [options] Options for the select menu
28
+ * @property {boolean} [disabled=false] Disables the select menu to prevent interactions
29
+ * @property {ChannelType[]} [channelTypes] List of channel types to include in the ChannelSelect component
30
+ */
31
+
32
+ /**
33
+ * @typedef {Object} MessageSelectOption
34
+ * @property {string} label The text to be displayed on this option
35
+ * @property {string} value The value to be sent for this option
36
+ * @property {?string} description Optional description to show for this option
37
+ * @property {?RawEmoji} emoji Emoji to display for this option
38
+ * @property {boolean} default Render this option as the default selection
39
+ */
40
+
41
+ /**
42
+ * @typedef {Object} MessageSelectOptionData
43
+ * @property {string} label The text to be displayed on this option
44
+ * @property {string} value The value to be sent for this option
45
+ * @property {string} [description] Optional description to show for this option
46
+ * @property {EmojiIdentifierResolvable} [emoji] Emoji to display for this option
47
+ * @property {boolean} [default] Render this option as the default selection
48
+ */
49
+
50
+ /**
51
+ * @param {MessageSelectMenu|MessageSelectMenuOptions} [data={}] MessageSelectMenu to clone or raw data
52
+ */
53
+ constructor(data = {}) {
54
+ super({ type: BaseMessageComponent.resolveType(data.type) ?? 'STRING_SELECT' });
55
+
56
+ this.setup(data);
57
+ }
58
+
59
+ setup(data) {
60
+ /**
61
+ * A unique string to be sent in the interaction when clicked
62
+ * @type {?string}
63
+ */
64
+ this.customId = data.custom_id ?? data.customId ?? null;
65
+
66
+ /**
67
+ * Custom placeholder text to display when nothing is selected
68
+ * @type {?string}
69
+ */
70
+ this.placeholder = data.placeholder ?? null;
71
+
72
+ /**
73
+ * The minimum number of selections required
74
+ * @type {?number}
75
+ */
76
+ this.minValues = data.min_values ?? data.minValues ?? null;
77
+
78
+ /**
79
+ * The maximum number of selections allowed
80
+ * @type {?number}
81
+ */
82
+ this.maxValues = data.max_values ?? data.maxValues ?? null;
83
+
84
+ /**
85
+ * Options for the STRING_SELECT menu
86
+ * @type {MessageSelectOption[]}
87
+ */
88
+ this.options = this.constructor.normalizeOptions(data.options ?? []);
89
+
90
+ /**
91
+ * Whether this select menu is currently disabled
92
+ * @type {boolean}
93
+ */
94
+ this.disabled = data.disabled ?? false;
95
+
96
+ /**
97
+ * Channels that are possible to select in CHANNEL_SELECT menu
98
+ * @type {ChannelType[]}
99
+ */
100
+ this.channelTypes =
101
+ data.channel_types?.map(channelType =>
102
+ typeof channelType === 'string' ? channelType : ChannelTypes[channelType],
103
+ ) ?? [];
104
+ }
105
+
106
+ /**
107
+ * Adds the channel types to the select menu
108
+ * @param {...ChannelType[]} channelTypes Added channel types
109
+ * @returns {MessageSelectMenu}
110
+ */
111
+ addChannelTypes(...channelTypes) {
112
+ if (!channelTypes.every(channelType => ChannelTypes[channelType])) {
113
+ throw new TypeError('INVALID_TYPE', 'channelTypes', 'Rest<ChannelTypes[]>');
114
+ }
115
+ this.channelTypes.push(
116
+ ...channelTypes.map(channelType => (typeof channelType === 'string' ? channelType : ChannelTypes[channelType])),
117
+ );
118
+ return this;
119
+ }
120
+
121
+ /**
122
+ * Sets the channel types of the select menu
123
+ * @param {...ChannelType[]} channelTypes An array of new channel types
124
+ * @returns {MessageSelectMenu}
125
+ */
126
+ setChannelTypes(...channelTypes) {
127
+ if (!channelTypes.every(channelType => ChannelTypes[channelType])) {
128
+ throw new TypeError('INVALID_TYPE', 'channelTypes', 'Rest<ChannelTypes[]>');
129
+ }
130
+ this.channelTypes = channelTypes.map(channelType =>
131
+ typeof channelType === 'string' ? channelType : ChannelTypes[channelType],
132
+ );
133
+ return this;
134
+ }
135
+
136
+ /**
137
+ * Sets the custom id of this select menu
138
+ * @param {string} customId A unique string to be sent in the interaction when clicked
139
+ * @returns {MessageSelectMenu}
140
+ */
141
+ setCustomId(customId) {
142
+ this.customId = Util.verifyString(customId, RangeError, 'SELECT_MENU_CUSTOM_ID');
143
+ return this;
144
+ }
145
+
146
+ /**
147
+ * Sets the interactive status of the select menu
148
+ * @param {boolean} [disabled=true] Whether this select menu should be disabled
149
+ * @returns {MessageSelectMenu}
150
+ */
151
+ setDisabled(disabled = true) {
152
+ this.disabled = disabled;
153
+ return this;
154
+ }
155
+
156
+ /**
157
+ * Sets the maximum number of selections allowed for this select menu
158
+ * @param {number} maxValues Number of selections to be allowed
159
+ * @returns {MessageSelectMenu}
160
+ */
161
+ setMaxValues(maxValues) {
162
+ this.maxValues = maxValues;
163
+ return this;
164
+ }
165
+
166
+ /**
167
+ * Sets the minimum number of selections required for this select menu
168
+ * <info>This will default the maxValues to the number of options, unless manually set</info>
169
+ * @param {number} minValues Number of selections to be required
170
+ * @returns {MessageSelectMenu}
171
+ */
172
+ setMinValues(minValues) {
173
+ this.minValues = minValues;
174
+ return this;
175
+ }
176
+
177
+ /**
178
+ * Sets the placeholder of this select menu
179
+ * @param {string} placeholder Custom placeholder text to display when nothing is selected
180
+ * @returns {MessageSelectMenu}
181
+ */
182
+ setPlaceholder(placeholder) {
183
+ this.placeholder = Util.verifyString(placeholder, RangeError, 'SELECT_MENU_PLACEHOLDER');
184
+ return this;
185
+ }
186
+
187
+ /**
188
+ * Sets the type of the select menu
189
+ * @param {SelectMenuComponentType} type Type of the select menu
190
+ * @returns {MessageSelectMenu}
191
+ */
192
+ setType(type) {
193
+ if (!SelectMenuComponentTypes[type]) throw new TypeError('INVALID_TYPE', 'type', 'SelectMenuComponentType');
194
+ this.type = BaseMessageComponent.resolveType(type);
195
+ return this;
196
+ }
197
+
198
+ /**
199
+ * Adds options to the select menu.
200
+ * @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The options to add
201
+ * @returns {MessageSelectMenu}
202
+ */
203
+ addOptions(...options) {
204
+ this.options.push(...this.constructor.normalizeOptions(options));
205
+ return this;
206
+ }
207
+
208
+ /**
209
+ * Sets the options of the select menu.
210
+ * @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The options to set
211
+ * @returns {MessageSelectMenu}
212
+ */
213
+ setOptions(...options) {
214
+ this.spliceOptions(0, this.options.length, options);
215
+ return this;
216
+ }
217
+
218
+ /**
219
+ * Removes, replaces, and inserts options in the select menu.
220
+ * @param {number} index The index to start at
221
+ * @param {number} deleteCount The number of options to remove
222
+ * @param {...MessageSelectOptionData|MessageSelectOptionData[]} [options] The replacing option objects
223
+ * @returns {MessageSelectMenu}
224
+ */
225
+ spliceOptions(index, deleteCount, ...options) {
226
+ this.options.splice(index, deleteCount, ...this.constructor.normalizeOptions(...options));
227
+ return this;
228
+ }
229
+
230
+ /**
231
+ * Transforms the select menu into a plain object
232
+ * @returns {APIMessageSelectMenu} The raw data of this select menu
233
+ */
234
+ toJSON() {
235
+ return {
236
+ channel_types: this.channelTypes.map(type => (typeof type === 'string' ? ChannelTypes[type] : type)),
237
+ custom_id: this.customId,
238
+ disabled: this.disabled,
239
+ placeholder: this.placeholder,
240
+ min_values: this.minValues,
241
+ max_values: this.maxValues ?? (this.minValues ? this.options.length : undefined),
242
+ options: this.options,
243
+ type: typeof this.type === 'string' ? MessageComponentTypes[this.type] : this.type,
244
+ };
245
+ }
246
+
247
+ /**
248
+ * Normalizes option input and resolves strings and emojis.
249
+ * @param {MessageSelectOptionData} option The select menu option to normalize
250
+ * @returns {MessageSelectOption}
251
+ */
252
+ static normalizeOption(option) {
253
+ let { label, value, description, emoji } = option;
254
+
255
+ label = Util.verifyString(label, RangeError, 'SELECT_OPTION_LABEL');
256
+ value = Util.verifyString(value, RangeError, 'SELECT_OPTION_VALUE');
257
+ emoji = emoji ? Util.resolvePartialEmoji(emoji) : null;
258
+ description = description ? Util.verifyString(description, RangeError, 'SELECT_OPTION_DESCRIPTION', true) : null;
259
+
260
+ return { label, value, description, emoji, default: option.default ?? false };
261
+ }
262
+
263
+ /**
264
+ * Normalizes option input and resolves strings and emojis.
265
+ * @param {...MessageSelectOptionData|MessageSelectOptionData[]} options The select menu options to normalize
266
+ * @returns {MessageSelectOption[]}
267
+ */
268
+ static normalizeOptions(...options) {
269
+ return options.flat(Infinity).map(option => this.normalizeOption(option));
270
+ }
271
+
272
+ // Add
273
+ /**
274
+ * Mesage select menu
275
+ * @param {Message} message The message this select menu is for
276
+ * @param {Array<any>} values The values of the select menu
277
+ * @returns {Promise<InteractionResponse>}
278
+ */
279
+ async select(message, values) {
280
+ if (!(message instanceof Message())) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message');
281
+ if (!Array.isArray(values)) throw new TypeError('[INVALID_VALUES] Please pass an array of values');
282
+ if (!this.customId || this.disabled) {
283
+ throw new Error('[INVALID_MENU] Menu does not contain Id or has been disabled');
284
+ } // Disabled or null customID
285
+ if (values.length < this.minValues) {
286
+ throw new RangeError(`[SELECT_MENU_MIN_VALUES] The minimum number of values is ${this.minValues}`);
287
+ }
288
+ if (values.length > this.maxValues) {
289
+ throw new RangeError(`[SELECT_MENU_MAX_VALUES] The maximum number of values is ${this.maxValues}`);
290
+ }
291
+ const parseValues = value => {
292
+ switch (this.type) {
293
+ case 'SELECT_MENU':
294
+ case 'STRING_SELECT': {
295
+ if (typeof value !== 'string') throw new TypeError('[INVALID_VALUE] Please pass a string value');
296
+ const value_ = this.options.find(obj => obj.value === value || obj.label === value);
297
+ if (!value_) throw new Error('[INVALID_VALUE] Please pass a valid value');
298
+ return value_.value;
299
+ }
300
+ case 'USER_SELECT': {
301
+ const userId = this.client.users.resolveId(value);
302
+ if (!userId) throw new Error('[INVALID_VALUE] Please pass a valid user');
303
+ return userId;
304
+ }
305
+ case 'ROLE_SELECT': {
306
+ const roleId = this.client.roles.resolveId(value);
307
+ if (!roleId) throw new Error('[INVALID_VALUE] Please pass a valid role');
308
+ return roleId;
309
+ }
310
+ case 'MENTIONABLE_SELECT': {
311
+ const mentionableId = this.client.users.resolveId(value) || this.client.roles.resolveId(value);
312
+ if (!mentionableId) throw new Error('[INVALID_VALUE] Please pass a valid mentionable');
313
+ return mentionableId;
314
+ }
315
+ case 'CHANNEL_SELECT': {
316
+ const channel = this.client.channels.resolve(value);
317
+ if (!channel) throw new Error('[INVALID_VALUE] Please pass a valid channel');
318
+ if (!this.channelTypes.includes(channel.type)) {
319
+ throw new Error(
320
+ `[INVALID_VALUE] Please pass a valid channel type (Got: ${channel.type}, allow: ${this.channelTypes.join(
321
+ ', ',
322
+ )})`,
323
+ );
324
+ }
325
+ return channel.id;
326
+ }
327
+ default: {
328
+ throw new Error(`[INVALID_TYPE] Please pass a valid select menu type (Got ${this.type})`);
329
+ }
330
+ }
331
+ };
332
+
333
+ const nonce = SnowflakeUtil.generate();
334
+ const data = {
335
+ type: InteractionTypes.MESSAGE_COMPONENT,
336
+ guild_id: message.guild?.id ?? null,
337
+ channel_id: message.channel.id,
338
+ message_id: message.id,
339
+ application_id: message.applicationId ?? message.author.id,
340
+ session_id: message.client.session_id,
341
+ message_flags: message.flags.bitfield,
342
+ data: {
343
+ component_type: MessageComponentTypes[this.type],
344
+ custom_id: this.customId,
345
+ type: MessageComponentTypes[this.type],
346
+ values: values?.length ? values.map(parseValues) : [],
347
+ },
348
+ nonce,
349
+ };
350
+
351
+ await message.client.api.interactions.post({
352
+ data,
353
+ });
354
+ message.client._interactionCache.set(nonce, {
355
+ channelId: message.channelId,
356
+ guildId: message.guildId,
357
+ metadata: data,
358
+ });
359
+ return new Promise((resolve, reject) => {
360
+ const handler = data => {
361
+ timeout.refresh();
362
+ if (data.metadata.nonce !== nonce) return;
363
+ clearTimeout(timeout);
364
+ message.client.removeListener('interactionResponse', handler);
365
+ message.client.decrementMaxListeners();
366
+ if (data.status) {
367
+ resolve(data.metadata);
368
+ } else {
369
+ reject(
370
+ new Error('INTERACTION_ERROR', {
371
+ cause: data,
372
+ }),
373
+ );
374
+ }
375
+ };
376
+ const timeout = setTimeout(() => {
377
+ message.client.removeListener('interactionResponse', handler);
378
+ message.client.decrementMaxListeners();
379
+ reject(
380
+ new Error('INTERACTION_TIMEOUT', {
381
+ cause: data,
382
+ }),
383
+ );
384
+ }, message.client.options.interactionTimeout).unref();
385
+ message.client.incrementMaxListeners();
386
+ message.client.on('interactionResponse', handler);
387
+ });
388
+ }
389
+ }
390
+
391
+ module.exports = MessageSelectMenu;