discord-sb-v13 0.0.1-security → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.

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,272 @@
1
+ 'use strict';
2
+
3
+ const { Collection } = require('@discordjs/collection');
4
+ const { ChannelTypes } = require('../util/Constants');
5
+ const Util = require('../util/Util');
6
+
7
+ /**
8
+ * Keeps track of mentions in a {@link Message}.
9
+ */
10
+ class MessageMentions {
11
+ constructor(message, users, roles, everyone, crosspostedChannels, repliedUser) {
12
+ /**
13
+ * The client the message is from
14
+ * @type {Client}
15
+ * @readonly
16
+ */
17
+ Object.defineProperty(this, 'client', { value: message.client });
18
+
19
+ /**
20
+ * The guild the message is in
21
+ * @type {?Guild}
22
+ * @readonly
23
+ */
24
+ Object.defineProperty(this, 'guild', { value: message.guild });
25
+
26
+ /**
27
+ * The initial message content
28
+ * @type {string}
29
+ * @readonly
30
+ * @private
31
+ */
32
+ Object.defineProperty(this, '_content', { value: message.content });
33
+
34
+ /**
35
+ * Whether `@everyone` or `@here` were mentioned
36
+ * @type {boolean}
37
+ */
38
+ this.everyone = Boolean(everyone);
39
+
40
+ if (users) {
41
+ if (users instanceof Collection) {
42
+ /**
43
+ * Any users that were mentioned
44
+ * <info>Order as received from the API, not as they appear in the message content</info>
45
+ * @type {Collection<Snowflake, User>}
46
+ */
47
+ this.users = new Collection(users);
48
+ } else {
49
+ this.users = new Collection();
50
+ for (const mention of users) {
51
+ if (mention.member && message.guild) {
52
+ message.guild.members._add(Object.assign(mention.member, { user: mention }));
53
+ }
54
+ const user = message.client.users._add(mention);
55
+ this.users.set(user.id, user);
56
+ }
57
+ }
58
+ } else {
59
+ this.users = new Collection();
60
+ }
61
+
62
+ if (roles instanceof Collection) {
63
+ /**
64
+ * Any roles that were mentioned
65
+ * <info>Order as received from the API, not as they appear in the message content</info>
66
+ * @type {Collection<Snowflake, Role>}
67
+ */
68
+ this.roles = new Collection(roles);
69
+ } else if (roles) {
70
+ this.roles = new Collection();
71
+ const guild = message.guild;
72
+ if (guild) {
73
+ for (const mention of roles) {
74
+ const role = guild.roles.cache.get(mention);
75
+ if (role) this.roles.set(role.id, role);
76
+ }
77
+ }
78
+ } else {
79
+ this.roles = new Collection();
80
+ }
81
+
82
+ /**
83
+ * Cached members for {@link MessageMentions#members}
84
+ * @type {?Collection<Snowflake, GuildMember>}
85
+ * @private
86
+ */
87
+ this._members = null;
88
+
89
+ /**
90
+ * Cached channels for {@link MessageMentions#channels}
91
+ * @type {?Collection<Snowflake, Channel>}
92
+ * @private
93
+ */
94
+ this._channels = null;
95
+
96
+ /**
97
+ * Cached users for {@link MessageMentions#parsedUsers}
98
+ * @type {?Collection<Snowflake, User>}
99
+ * @private
100
+ */
101
+ this._parsedUsers = null;
102
+
103
+ /**
104
+ * Crossposted channel data.
105
+ * @typedef {Object} CrosspostedChannel
106
+ * @property {Snowflake} channelId The mentioned channel's id
107
+ * @property {Snowflake} guildId The id of the guild that has the channel
108
+ * @property {ChannelType} type The channel's type
109
+ * @property {string} name The channel's name
110
+ */
111
+
112
+ if (crosspostedChannels) {
113
+ if (crosspostedChannels instanceof Collection) {
114
+ /**
115
+ * A collection of crossposted channels
116
+ * <info>Order as received from the API, not as they appear in the message content</info>
117
+ * @type {Collection<Snowflake, CrosspostedChannel>}
118
+ */
119
+ this.crosspostedChannels = new Collection(crosspostedChannels);
120
+ } else {
121
+ this.crosspostedChannels = new Collection();
122
+ const channelTypes = Object.keys(ChannelTypes);
123
+ for (const d of crosspostedChannels) {
124
+ const type = channelTypes[d.type];
125
+ this.crosspostedChannels.set(d.id, {
126
+ channelId: d.id,
127
+ guildId: d.guild_id,
128
+ type: type ?? 'UNKNOWN',
129
+ name: d.name,
130
+ });
131
+ }
132
+ }
133
+ } else {
134
+ this.crosspostedChannels = new Collection();
135
+ }
136
+
137
+ /**
138
+ * The author of the message that this message is a reply to
139
+ * @type {?User}
140
+ */
141
+ this.repliedUser = repliedUser ? this.client.users._add(repliedUser) : null;
142
+ }
143
+
144
+ /**
145
+ * Any members that were mentioned (only in {@link Guild}s)
146
+ * <info>Order as received from the API, not as they appear in the message content</info>
147
+ * @type {?Collection<Snowflake, GuildMember>}
148
+ * @readonly
149
+ */
150
+ get members() {
151
+ if (this._members) return this._members;
152
+ if (!this.guild) return null;
153
+ this._members = new Collection();
154
+ this.users.forEach(user => {
155
+ const member = this.guild.members.resolve(user);
156
+ if (member) this._members.set(member.user.id, member);
157
+ });
158
+ return this._members;
159
+ }
160
+
161
+ /**
162
+ * Any channels that were mentioned
163
+ * <info>Order as they appear first in the message content</info>
164
+ * @type {Collection<Snowflake, Channel>}
165
+ * @readonly
166
+ */
167
+ get channels() {
168
+ if (this._channels) return this._channels;
169
+ this._channels = new Collection();
170
+ let matches;
171
+ while ((matches = this.constructor.CHANNELS_PATTERN.exec(this._content)) !== null) {
172
+ const chan = this.client.channels.cache.get(matches[1]);
173
+ if (chan) this._channels.set(chan.id, chan);
174
+ }
175
+ return this._channels;
176
+ }
177
+
178
+ /**
179
+ * Any user mentions that were included in the message content
180
+ * <info>Order as they appear first in the message content</info>
181
+ * @type {Collection<Snowflake, User>}
182
+ * @readonly
183
+ */
184
+ get parsedUsers() {
185
+ if (this._parsedUsers) return this._parsedUsers;
186
+ this._parsedUsers = new Collection();
187
+ let matches;
188
+ while ((matches = this.constructor.USERS_PATTERN.exec(this._content)) !== null) {
189
+ const user = this.client.users.cache.get(matches[1]);
190
+ if (user) this._parsedUsers.set(user.id, user);
191
+ }
192
+ return this._parsedUsers;
193
+ }
194
+
195
+ /**
196
+ * Options used to check for a mention.
197
+ * @typedef {Object} MessageMentionsHasOptions
198
+ * @property {boolean} [ignoreDirect=false] Whether to ignore direct mentions to the item
199
+ * @property {boolean} [ignoreRoles=false] Whether to ignore role mentions to a guild member
200
+ * @property {boolean} [ignoreRepliedUser=false] Whether to ignore replied user mention to an user
201
+ * @property {boolean} [ignoreEveryone=false] Whether to ignore `@everyone`/`@here` mentions
202
+ */
203
+
204
+ /**
205
+ * Checks if a user, guild member, thread member, role, or channel is mentioned.
206
+ * Takes into account user mentions, role mentions, channel mentions,
207
+ * replied user mention, and `@everyone`/`@here` mentions.
208
+ * @param {UserResolvable|RoleResolvable|ChannelResolvable} data The User/Role/Channel to check for
209
+ * @param {MessageMentionsHasOptions} [options] The options for the check
210
+ * @returns {boolean}
211
+ */
212
+ has(data, { ignoreDirect = false, ignoreRoles = false, ignoreRepliedUser = false, ignoreEveryone = false } = {}) {
213
+ const user = this.client.users.resolve(data);
214
+ if (!ignoreEveryone && user && this.everyone) return true;
215
+
216
+ const userWasRepliedTo = user && this.repliedUser?.id === user.id;
217
+
218
+ if (!ignoreRepliedUser && userWasRepliedTo && this.users.has(user.id)) return true;
219
+ if (!ignoreRepliedUser && this.users.has(this.repliedUser?.id) && this.repliedUser?.id === user?.id) return true;
220
+ if (!ignoreDirect) {
221
+ if (user && (!ignoreRepliedUser || this.parsedUsers.has(user.id)) && this.users.has(user.id)) return true;
222
+
223
+ const role = this.guild?.roles.resolve(data);
224
+ if (role && this.roles.has(role.id)) return true;
225
+
226
+ const channel = this.client.channels.resolve(data);
227
+ if (channel && this.channels.has(channel.id)) return true;
228
+ }
229
+ if (user && !ignoreEveryone && this.everyone) return true;
230
+ if (!ignoreRoles) {
231
+ const member = this.guild?.members.resolve(data);
232
+ if (member) {
233
+ for (const mentionedRole of this.roles.values()) if (member.roles.cache.has(mentionedRole.id)) return true;
234
+ }
235
+ }
236
+
237
+ return false;
238
+ }
239
+
240
+ toJSON() {
241
+ return Util.flatten(this, {
242
+ members: true,
243
+ channels: true,
244
+ });
245
+ }
246
+ }
247
+
248
+ /**
249
+ * Regular expression that globally matches `@everyone` and `@here`
250
+ * @type {RegExp}
251
+ */
252
+ MessageMentions.EVERYONE_PATTERN = /@(everyone|here)/g;
253
+
254
+ /**
255
+ * Regular expression that globally matches user mentions like `<@81440962496172032>`
256
+ * @type {RegExp}
257
+ */
258
+ MessageMentions.USERS_PATTERN = /<@!?(\d{17,19})>/g;
259
+
260
+ /**
261
+ * Regular expression that globally matches role mentions like `<@&297577916114403338>`
262
+ * @type {RegExp}
263
+ */
264
+ MessageMentions.ROLES_PATTERN = /<@&(\d{17,19})>/g;
265
+
266
+ /**
267
+ * Regular expression that globally matches channel mentions like `<#222079895583457280>`
268
+ * @type {RegExp}
269
+ */
270
+ MessageMentions.CHANNELS_PATTERN = /<#(\d{17,19})>/g;
271
+
272
+ module.exports = MessageMentions;
@@ -0,0 +1,358 @@
1
+ 'use strict';
2
+
3
+ const { Buffer } = require('node:buffer');
4
+ const BaseMessageComponent = require('./BaseMessageComponent');
5
+ const MessageEmbed = require('./MessageEmbed');
6
+ const WebEmbed = require('./WebEmbed');
7
+ const { RangeError } = require('../errors');
8
+ const ActivityFlags = require('../util/ActivityFlags');
9
+ const DataResolver = require('../util/DataResolver');
10
+ const MessageFlags = require('../util/MessageFlags');
11
+ const Util = require('../util/Util');
12
+
13
+ /**
14
+ * Represents a message to be sent to the API.
15
+ */
16
+ class MessagePayload {
17
+ /**
18
+ * @param {MessageTarget} target The target for this message to be sent to
19
+ * @param {MessageOptions|WebhookMessageOptions} options Options passed in from send
20
+ */
21
+ constructor(target, options) {
22
+ /**
23
+ * The target for this message to be sent to
24
+ * @type {MessageTarget}
25
+ */
26
+ this.target = target;
27
+
28
+ /**
29
+ * Options passed in from send
30
+ * @type {MessageOptions|WebhookMessageOptions}
31
+ */
32
+ this.options = options;
33
+
34
+ /**
35
+ * Data sendable to the API
36
+ * @type {?APIMessage}
37
+ */
38
+ this.data = null;
39
+
40
+ /**
41
+ * @typedef {Object} MessageFile
42
+ * @property {Buffer|string|Stream} attachment The original attachment that generated this file
43
+ * @property {string} name The name of this file
44
+ * @property {Buffer|Stream} file The file to be sent to the API
45
+ * @extends {APIAttachment}
46
+ */
47
+
48
+ /**
49
+ * Files sendable to the API
50
+ * @type {?MessageFile[]}
51
+ */
52
+ this.files = null;
53
+ }
54
+
55
+ /**
56
+ * Whether or not using new API to upload files
57
+ * @type {boolean}
58
+ * @readonly
59
+ */
60
+ get usingNewAttachmentAPI() {
61
+ return Boolean(this.options?.usingNewAttachmentAPI);
62
+ }
63
+
64
+ /**
65
+ * Whether or not the target is a {@link Webhook} or a {@link WebhookClient}
66
+ * @type {boolean}
67
+ * @readonly
68
+ */
69
+ get isWebhook() {
70
+ const Webhook = require('./Webhook');
71
+ const WebhookClient = require('../client/WebhookClient');
72
+ return this.target instanceof Webhook || this.target instanceof WebhookClient;
73
+ }
74
+
75
+ /**
76
+ * Whether or not the target is a {@link User}
77
+ * @type {boolean}
78
+ * @readonly
79
+ */
80
+ get isUser() {
81
+ const User = require('./User');
82
+ const { GuildMember } = require('./GuildMember');
83
+ return this.target instanceof User || this.target instanceof GuildMember;
84
+ }
85
+
86
+ /**
87
+ * Whether or not the target is a {@link Message}
88
+ * @type {boolean}
89
+ * @readonly
90
+ */
91
+ get isMessage() {
92
+ const { Message } = require('./Message');
93
+ return this.target instanceof Message;
94
+ }
95
+
96
+ /**
97
+ * Whether or not the target is a {@link MessageManager}
98
+ * @type {boolean}
99
+ * @readonly
100
+ */
101
+ get isMessageManager() {
102
+ const MessageManager = require('../managers/MessageManager');
103
+ return this.target instanceof MessageManager;
104
+ }
105
+
106
+ /**
107
+ * Whether or not the target is an {@link Interaction} or an {@link InteractionWebhook}
108
+ * @type {boolean}
109
+ * @readonly
110
+ */
111
+ get isInteraction() {
112
+ const Interaction = require('./Interaction');
113
+ const InteractionWebhook = require('./InteractionWebhook');
114
+ return this.target instanceof Interaction || this.target instanceof InteractionWebhook;
115
+ }
116
+
117
+ /**
118
+ * Makes the content of this message.
119
+ * @returns {?string}
120
+ */
121
+ makeContent() {
122
+ let content;
123
+ if (this.options.content === null) {
124
+ content = '';
125
+ } else if (typeof this.options.content !== 'undefined') {
126
+ content = Util.verifyString(this.options.content, RangeError, 'MESSAGE_CONTENT_TYPE', false);
127
+ }
128
+
129
+ return content;
130
+ }
131
+
132
+ /**
133
+ * Resolves data.
134
+ * @returns {MessagePayload}
135
+ */
136
+ async resolveData() {
137
+ if (this.data) return this;
138
+ const isInteraction = this.isInteraction;
139
+ const isWebhook = this.isWebhook;
140
+
141
+ let content = this.makeContent();
142
+ const tts = Boolean(this.options.tts);
143
+
144
+ let nonce;
145
+ if (typeof this.options.nonce !== 'undefined') {
146
+ nonce = this.options.nonce;
147
+ // eslint-disable-next-line max-len
148
+ if (typeof nonce === 'number' ? !Number.isInteger(nonce) : typeof nonce !== 'string') {
149
+ throw new RangeError('MESSAGE_NONCE_TYPE');
150
+ }
151
+ }
152
+
153
+ const components = this.options.components?.map(c => BaseMessageComponent.create(c).toJSON());
154
+
155
+ let username;
156
+ let avatarURL;
157
+ let threadName;
158
+ if (isWebhook) {
159
+ username = this.options.username ?? this.target.name;
160
+ if (this.options.avatarURL) avatarURL = this.options.avatarURL;
161
+ if (this.options.threadName) threadName = this.options.threadName;
162
+ }
163
+
164
+ let flags;
165
+ if (
166
+ typeof this.options.flags !== 'undefined' ||
167
+ (this.isMessage && typeof this.options.reply === 'undefined') ||
168
+ this.isMessageManager
169
+ ) {
170
+ // eslint-disable-next-line eqeqeq
171
+ flags = this.options.flags != null ? new MessageFlags(this.options.flags).bitfield : this.target.flags?.bitfield;
172
+ }
173
+
174
+ if (isInteraction && this.options.ephemeral) {
175
+ flags |= MessageFlags.FLAGS.EPHEMERAL;
176
+ }
177
+
178
+ let allowedMentions =
179
+ typeof this.options.allowedMentions === 'undefined'
180
+ ? this.target.client.options.allowedMentions
181
+ : this.options.allowedMentions;
182
+
183
+ if (allowedMentions) {
184
+ allowedMentions = Util.cloneObject(allowedMentions);
185
+ allowedMentions.replied_user = allowedMentions.repliedUser;
186
+ delete allowedMentions.repliedUser;
187
+ }
188
+
189
+ let message_reference;
190
+ if (typeof this.options.reply === 'object') {
191
+ const reference = this.options.reply.messageReference;
192
+ const message_id = this.isMessage ? reference.id ?? reference : this.target.messages.resolveId(reference);
193
+ if (message_id) {
194
+ message_reference = {
195
+ message_id,
196
+ fail_if_not_exists: this.options.reply.failIfNotExists ?? this.target.client.options.failIfNotExists,
197
+ };
198
+ }
199
+ }
200
+
201
+ const attachments = this.options.files?.map((file, index) => ({
202
+ id: index.toString(),
203
+ description: file.description,
204
+ }));
205
+ if (Array.isArray(this.options.attachments)) {
206
+ this.options.attachments.push(...(attachments ?? []));
207
+ } else {
208
+ this.options.attachments = attachments;
209
+ }
210
+
211
+ if (this.options.embeds) {
212
+ if (!Array.isArray(this.options.embeds)) {
213
+ this.options.embeds = [this.options.embeds];
214
+ }
215
+
216
+ const webembeds = this.options.embeds.filter(e => e instanceof WebEmbed);
217
+ this.options.embeds = this.options.embeds.filter(e => !(e instanceof WebEmbed));
218
+
219
+ if (webembeds.length > 0) {
220
+ if (!content) content = '';
221
+ // Add hidden embed link
222
+ content += `\n${WebEmbed.hiddenEmbed} \n`;
223
+ if (webembeds.length > 1) {
224
+ console.warn('[WARN] Multiple webembeds are not supported, this will be ignored.');
225
+ }
226
+ // Const embed = webembeds[0];
227
+ for (const webE of webembeds) {
228
+ const data = await webE.toMessage();
229
+ content += `\n${data}`;
230
+ }
231
+ }
232
+ // Check content
233
+ if (typeof content == 'string' && content.length > 2000) {
234
+ console.warn('[WARN] Content is longer than 2000 characters.');
235
+ }
236
+ if (typeof content == 'string' && content.length > 4000) {
237
+ // Max length if user has nitro boost
238
+ throw new RangeError('MESSAGE_EMBED_LINK_LENGTH');
239
+ }
240
+ }
241
+
242
+ // Activity
243
+ let activity;
244
+ if (
245
+ this.options.activity instanceof Object &&
246
+ typeof this.options.activity.partyId == 'string' &&
247
+ this.options.activity.type
248
+ ) {
249
+ const type = ActivityFlags.resolve(this.options.activity.type);
250
+ const sessionId = this.target.client.session_id;
251
+ const partyId = this.options.activity.partyId;
252
+ activity = {
253
+ type,
254
+ party_id: partyId,
255
+ session_id: sessionId,
256
+ };
257
+ }
258
+
259
+ this.data = {
260
+ activity,
261
+ content,
262
+ tts,
263
+ nonce,
264
+ embeds: this.options.embeds?.map(embed => new MessageEmbed(embed).toJSON()),
265
+ components,
266
+ username,
267
+ avatar_url: avatarURL,
268
+ allowed_mentions:
269
+ typeof content === 'undefined' && typeof message_reference === 'undefined' ? undefined : allowedMentions,
270
+ flags,
271
+ message_reference,
272
+ attachments: this.options.attachments,
273
+ sticker_ids: this.options.stickers?.map(sticker => sticker.id ?? sticker),
274
+ thread_name: threadName,
275
+ };
276
+ return this;
277
+ }
278
+
279
+ /**
280
+ * Resolves files.
281
+ * @returns {Promise<MessagePayload>}
282
+ */
283
+ async resolveFiles() {
284
+ if (this.files) return this;
285
+
286
+ this.files = await Promise.all(this.options.files?.map(file => this.constructor.resolveFile(file)) ?? []);
287
+ return this;
288
+ }
289
+
290
+ /**
291
+ * Resolves a single file into an object sendable to the API.
292
+ * @param {BufferResolvable|Stream|FileOptions|MessageAttachment} fileLike Something that could be resolved to a file
293
+ * @returns {Promise<MessageFile>}
294
+ */
295
+ static async resolveFile(fileLike) {
296
+ let attachment;
297
+ let name;
298
+
299
+ const findName = thing => {
300
+ if (typeof thing === 'string') {
301
+ return Util.basename(thing);
302
+ }
303
+
304
+ if (thing.path) {
305
+ return Util.basename(thing.path);
306
+ }
307
+
308
+ return 'file.jpg';
309
+ };
310
+
311
+ const ownAttachment =
312
+ typeof fileLike === 'string' || fileLike instanceof Buffer || typeof fileLike.pipe === 'function';
313
+ if (ownAttachment) {
314
+ attachment = fileLike;
315
+ name = findName(attachment);
316
+ } else {
317
+ attachment = fileLike.attachment;
318
+ name = fileLike.name ?? findName(attachment);
319
+ }
320
+
321
+ const resource = await DataResolver.resolveFile(attachment);
322
+ return {
323
+ attachment,
324
+ name,
325
+ file: resource,
326
+ description: fileLike.description,
327
+ duration_secs: fileLike.duration,
328
+ waveform: fileLike.waveform,
329
+ };
330
+ }
331
+
332
+ /**
333
+ * Creates a {@link MessagePayload} from user-level arguments.
334
+ * @param {MessageTarget} target Target to send to
335
+ * @param {string|MessageOptions|WebhookMessageOptions} options Options or content to use
336
+ * @param {MessageOptions|WebhookMessageOptions} [extra={}] Extra options to add onto specified options
337
+ * @returns {MessagePayload}
338
+ */
339
+ static create(target, options, extra = {}) {
340
+ return new this(
341
+ target,
342
+ typeof options !== 'object' || options === null ? { content: options, ...extra } : { ...options, ...extra },
343
+ );
344
+ }
345
+ }
346
+
347
+ module.exports = MessagePayload;
348
+
349
+ /**
350
+ * A target for a message.
351
+ * @typedef {TextBasedChannels|DMChannel|User|GuildMember|Webhook|WebhookClient|Interaction|InteractionWebhook|
352
+ * Message|MessageManager} MessageTarget
353
+ */
354
+
355
+ /**
356
+ * @external APIMessage
357
+ * @see {@link https://discord.com/developers/docs/resources/channel#message-object}
358
+ */