safeness-sb-new 0.0.1

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.
Files changed (343) hide show
  1. package/README.md +115 -0
  2. package/package.json +96 -0
  3. package/src/WebSocket.js +39 -0
  4. package/src/client/BaseClient.js +86 -0
  5. package/src/client/Client.js +836 -0
  6. package/src/client/WebhookClient.js +61 -0
  7. package/src/client/actions/Action.js +120 -0
  8. package/src/client/actions/ActionsManager.js +78 -0
  9. package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
  10. package/src/client/actions/AutoModerationActionExecution.js +27 -0
  11. package/src/client/actions/AutoModerationRuleCreate.js +28 -0
  12. package/src/client/actions/AutoModerationRuleDelete.js +32 -0
  13. package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
  14. package/src/client/actions/ChannelCreate.js +23 -0
  15. package/src/client/actions/ChannelDelete.js +39 -0
  16. package/src/client/actions/ChannelUpdate.js +43 -0
  17. package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
  18. package/src/client/actions/GuildBanAdd.js +20 -0
  19. package/src/client/actions/GuildBanRemove.js +25 -0
  20. package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
  21. package/src/client/actions/GuildDelete.js +65 -0
  22. package/src/client/actions/GuildEmojiCreate.js +20 -0
  23. package/src/client/actions/GuildEmojiDelete.js +21 -0
  24. package/src/client/actions/GuildEmojiUpdate.js +20 -0
  25. package/src/client/actions/GuildEmojisUpdate.js +34 -0
  26. package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
  27. package/src/client/actions/GuildMemberRemove.js +33 -0
  28. package/src/client/actions/GuildMemberUpdate.js +44 -0
  29. package/src/client/actions/GuildRoleCreate.js +25 -0
  30. package/src/client/actions/GuildRoleDelete.js +31 -0
  31. package/src/client/actions/GuildRoleUpdate.js +39 -0
  32. package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
  33. package/src/client/actions/GuildScheduledEventCreate.js +27 -0
  34. package/src/client/actions/GuildScheduledEventDelete.js +31 -0
  35. package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
  36. package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
  37. package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
  38. package/src/client/actions/GuildStickerCreate.js +20 -0
  39. package/src/client/actions/GuildStickerDelete.js +21 -0
  40. package/src/client/actions/GuildStickerUpdate.js +20 -0
  41. package/src/client/actions/GuildStickersUpdate.js +34 -0
  42. package/src/client/actions/GuildUpdate.js +33 -0
  43. package/src/client/actions/InviteCreate.js +28 -0
  44. package/src/client/actions/InviteDelete.js +30 -0
  45. package/src/client/actions/MessageCreate.js +46 -0
  46. package/src/client/actions/MessageDelete.js +32 -0
  47. package/src/client/actions/MessageDeleteBulk.js +46 -0
  48. package/src/client/actions/MessageReactionAdd.js +56 -0
  49. package/src/client/actions/MessageReactionRemove.js +45 -0
  50. package/src/client/actions/MessageReactionRemoveAll.js +33 -0
  51. package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
  52. package/src/client/actions/MessageUpdate.js +26 -0
  53. package/src/client/actions/PresenceUpdate.js +46 -0
  54. package/src/client/actions/StageInstanceCreate.js +28 -0
  55. package/src/client/actions/StageInstanceDelete.js +33 -0
  56. package/src/client/actions/StageInstanceUpdate.js +30 -0
  57. package/src/client/actions/ThreadCreate.js +24 -0
  58. package/src/client/actions/ThreadDelete.js +32 -0
  59. package/src/client/actions/ThreadListSync.js +59 -0
  60. package/src/client/actions/ThreadMemberUpdate.js +30 -0
  61. package/src/client/actions/ThreadMembersUpdate.js +34 -0
  62. package/src/client/actions/TypingStart.js +29 -0
  63. package/src/client/actions/UserUpdate.js +35 -0
  64. package/src/client/actions/VoiceStateUpdate.js +57 -0
  65. package/src/client/actions/WebhooksUpdate.js +20 -0
  66. package/src/client/voice/ClientVoiceManager.js +150 -0
  67. package/src/client/voice/VoiceConnection.js +849 -0
  68. package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
  69. package/src/client/voice/dispatcher/AudioDispatcher.js +115 -0
  70. package/src/client/voice/dispatcher/BaseDispatcher.js +405 -0
  71. package/src/client/voice/dispatcher/VPxDispatcher.js +52 -0
  72. package/src/client/voice/dispatcher/VideoDispatcher.js +31 -0
  73. package/src/client/voice/networking/VoiceUDPClient.js +188 -0
  74. package/src/client/voice/networking/VoiceWebSocket.js +280 -0
  75. package/src/client/voice/player/MediaPlayer.js +294 -0
  76. package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
  77. package/src/client/voice/player/processing/IvfSplitter.js +106 -0
  78. package/src/client/voice/receiver/PacketHandler.js +170 -0
  79. package/src/client/voice/receiver/Receiver.js +82 -0
  80. package/src/client/voice/receiver/video/IvfJoinner.js +106 -0
  81. package/src/client/voice/util/Function.js +14 -0
  82. package/src/client/voice/util/PlayInterface.js +122 -0
  83. package/src/client/voice/util/Secretbox.js +42 -0
  84. package/src/client/voice/util/Silence.js +16 -0
  85. package/src/client/voice/util/Socket.js +62 -0
  86. package/src/client/voice/util/VolumeInterface.js +104 -0
  87. package/src/client/websocket/WebSocketManager.js +392 -0
  88. package/src/client/websocket/WebSocketShard.js +906 -0
  89. package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
  90. package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
  91. package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
  92. package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
  93. package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
  94. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
  95. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
  96. package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
  97. package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
  98. package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
  99. package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
  100. package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
  101. package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
  102. package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
  103. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
  104. package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
  105. package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
  106. package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
  107. package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
  108. package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
  109. package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
  110. package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
  111. package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
  112. package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
  113. package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
  114. package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
  115. package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
  116. package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
  117. package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
  118. package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
  119. package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
  120. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
  121. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
  122. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
  123. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
  124. package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
  125. package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
  126. package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
  127. package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
  128. package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
  129. package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
  130. package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
  131. package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
  132. package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
  133. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +22 -0
  134. package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +12 -0
  135. package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
  136. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
  137. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
  138. package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
  139. package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
  140. package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
  141. package/src/client/websocket/handlers/READY.js +120 -0
  142. package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
  143. package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
  144. package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
  145. package/src/client/websocket/handlers/RESUMED.js +14 -0
  146. package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
  147. package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
  148. package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
  149. package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
  150. package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
  151. package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
  152. package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
  153. package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
  154. package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
  155. package/src/client/websocket/handlers/TYPING_START.js +5 -0
  156. package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
  157. package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
  158. package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
  159. package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
  160. package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
  161. package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
  162. package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
  163. package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
  164. package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
  165. package/src/client/websocket/handlers/index.js +83 -0
  166. package/src/errors/DJSError.js +61 -0
  167. package/src/errors/Messages.js +208 -0
  168. package/src/errors/index.js +4 -0
  169. package/src/index.js +159 -0
  170. package/src/managers/ApplicationCommandManager.js +264 -0
  171. package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
  172. package/src/managers/AutoModerationRuleManager.js +296 -0
  173. package/src/managers/BaseGuildEmojiManager.js +80 -0
  174. package/src/managers/BaseManager.js +19 -0
  175. package/src/managers/BillingManager.js +66 -0
  176. package/src/managers/CachedManager.js +71 -0
  177. package/src/managers/ChannelManager.js +138 -0
  178. package/src/managers/ClientUserSettingManager.js +372 -0
  179. package/src/managers/DataManager.js +61 -0
  180. package/src/managers/GuildBanManager.js +204 -0
  181. package/src/managers/GuildChannelManager.js +488 -0
  182. package/src/managers/GuildEmojiManager.js +171 -0
  183. package/src/managers/GuildEmojiRoleManager.js +118 -0
  184. package/src/managers/GuildForumThreadManager.js +108 -0
  185. package/src/managers/GuildInviteManager.js +213 -0
  186. package/src/managers/GuildManager.js +304 -0
  187. package/src/managers/GuildMemberManager.js +597 -0
  188. package/src/managers/GuildMemberRoleManager.js +191 -0
  189. package/src/managers/GuildScheduledEventManager.js +296 -0
  190. package/src/managers/GuildSettingManager.js +155 -0
  191. package/src/managers/GuildStickerManager.js +179 -0
  192. package/src/managers/GuildTextThreadManager.js +98 -0
  193. package/src/managers/InteractionManager.js +39 -0
  194. package/src/managers/MessageManager.js +391 -0
  195. package/src/managers/PermissionOverwriteManager.js +166 -0
  196. package/src/managers/PresenceManager.js +58 -0
  197. package/src/managers/ReactionManager.js +67 -0
  198. package/src/managers/ReactionUserManager.js +71 -0
  199. package/src/managers/RelationshipManager.js +265 -0
  200. package/src/managers/RoleManager.js +352 -0
  201. package/src/managers/StageInstanceManager.js +162 -0
  202. package/src/managers/ThreadManager.js +174 -0
  203. package/src/managers/ThreadMemberManager.js +186 -0
  204. package/src/managers/UserManager.js +146 -0
  205. package/src/managers/UserNoteManager.js +53 -0
  206. package/src/managers/VoiceStateManager.js +37 -0
  207. package/src/rest/APIRequest.js +159 -0
  208. package/src/rest/APIRouter.js +53 -0
  209. package/src/rest/DiscordAPIError.js +104 -0
  210. package/src/rest/HTTPError.js +62 -0
  211. package/src/rest/RESTManager.js +62 -0
  212. package/src/rest/RateLimitError.js +55 -0
  213. package/src/rest/RequestHandler.js +444 -0
  214. package/src/sharding/Shard.js +443 -0
  215. package/src/sharding/ShardClientUtil.js +275 -0
  216. package/src/sharding/ShardingManager.js +318 -0
  217. package/src/structures/AnonymousGuild.js +98 -0
  218. package/src/structures/ApplicationCommand.js +593 -0
  219. package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
  220. package/src/structures/AutoModerationActionExecution.js +89 -0
  221. package/src/structures/AutoModerationRule.js +294 -0
  222. package/src/structures/AutocompleteInteraction.js +107 -0
  223. package/src/structures/Base.js +43 -0
  224. package/src/structures/BaseCommandInteraction.js +211 -0
  225. package/src/structures/BaseGuild.js +116 -0
  226. package/src/structures/BaseGuildEmoji.js +56 -0
  227. package/src/structures/BaseGuildTextChannel.js +191 -0
  228. package/src/structures/BaseGuildVoiceChannel.js +241 -0
  229. package/src/structures/BaseMessageComponent.js +114 -0
  230. package/src/structures/ButtonInteraction.js +11 -0
  231. package/src/structures/CallState.js +63 -0
  232. package/src/structures/CategoryChannel.js +85 -0
  233. package/src/structures/Channel.js +270 -0
  234. package/src/structures/ClientPresence.js +77 -0
  235. package/src/structures/ClientUser.js +450 -0
  236. package/src/structures/CommandInteraction.js +41 -0
  237. package/src/structures/CommandInteractionOptionResolver.js +276 -0
  238. package/src/structures/ContextMenuInteraction.js +65 -0
  239. package/src/structures/DMChannel.js +217 -0
  240. package/src/structures/DirectoryChannel.js +20 -0
  241. package/src/structures/Emoji.js +148 -0
  242. package/src/structures/ForumChannel.js +261 -0
  243. package/src/structures/GroupDMChannel.js +387 -0
  244. package/src/structures/Guild.js +1608 -0
  245. package/src/structures/GuildAuditLogs.js +729 -0
  246. package/src/structures/GuildBan.js +59 -0
  247. package/src/structures/GuildBoost.js +108 -0
  248. package/src/structures/GuildChannel.js +468 -0
  249. package/src/structures/GuildEmoji.js +161 -0
  250. package/src/structures/GuildMember.js +568 -0
  251. package/src/structures/GuildPreview.js +191 -0
  252. package/src/structures/GuildPreviewEmoji.js +27 -0
  253. package/src/structures/GuildScheduledEvent.js +441 -0
  254. package/src/structures/GuildTemplate.js +236 -0
  255. package/src/structures/Integration.js +188 -0
  256. package/src/structures/IntegrationApplication.js +96 -0
  257. package/src/structures/Interaction.js +290 -0
  258. package/src/structures/InteractionCollector.js +248 -0
  259. package/src/structures/InteractionWebhook.js +43 -0
  260. package/src/structures/Invite.js +358 -0
  261. package/src/structures/InviteGuild.js +23 -0
  262. package/src/structures/InviteStageInstance.js +86 -0
  263. package/src/structures/Message.js +1227 -0
  264. package/src/structures/MessageActionRow.js +103 -0
  265. package/src/structures/MessageAttachment.js +204 -0
  266. package/src/structures/MessageButton.js +165 -0
  267. package/src/structures/MessageCollector.js +146 -0
  268. package/src/structures/MessageComponentInteraction.js +120 -0
  269. package/src/structures/MessageContextMenuInteraction.js +20 -0
  270. package/src/structures/MessageEmbed.js +586 -0
  271. package/src/structures/MessageMentions.js +273 -0
  272. package/src/structures/MessagePayload.js +318 -0
  273. package/src/structures/MessagePoll.js +238 -0
  274. package/src/structures/MessageReaction.js +171 -0
  275. package/src/structures/MessageSelectMenu.js +140 -0
  276. package/src/structures/Modal.js +161 -0
  277. package/src/structures/ModalSubmitFieldsResolver.js +53 -0
  278. package/src/structures/ModalSubmitInteraction.js +119 -0
  279. package/src/structures/NewsChannel.js +32 -0
  280. package/src/structures/OAuth2Guild.js +28 -0
  281. package/src/structures/PermissionOverwrites.js +196 -0
  282. package/src/structures/Presence.js +1131 -0
  283. package/src/structures/ReactionCollector.js +229 -0
  284. package/src/structures/ReactionEmoji.js +31 -0
  285. package/src/structures/Role.js +531 -0
  286. package/src/structures/SelectMenuInteraction.js +21 -0
  287. package/src/structures/StageChannel.js +104 -0
  288. package/src/structures/StageInstance.js +208 -0
  289. package/src/structures/Sticker.js +310 -0
  290. package/src/structures/StickerPack.js +95 -0
  291. package/src/structures/StoreChannel.js +56 -0
  292. package/src/structures/Team.js +118 -0
  293. package/src/structures/TeamMember.js +71 -0
  294. package/src/structures/TextChannel.js +33 -0
  295. package/src/structures/TextInputComponent.js +131 -0
  296. package/src/structures/ThreadChannel.js +607 -0
  297. package/src/structures/ThreadMember.js +105 -0
  298. package/src/structures/Typing.js +74 -0
  299. package/src/structures/User.js +543 -0
  300. package/src/structures/UserContextMenuInteraction.js +29 -0
  301. package/src/structures/VoiceChannel.js +110 -0
  302. package/src/structures/VoiceRegion.js +53 -0
  303. package/src/structures/VoiceState.js +345 -0
  304. package/src/structures/WebEmbed.js +373 -0
  305. package/src/structures/Webhook.js +467 -0
  306. package/src/structures/WelcomeChannel.js +60 -0
  307. package/src/structures/WelcomeScreen.js +48 -0
  308. package/src/structures/Widget.js +87 -0
  309. package/src/structures/WidgetMember.js +99 -0
  310. package/src/structures/interfaces/Application.js +313 -0
  311. package/src/structures/interfaces/Collector.js +300 -0
  312. package/src/structures/interfaces/InteractionResponses.js +313 -0
  313. package/src/structures/interfaces/TextBasedChannel.js +719 -0
  314. package/src/util/ActivityFlags.js +44 -0
  315. package/src/util/ApplicationFlags.js +76 -0
  316. package/src/util/AttachmentFlags.js +38 -0
  317. package/src/util/BitField.js +170 -0
  318. package/src/util/ChannelFlags.js +45 -0
  319. package/src/util/Constants.js +1815 -0
  320. package/src/util/DataResolver.js +145 -0
  321. package/src/util/Formatters.js +228 -0
  322. package/src/util/GuildMemberFlags.js +43 -0
  323. package/src/util/Intents.js +74 -0
  324. package/src/util/InviteFlags.js +29 -0
  325. package/src/util/LimitedCollection.js +131 -0
  326. package/src/util/MessageFlags.js +54 -0
  327. package/src/util/Options.js +336 -0
  328. package/src/util/Permissions.js +202 -0
  329. package/src/util/PremiumUsageFlags.js +31 -0
  330. package/src/util/PurchasedFlags.js +33 -0
  331. package/src/util/RemoteAuth.js +382 -0
  332. package/src/util/RoleFlags.js +37 -0
  333. package/src/util/SnowflakeUtil.js +92 -0
  334. package/src/util/Speaking.js +33 -0
  335. package/src/util/Sweepers.js +466 -0
  336. package/src/util/SystemChannelFlags.js +55 -0
  337. package/src/util/ThreadMemberFlags.js +30 -0
  338. package/src/util/UserFlags.js +104 -0
  339. package/src/util/Util.js +889 -0
  340. package/typings/enums.d.ts +297 -0
  341. package/typings/index.d.ts +7670 -0
  342. package/typings/index.test-d.ts +0 -0
  343. package/typings/rawDataTypes.d.ts +342 -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,204 @@
