discord-sb.js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +2 -0
- package/package.json +91 -0
- package/src/WebSocket.js +39 -0
- package/src/client/BaseClient.js +86 -0
- package/src/client/Client.js +978 -0
- package/src/client/WebhookClient.js +61 -0
- package/src/client/actions/Action.js +116 -0
- package/src/client/actions/ActionsManager.js +80 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +27 -0
- package/src/client/actions/AutoModerationRuleCreate.js +28 -0
- package/src/client/actions/AutoModerationRuleDelete.js +32 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +30 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +39 -0
- package/src/client/actions/ChannelUpdate.js +43 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +65 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +21 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +33 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +31 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +21 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +50 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +46 -0
- package/src/client/actions/MessagePollVoteAdd.js +33 -0
- package/src/client/actions/MessagePollVoteRemove.js +33 -0
- package/src/client/actions/MessageReactionAdd.js +68 -0
- package/src/client/actions/MessageReactionRemove.js +50 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +50 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +33 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +32 -0
- package/src/client/actions/ThreadListSync.js +59 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +34 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +35 -0
- package/src/client/actions/VoiceStateUpdate.js +50 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +151 -0
- package/src/client/voice/VoiceConnection.js +1249 -0
- package/src/client/voice/dispatcher/AnnexBDispatcher.js +120 -0
- package/src/client/voice/dispatcher/AudioDispatcher.js +145 -0
- package/src/client/voice/dispatcher/BaseDispatcher.js +459 -0
- package/src/client/voice/dispatcher/VPxDispatcher.js +54 -0
- package/src/client/voice/dispatcher/VideoDispatcher.js +68 -0
- package/src/client/voice/networking/VoiceUDPClient.js +173 -0
- package/src/client/voice/networking/VoiceWebSocket.js +286 -0
- package/src/client/voice/player/MediaPlayer.js +321 -0
- package/src/client/voice/player/processing/AnnexBNalSplitter.js +244 -0
- package/src/client/voice/player/processing/IvfSplitter.js +106 -0
- package/src/client/voice/player/processing/PCMInsertSilence.js +37 -0
- package/src/client/voice/receiver/PacketHandler.js +260 -0
- package/src/client/voice/receiver/Receiver.js +96 -0
- package/src/client/voice/receiver/Recorder.js +173 -0
- package/src/client/voice/util/Function.js +116 -0
- package/src/client/voice/util/PlayInterface.js +122 -0
- package/src/client/voice/util/Secretbox.js +64 -0
- package/src/client/voice/util/Silence.js +16 -0
- package/src/client/voice/util/Socket.js +62 -0
- package/src/client/voice/util/VolumeInterface.js +104 -0
- package/src/client/websocket/WebSocketManager.js +392 -0
- package/src/client/websocket/WebSocketShard.js +907 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_CREATE.js +18 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_DELETE.js +20 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_UPDATE.js +20 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CALL_CREATE.js +14 -0
- package/src/client/websocket/handlers/CALL_DELETE.js +11 -0
- package/src/client/websocket/handlers/CALL_UPDATE.js +11 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_ADD.js +19 -0
- package/src/client/websocket/handlers/CHANNEL_RECIPIENT_REMOVE.js +16 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +52 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_MODAL_CREATE.js +12 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +121 -0
- package/src/client/websocket/handlers/RELATIONSHIP_ADD.js +19 -0
- package/src/client/websocket/handlers/RELATIONSHIP_REMOVE.js +17 -0
- package/src/client/websocket/handlers/RELATIONSHIP_UPDATE.js +41 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_GUILD_SETTINGS_UPDATE.js +6 -0
- package/src/client/websocket/handlers/USER_NOTE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_REQUIRED_ACTION_UPDATE.js +78 -0
- package/src/client/websocket/handlers/USER_SETTINGS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.js +16 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_STATUS_UPDATE.js +12 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +84 -0
- package/src/errors/DJSError.js +61 -0
- package/src/errors/Messages.js +217 -0
- package/src/errors/index.js +4 -0
- package/src/index.js +172 -0
- package/src/managers/ApplicationCommandManager.js +264 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +417 -0
- package/src/managers/AutoModerationRuleManager.js +296 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/BillingManager.js +66 -0
- package/src/managers/CachedManager.js +71 -0
- package/src/managers/ChannelManager.js +148 -0
- package/src/managers/ClientUserSettingManager.js +372 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/DeveloperManager.js +254 -0
- package/src/managers/GuildBanManager.js +250 -0
- package/src/managers/GuildChannelManager.js +488 -0
- package/src/managers/GuildEmojiManager.js +171 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +108 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +338 -0
- package/src/managers/GuildMemberManager.js +599 -0
- package/src/managers/GuildMemberRoleManager.js +195 -0
- package/src/managers/GuildScheduledEventManager.js +314 -0
- package/src/managers/GuildSettingManager.js +155 -0
- package/src/managers/GuildStickerManager.js +179 -0
- package/src/managers/GuildTextThreadManager.js +98 -0
- package/src/managers/InteractionManager.js +39 -0
- package/src/managers/MessageManager.js +423 -0
- package/src/managers/PermissionOverwriteManager.js +164 -0
- package/src/managers/PresenceManager.js +71 -0
- package/src/managers/QuestManager.js +353 -0
- package/src/managers/ReactionManager.js +67 -0
- package/src/managers/ReactionUserManager.js +73 -0
- package/src/managers/RelationshipManager.js +278 -0
- package/src/managers/RoleManager.js +448 -0
- package/src/managers/SessionManager.js +66 -0
- package/src/managers/StageInstanceManager.js +162 -0
- package/src/managers/ThreadManager.js +175 -0
- package/src/managers/ThreadMemberManager.js +186 -0
- package/src/managers/UserManager.js +136 -0
- package/src/managers/UserNoteManager.js +53 -0
- package/src/managers/VoiceStateManager.js +59 -0
- package/src/rest/APIRequest.js +154 -0
- package/src/rest/APIRouter.js +53 -0
- package/src/rest/DiscordAPIError.js +119 -0
- package/src/rest/HTTPError.js +62 -0
- package/src/rest/RESTManager.js +67 -0
- package/src/rest/RateLimitError.js +55 -0
- package/src/rest/RequestHandler.js +466 -0
- package/src/sharding/Shard.js +444 -0
- package/src/sharding/ShardClientUtil.js +279 -0
- package/src/sharding/ShardingManager.js +319 -0
- package/src/structures/AnonymousGuild.js +98 -0
- package/src/structures/ApplicationCommand.js +593 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +48 -0
- package/src/structures/AutoModerationActionExecution.js +89 -0
- package/src/structures/AutoModerationRule.js +294 -0
- package/src/structures/AutocompleteInteraction.js +107 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseCommandInteraction.js +211 -0
- package/src/structures/BaseGuild.js +116 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +191 -0
- package/src/structures/BaseGuildVoiceChannel.js +241 -0
- package/src/structures/BaseMessageComponent.js +181 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CallState.js +63 -0
- package/src/structures/CategoryChannel.js +85 -0
- package/src/structures/Channel.js +284 -0
- package/src/structures/ClientPresence.js +77 -0
- package/src/structures/ClientUser.js +655 -0
- package/src/structures/CommandInteraction.js +41 -0
- package/src/structures/CommandInteractionOptionResolver.js +276 -0
- package/src/structures/ContainerComponent.js +68 -0
- package/src/structures/ContextMenuInteraction.js +65 -0
- package/src/structures/DMChannel.js +219 -0
- package/src/structures/DirectoryChannel.js +20 -0
- package/src/structures/Emoji.js +148 -0
- package/src/structures/FileComponent.js +49 -0
- package/src/structures/ForumChannel.js +31 -0
- package/src/structures/GroupDMChannel.js +394 -0
- package/src/structures/Guild.js +1791 -0
- package/src/structures/GuildAuditLogs.js +746 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildBoost.js +108 -0
- package/src/structures/GuildChannel.js +470 -0
- package/src/structures/GuildEmoji.js +161 -0
- package/src/structures/GuildMember.js +636 -0
- package/src/structures/GuildPreview.js +191 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +536 -0
- package/src/structures/GuildTemplate.js +236 -0
- package/src/structures/Integration.js +188 -0
- package/src/structures/IntegrationApplication.js +96 -0
- package/src/structures/Interaction.js +290 -0
- package/src/structures/InteractionCollector.js +248 -0
- package/src/structures/InteractionWebhook.js +43 -0
- package/src/structures/Invite.js +358 -0
- package/src/structures/InviteGuild.js +23 -0
- package/src/structures/InviteStageInstance.js +86 -0
- package/src/structures/MediaChannel.js +11 -0
- package/src/structures/MediaGalleryComponent.js +41 -0
- package/src/structures/MediaGalleryItem.js +47 -0
- package/src/structures/Message.js +1252 -0
- package/src/structures/MessageActionRow.js +105 -0
- package/src/structures/MessageAttachment.js +216 -0
- package/src/structures/MessageButton.js +166 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +120 -0
- package/src/structures/MessageContextMenuInteraction.js +20 -0
- package/src/structures/MessageEmbed.js +596 -0
- package/src/structures/MessageMentions.js +273 -0
- package/src/structures/MessagePayload.js +354 -0
- package/src/structures/MessageReaction.js +181 -0
- package/src/structures/MessageSelectMenu.js +141 -0
- package/src/structures/Modal.js +161 -0
- package/src/structures/ModalSubmitFieldsResolver.js +53 -0
- package/src/structures/ModalSubmitInteraction.js +119 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PermissionOverwrites.js +198 -0
- package/src/structures/Poll.js +108 -0
- package/src/structures/PollAnswer.js +88 -0
- package/src/structures/Presence.js +1157 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +590 -0
- package/src/structures/SectionComponent.js +48 -0
- package/src/structures/SelectMenuInteraction.js +21 -0
- package/src/structures/SeparatorComponent.js +48 -0
- package/src/structures/Session.js +81 -0
- package/src/structures/StageChannel.js +104 -0
- package/src/structures/StageInstance.js +208 -0
- package/src/structures/Sticker.js +310 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StoreChannel.js +56 -0
- package/src/structures/Team.js +118 -0
- package/src/structures/TeamMember.js +80 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextDisplayComponent.js +40 -0
- package/src/structures/TextInputComponent.js +132 -0
- package/src/structures/ThreadChannel.js +605 -0
- package/src/structures/ThreadMember.js +105 -0
- package/src/structures/ThreadOnlyChannel.js +249 -0
- package/src/structures/ThumbnailComponent.js +57 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/UnfurledMediaItem.js +29 -0
- package/src/structures/User.js +640 -0
- package/src/structures/UserContextMenuInteraction.js +29 -0
- package/src/structures/VoiceChannel.js +110 -0
- package/src/structures/VoiceChannelEffect.js +69 -0
- package/src/structures/VoiceRegion.js +53 -0
- package/src/structures/VoiceState.js +354 -0
- package/src/structures/WebEmbed.js +373 -0
- package/src/structures/Webhook.js +478 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +48 -0
- package/src/structures/Widget.js +87 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +953 -0
- package/src/structures/interfaces/Collector.js +300 -0
- package/src/structures/interfaces/InteractionResponses.js +313 -0
- package/src/structures/interfaces/TextBasedChannel.js +821 -0
- package/src/util/APITypes.js +59 -0
- package/src/util/ActivityFlags.js +44 -0
- package/src/util/ApplicationFlags.js +76 -0
- package/src/util/AttachmentFlags.js +38 -0
- package/src/util/BitField.js +170 -0
- package/src/util/ChannelFlags.js +45 -0
- package/src/util/Constants.js +1914 -0
- package/src/util/DataResolver.js +146 -0
- package/src/util/Formatters.js +228 -0
- package/src/util/GuildMemberFlags.js +43 -0
- package/src/util/Intents.js +74 -0
- package/src/util/InviteFlags.js +34 -0
- package/src/util/LimitedCollection.js +131 -0
- package/src/util/MessageFlags.js +63 -0
- package/src/util/Options.js +358 -0
- package/src/util/Permissions.js +202 -0
- package/src/util/PremiumUsageFlags.js +31 -0
- package/src/util/PurchasedFlags.js +33 -0
- package/src/util/RemoteAuth.js +415 -0
- package/src/util/RoleFlags.js +37 -0
- package/src/util/SnowflakeUtil.js +92 -0
- package/src/util/Speaking.js +33 -0
- package/src/util/Sweepers.js +466 -0
- package/src/util/SystemChannelFlags.js +55 -0
- package/src/util/ThreadMemberFlags.js +30 -0
- package/src/util/UserFlags.js +104 -0
- package/src/util/Util.js +1048 -0
- package/typings/enums.d.ts +439 -0
- package/typings/index.d.ts +8505 -0
- package/typings/index.test-d.ts +0 -0
- package/typings/rawDataTypes.d.ts +403 -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,354 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Buffer } = require('node:buffer');
|
|
4
|
+
const BaseMessageComponent = require('./BaseMessageComponent');
|
|
5
|
+
const MessageEmbed = require('./MessageEmbed');
|
|
6
|
+
const { RangeError, Error: DjsError } = require('../errors');
|
|
7
|
+
const ActivityFlags = require('../util/ActivityFlags');
|
|
8
|
+
const { PollLayoutTypes, MessageReferenceTypes } = require('../util/Constants');
|
|
9
|
+
const DataResolver = require('../util/DataResolver');
|
|
10
|
+
const MessageFlags = require('../util/MessageFlags');
|
|
11
|
+
const SnowflakeUtil = require('../util/SnowflakeUtil');
|
|
12
|
+
const Util = require('../util/Util');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Represents a message to be sent to the API.
|
|
16
|
+
*/
|
|
17
|
+
class MessagePayload {
|
|
18
|
+
/**
|
|
19
|
+
* @param {MessageTarget} target The target for this message to be sent to
|
|
20
|
+
* @param {MessageOptions|WebhookMessageOptions} options Options passed in from send
|
|
21
|
+
*/
|
|
22
|
+
constructor(target, options) {
|
|
23
|
+
/**
|
|
24
|
+
* The target for this message to be sent to
|
|
25
|
+
* @type {MessageTarget}
|
|
26
|
+
*/
|
|
27
|
+
this.target = target;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Options passed in from send
|
|
31
|
+
* @type {MessageOptions|WebhookMessageOptions}
|
|
32
|
+
*/
|
|
33
|
+
this.options = options;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Data sendable to the API
|
|
37
|
+
* @type {?APIMessage}
|
|
38
|
+
*/
|
|
39
|
+
this.data = null;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @typedef {Object} MessageFile
|
|
43
|
+
* @property {Buffer|string|Stream} attachment The original attachment that generated this file
|
|
44
|
+
* @property {string} name The name of this file
|
|
45
|
+
* @property {Buffer|Stream} file The file to be sent to the API
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Files sendable to the API
|
|
50
|
+
* @type {?MessageFile[]}
|
|
51
|
+
*/
|
|
52
|
+
this.files = null;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Whether or not the target is a {@link Webhook} or a {@link WebhookClient}
|
|
57
|
+
* @type {boolean}
|
|
58
|
+
* @readonly
|
|
59
|
+
*/
|
|
60
|
+
get isWebhook() {
|
|
61
|
+
const Webhook = require('./Webhook');
|
|
62
|
+
const WebhookClient = require('../client/WebhookClient');
|
|
63
|
+
return this.target instanceof Webhook || this.target instanceof WebhookClient;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Whether or not the target is a {@link User}
|
|
68
|
+
* @type {boolean}
|
|
69
|
+
* @readonly
|
|
70
|
+
*/
|
|
71
|
+
get isUser() {
|
|
72
|
+
const User = require('./User');
|
|
73
|
+
const { GuildMember } = require('./GuildMember');
|
|
74
|
+
return this.target instanceof User || this.target instanceof GuildMember;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Whether or not the target is a {@link Message}
|
|
79
|
+
* @type {boolean}
|
|
80
|
+
* @readonly
|
|
81
|
+
*/
|
|
82
|
+
get isMessage() {
|
|
83
|
+
const { Message } = require('./Message');
|
|
84
|
+
return this.target instanceof Message;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Whether or not the target is a {@link MessageManager}
|
|
89
|
+
* @type {boolean}
|
|
90
|
+
* @readonly
|
|
91
|
+
*/
|
|
92
|
+
get isMessageManager() {
|
|
93
|
+
const MessageManager = require('../managers/MessageManager');
|
|
94
|
+
return this.target instanceof MessageManager;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Whether or not the target is an {@link Interaction} or an {@link InteractionWebhook}
|
|
99
|
+
* @type {boolean}
|
|
100
|
+
* @readonly
|
|
101
|
+
*/
|
|
102
|
+
get isInteraction() {
|
|
103
|
+
const Interaction = require('./Interaction');
|
|
104
|
+
const InteractionWebhook = require('./InteractionWebhook');
|
|
105
|
+
return this.target instanceof Interaction || this.target instanceof InteractionWebhook;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Makes the content of this message.
|
|
110
|
+
* @returns {?string}
|
|
111
|
+
*/
|
|
112
|
+
makeContent() {
|
|
113
|
+
let content;
|
|
114
|
+
if (this.options.content === null) {
|
|
115
|
+
content = '';
|
|
116
|
+
} else if (typeof this.options.content !== 'undefined') {
|
|
117
|
+
content = Util.verifyString(this.options.content, RangeError, 'MESSAGE_CONTENT_TYPE', false);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return content;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Resolves data.
|
|
125
|
+
* @returns {MessagePayload}
|
|
126
|
+
*/
|
|
127
|
+
resolveData() {
|
|
128
|
+
if (this.data) return this;
|
|
129
|
+
const isInteraction = this.isInteraction;
|
|
130
|
+
const isWebhook = this.isWebhook;
|
|
131
|
+
|
|
132
|
+
const content = this.makeContent();
|
|
133
|
+
const tts = Boolean(this.options.tts);
|
|
134
|
+
|
|
135
|
+
let nonce = SnowflakeUtil.generate();
|
|
136
|
+
if (typeof this.options.nonce !== 'undefined') {
|
|
137
|
+
nonce = this.options.nonce;
|
|
138
|
+
// eslint-disable-next-line max-len
|
|
139
|
+
if (typeof nonce === 'number' ? !Number.isInteger(nonce) : typeof nonce !== 'string') {
|
|
140
|
+
throw new RangeError('MESSAGE_NONCE_TYPE');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const components = this.options.components?.map(c => BaseMessageComponent.create(c).toJSON());
|
|
145
|
+
|
|
146
|
+
let username;
|
|
147
|
+
let avatarURL;
|
|
148
|
+
let threadName;
|
|
149
|
+
let appliedTags;
|
|
150
|
+
if (isWebhook) {
|
|
151
|
+
username = this.options.username ?? this.target.name;
|
|
152
|
+
if (this.options.avatarURL) avatarURL = this.options.avatarURL;
|
|
153
|
+
if (this.options.threadName) threadName = this.options.threadName;
|
|
154
|
+
if (this.options.appliedTags) appliedTags = this.options.appliedTags;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
let flags;
|
|
158
|
+
if (this.options.flags != null) {
|
|
159
|
+
flags = new MessageFlags(this.options.flags).bitfield;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
if (isInteraction && this.options.ephemeral) {
|
|
163
|
+
flags |= MessageFlags.FLAGS.EPHEMERAL;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
let allowedMentions =
|
|
167
|
+
typeof this.options.allowedMentions === 'undefined'
|
|
168
|
+
? this.target.client.options.allowedMentions
|
|
169
|
+
: this.options.allowedMentions;
|
|
170
|
+
|
|
171
|
+
if (allowedMentions) {
|
|
172
|
+
allowedMentions = Util.cloneObject(allowedMentions);
|
|
173
|
+
allowedMentions.replied_user = allowedMentions.repliedUser;
|
|
174
|
+
delete allowedMentions.repliedUser;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
let message_reference;
|
|
178
|
+
if (typeof this.options.reply === 'object') {
|
|
179
|
+
const reference = this.options.reply.messageReference;
|
|
180
|
+
const message_id = this.isMessage ? reference.id ?? reference : this.target.messages.resolveId(reference);
|
|
181
|
+
if (message_id) {
|
|
182
|
+
message_reference = {
|
|
183
|
+
message_id,
|
|
184
|
+
type: MessageReferenceTypes.DEFAULT,
|
|
185
|
+
fail_if_not_exists: this.options.reply.failIfNotExists ?? this.target.client.options.failIfNotExists,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (typeof this.options.forward === 'object') {
|
|
191
|
+
const reference = this.options.forward.message;
|
|
192
|
+
const channel_id = reference.channelId ?? this.target.client.channels.resolveId(this.options.forward.channel);
|
|
193
|
+
const guild_id = reference.guildId ?? this.target.client.guilds.resolveId(this.options.forward.guild);
|
|
194
|
+
const message_id = this.target.messages.resolveId(reference);
|
|
195
|
+
if (message_id) {
|
|
196
|
+
if (!channel_id) throw new DjsError('INVALID_TYPE', 'channelId', 'TextBasedChannelResolvable');
|
|
197
|
+
message_reference = {
|
|
198
|
+
type: MessageReferenceTypes.FORWARD,
|
|
199
|
+
message_id,
|
|
200
|
+
channel_id,
|
|
201
|
+
guild_id: guild_id ?? undefined,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const attachments = this.options.files?.map((file, index) => ({
|
|
207
|
+
id: index.toString(),
|
|
208
|
+
description: file.description,
|
|
209
|
+
}));
|
|
210
|
+
if (Array.isArray(this.options.attachments)) {
|
|
211
|
+
this.options.attachments.push(...(attachments ?? []));
|
|
212
|
+
} else {
|
|
213
|
+
this.options.attachments = attachments;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Activity
|
|
217
|
+
let activity;
|
|
218
|
+
if (
|
|
219
|
+
this.options.activity instanceof Object &&
|
|
220
|
+
typeof this.options.activity.partyId == 'string' &&
|
|
221
|
+
this.options.activity.type
|
|
222
|
+
) {
|
|
223
|
+
const type = ActivityFlags.resolve(this.options.activity.type);
|
|
224
|
+
const sessionId = this.target.client.sessionId;
|
|
225
|
+
const partyId = this.options.activity.partyId;
|
|
226
|
+
activity = {
|
|
227
|
+
type,
|
|
228
|
+
party_id: partyId,
|
|
229
|
+
session_id: sessionId,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
let poll;
|
|
234
|
+
if (this.options.poll) {
|
|
235
|
+
poll = {
|
|
236
|
+
question: {
|
|
237
|
+
text: this.options.poll.question.text,
|
|
238
|
+
},
|
|
239
|
+
answers: this.options.poll.answers.map(answer => ({
|
|
240
|
+
poll_media: { text: answer.text, emoji: Util.resolvePartialEmoji(answer.emoji) },
|
|
241
|
+
})),
|
|
242
|
+
duration: this.options.poll.duration,
|
|
243
|
+
allow_multiselect: this.options.poll.allowMultiselect,
|
|
244
|
+
layout_type:
|
|
245
|
+
typeof this.options.poll.layoutType == 'number'
|
|
246
|
+
? this.options.poll.layoutType
|
|
247
|
+
: PollLayoutTypes[this.options.poll.layoutType],
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
this.data = {
|
|
252
|
+
activity,
|
|
253
|
+
content,
|
|
254
|
+
tts,
|
|
255
|
+
nonce,
|
|
256
|
+
embeds: this.options.embeds?.map(embed => new MessageEmbed(embed).toJSON()),
|
|
257
|
+
components,
|
|
258
|
+
username,
|
|
259
|
+
avatar_url: avatarURL,
|
|
260
|
+
allowed_mentions:
|
|
261
|
+
this.isMessage && message_reference === undefined && this.target?.author?.id !== this.target?.client?.user?.id
|
|
262
|
+
? undefined
|
|
263
|
+
: allowedMentions,
|
|
264
|
+
flags,
|
|
265
|
+
message_reference,
|
|
266
|
+
attachments: this.options.attachments,
|
|
267
|
+
sticker_ids: this.options.stickers?.map(sticker => sticker.id ?? sticker),
|
|
268
|
+
thread_name: threadName,
|
|
269
|
+
applied_tags: appliedTags,
|
|
270
|
+
poll,
|
|
271
|
+
};
|
|
272
|
+
return this;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Resolves files.
|
|
277
|
+
* @returns {Promise<MessagePayload>}
|
|
278
|
+
*/
|
|
279
|
+
async resolveFiles() {
|
|
280
|
+
if (this.files) return this;
|
|
281
|
+
|
|
282
|
+
this.files = await Promise.all(this.options.files?.map(file => this.constructor.resolveFile(file)) ?? []);
|
|
283
|
+
return this;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Resolves a single file into an object sendable to the API.
|
|
288
|
+
* @param {BufferResolvable|Stream|FileOptions|MessageAttachment} fileLike Something that could be resolved to a file
|
|
289
|
+
* @returns {Promise<MessageFile>}
|
|
290
|
+
*/
|
|
291
|
+
static async resolveFile(fileLike) {
|
|
292
|
+
let attachment;
|
|
293
|
+
let name;
|
|
294
|
+
|
|
295
|
+
const findName = thing => {
|
|
296
|
+
if (typeof thing === 'string') {
|
|
297
|
+
return Util.basename(thing);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (thing.path) {
|
|
301
|
+
return Util.basename(thing.path);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return 'file.jpg';
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
const ownAttachment =
|
|
308
|
+
typeof fileLike === 'string' || fileLike instanceof Buffer || typeof fileLike.pipe === 'function';
|
|
309
|
+
if (ownAttachment) {
|
|
310
|
+
attachment = fileLike;
|
|
311
|
+
name = findName(attachment);
|
|
312
|
+
} else {
|
|
313
|
+
attachment = fileLike.attachment;
|
|
314
|
+
name = fileLike.name ?? findName(attachment);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
const resource = await DataResolver.resolveFile(attachment);
|
|
318
|
+
return {
|
|
319
|
+
attachment,
|
|
320
|
+
name,
|
|
321
|
+
file: resource,
|
|
322
|
+
description: fileLike.description,
|
|
323
|
+
duration_secs: fileLike.duration,
|
|
324
|
+
waveform: fileLike.waveform,
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Creates a {@link MessagePayload} from user-level arguments.
|
|
330
|
+
* @param {MessageTarget} target Target to send to
|
|
331
|
+
* @param {string|MessageOptions|WebhookMessageOptions} options Options or content to use
|
|
332
|
+
* @param {MessageOptions|WebhookMessageOptions} [extra={}] Extra options to add onto specified options
|
|
333
|
+
* @returns {MessagePayload}
|
|
334
|
+
*/
|
|
335
|
+
static create(target, options, extra = {}) {
|
|
336
|
+
return new this(
|
|
337
|
+
target,
|
|
338
|
+
typeof options !== 'object' || options === null ? { content: options, ...extra } : { ...options, ...extra },
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
module.exports = MessagePayload;
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* A target for a message.
|
|
347
|
+
* @typedef {TextBasedChannels|User|GuildMember|Webhook|WebhookClient|Interaction|InteractionWebhook|
|
|
348
|
+
* Message|MessageManager} MessageTarget
|
|
349
|
+
*/
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* @external APIMessage
|
|
353
|
+
* @see {@link https://discord.com/developers/docs/resources/channel#message-object}
|
|
354
|
+
*/
|