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,103 @@
1
+ 'use strict';
2
+
3
+ const BaseMessageComponent = require('./BaseMessageComponent');
4
+ const { MessageComponentTypes } = require('../util/Constants');
5
+
6
+ /**
7
+ * Represents an action row containing message components.
8
+ * @extends {BaseMessageComponent}
9
+ */
10
+ class MessageActionRow extends BaseMessageComponent {
11
+ /**
12
+ * Components that can be placed in an action row
13
+ * * MessageButton
14
+ * * MessageSelectMenu
15
+ * * TextInputComponent
16
+ * @typedef {MessageButton|MessageSelectMenu|TextInputComponent} MessageActionRowComponent
17
+ */
18
+
19
+ /**
20
+ * Options for components that can be placed in an action row
21
+ * * MessageButtonOptions
22
+ * * MessageSelectMenuOptions
23
+ * * TextInputComponentOptions
24
+ * @typedef {MessageButtonOptions|MessageSelectMenuOptions|TextInputComponentOptions} MessageActionRowComponentOptions
25
+ */
26
+
27
+ /**
28
+ * Data that can be resolved into components that can be placed in an action row
29
+ * * MessageActionRowComponent
30
+ * * MessageActionRowComponentOptions
31
+ * @typedef {MessageActionRowComponent|MessageActionRowComponentOptions} MessageActionRowComponentResolvable
32
+ */
33
+
34
+ /**
35
+ * @typedef {BaseMessageComponentOptions} MessageActionRowOptions
36
+ * @property {MessageActionRowComponentResolvable[]} [components]
37
+ * The components to place in this action row
38
+ */
39
+
40
+ /**
41
+ * @param {MessageActionRow|MessageActionRowOptions} [data={}] MessageActionRow to clone or raw data
42
+ * @param {Client} [client] The client constructing this MessageActionRow, if provided
43
+ */
44
+ constructor(data = {}, client = null) {
45
+ super({ type: 'ACTION_ROW' });
46
+
47
+ /**
48
+ * The components in this action row
49
+ * @type {MessageActionRowComponent[]}
50
+ */
51
+ this.components = data.components?.map(c => BaseMessageComponent.create(c, client)) ?? [];
52
+ }
53
+
54
+ /**
55
+ * Adds components to the action row.
56
+ * @param {...MessageActionRowComponentResolvable[]} components The components to add
57
+ * @returns {MessageActionRow}
58
+ */
59
+ addComponents(...components) {
60
+ this.components.push(...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
61
+ return this;
62
+ }
63
+
64
+ /**
65
+ * Sets the components of the action row.
66
+ * @param {...MessageActionRowComponentResolvable[]} components The components to set
67
+ * @returns {MessageActionRow}
68
+ */
69
+ setComponents(...components) {
70
+ this.spliceComponents(0, this.components.length, components);
71
+ return this;
72
+ }
73
+
74
+ /**
75
+ * Removes, replaces, and inserts components in the action row.
76
+ * @param {number} index The index to start at
77
+ * @param {number} deleteCount The number of components to remove
78
+ * @param {...MessageActionRowComponentResolvable[]} [components] The replacing components
79
+ * @returns {MessageActionRow}
80
+ */
81
+ spliceComponents(index, deleteCount, ...components) {
82
+ this.components.splice(index, deleteCount, ...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
83
+ return this;
84
+ }
85
+
86
+ /**
87
+ * Transforms the action row to a plain object.
88
+ * @returns {APIMessageComponent} The raw data of this action row
89
+ */
90
+ toJSON() {
91
+ return {
92
+ components: this.components.map(c => c.toJSON()),
93
+ type: MessageComponentTypes[this.type],
94
+ };
95
+ }
96
+ }
97
+
98
+ module.exports = MessageActionRow;
99
+
100
+ /**
101
+ * @external APIMessageComponent
102
+ * @see {@link https://discord.com/developers/docs/interactions/message-components#component-object}
103
+ */
@@ -0,0 +1,193 @@
1
+ 'use strict';
2
+
3
+ const Util = require('../util/Util');
4
+
5
+ /**
6
+ * Represents an attachment in a message.
7
+ */
8
+ class MessageAttachment {
9
+ /**
10
+ * @param {BufferResolvable|Stream} attachment The file
11
+ * @param {string} [name=null] The name of the file, if any
12
+ * @param {APIAttachment} [data] Extra data
13
+ */
14
+ constructor(attachment, name = null, data) {
15
+ this.attachment = attachment;
16
+ /**
17
+ * The name of this attachment
18
+ * @type {?string}
19
+ */
20
+ this.name = name;
21
+ if (data) this._patch(data);
22
+ }
23
+
24
+ /**
25
+ * Sets the description of this attachment.
26
+ * @param {string} description The description of the file
27
+ * @returns {MessageAttachment} This attachment
28
+ */
29
+ setDescription(description) {
30
+ this.description = description;
31
+ return this;
32
+ }
33
+
34
+ /**
35
+ * Sets the file of this attachment.
36
+ * @param {BufferResolvable|Stream} attachment The file
37
+ * @param {string} [name=null] The name of the file, if any
38
+ * @returns {MessageAttachment} This attachment
39
+ */
40
+ setFile(attachment, name = null) {
41
+ this.attachment = attachment;
42
+ this.name = name;
43
+ return this;
44
+ }
45
+
46
+ /**
47
+ * Sets the name of this attachment.
48
+ * @param {string} name The name of the file
49
+ * @returns {MessageAttachment} This attachment
50
+ */
51
+ setName(name) {
52
+ this.name = name;
53
+ return this;
54
+ }
55
+
56
+ /**
57
+ * Sets whether this attachment is a spoiler
58
+ * @param {boolean} [spoiler=true] Whether the attachment should be marked as a spoiler
59
+ * @returns {MessageAttachment} This attachment
60
+ */
61
+ setSpoiler(spoiler = true) {
62
+ if (spoiler === this.spoiler) return this;
63
+
64
+ if (!spoiler) {
65
+ while (this.spoiler) {
66
+ this.name = this.name.slice('SPOILER_'.length);
67
+ }
68
+ return this;
69
+ }
70
+ this.name = `SPOILER_${this.name}`;
71
+ return this;
72
+ }
73
+
74
+ _patch(data) {
75
+ /**
76
+ * The attachment's id
77
+ * @type {Snowflake}
78
+ */
79
+ this.id = data.id;
80
+
81
+ if ('size' in data) {
82
+ /**
83
+ * The size of this attachment in bytes
84
+ * @type {number}
85
+ */
86
+ this.size = data.size;
87
+ }
88
+
89
+ if ('url' in data) {
90
+ /**
91
+ * The URL to this attachment
92
+ * @type {string}
93
+ */
94
+ this.url = data.url;
95
+ }
96
+
97
+ if ('proxy_url' in data) {
98
+ /**
99
+ * The Proxy URL to this attachment
100
+ * @type {string}
101
+ */
102
+ this.proxyURL = data.proxy_url;
103
+ }
104
+
105
+ if ('height' in data) {
106
+ /**
107
+ * The height of this attachment (if an image or video)
108
+ * @type {?number}
109
+ */
110
+ this.height = data.height;
111
+ } else {
112
+ this.height ??= null;
113
+ }
114
+
115
+ if ('width' in data) {
116
+ /**
117
+ * The width of this attachment (if an image or video)
118
+ * @type {?number}
119
+ */
120
+ this.width = data.width;
121
+ } else {
122
+ this.width ??= null;
123
+ }
124
+
125
+ if ('content_type' in data) {
126
+ /**
127
+ * The media type of this attachment
128
+ * @type {?string}
129
+ */
130
+ this.contentType = data.content_type;
131
+ } else {
132
+ this.contentType ??= null;
133
+ }
134
+
135
+ if ('description' in data) {
136
+ /**
137
+ * The description (alt text) of this attachment
138
+ * @type {?string}
139
+ */
140
+ this.description = data.description;
141
+ } else {
142
+ this.description ??= null;
143
+ }
144
+
145
+ /**
146
+ * Whether this attachment is ephemeral
147
+ * @type {boolean}
148
+ */
149
+ this.ephemeral = data.ephemeral ?? false;
150
+
151
+ if ('duration_secs' in data) {
152
+ /**
153
+ * The duration of this attachment in seconds
154
+ * <info>This will only be available if the attachment is an audio file.</info>
155
+ * @type {?number}
156
+ */
157
+ this.duration = data.duration_secs;
158
+ } else {
159
+ this.duration ??= null;
160
+ }
161
+
162
+ if ('waveform' in data) {
163
+ /**
164
+ * The base64 encoded byte array representing a sampled waveform
165
+ * <info>This will only be available if the attachment is an audio file.</info>
166
+ * @type {?string}
167
+ */
168
+ this.waveform = data.waveform;
169
+ } else {
170
+ this.waveform ??= null;
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Whether or not this attachment has been marked as a spoiler
176
+ * @type {boolean}
177
+ * @readonly
178
+ */
179
+ get spoiler() {
180
+ return Util.basename(this.url ?? this.name).startsWith('SPOILER_');
181
+ }
182
+
183
+ toJSON() {
184
+ return Util.flatten(this);
185
+ }
186
+ }
187
+
188
+ module.exports = MessageAttachment;
189
+
190
+ /**
191
+ * @external APIAttachment
192
+ * @see {@link https://discord.com/developers/docs/resources/channel#attachment-object}
193
+ */
@@ -0,0 +1,231 @@
1
+ 'use strict';
2
+
3
+ const { setTimeout } = require('node:timers');
4
+ const BaseMessageComponent = require('./BaseMessageComponent');
5
+ const { RangeError } = require('../errors');
6
+ const { MessageButtonStyles, MessageComponentTypes, InteractionTypes } = require('../util/Constants');
7
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
8
+ const Util = require('../util/Util');
9
+ const { lazy } = require('../util/Util');
10
+ const Message = lazy(() => require('../structures/Message').Message);
11
+
12
+ /**
13
+ * Represents a button message component.
14
+ * @extends {BaseMessageComponent}
15
+ */
16
+ class MessageButton extends BaseMessageComponent {
17
+ /**
18
+ * @typedef {BaseMessageComponentOptions} MessageButtonOptions
19
+ * @property {string} [label] The text to be displayed on this button
20
+ * @property {string} [customId] A unique string to be sent in the interaction when clicked
21
+ * @property {MessageButtonStyleResolvable} [style] The style of this button
22
+ * @property {EmojiIdentifierResolvable} [emoji] The emoji to be displayed to the left of the text
23
+ * @property {string} [url] Optional URL for link-style buttons
24
+ * @property {boolean} [disabled=false] Disables the button to prevent interactions
25
+ */
26
+
27
+ /**
28
+ * @param {MessageButton|MessageButtonOptions} [data={}] MessageButton to clone or raw data
29
+ */
30
+ constructor(data = {}) {
31
+ super({ type: 'BUTTON' });
32
+
33
+ this.setup(data);
34
+ }
35
+
36
+ setup(data) {
37
+ /**
38
+ * The text to be displayed on this button
39
+ * @type {?string}
40
+ */
41
+ this.label = data.label ?? null;
42
+
43
+ /**
44
+ * A unique string to be sent in the interaction when clicked
45
+ * @type {?string}
46
+ */
47
+ this.customId = data.custom_id ?? data.customId ?? null;
48
+
49
+ /**
50
+ * The style of this button
51
+ * @type {?MessageButtonStyle}
52
+ */
53
+ this.style = data.style ? MessageButton.resolveStyle(data.style) : null;
54
+
55
+ /**
56
+ * Emoji for this button
57
+ * @type {?RawEmoji}
58
+ */
59
+ this.emoji = data.emoji ? Util.resolvePartialEmoji(data.emoji) : null;
60
+
61
+ /**
62
+ * The URL this button links to, if it is a Link style button
63
+ * @type {?string}
64
+ */
65
+ this.url = data.url ?? null;
66
+
67
+ /**
68
+ * Whether this button is currently disabled
69
+ * @type {boolean}
70
+ */
71
+ this.disabled = data.disabled ?? false;
72
+ }
73
+
74
+ /**
75
+ * Sets the custom id for this button
76
+ * @param {string} customId A unique string to be sent in the interaction when clicked
77
+ * @returns {MessageButton}
78
+ */
79
+ setCustomId(customId) {
80
+ this.customId = Util.verifyString(customId, RangeError, 'BUTTON_CUSTOM_ID');
81
+ return this;
82
+ }
83
+
84
+ /**
85
+ * Sets the interactive status of the button
86
+ * @param {boolean} [disabled=true] Whether this button should be disabled
87
+ * @returns {MessageButton}
88
+ */
89
+ setDisabled(disabled = true) {
90
+ this.disabled = disabled;
91
+ return this;
92
+ }
93
+
94
+ /**
95
+ * Set the emoji of this button
96
+ * @param {EmojiIdentifierResolvable} emoji The emoji to be displayed on this button
97
+ * @returns {MessageButton}
98
+ */
99
+ setEmoji(emoji) {
100
+ this.emoji = Util.resolvePartialEmoji(emoji);
101
+ return this;
102
+ }
103
+
104
+ /**
105
+ * Sets the label of this button
106
+ * @param {string} label The text to be displayed on this button
107
+ * @returns {MessageButton}
108
+ */
109
+ setLabel(label) {
110
+ this.label = Util.verifyString(label, RangeError, 'BUTTON_LABEL');
111
+ return this;
112
+ }
113
+
114
+ /**
115
+ * Sets the style of this button
116
+ * @param {MessageButtonStyleResolvable} style The style of this button
117
+ * @returns {MessageButton}
118
+ */
119
+ setStyle(style) {
120
+ this.style = MessageButton.resolveStyle(style);
121
+ return this;
122
+ }
123
+
124
+ /**
125
+ * Sets the URL of this button.
126
+ * <info>MessageButton#style must be LINK when setting a URL</info>
127
+ * @param {string} url The URL of this button
128
+ * @returns {MessageButton}
129
+ */
130
+ setURL(url) {
131
+ this.url = Util.verifyString(url, RangeError, 'BUTTON_URL');
132
+ return this;
133
+ }
134
+
135
+ /**
136
+ * Transforms the button to a plain object.
137
+ * @returns {APIMessageButton} The raw data of this button
138
+ */
139
+ toJSON() {
140
+ return {
141
+ custom_id: this.customId,
142
+ disabled: this.disabled,
143
+ emoji: this.emoji,
144
+ label: this.label,
145
+ style: MessageButtonStyles[this.style],
146
+ type: MessageComponentTypes[this.type],
147
+ url: this.url,
148
+ };
149
+ }
150
+
151
+ /**
152
+ * Data that can be resolved to a MessageButtonStyle. This can be
153
+ * * MessageButtonStyle
154
+ * * number
155
+ * @typedef {number|MessageButtonStyle} MessageButtonStyleResolvable
156
+ */
157
+
158
+ /**
159
+ * Resolves the style of a button
160
+ * @param {MessageButtonStyleResolvable} style The style to resolve
161
+ * @returns {MessageButtonStyle}
162
+ * @private
163
+ */
164
+ static resolveStyle(style) {
165
+ return typeof style === 'string' ? style : MessageButtonStyles[style];
166
+ }
167
+ // Patch Click
168
+ /**
169
+ * Click the button
170
+ * @param {Message} message Discord Message
171
+ * @returns {Promise<InteractionResponse>}
172
+ */
173
+ async click(message) {
174
+ const nonce = SnowflakeUtil.generate();
175
+ if (!(message instanceof Message())) throw new Error('[UNKNOWN_MESSAGE] Please pass a valid Message');
176
+ if (!this.customId || this.style == MessageButtonStyles.LINK || this.disabled) return false;
177
+ const data = {
178
+ type: InteractionTypes.MESSAGE_COMPONENT,
179
+ nonce,
180
+ guild_id: message.guild?.id ?? null,
181
+ channel_id: message.channel.id,
182
+ message_id: message.id,
183
+ application_id: message.applicationId ?? message.author.id,
184
+ session_id: message.client.session_id,
185
+ message_flags: message.flags.bitfield,
186
+ data: {
187
+ component_type: MessageComponentTypes.BUTTON,
188
+ custom_id: this.customId,
189
+ },
190
+ };
191
+ await message.client.api.interactions.post({
192
+ data,
193
+ });
194
+ message.client._interactionCache.set(nonce, {
195
+ channelId: message.channelId,
196
+ guildId: message.guildId,
197
+ metadata: data,
198
+ });
199
+ return new Promise((resolve, reject) => {
200
+ const handler = data => {
201
+ timeout.refresh();
202
+ if (data.metadata.nonce !== nonce) return;
203
+ clearTimeout(timeout);
204
+ message.client.removeListener('interactionResponse', handler);
205
+ message.client.decrementMaxListeners();
206
+ if (data.status) {
207
+ resolve(data.metadata);
208
+ } else {
209
+ reject(
210
+ new Error('INTERACTION_ERROR', {
211
+ cause: data,
212
+ }),
213
+ );
214
+ }
215
+ };
216
+ const timeout = setTimeout(() => {
217
+ message.client.removeListener('interactionResponse', handler);
218
+ message.client.decrementMaxListeners();
219
+ reject(
220
+ new Error('INTERACTION_TIMEOUT', {
221
+ cause: data,
222
+ }),
223
+ );
224
+ }, message.client.options.interactionTimeout).unref();
225
+ message.client.incrementMaxListeners();
226
+ message.client.on('interactionResponse', handler);
227
+ });
228
+ }
229
+ }
230
+
231
+ module.exports = MessageButton;
@@ -0,0 +1,146 @@
1
+ 'use strict';
2
+
3
+ const Collector = require('./interfaces/Collector');
4
+ const { Events } = require('../util/Constants');
5
+
6
+ /**
7
+ * @typedef {CollectorOptions} MessageCollectorOptions
8
+ * @property {number} max The maximum amount of messages to collect
9
+ * @property {number} maxProcessed The maximum amount of messages to process
10
+ */
11
+
12
+ /**
13
+ * Collects messages on a channel.
14
+ * Will automatically stop if the channel ({@link Client#event:channelDelete channelDelete}),
15
+ * thread ({@link Client#event:threadDelete threadDelete}), or
16
+ * guild ({@link Client#event:guildDelete guildDelete}) is deleted.
17
+ * @extends {Collector}
18
+ */
19
+ class MessageCollector extends Collector {
20
+ /**
21
+ * @param {TextBasedChannels} channel The channel
22
+ * @param {MessageCollectorOptions} options The options to be applied to this collector
23
+ * @emits MessageCollector#message
24
+ */
25
+ constructor(channel, options = {}) {
26
+ super(channel.client, options);
27
+
28
+ /**
29
+ * The channel
30
+ * @type {TextBasedChannels}
31
+ */
32
+ this.channel = channel;
33
+
34
+ /**
35
+ * Total number of messages that were received in the channel during message collection
36
+ * @type {number}
37
+ */
38
+ this.received = 0;
39
+
40
+ const bulkDeleteListener = messages => {
41
+ for (const message of messages.values()) this.handleDispose(message);
42
+ };
43
+
44
+ this._handleChannelDeletion = this._handleChannelDeletion.bind(this);
45
+ this._handleThreadDeletion = this._handleThreadDeletion.bind(this);
46
+ this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
47
+
48
+ this.client.incrementMaxListeners();
49
+ this.client.on(Events.MESSAGE_CREATE, this.handleCollect);
50
+ this.client.on(Events.MESSAGE_DELETE, this.handleDispose);
51
+ this.client.on(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
52
+ this.client.on(Events.CHANNEL_DELETE, this._handleChannelDeletion);
53
+ this.client.on(Events.THREAD_DELETE, this._handleThreadDeletion);
54
+ this.client.on(Events.GUILD_DELETE, this._handleGuildDeletion);
55
+
56
+ this.once('end', () => {
57
+ this.client.removeListener(Events.MESSAGE_CREATE, this.handleCollect);
58
+ this.client.removeListener(Events.MESSAGE_DELETE, this.handleDispose);
59
+ this.client.removeListener(Events.MESSAGE_BULK_DELETE, bulkDeleteListener);
60
+ this.client.removeListener(Events.CHANNEL_DELETE, this._handleChannelDeletion);
61
+ this.client.removeListener(Events.THREAD_DELETE, this._handleThreadDeletion);
62
+ this.client.removeListener(Events.GUILD_DELETE, this._handleGuildDeletion);
63
+ this.client.decrementMaxListeners();
64
+ });
65
+ }
66
+
67
+ /**
68
+ * Handles a message for possible collection.
69
+ * @param {Message} message The message that could be collected
70
+ * @returns {?Snowflake}
71
+ * @private
72
+ */
73
+ collect(message) {
74
+ /**
75
+ * Emitted whenever a message is collected.
76
+ * @event MessageCollector#collect
77
+ * @param {Message} message The message that was collected
78
+ */
79
+ if (message.channelId !== this.channel.id) return null;
80
+ this.received++;
81
+ return message.id;
82
+ }
83
+
84
+ /**
85
+ * Handles a message for possible disposal.
86
+ * @param {Message} message The message that could be disposed of
87
+ * @returns {?Snowflake}
88
+ */
89
+ dispose(message) {
90
+ /**
91
+ * Emitted whenever a message is disposed of.
92
+ * @event MessageCollector#dispose
93
+ * @param {Message} message The message that was disposed of
94
+ */
95
+ return message.channelId === this.channel.id ? message.id : null;
96
+ }
97
+
98
+ /**
99
+ * The reason this collector has ended with, or null if it hasn't ended yet
100
+ * @type {?string}
101
+ * @readonly
102
+ */
103
+ get endReason() {
104
+ if (this.options.max && this.collected.size >= this.options.max) return 'limit';
105
+ if (this.options.maxProcessed && this.received === this.options.maxProcessed) return 'processedLimit';
106
+ return null;
107
+ }
108
+
109
+ /**
110
+ * Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.
111
+ * @private
112
+ * @param {GuildChannel} channel The channel that was deleted
113
+ * @returns {void}
114
+ */
115
+ _handleChannelDeletion(channel) {
116
+ if (channel.id === this.channel.id || channel.id === this.channel.parentId) {
117
+ this.stop('channelDelete');
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.
123
+ * @private
124
+ * @param {ThreadChannel} thread The thread that was deleted
125
+ * @returns {void}
126
+ */
127
+ _handleThreadDeletion(thread) {
128
+ if (thread.id === this.channel.id) {
129
+ this.stop('threadDelete');
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.
135
+ * @private
136
+ * @param {Guild} guild The guild that was deleted
137
+ * @returns {void}
138
+ */
139
+ _handleGuildDeletion(guild) {
140
+ if (guild.id === this.channel.guild?.id) {
141
+ this.stop('guildDelete');
142
+ }
143
+ }
144
+ }
145
+
146
+ module.exports = MessageCollector;