1
+ 'use strict';
2
+
3
+ const AttachmentFlags = require('../util/AttachmentFlags');
4
+ const Util = require('../util/Util');
5
+
6
+ /**
7
+ * Represents an attachment in a message.
8
+ */
9
+ class MessageAttachment {
10
+ /**
11
+ * @param {BufferResolvable|Stream} attachment The file
12
+ * @param {string} [name=null] The name of the file, if any
13
+ * @param {APIAttachment} [data] Extra data
14
+ */
15
+ constructor(attachment, name = null, data) {
16
+ this.attachment = attachment;
17
+ /**
18
+ * The name of this attachment
19
+ * @type {?string}
20
+ */
21
+ this.name = name;
22
+ if (data) this._patch(data);
23
+ }
24
+
25
+ /**
26
+ * Sets the description of this attachment.
27
+ * @param {string} description The description of the file
28
+ * @returns {MessageAttachment} This attachment
29
+ */
30
+ setDescription(description) {
31
+ this.description = description;
32
+ return this;
33
+ }
34
+
35
+ /**
36
+ * Sets the file of this attachment.
37
+ * @param {BufferResolvable|Stream} attachment The file
38
+ * @param {string} [name=null] The name of the file, if any
39
+ * @returns {MessageAttachment} This attachment
40
+ */
41
+ setFile(attachment, name = null) {
42
+ this.attachment = attachment;
43
+ this.name = name;
44
+ return this;
45
+ }
46
+
47
+ /**
48
+ * Sets the name of this attachment.
49
+ * @param {string} name The name of the file
50
+ * @returns {MessageAttachment} This attachment
51
+ */
52
+ setName(name) {
53
+ this.name = name;
54
+ return this;
55
+ }
56
+
57
+ /**
58
+ * Sets whether this attachment is a spoiler
59
+ * @param {boolean} [spoiler=true] Whether the attachment should be marked as a spoiler
60
+ * @returns {MessageAttachment} This attachment
61
+ */
62
+ setSpoiler(spoiler = true) {
63
+ if (spoiler === this.spoiler) return this;
64
+
65
+ if (!spoiler) {
66
+ while (this.spoiler) {
67
+ this.name = this.name.slice('SPOILER_'.length);
68
+ }
69
+ return this;
70
+ }
71
+ this.name = `SPOILER_${this.name}`;
72
+ return this;
73
+ }
74
+
75
+ _patch(data) {
76
+ /**
77
+ * The attachment's id
78
+ * @type {Snowflake}
79
+ */
80
+ this.id = data.id;
81
+
82
+ if ('size' in data) {
83
+ /**
84
+ * The size of this attachment in bytes
85
+ * @type {number}
86
+ */
87
+ this.size = data.size;
88
+ }
89
+
90
+ if ('url' in data) {
91
+ /**
92
+ * The URL to this attachment
93
+ * @type {string}
94
+ */
95
+ this.url = data.url;
96
+ }
97
+
98
+ if ('proxy_url' in data) {
99
+ /**
100
+ * The Proxy URL to this attachment
101
+ * @type {string}
102
+ */
103
+ this.proxyURL = data.proxy_url;
104
+ }
105
+
106
+ if ('height' in data) {
107
+ /**
108
+ * The height of this attachment (if an image or video)
109
+ * @type {?number}
110
+ */
111
+ this.height = data.height;
112
+ } else {
113
+ this.height ??= null;
114
+ }
115
+
116
+ if ('width' in data) {
117
+ /**
118
+ * The width of this attachment (if an image or video)
119
+ * @type {?number}
120
+ */
121
+ this.width = data.width;
122
+ } else {
123
+ this.width ??= null;
124
+ }
125
+
126
+ if ('content_type' in data) {
127
+ /**
128
+ * The media type of this attachment
129
+ * @type {?string}
130
+ */
131
+ this.contentType = data.content_type;
132
+ } else {
133
+ this.contentType ??= null;
134
+ }
135
+
136
+ if ('description' in data) {
137
+ /**
138
+ * The description (alt text) of this attachment
139
+ * @type {?string}
140
+ */
141
+ this.description = data.description;
142
+ } else {
143
+ this.description ??= null;
144
+ }
145
+
146
+ /**
147
+ * Whether this attachment is ephemeral
148
+ * @type {boolean}
149
+ */
150
+ this.ephemeral = data.ephemeral ?? false;
151
+
152
+ if ('duration_secs' in data) {
153
+ /**
154
+ * The duration of this attachment in seconds
155
+ * <info>This will only be available if the attachment is an audio file.</info>
156
+ * @type {?number}
157
+ */
158
+ this.duration = data.duration_secs;
159
+ } else {
160
+ this.duration ??= null;
161
+ }
162
+
163
+ if ('waveform' in data) {
164
+ /**
165
+ * The base64 encoded byte array representing a sampled waveform
166
+ * <info>This will only be available if the attachment is an audio file.</info>
167
+ * @type {?string}
168
+ */
169
+ this.waveform = data.waveform;
170
+ } else {
171
+ this.waveform ??= null;
172
+ }
173
+
174
+ if ('flags' in data) {
175
+ /**
176
+ * The flags of this attachment
177
+ * @type {Readonly<AttachmentFlags>}
178
+ */
179
+ this.flags = new AttachmentFlags(data.flags).freeze();
180
+ } else {
181
+ this.flags ??= new AttachmentFlags().freeze();
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Whether or not this attachment has been marked as a spoiler
187
+ * @type {boolean}
188
+ * @readonly
189
+ */
190
+ get spoiler() {
191
+ return Util.basename(this.url ?? this.name).startsWith('SPOILER_');
192
+ }
193
+
194
+ toJSON() {
195
+ return Util.flatten(this);
196
+ }
197
+ }
198
+
199
+ module.exports = MessageAttachment;
200
+
201
+ /**
202
+ * @external APIAttachment
203
+ * @see {@link https://discord.com/developers/docs/resources/channel#attachment-object}
204
+ */
@@ -0,0 +1,165 @@
1
+ 'use strict';
2
+
3
+ const BaseMessageComponent = require('./BaseMessageComponent');
4
+ const { RangeError } = require('../errors');
5
+ const { MessageButtonStyles, MessageComponentTypes } = require('../util/Constants');
6
+ const Util = require('../util/Util');
7
+
8
+ /**
9
+ * Represents a button message component.
10
+ * @extends {BaseMessageComponent}
11
+ */
12
+ class MessageButton extends BaseMessageComponent {
13
+ /**
14
+ * @typedef {BaseMessageComponentOptions} MessageButtonOptions
15
+ * @property {string} [label] The text to be displayed on this button
16
+ * @property {string} [customId] A unique string to be sent in the interaction when clicked
17
+ * @property {MessageButtonStyleResolvable} [style] The style of this button
18
+ * @property {EmojiIdentifierResolvable} [emoji] The emoji to be displayed to the left of the text
19
+ * @property {string} [url] Optional URL for link-style buttons
20
+ * @property {boolean} [disabled=false] Disables the button to prevent interactions
21
+ */
22
+
23
+ /**
24
+ * @param {MessageButton|MessageButtonOptions} [data={}] MessageButton to clone or raw data
25
+ */
26
+ constructor(data = {}) {
27
+ super({ type: 'BUTTON' });
28
+
29
+ this.setup(data);
30
+ }
31
+
32
+ setup(data) {
33
+ /**
34
+ * The text to be displayed on this button
35
+ * @type {?string}
36
+ */
37
+ this.label = data.label ?? null;
38
+
39
+ /**
40
+ * A unique string to be sent in the interaction when clicked
41
+ * @type {?string}
42
+ */
43
+ this.customId = data.custom_id ?? data.customId ?? null;
44
+
45
+ /**
46
+ * The style of this button
47
+ * @type {?MessageButtonStyle}
48
+ */
49
+ this.style = data.style ? MessageButton.resolveStyle(data.style) : null;
50
+
51
+ /**
52
+ * Emoji for this button
53
+ * @type {?RawEmoji}
54
+ */
55
+ this.emoji = data.emoji ? Util.resolvePartialEmoji(data.emoji) : null;
56
+
57
+ /**
58
+ * The URL this button links to, if it is a Link style button
59
+ * @type {?string}
60
+ */
61
+ this.url = data.url ?? null;
62
+
63
+ /**
64
+ * Whether this button is currently disabled
65
+ * @type {boolean}
66
+ */
67
+ this.disabled = data.disabled ?? false;
68
+ }
69
+
70
+ /**
71
+ * Sets the custom id for this button
72
+ * @param {string} customId A unique string to be sent in the interaction when clicked
73
+ * @returns {MessageButton}
74
+ */
75
+ setCustomId(customId) {
76
+ this.customId = Util.verifyString(customId, RangeError, 'BUTTON_CUSTOM_ID');
77
+ return this;
78
+ }
79
+
80
+ /**
81
+ * Sets the interactive status of the button
82
+ * @param {boolean} [disabled=true] Whether this button should be disabled
83
+ * @returns {MessageButton}
84
+ */
85
+ setDisabled(disabled = true) {
86
+ this.disabled = disabled;
87
+ return this;
88
+ }
89
+
90
+ /**
91
+ * Set the emoji of this button
92
+ * @param {EmojiIdentifierResolvable} emoji The emoji to be displayed on this button
93
+ * @returns {MessageButton}
94
+ */
95
+ setEmoji(emoji) {
96
+ this.emoji = Util.resolvePartialEmoji(emoji);
97
+ return this;
98
+ }
99
+
100
+ /**
101
+ * Sets the label of this button
102
+ * @param {string} label The text to be displayed on this button
103
+ * @returns {MessageButton}
104
+ */
105
+ setLabel(label) {
106
+ this.label = Util.verifyString(label, RangeError, 'BUTTON_LABEL');
107
+ return this;
108
+ }
109
+
110
+ /**
111
+ * Sets the style of this button
112
+ * @param {MessageButtonStyleResolvable} style The style of this button
113
+ * @returns {MessageButton}
114
+ */
115
+ setStyle(style) {
116
+ this.style = MessageButton.resolveStyle(style);
117
+ return this;
118
+ }
119
+
120
+ /**
121
+ * Sets the URL of this button.
122
+ * <info>MessageButton#style must be LINK when setting a URL</info>
123
+ * @param {string} url The URL of this button
124
+ * @returns {MessageButton}
125
+ */
126
+ setURL(url) {
127
+ this.url = Util.verifyString(url, RangeError, 'BUTTON_URL');
128
+ return this;
129
+ }
130
+
131
+ /**
132
+ * Transforms the button to a plain object.
133
+ * @returns {APIMessageButton} The raw data of this button
134
+ */
135
+ toJSON() {
136
+ return {
137
+ custom_id: this.customId,
138
+ disabled: this.disabled,
139
+ emoji: this.emoji,
140
+ label: this.label,
141
+ style: MessageButtonStyles[this.style],
142
+ type: MessageComponentTypes[this.type],
143
+ url: this.url,
144
+ };
145
+ }
146
+
147
+ /**
148
+ * Data that can be resolved to a MessageButtonStyle. This can be
149
+ * * MessageButtonStyle
150
+ * * number
151
+ * @typedef {number|MessageButtonStyle} MessageButtonStyleResolvable
152
+ */
153
+
154
+ /**
155
+ * Resolves the style of a button
156
+ * @param {MessageButtonStyleResolvable} style The style to resolve
157
+ * @returns {MessageButtonStyle}
158
+ * @private
159
+ */
160
+ static resolveStyle(style) {
161
+ return typeof style === 'string' ? style : MessageButtonStyles[style];
162
+ }
163
+ }
164
+
165
+ 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;