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,279 @@
1
+ 'use strict';
2
+
3
+ const { setTimeout } = require('node:timers');
4
+ const BaseMessageComponent = require('./BaseMessageComponent');
5
+ const User = require('./User');
6
+ const SnowflakeUtil = require('../util/SnowflakeUtil');
7
+ const Util = require('../util/Util');
8
+
9
+ /**
10
+ * Represents a modal (form) to be shown in response to an interaction
11
+ */
12
+ class Modal {
13
+ /**
14
+ * @typedef {Object} ModalOptions
15
+ * @property {string} [customId] A unique string to be sent in the interaction when clicked
16
+ * @property {string} [title] The title to be displayed on this modal
17
+ * @property {Array<(MessageActionRow|MessageActionRowOptions)>} [components]
18
+ * Action rows containing interactive components for the modal (text input components)
19
+ */
20
+
21
+ /**
22
+ * @param {Modal|ModalOptions} data Modal to clone or raw data
23
+ * @param {Client} client The client constructing this Modal, if provided
24
+ */
25
+ constructor(data = {}, client = null) {
26
+ /**
27
+ * A list of MessageActionRows in the modal
28
+ * @type {MessageActionRow[]}
29
+ */
30
+ this.components = data.components?.map(c => BaseMessageComponent.create(c, client)) ?? [];
31
+
32
+ /**
33
+ * A unique string to be sent in the interaction when submitted
34
+ * @type {?string}
35
+ */
36
+ this.customId = data.custom_id ?? data.customId ?? null;
37
+
38
+ /**
39
+ * The title to be displayed on this modal
40
+ * @type {?string}
41
+ */
42
+ this.title = data.title ?? null;
43
+
44
+ /**
45
+ * Timestamp (Discord epoch) of when this modal was created
46
+ * @type {?Snowflake}
47
+ */
48
+ this.nonce = data.nonce ?? null;
49
+
50
+ /**
51
+ * ID slash / button / menu when modal is displayed
52
+ * @type {?Snowflake}
53
+ */
54
+ this.id = data.id ?? null;
55
+
56
+ /**
57
+ * Application sending the modal
58
+ * @type {?Object}
59
+ */
60
+ this.application = data.application
61
+ ? {
62
+ ...data.application,
63
+ bot: data.application.bot ? new User(client, data.application.bot, data.application) : null,
64
+ }
65
+ : null;
66
+
67
+ this.client = client;
68
+ }
69
+
70
+ /**
71
+ * Get Interaction Response
72
+ * @type {?InteractionResponse}
73
+ * @readonly
74
+ */
75
+ get sendFromInteraction() {
76
+ if (this.id && this.nonce && this.client) {
77
+ const cache = this.client._interactionCache.get(this.nonce);
78
+ const channel = cache.guildId
79
+ ? this.client.guilds.cache.get(cache.guildId)?.channels.cache.get(cache.channelId)
80
+ : this.client.channels.cache.get(cache.channelId);
81
+ return channel.interactions.cache.get(this.id);
82
+ }
83
+ return null;
84
+ }
85
+
86
+ /**
87
+ * Adds components to the modal.
88
+ * @param {...MessageActionRowResolvable[]} components The components to add
89
+ * @returns {Modal}
90
+ */
91
+ addComponents(...components) {
92
+ this.components.push(...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
93
+ return this;
94
+ }
95
+
96
+ /**
97
+ * Sets the components of the modal.
98
+ * @param {...MessageActionRowResolvable[]} components The components to set
99
+ * @returns {Modal}
100
+ */
101
+ setComponents(...components) {
102
+ this.spliceComponents(0, this.components.length, components);
103
+ return this;
104
+ }
105
+
106
+ /**
107
+ * Sets the custom id for this modal
108
+ * @param {string} customId A unique string to be sent in the interaction when submitted
109
+ * @returns {Modal}
110
+ */
111
+ setCustomId(customId) {
112
+ this.customId = Util.verifyString(customId, RangeError, 'MODAL_CUSTOM_ID');
113
+ return this;
114
+ }
115
+
116
+ /**
117
+ * Removes, replaces, and inserts components in the modal.
118
+ * @param {number} index The index to start at
119
+ * @param {number} deleteCount The number of components to remove
120
+ * @param {...MessageActionRowResolvable[]} [components] The replacing components
121
+ * @returns {Modal}
122
+ */
123
+ spliceComponents(index, deleteCount, ...components) {
124
+ this.components.splice(index, deleteCount, ...components.flat(Infinity).map(c => BaseMessageComponent.create(c)));
125
+ return this;
126
+ }
127
+
128
+ /**
129
+ * Sets the title of this modal
130
+ * @param {string} title The title to be displayed on this modal
131
+ * @returns {Modal}
132
+ */
133
+ setTitle(title) {
134
+ this.title = Util.verifyString(title, RangeError, 'MODAL_TITLE');
135
+ return this;
136
+ }
137
+
138
+ toJSON() {
139
+ return {
140
+ components: this.components.map(c => c.toJSON()),
141
+ custom_id: this.customId,
142
+ title: this.title,
143
+ id: this.id,
144
+ };
145
+ }
146
+
147
+ /**
148
+ * @typedef {Object} TextInputComponentReplyData
149
+ * @property {string} [customId] TextInputComponent custom id
150
+ * @property {string} [value] TextInputComponent value
151
+ */
152
+
153
+ /**
154
+ * @typedef {Object} ModalReplyData
155
+ * @property {?GuildResolvable} [guild] Guild to send the modal to
156
+ * @property {?TextChannelResolvable} [channel] User to send the modal to
157
+ * @property {?TextInputComponentReplyData[]} [data] Reply data
158
+ */
159
+
160
+ /**
161
+ * Reply to this modal with data. (Event only)
162
+ * @param {ModalReplyData} data Data to send with the modal
163
+ * @returns {Promise<InteractionResponse>}
164
+ * @example
165
+ * client.on('interactionModalCreate', modal => {
166
+ * // 1.
167
+ * modal.reply({
168
+ * data: [
169
+ * {
170
+ * customId: 'code',
171
+ * value: '1+1'
172
+ * }, {
173
+ * customId: 'message',
174
+ * value: 'hello'
175
+ * }
176
+ * ],
177
+ * channel: 'id', // optional
178
+ * guild: 'id', // optional
179
+ * })
180
+ * // or 2.
181
+ * modal.components[0].components[0].setValue('1+1');
182
+ * modal.components[1].components[0].setValue('hello');
183
+ * modal.reply();
184
+ * })
185
+ */
186
+ async reply(data = {}) {
187
+ if (!this.application) throw new Error('Modal cannot reply (Missing Application)');
188
+ const data_cache = this.sendFromInteraction;
189
+ const guild = this.client.guilds.resolveId(data?.guild) || data_cache.guildId || null;
190
+ const channel = this.client.channels.resolveId(data?.channel) || data_cache.channelId;
191
+ if (!channel) throw new Error('Modal cannot reply (Missing data)');
192
+ // Add data to components
193
+ // this.components = [ MessageActionRow.components = [ TextInputComponent ] ]
194
+ // 5 MessageActionRow / Modal, 1 TextInputComponent / 1 MessageActionRow
195
+ if (Array.isArray(data?.data) && data?.data?.length > 0) {
196
+ for (let i = 0; i < this.components.length; i++) {
197
+ const value = data.data.find(d => d.customId == this.components[i].components[0].customId);
198
+ if (this.components[i].components[0].required == true && !value) {
199
+ throw new Error(
200
+ 'MODAL_REQUIRED_FIELD_MISSING\n' +
201
+ `Required fieldId ${this.components[i].components[0].customId} missing value`,
202
+ );
203
+ }
204
+ if (value) {
205
+ if (value?.value?.includes('\n') && this.components[i].components[0].style == 'SHORT') {
206
+ throw new Error(
207
+ 'MODAL_REPLY_DATA_INVALID\n' +
208
+ `value must be a single line, got multiple lines [Custom ID: ${value.customId}]`,
209
+ );
210
+ }
211
+ this.components[i].components[0].setValue(value.value);
212
+ }
213
+ }
214
+ }
215
+ // Get Object
216
+ const dataFinal = this.toJSON();
217
+ dataFinal.components = dataFinal.components
218
+ .map(c => {
219
+ delete c.components[0].max_length;
220
+ delete c.components[0].min_length;
221
+ delete c.components[0].required;
222
+ delete c.components[0].placeholder;
223
+ delete c.components[0].label;
224
+ delete c.components[0].style;
225
+ return c;
226
+ })
227
+ .filter(c => c.components[0].value && c.components[0].value !== '');
228
+ delete dataFinal.title;
229
+ const nonce = SnowflakeUtil.generate();
230
+ const postData = {
231
+ type: 5, // Modal
232
+ application_id: this.application.id,
233
+ guild_id: guild || null,
234
+ channel_id: channel,
235
+ data: dataFinal,
236
+ nonce,
237
+ session_id: this.client.session_id,
238
+ };
239
+ await this.client.api.interactions.post({
240
+ data: postData,
241
+ });
242
+ this.client._interactionCache.set(nonce, {
243
+ channelId: channel,
244
+ guildId: guild,
245
+ metadata: postData,
246
+ });
247
+ return new Promise((resolve, reject) => {
248
+ const handler = data => {
249
+ timeout.refresh();
250
+ if (data.metadata.nonce !== nonce) return;
251
+ clearTimeout(timeout);
252
+ this.client.removeListener('interactionResponse', handler);
253
+ this.client.decrementMaxListeners();
254
+ if (data.status) {
255
+ resolve(data.metadata);
256
+ } else {
257
+ reject(
258
+ new Error('INTERACTION_ERROR', {
259
+ cause: data,
260
+ }),
261
+ );
262
+ }
263
+ };
264
+ const timeout = setTimeout(() => {
265
+ this.client.removeListener('interactionResponse', handler);
266
+ this.client.decrementMaxListeners();
267
+ reject(
268
+ new Error('INTERACTION_TIMEOUT', {
269
+ cause: postData,
270
+ }),
271
+ );
272
+ }, this.client.options.interactionTimeout).unref();
273
+ this.client.incrementMaxListeners();
274
+ this.client.on('interactionResponse', handler);
275
+ });
276
+ }
277
+ }
278
+
279
+ module.exports = Modal;
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ const { TypeError } = require('../errors');
4
+ const { MessageComponentTypes } = require('../util/Constants');
5
+
6
+ /**
7
+ * A resolver for modal submit interaction text inputs.
8
+ */
9
+ class ModalSubmitFieldsResolver {
10
+ constructor(components) {
11
+ /**
12
+ * The components within the modal
13
+ * @type {PartialModalActionRow[]} The components in the modal
14
+ */
15
+ this.components = components;
16
+ }
17
+
18
+ /**
19
+ * The extracted fields from the modal
20
+ * @type {PartialInputTextData[]} The fields in the modal
21
+ * @private
22
+ */
23
+ get _fields() {
24
+ return this.components.reduce((previous, next) => previous.concat(next.components), []);
25
+ }
26
+
27
+ /**
28
+ * Gets a field given a custom id from a component
29
+ * @param {string} customId The custom id of the component
30
+ * @returns {?PartialInputTextData}
31
+ */
32
+ getField(customId) {
33
+ const field = this._fields.find(f => f.customId === customId);
34
+ if (!field) throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_NOT_FOUND', customId);
35
+ return field;
36
+ }
37
+
38
+ /**
39
+ * Gets the value of a text input component given a custom id
40
+ * @param {string} customId The custom id of the text input component
41
+ * @returns {?string}
42
+ */
43
+ getTextInputValue(customId) {
44
+ const field = this.getField(customId);
45
+ const expectedType = MessageComponentTypes[MessageComponentTypes.TEXT_INPUT];
46
+ if (field.type !== expectedType) {
47
+ throw new TypeError('MODAL_SUBMIT_INTERACTION_FIELD_TYPE', customId, field.type, expectedType);
48
+ }
49
+ return field.value;
50
+ }
51
+ }
52
+
53
+ module.exports = ModalSubmitFieldsResolver;
@@ -0,0 +1,119 @@
1
+ 'use strict';
2
+
3
+ const Interaction = require('./Interaction');
4
+ const InteractionWebhook = require('./InteractionWebhook');
5
+ const ModalSubmitFieldsResolver = require('./ModalSubmitFieldsResolver');
6
+ const InteractionResponses = require('./interfaces/InteractionResponses');
7
+ const { MessageComponentTypes } = require('../util/Constants');
8
+
9
+ /**
10
+ * Represents a modal submit interaction.
11
+ * @extends {Interaction}
12
+ * @implements {InteractionResponses}
13
+ */
14
+ class ModalSubmitInteraction extends Interaction {
15
+ constructor(client, data) {
16
+ super(client, data);
17
+
18
+ /**
19
+ * The custom id of the modal.
20
+ * @type {string}
21
+ */
22
+ this.customId = data.data.custom_id;
23
+
24
+ /**
25
+ * @typedef {Object} PartialTextInputData
26
+ * @property {string} [customId] A unique string to be sent in the interaction when submitted
27
+ * @property {MessageComponentType} [type] The type of this component
28
+ * @property {string} [value] Value of this text input component
29
+ */
30
+
31
+ /**
32
+ * @typedef {Object} PartialModalActionRow
33
+ * @property {MessageComponentType} [type] The type of this component
34
+ * @property {PartialTextInputData[]} [components] Partial text input components
35
+ */
36
+
37
+ /**
38
+ * The inputs within the modal
39
+ * @type {PartialModalActionRow[]}
40
+ */
41
+ this.components =
42
+ data.data.components?.map(c => ({
43
+ type: MessageComponentTypes[c.type],
44
+ components: ModalSubmitInteraction.transformComponent(c),
45
+ })) ?? [];
46
+
47
+ /**
48
+ * The message associated with this interaction
49
+ * @type {Message|APIMessage|null}
50
+ */
51
+ this.message = data.message ? this.channel?.messages._add(data.message) ?? data.message : null;
52
+
53
+ /**
54
+ * The fields within the modal
55
+ * @type {ModalSubmitFieldsResolver}
56
+ */
57
+ this.fields = new ModalSubmitFieldsResolver(this.components);
58
+
59
+ /**
60
+ * Whether the reply to this interaction has been deferred
61
+ * @type {boolean}
62
+ */
63
+ this.deferred = false;
64
+
65
+ /**
66
+ * Whether the reply to this interaction is ephemeral
67
+ * @type {?boolean}
68
+ */
69
+ this.ephemeral = null;
70
+
71
+ /**
72
+ * Whether this interaction has already been replied to
73
+ * @type {boolean}
74
+ */
75
+ this.replied = false;
76
+
77
+ /**
78
+ * An associated interaction webhook, can be used to further interact with this interaction
79
+ * @type {InteractionWebhook}
80
+ */
81
+ this.webhook = new InteractionWebhook(this.client, this.applicationId, this.token);
82
+ }
83
+
84
+ /**
85
+ * Transforms component data to discord.js-compatible data
86
+ * @param {*} rawComponent The data to transform
87
+ * @returns {PartialTextInputData[]}
88
+ */
89
+ static transformComponent(rawComponent) {
90
+ return rawComponent.components.map(c => ({
91
+ value: c.value,
92
+ type: MessageComponentTypes[c.type],
93
+ customId: c.custom_id,
94
+ }));
95
+ }
96
+
97
+ /**
98
+ * Whether this is from a {@link MessageComponentInteraction}.
99
+ * @returns {boolean}
100
+ */
101
+ isFromMessage() {
102
+ return Boolean(this.message);
103
+ }
104
+
105
+ // These are here only for documentation purposes - they are implemented by InteractionResponses
106
+ /* eslint-disable no-empty-function */
107
+ deferReply() {}
108
+ reply() {}
109
+ fetchReply() {}
110
+ editReply() {}
111
+ deleteReply() {}
112
+ followUp() {}
113
+ update() {}
114
+ deferUpdate() {}
115
+ }
116
+
117
+ InteractionResponses.applyToClass(ModalSubmitInteraction, ['showModal', 'awaitModalSubmit']);
118
+
119
+ module.exports = ModalSubmitInteraction;
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ const BaseGuildTextChannel = require('./BaseGuildTextChannel');
4
+ const { Error } = require('../errors');
5
+
6
+ /**
7
+ * Represents a guild news channel on Discord.
8
+ * @extends {BaseGuildTextChannel}
9
+ */
10
+ class NewsChannel extends BaseGuildTextChannel {
11
+ /**
12
+ * Adds the target to this channel's followers.
13
+ * <info>If you need the created webhook id, use {@link GuildChannelManager#addFollower}.</info>
14
+ * @param {TextChannelResolvable} channel The channel where the webhook should be created
15
+ * @param {string} [reason] Reason for creating the webhook
16
+ * @returns {Promise<NewsChannel>}
17
+ * @example
18
+ * if (channel.type === 'GUILD_NEWS') {
19
+ * channel.addFollower('222197033908436994', 'Important announcements')
20
+ * .then(() => console.log('Added follower'))
21
+ * .catch(console.error);
22
+ * }
23
+ */
24
+ async addFollower(channel, reason) {
25
+ const channelId = this.guild.channels.resolveId(channel);
26
+ if (!channelId) throw new Error('GUILD_CHANNEL_RESOLVE');
27
+ await this.client.api.channels(this.id).followers.post({ data: { webhook_channel_id: channelId }, reason });
28
+ return this;
29
+ }
30
+ }
31
+
32
+ module.exports = NewsChannel;
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const BaseGuild = require('./BaseGuild');
4
+ const Permissions = require('../util/Permissions');
5
+
6
+ /**
7
+ * A partial guild received when using {@link GuildManager#fetch} to fetch multiple guilds.
8
+ * @extends {BaseGuild}
9
+ */
10
+ class OAuth2Guild extends BaseGuild {
11
+ constructor(client, data) {
12
+ super(client, data);
13
+
14
+ /**
15
+ * Whether the client user is the owner of the guild
16
+ * @type {boolean}
17
+ */
18
+ this.owner = data.owner;
19
+
20
+ /**
21
+ * The permissions that the client user has in this guild
22
+ * @type {Readonly<Permissions>}
23
+ */
24
+ this.permissions = new Permissions(BigInt(data.permissions)).freeze();
25
+ }
26
+ }
27
+
28
+ module.exports = OAuth2Guild;