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,273 @@
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
+
215
+ if (!ignoreEveryone && user && this.everyone) return true;
216
+
217
+ const userWasRepliedTo = user && this.repliedUser?.id === user.id;
218
+
219
+ if (!ignoreRepliedUser && userWasRepliedTo && this.users.has(user.id)) return true;
220
+
221
+ if (!ignoreDirect) {
222
+ if (user && (!ignoreRepliedUser || this.parsedUsers.has(user.id)) && this.users.has(user.id)) return true;
223
+
224
+ const role = this.guild?.roles.resolve(data);
225
+ if (role && this.roles.has(role.id)) return true;
226
+
227
+ const channel = this.client.channels.resolve(data);
228
+ if (channel && this.channels.has(channel.id)) return true;
229
+ }
230
+
231
+ if (!ignoreRoles) {
232
+ const member = this.guild?.members.resolve(data);
233
+ if (member) {
234
+ for (const mentionedRole of this.roles.values()) if (member.roles.cache.has(mentionedRole.id)) return true;
235
+ }
236
+ }
237
+
238
+ return false;
239
+ }
240
+
241
+ toJSON() {
242
+ return Util.flatten(this, {
243
+ members: true,
244
+ channels: true,
245
+ });
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Regular expression that globally matches `@everyone` and `@here`
251
+ * @type {RegExp}
252
+ */
253
+ MessageMentions.EVERYONE_PATTERN = /@(everyone|here)/g;
254
+
255
+ /**
256
+ * Regular expression that globally matches user mentions like `<@81440962496172032>`
257
+ * @type {RegExp}
258
+ */
259
+ MessageMentions.USERS_PATTERN = /<@!?(\d{17,19})>/g;
260
+
261
+ /**
262
+ * Regular expression that globally matches role mentions like `<@&297577916114403338>`
263
+ * @type {RegExp}
264
+ */
265
+ MessageMentions.ROLES_PATTERN = /<@&(\d{17,19})>/g;
266
+
267
+ /**
268
+ * Regular expression that globally matches channel mentions like `<#222079895583457280>`
269
+ * @type {RegExp}
270
+ */
271
+ MessageMentions.CHANNELS_PATTERN = /<#(\d{17,19})>/g;
272
+
273
+ module.exports = MessageMentions;
@@ -0,0 +1,318 @@
1
+ 'use strict';
2
+
3
+ const { Buffer } = require('node:buffer');
4
+ const BaseMessageComponent = require('./BaseMessageComponent');
5
+ const MessageEmbed = require('./MessageEmbed');
6
+ const MessagePoll = require('./MessagePoll');
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
+ */
46
+
47
+ /**
48
+ * Files sendable to the API
49
+ * @type {?MessageFile[]}
50
+ */
51
+ this.files = null;
52
+ }
53
+
54
+ /**
55
+ * Whether or not the target is a {@link Webhook} or a {@link WebhookClient}
56
+ * @type {boolean}
57
+ * @readonly
58
+ */
59
+ get isWebhook() {
60
+ const Webhook = require('./Webhook');
61
+ const WebhookClient = require('../client/WebhookClient');
62
+ return this.target instanceof Webhook || this.target instanceof WebhookClient;
63
+ }
64
+
65
+ /**
66
+ * Whether or not the target is a {@link User}
67
+ * @type {boolean}
68
+ * @readonly
69
+ */
70
+ get isUser() {
71
+ const User = require('./User');
72
+ const { GuildMember } = require('./GuildMember');
73
+ return this.target instanceof User || this.target instanceof GuildMember;
74
+ }
75
+
76
+ /**
77
+ * Whether or not the target is a {@link Message}
78
+ * @type {boolean}
79
+ * @readonly
80
+ */
81
+ get isMessage() {
82
+ const { Message } = require('./Message');
83
+ return this.target instanceof Message;
84
+ }
85
+
86
+ /**
87
+ * Whether or not the target is a {@link MessageManager}
88
+ * @type {boolean}
89
+ * @readonly
90
+ */
91
+ get isMessageManager() {
92
+ const MessageManager = require('../managers/MessageManager');
93
+ return this.target instanceof MessageManager;
94
+ }
95
+
96
+ /**
97
+ * Whether or not the target is an {@link Interaction} or an {@link InteractionWebhook}
98
+ * @type {boolean}
99
+ * @readonly
100
+ */
101
+ get isInteraction() {
102
+ const Interaction = require('./Interaction');
103
+ const InteractionWebhook = require('./InteractionWebhook');
104
+ return this.target instanceof Interaction || this.target instanceof InteractionWebhook;
105
+ }
106
+
107
+ /**
108
+ * Makes the content of this message.
109
+ * @returns {?string}
110
+ */
111
+ makeContent() {
112
+ let content;
113
+ if (this.options.content === null) {
114
+ content = '';
115
+ } else if (typeof this.options.content !== 'undefined') {
116
+ content = Util.verifyString(this.options.content, RangeError, 'MESSAGE_CONTENT_TYPE', false);
117
+ }
118
+
119
+ return content;
120
+ }
121
+
122
+ /**
123
+ * Resolves data.
124
+ * @returns {MessagePayload}
125
+ */
126
+ resolveData() {
127
+ if (this.data) return this;
128
+ const isInteraction = this.isInteraction;
129
+ const isWebhook = this.isWebhook;
130
+
131
+ const content = this.makeContent();
132
+ const tts = Boolean(this.options.tts);
133
+
134
+ let nonce;
135
+ if (typeof this.options.nonce !== 'undefined') {
136
+ nonce = this.options.nonce;
137
+ // eslint-disable-next-line max-len
138
+ if (typeof nonce === 'number' ? !Number.isInteger(nonce) : typeof nonce !== 'string') {
139
+ throw new RangeError('MESSAGE_NONCE_TYPE');
140
+ }
141
+ }
142
+
143
+ const components = this.options.components?.map(c => BaseMessageComponent.create(c).toJSON());
144
+
145
+ let username;
146
+ let avatarURL;
147
+ let threadName;
148
+ if (isWebhook) {
149
+ username = this.options.username ?? this.target.name;
150
+ if (this.options.avatarURL) avatarURL = this.options.avatarURL;
151
+ if (this.options.threadName) threadName = this.options.threadName;
152
+ }
153
+
154
+ let flags;
155
+ if (
156
+ typeof this.options.flags !== 'undefined' ||
157
+ (this.isMessage && typeof this.options.reply === 'undefined') ||
158
+ this.isMessageManager
159
+ ) {
160
+ // eslint-disable-next-line eqeqeq
161
+ flags = this.options.flags != null ? new MessageFlags(this.options.flags).bitfield : this.target.flags?.bitfield;
162
+ }
163
+
164
+ if (isInteraction && this.options.ephemeral) {
165
+ flags |= MessageFlags.FLAGS.EPHEMERAL;
166
+ }
167
+
168
+ let allowedMentions =
169
+ typeof this.options.allowedMentions === 'undefined'
170
+ ? this.target.client.options.allowedMentions
171
+ : this.options.allowedMentions;
172
+
173
+ if (allowedMentions) {
174
+ allowedMentions = Util.cloneObject(allowedMentions);
175
+ allowedMentions.replied_user = allowedMentions.repliedUser;
176
+ delete allowedMentions.repliedUser;
177
+ }
178
+
179
+ let message_reference;
180
+ if (typeof this.options.reply === 'object') {
181
+ const reference = this.options.reply.messageReference;
182
+ const message_id = this.isMessage ? reference.id ?? reference : this.target.messages.resolveId(reference);
183
+ if (message_id) {
184
+ message_reference = {
185
+ message_id,
186
+ fail_if_not_exists: this.options.reply.failIfNotExists ?? this.target.client.options.failIfNotExists,
187
+ };
188
+ }
189
+ }
190
+
191
+ const attachments = this.options.files?.map((file, index) => ({
192
+ id: index.toString(),
193
+ description: file.description,
194
+ }));
195
+ if (Array.isArray(this.options.attachments)) {
196
+ this.options.attachments.push(...(attachments ?? []));
197
+ } else {
198
+ this.options.attachments = attachments;
199
+ }
200
+
201
+ // Activity
202
+ let activity;
203
+ if (
204
+ this.options.activity instanceof Object &&
205
+ typeof this.options.activity.partyId == 'string' &&
206
+ this.options.activity.type
207
+ ) {
208
+ const type = ActivityFlags.resolve(this.options.activity.type);
209
+ const sessionId = this.target.client.sessionId;
210
+ const partyId = this.options.activity.partyId;
211
+ activity = {
212
+ type,
213
+ party_id: partyId,
214
+ session_id: sessionId,
215
+ };
216
+ }
217
+
218
+ this.data = {
219
+ activity,
220
+ content,
221
+ tts,
222
+ nonce,
223
+ embeds: this.options.embeds?.map(embed => new MessageEmbed(embed).toJSON()),
224
+ components,
225
+ username,
226
+ avatar_url: avatarURL,
227
+ allowed_mentions:
228
+ typeof content === 'undefined' && typeof message_reference === 'undefined' ? undefined : allowedMentions,
229
+ flags,
230
+ message_reference,
231
+ attachments: this.options.attachments,
232
+ sticker_ids: this.options.stickers?.map(sticker => sticker.id ?? sticker),
233
+ thread_name: threadName,
234
+ poll: this.options.poll instanceof MessagePoll ? this.options.poll.toJSON() : this.options.poll,
235
+ };
236
+ return this;
237
+ }
238
+
239
+ /**
240
+ * Resolves files.
241
+ * @returns {Promise<MessagePayload>}
242
+ */
243
+ async resolveFiles() {
244
+ if (this.files) return this;
245
+
246
+ this.files = await Promise.all(this.options.files?.map(file => this.constructor.resolveFile(file)) ?? []);
247
+ return this;
248
+ }
249
+
250
+ /**
251
+ * Resolves a single file into an object sendable to the API.
252
+ * @param {BufferResolvable|Stream|FileOptions|MessageAttachment} fileLike Something that could be resolved to a file
253
+ * @returns {Promise<MessageFile>}
254
+ */
255
+ static async resolveFile(fileLike) {
256
+ let attachment;
257
+ let name;
258
+
259
+ const findName = thing => {
260
+ if (typeof thing === 'string') {
261
+ return Util.basename(thing);
262
+ }
263
+
264
+ if (thing.path) {
265
+ return Util.basename(thing.path);
266
+ }
267
+
268
+ return 'file.jpg';
269
+ };
270
+
271
+ const ownAttachment =
272
+ typeof fileLike === 'string' || fileLike instanceof Buffer || typeof fileLike.pipe === 'function';
273
+ if (ownAttachment) {
274
+ attachment = fileLike;
275
+ name = findName(attachment);
276
+ } else {
277
+ attachment = fileLike.attachment;
278
+ name = fileLike.name ?? findName(attachment);
279
+ }
280
+
281
+ const resource = await DataResolver.resolveFile(attachment);
282
+ return {
283
+ attachment,
284
+ name,
285
+ file: resource,
286
+ description: fileLike.description,
287
+ duration_secs: fileLike.duration,
288
+ waveform: fileLike.waveform,
289
+ };
290
+ }
291
+
292
+ /**
293
+ * Creates a {@link MessagePayload} from user-level arguments.
294
+ * @param {MessageTarget} target Target to send to
295
+ * @param {string|MessageOptions|WebhookMessageOptions} options Options or content to use
296
+ * @param {MessageOptions|WebhookMessageOptions} [extra={}] Extra options to add onto specified options
297
+ * @returns {MessagePayload}
298
+ */
299
+ static create(target, options, extra = {}) {
300
+ return new this(
301
+ target,
302
+ typeof options !== 'object' || options === null ? { content: options, ...extra } : { ...options, ...extra },
303
+ );
304
+ }
305
+ }
306
+
307
+ module.exports = MessagePayload;
308
+
309
+ /**
310
+ * A target for a message.
311
+ * @typedef {TextBasedChannels|User|GuildMember|Webhook|WebhookClient|Interaction|InteractionWebhook|
312
+ * Message|MessageManager} MessageTarget
313
+ */
314
+
315
+ /**
316
+ * @external APIMessage
317
+ * @see {@link https://discord.com/developers/docs/resources/channel#message-object}
318
+ */