@ovencord/discord.js 14.16.3
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 +191 -0
- package/README.md +148 -0
- package/package.json +73 -0
- package/src/client/Client.ts +967 -0
- package/src/client/actions/Action.ts +141 -0
- package/src/client/actions/ActionsManager.ts +138 -0
- package/src/client/actions/ChannelCreate.ts +21 -0
- package/src/client/actions/ChannelDelete.ts +20 -0
- package/src/client/actions/ChannelUpdate.ts +38 -0
- package/src/client/actions/GuildChannelsPositionUpdate.ts +17 -0
- package/src/client/actions/GuildEmojiCreate.ts +17 -0
- package/src/client/actions/GuildEmojiDelete.ts +16 -0
- package/src/client/actions/GuildEmojiUpdate.ts +17 -0
- package/src/client/actions/GuildEmojisUpdate.ts +30 -0
- package/src/client/actions/GuildMemberRemove.ts +29 -0
- package/src/client/actions/GuildMemberUpdate.ts +41 -0
- package/src/client/actions/GuildRoleCreate.ts +23 -0
- package/src/client/actions/GuildRoleDelete.ts +26 -0
- package/src/client/actions/GuildRolesPositionUpdate.ts +17 -0
- package/src/client/actions/GuildScheduledEventDelete.ts +28 -0
- package/src/client/actions/GuildScheduledEventUserAdd.ts +29 -0
- package/src/client/actions/GuildScheduledEventUserRemove.ts +29 -0
- package/src/client/actions/GuildSoundboardSoundDelete.ts +26 -0
- package/src/client/actions/GuildStickerCreate.ts +17 -0
- package/src/client/actions/GuildStickerDelete.ts +16 -0
- package/src/client/actions/GuildStickerUpdate.ts +17 -0
- package/src/client/actions/GuildStickersUpdate.ts +30 -0
- package/src/client/actions/GuildUpdate.ts +30 -0
- package/src/client/actions/InteractionCreate.ts +104 -0
- package/src/client/actions/MessageCreate.ts +38 -0
- package/src/client/actions/MessageDelete.ts +29 -0
- package/src/client/actions/MessageDeleteBulk.ts +45 -0
- package/src/client/actions/MessagePollVoteAdd.ts +37 -0
- package/src/client/actions/MessagePollVoteRemove.ts +35 -0
- package/src/client/actions/MessageReactionAdd.ts +68 -0
- package/src/client/actions/MessageReactionRemove.ts +47 -0
- package/src/client/actions/MessageReactionRemoveAll.ts +30 -0
- package/src/client/actions/MessageReactionRemoveEmoji.ts +25 -0
- package/src/client/actions/MessageUpdate.ts +22 -0
- package/src/client/actions/StageInstanceCreate.ts +25 -0
- package/src/client/actions/StageInstanceDelete.ts +28 -0
- package/src/client/actions/StageInstanceUpdate.ts +27 -0
- package/src/client/actions/ThreadCreate.ts +22 -0
- package/src/client/actions/ThreadMembersUpdate.ts +45 -0
- package/src/client/actions/TypingStart.ts +26 -0
- package/src/client/actions/UserUpdate.ts +33 -0
- package/src/client/voice/ClientVoiceManager.ts +46 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.ts +19 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.ts +17 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.ts +18 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.ts +21 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.ts +20 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.ts +4 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.ts +4 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.ts +22 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/ENTITLEMENT_CREATE.ts +14 -0
- package/src/client/websocket/handlers/ENTITLEMENT_DELETE.ts +18 -0
- package/src/client/websocket/handlers/ENTITLEMENT_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.ts +19 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.ts +15 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.ts +20 -0
- package/src/client/websocket/handlers/GUILD_CREATE.ts +34 -0
- package/src/client/websocket/handlers/GUILD_DELETE.ts +36 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.ts +15 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.ts +40 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.ts +17 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.ts +21 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.ts +17 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.ts +19 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUNDS_UPDATE.ts +24 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_CREATE.ts +18 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_DELETE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_SOUNDBOARD_SOUND_UPDATE.ts +20 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.ts +4 -0
- package/src/client/websocket/handlers/INVITE_CREATE.ts +20 -0
- package/src/client/websocket/handlers/INVITE_DELETE.ts +23 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_ADD.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_POLL_VOTE_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.ts +4 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.ts +42 -0
- package/src/client/websocket/handlers/RATE_LIMITED.ts +23 -0
- package/src/client/websocket/handlers/READY.ts +29 -0
- package/src/client/websocket/handlers/SOUNDBOARD_SOUNDS.ts +24 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.ts +4 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.ts +4 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/SUBSCRIPTION_CREATE.ts +14 -0
- package/src/client/websocket/handlers/SUBSCRIPTION_DELETE.ts +16 -0
- package/src/client/websocket/handlers/SUBSCRIPTION_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/THREAD_CREATE.ts +4 -0
- package/src/client/websocket/handlers/THREAD_DELETE.ts +17 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.ts +50 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.ts +25 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/TYPING_START.ts +4 -0
- package/src/client/websocket/handlers/USER_UPDATE.ts +4 -0
- package/src/client/websocket/handlers/VOICE_CHANNEL_EFFECT_SEND.ts +16 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.ts +5 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.ts +37 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.ts +16 -0
- package/src/client/websocket/handlers/index.ts +74 -0
- package/src/errors/DJSError.ts +50 -0
- package/src/errors/ErrorCodes.ts +277 -0
- package/src/errors/Messages.ts +155 -0
- package/src/errors/index.ts +6 -0
- package/src/index.ts +241 -0
- package/src/managers/ApplicationCommandManager.ts +303 -0
- package/src/managers/ApplicationCommandPermissionsManager.ts +453 -0
- package/src/managers/ApplicationEmojiManager.ts +149 -0
- package/src/managers/AutoModerationRuleManager.ts +307 -0
- package/src/managers/BaseManager.ts +13 -0
- package/src/managers/CachedManager.ts +56 -0
- package/src/managers/CategoryChannelChildManager.ts +81 -0
- package/src/managers/ChannelManager.ts +194 -0
- package/src/managers/DMMessageManager.ts +15 -0
- package/src/managers/DataManager.ts +38 -0
- package/src/managers/EntitlementManager.ts +182 -0
- package/src/managers/GuildApplicationCommandManager.ts +29 -0
- package/src/managers/GuildBanManager.ts +221 -0
- package/src/managers/GuildChannelManager.ts +552 -0
- package/src/managers/GuildEmojiManager.ts +262 -0
- package/src/managers/GuildEmojiRoleManager.ts +134 -0
- package/src/managers/GuildForumThreadManager.ts +84 -0
- package/src/managers/GuildInviteManager.ts +236 -0
- package/src/managers/GuildManager.ts +265 -0
- package/src/managers/GuildMemberManager.ts +619 -0
- package/src/managers/GuildMemberRoleManager.ts +230 -0
- package/src/managers/GuildMessageManager.ts +31 -0
- package/src/managers/GuildScheduledEventManager.ts +330 -0
- package/src/managers/GuildSoundboardSoundManager.ts +157 -0
- package/src/managers/GuildStickerManager.ts +192 -0
- package/src/managers/GuildTextThreadManager.ts +91 -0
- package/src/managers/MessageManager.ts +352 -0
- package/src/managers/PartialGroupDMMessageManager.ts +15 -0
- package/src/managers/PermissionOverwriteManager.ts +174 -0
- package/src/managers/PollAnswerVoterManager.ts +59 -0
- package/src/managers/PresenceManager.ts +60 -0
- package/src/managers/ReactionManager.ts +72 -0
- package/src/managers/ReactionUserManager.ts +82 -0
- package/src/managers/RoleManager.ts +432 -0
- package/src/managers/StageInstanceManager.ts +166 -0
- package/src/managers/SubscriptionManager.ts +83 -0
- package/src/managers/ThreadManager.ts +210 -0
- package/src/managers/ThreadMemberManager.ts +194 -0
- package/src/managers/UserManager.ts +139 -0
- package/src/managers/VoiceStateManager.ts +61 -0
- package/src/sharding/Shard.ts +513 -0
- package/src/sharding/ShardClientUtil.ts +293 -0
- package/src/sharding/ShardingManager.ts +374 -0
- package/src/structures/ActionRow.ts +31 -0
- package/src/structures/AnnouncementChannel.ts +25 -0
- package/src/structures/AnonymousGuild.ts +110 -0
- package/src/structures/ApplicationCommand.ts +675 -0
- package/src/structures/ApplicationEmoji.ts +189 -0
- package/src/structures/ApplicationRoleConnectionMetadata.ts +54 -0
- package/src/structures/Attachment.ts +189 -0
- package/src/structures/AuthorizingIntegrationOwners.ts +63 -0
- package/src/structures/AutoModerationActionExecution.ts +138 -0
- package/src/structures/AutoModerationRule.ts +325 -0
- package/src/structures/AutocompleteInteraction.ts +115 -0
- package/src/structures/Base.ts +37 -0
- package/src/structures/BaseChannel.ts +188 -0
- package/src/structures/BaseGuild.ts +134 -0
- package/src/structures/BaseGuildEmoji.ts +113 -0
- package/src/structures/BaseGuildTextChannel.ts +230 -0
- package/src/structures/BaseGuildVoiceChannel.ts +270 -0
- package/src/structures/BaseInteraction.ts +393 -0
- package/src/structures/BaseInvite.ts +192 -0
- package/src/structures/BaseSelectMenuComponent.ts +58 -0
- package/src/structures/ButtonComponent.ts +68 -0
- package/src/structures/ButtonInteraction.ts +8 -0
- package/src/structures/CategoryChannel.ts +46 -0
- package/src/structures/ChannelSelectMenuComponent.ts +18 -0
- package/src/structures/ChannelSelectMenuInteraction.ts +34 -0
- package/src/structures/ChatInputCommandInteraction.ts +43 -0
- package/src/structures/ClientApplication.ts +470 -0
- package/src/structures/ClientPresence.ts +87 -0
- package/src/structures/ClientUser.ts +219 -0
- package/src/structures/CommandInteraction.ts +193 -0
- package/src/structures/CommandInteractionOptionResolver.ts +336 -0
- package/src/structures/Component.ts +59 -0
- package/src/structures/ContainerComponent.ts +63 -0
- package/src/structures/ContextMenuCommandInteraction.ts +68 -0
- package/src/structures/DMChannel.ts +148 -0
- package/src/structures/DirectoryChannel.ts +40 -0
- package/src/structures/Embed.ts +251 -0
- package/src/structures/Emoji.ts +61 -0
- package/src/structures/Entitlement.ts +206 -0
- package/src/structures/FileComponent.ts +41 -0
- package/src/structures/ForumChannel.ts +31 -0
- package/src/structures/GroupDMInvite.ts +34 -0
- package/src/structures/Guild.ts +1605 -0
- package/src/structures/GuildAuditLogs.ts +99 -0
- package/src/structures/GuildAuditLogsEntry.ts +557 -0
- package/src/structures/GuildBan.ts +65 -0
- package/src/structures/GuildChannel.ts +515 -0
- package/src/structures/GuildEmoji.ts +159 -0
- package/src/structures/GuildInvite.ts +233 -0
- package/src/structures/GuildMember.ts +643 -0
- package/src/structures/GuildOnboarding.ts +73 -0
- package/src/structures/GuildOnboardingPrompt.ts +93 -0
- package/src/structures/GuildOnboardingPromptOption.ts +100 -0
- package/src/structures/GuildPreview.ts +218 -0
- package/src/structures/GuildPreviewEmoji.ts +28 -0
- package/src/structures/GuildScheduledEvent.ts +593 -0
- package/src/structures/GuildTemplate.ts +229 -0
- package/src/structures/Integration.ts +257 -0
- package/src/structures/IntegrationApplication.ts +84 -0
- package/src/structures/InteractionCallback.ts +86 -0
- package/src/structures/InteractionCallbackResource.ts +57 -0
- package/src/structures/InteractionCallbackResponse.ts +35 -0
- package/src/structures/InteractionCollector.ts +260 -0
- package/src/structures/InteractionWebhook.ts +65 -0
- package/src/structures/InviteGuild.ts +22 -0
- package/src/structures/LabelComponent.ts +51 -0
- package/src/structures/MediaChannel.ts +8 -0
- package/src/structures/MediaGalleryComponent.ts +31 -0
- package/src/structures/MediaGalleryItem.ts +54 -0
- package/src/structures/MentionableSelectMenuComponent.ts +8 -0
- package/src/structures/MentionableSelectMenuInteraction.ts +76 -0
- package/src/structures/Message.ts +1202 -0
- package/src/structures/MessageCollector.ts +155 -0
- package/src/structures/MessageComponentInteraction.ts +132 -0
- package/src/structures/MessageContextMenuCommandInteraction.ts +18 -0
- package/src/structures/MessageMentions.ts +327 -0
- package/src/structures/MessagePayload.ts +325 -0
- package/src/structures/MessageReaction.ts +219 -0
- package/src/structures/ModalComponentResolver.ts +237 -0
- package/src/structures/ModalSubmitInteraction.ts +260 -0
- package/src/structures/OAuth2Guild.ts +30 -0
- package/src/structures/PartialGroupDMChannel.ts +151 -0
- package/src/structures/PermissionOverwrites.ts +222 -0
- package/src/structures/Poll.ts +195 -0
- package/src/structures/PollAnswer.ts +100 -0
- package/src/structures/Presence.ts +448 -0
- package/src/structures/PrimaryEntryPointCommandInteraction.ts +8 -0
- package/src/structures/ReactionCollector.ts +245 -0
- package/src/structures/ReactionEmoji.ts +30 -0
- package/src/structures/Role.ts +543 -0
- package/src/structures/RoleSelectMenuComponent.ts +8 -0
- package/src/structures/RoleSelectMenuInteraction.ts +34 -0
- package/src/structures/SKU.ts +62 -0
- package/src/structures/SectionComponent.ts +44 -0
- package/src/structures/SeparatorComponent.ts +29 -0
- package/src/structures/SoundboardSound.ts +176 -0
- package/src/structures/StageChannel.ts +118 -0
- package/src/structures/StageInstance.ts +173 -0
- package/src/structures/Sticker.ts +300 -0
- package/src/structures/StickerPack.ts +111 -0
- package/src/structures/StringSelectMenuComponent.ts +18 -0
- package/src/structures/StringSelectMenuInteraction.ts +21 -0
- package/src/structures/Subscription.ts +138 -0
- package/src/structures/Team.ts +131 -0
- package/src/structures/TeamMember.ts +77 -0
- package/src/structures/TextChannel.ts +33 -0
- package/src/structures/TextDisplayComponent.ts +18 -0
- package/src/structures/TextInputComponent.ts +28 -0
- package/src/structures/ThreadChannel.ts +680 -0
- package/src/structures/ThreadMember.ts +125 -0
- package/src/structures/ThreadOnlyChannel.ts +276 -0
- package/src/structures/ThumbnailComponent.ts +51 -0
- package/src/structures/Typing.ts +81 -0
- package/src/structures/UnfurledMediaItem.ts +33 -0
- package/src/structures/User.ts +511 -0
- package/src/structures/UserContextMenuCommandInteraction.ts +28 -0
- package/src/structures/UserSelectMenuComponent.ts +8 -0
- package/src/structures/UserSelectMenuInteraction.ts +54 -0
- package/src/structures/VoiceChannel.ts +119 -0
- package/src/structures/VoiceChannelEffect.ts +92 -0
- package/src/structures/VoiceRegion.ts +52 -0
- package/src/structures/VoiceState.ts +346 -0
- package/src/structures/Webhook.ts +526 -0
- package/src/structures/WelcomeChannel.ts +67 -0
- package/src/structures/WelcomeScreen.ts +53 -0
- package/src/structures/Widget.ts +110 -0
- package/src/structures/WidgetMember.ts +124 -0
- package/src/structures/interfaces/Application.ts +179 -0
- package/src/structures/interfaces/Collector.ts +372 -0
- package/src/structures/interfaces/InteractionResponses.ts +384 -0
- package/src/structures/interfaces/TextBasedChannel.ts +430 -0
- package/src/util/APITypes.ts +690 -0
- package/src/util/ActivityFlagsBitField.ts +26 -0
- package/src/util/ApplicationFlagsBitField.ts +43 -0
- package/src/util/AttachmentFlagsBitField.ts +26 -0
- package/src/util/BitField.ts +178 -0
- package/src/util/ChannelFlagsBitField.ts +43 -0
- package/src/util/Channels.ts +165 -0
- package/src/util/Colors.ts +72 -0
- package/src/util/Components.ts +285 -0
- package/src/util/Constants.ts +251 -0
- package/src/util/DataResolver.ts +146 -0
- package/src/util/Enums.ts +10 -0
- package/src/util/Events.ts +178 -0
- package/src/util/GuildMemberFlagsBitField.ts +43 -0
- package/src/util/IntentsBitField.ts +35 -0
- package/src/util/InviteFlagsBitField.ts +26 -0
- package/src/util/Invites.ts +27 -0
- package/src/util/LimitedCollection.ts +73 -0
- package/src/util/MessageFlagsBitField.ts +43 -0
- package/src/util/Options.ts +215 -0
- package/src/util/Partials.ts +50 -0
- package/src/util/PermissionsBitField.ts +113 -0
- package/src/util/RoleFlagsBitField.ts +26 -0
- package/src/util/SKUFlagsBitField.ts +26 -0
- package/src/util/ShardEvents.ts +26 -0
- package/src/util/Status.ts +16 -0
- package/src/util/Sweepers.ts +532 -0
- package/src/util/Symbols.ts +1 -0
- package/src/util/SystemChannelFlagsBitField.ts +45 -0
- package/src/util/ThreadMemberFlagsBitField.ts +33 -0
- package/src/util/Transformers.ts +123 -0
- package/src/util/UserFlagsBitField.ts +33 -0
- package/src/util/Util.ts +519 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Events } from '../util/Events.js';
|
|
2
|
+
import { Collector } from './interfaces/Collector.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {CollectorOptions} MessageCollectorOptions
|
|
6
|
+
* @property {number} max The maximum amount of messages to collect
|
|
7
|
+
* @property {number} maxProcessed The maximum amount of messages to process
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Collects messages on a channel.
|
|
12
|
+
* Will automatically stop if the channel ({@link Client#event:channelDelete channelDelete}),
|
|
13
|
+
* thread ({@link Client#event:threadDelete threadDelete}), or
|
|
14
|
+
* guild ({@link Client#event:guildDelete guildDelete}) is deleted.
|
|
15
|
+
*
|
|
16
|
+
* @extends {Collector}
|
|
17
|
+
*/
|
|
18
|
+
export class MessageCollector extends Collector {
|
|
19
|
+
public channel: any;
|
|
20
|
+
public received: any;
|
|
21
|
+
/**
|
|
22
|
+
* @param {TextBasedChannels} channel The channel
|
|
23
|
+
* @param {MessageCollectorOptions} options The options to be applied to this collector
|
|
24
|
+
* @emits MessageCollector#message
|
|
25
|
+
*/
|
|
26
|
+
constructor(channel, options = {}) {
|
|
27
|
+
super(channel.client, options);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The channel
|
|
31
|
+
*
|
|
32
|
+
* @type {TextBasedChannels}
|
|
33
|
+
*/
|
|
34
|
+
this.channel = channel;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Total number of messages that were received in the channel during message collection
|
|
38
|
+
*
|
|
39
|
+
* @type {number}
|
|
40
|
+
*/
|
|
41
|
+
this.received = 0;
|
|
42
|
+
|
|
43
|
+
const bulkDeleteListener = async messages => {
|
|
44
|
+
for (const message of messages.values()) await this.handleDispose(message);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
this._handleChannelDeletion = this._handleChannelDeletion.bind(this);
|
|
48
|
+
this._handleThreadDeletion = this._handleThreadDeletion.bind(this);
|
|
49
|
+
this._handleGuildDeletion = this._handleGuildDeletion.bind(this);
|
|
50
|
+
|
|
51
|
+
this.client.incrementMaxListeners();
|
|
52
|
+
this.client.on(Events.MessageCreate, this.handleCollect);
|
|
53
|
+
this.client.on(Events.MessageDelete, this.handleDispose);
|
|
54
|
+
this.client.on(Events.MessageBulkDelete, bulkDeleteListener);
|
|
55
|
+
this.client.on(Events.ChannelDelete, this._handleChannelDeletion);
|
|
56
|
+
this.client.on(Events.ThreadDelete, this._handleThreadDeletion);
|
|
57
|
+
this.client.on(Events.GuildDelete, this._handleGuildDeletion);
|
|
58
|
+
|
|
59
|
+
this.once('end', () => {
|
|
60
|
+
this.client.removeListener(Events.MessageCreate, this.handleCollect);
|
|
61
|
+
this.client.removeListener(Events.MessageDelete, this.handleDispose);
|
|
62
|
+
this.client.removeListener(Events.MessageBulkDelete, bulkDeleteListener);
|
|
63
|
+
this.client.removeListener(Events.ChannelDelete, this._handleChannelDeletion);
|
|
64
|
+
this.client.removeListener(Events.ThreadDelete, this._handleThreadDeletion);
|
|
65
|
+
this.client.removeListener(Events.GuildDelete, this._handleGuildDeletion);
|
|
66
|
+
this.client.decrementMaxListeners();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Handles a message for possible collection.
|
|
72
|
+
*
|
|
73
|
+
* @param {Message} message The message that could be collected
|
|
74
|
+
* @returns {?Snowflake}
|
|
75
|
+
* @private
|
|
76
|
+
*/
|
|
77
|
+
collect(message) {
|
|
78
|
+
/**
|
|
79
|
+
* Emitted whenever a message is collected.
|
|
80
|
+
*
|
|
81
|
+
* @event MessageCollector#collect
|
|
82
|
+
* @param {Message} message The message that was collected
|
|
83
|
+
*/
|
|
84
|
+
if (message.channelId !== this.channel.id) return null;
|
|
85
|
+
this.received++;
|
|
86
|
+
return message.id;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Handles a message for possible disposal.
|
|
91
|
+
*
|
|
92
|
+
* @param {Message} message The message that could be disposed of
|
|
93
|
+
* @returns {?Snowflake}
|
|
94
|
+
*/
|
|
95
|
+
dispose(message) {
|
|
96
|
+
/**
|
|
97
|
+
* Emitted whenever a message is disposed of.
|
|
98
|
+
*
|
|
99
|
+
* @event MessageCollector#dispose
|
|
100
|
+
* @param {Message} message The message that was disposed of
|
|
101
|
+
*/
|
|
102
|
+
return message.channelId === this.channel.id ? message.id : null;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The reason this collector has ended with, or null if it hasn't ended yet
|
|
107
|
+
*
|
|
108
|
+
* @type {?string}
|
|
109
|
+
* @readonly
|
|
110
|
+
*/
|
|
111
|
+
get endReason() {
|
|
112
|
+
if (this.options.max && this.collected.size >= this.options.max) return 'limit';
|
|
113
|
+
if (this.options.maxProcessed && this.received === this.options.maxProcessed) return 'processedLimit';
|
|
114
|
+
return super.endReason;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Handles checking if the channel has been deleted, and if so, stops the collector with the reason 'channelDelete'.
|
|
119
|
+
*
|
|
120
|
+
* @private
|
|
121
|
+
* @param {GuildChannel} channel The channel that was deleted
|
|
122
|
+
* @returns {void}
|
|
123
|
+
*/
|
|
124
|
+
_handleChannelDeletion(channel) {
|
|
125
|
+
if (channel.id === this.channel.id || channel.id === this.channel.parentId) {
|
|
126
|
+
this.stop('channelDelete');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Handles checking if the thread has been deleted, and if so, stops the collector with the reason 'threadDelete'.
|
|
132
|
+
*
|
|
133
|
+
* @private
|
|
134
|
+
* @param {ThreadChannel} thread The thread that was deleted
|
|
135
|
+
* @returns {void}
|
|
136
|
+
*/
|
|
137
|
+
_handleThreadDeletion(thread) {
|
|
138
|
+
if (thread.id === this.channel.id) {
|
|
139
|
+
this.stop('threadDelete');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Handles checking if the guild has been deleted, and if so, stops the collector with the reason 'guildDelete'.
|
|
145
|
+
*
|
|
146
|
+
* @private
|
|
147
|
+
* @param {Guild} guild The guild that was deleted
|
|
148
|
+
* @returns {void}
|
|
149
|
+
*/
|
|
150
|
+
_handleGuildDeletion(guild) {
|
|
151
|
+
if (guild.id === this.channel.guild?.id) {
|
|
152
|
+
this.stop('guildDelete');
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { lazy } from '@ovencord/util';
|
|
2
|
+
import { findComponentByCustomId } from '../util/Components.js';
|
|
3
|
+
import { BaseInteraction } from './BaseInteraction.js';
|
|
4
|
+
import { InteractionWebhook } from './InteractionWebhook.js';
|
|
5
|
+
import { InteractionResponses } from './interfaces/InteractionResponses.js';
|
|
6
|
+
|
|
7
|
+
const getMessage = lazy(() => require('./Message.js').Message);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Represents a message component interaction.
|
|
11
|
+
*
|
|
12
|
+
* @extends {BaseInteraction}
|
|
13
|
+
* @implements {InteractionResponses}
|
|
14
|
+
*/
|
|
15
|
+
export class MessageComponentInteraction extends BaseInteraction {
|
|
16
|
+
public client: any;
|
|
17
|
+
public message: any;
|
|
18
|
+
public customId: any;
|
|
19
|
+
public componentType: any;
|
|
20
|
+
public deferred: any;
|
|
21
|
+
public ephemeral: any;
|
|
22
|
+
public replied: any;
|
|
23
|
+
public webhook: any;
|
|
24
|
+
constructor(client, data) {
|
|
25
|
+
super(client, data);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The id of the channel this interaction was sent in
|
|
29
|
+
*
|
|
30
|
+
* @type {Snowflake}
|
|
31
|
+
* @name MessageComponentInteraction#channelId
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The message to which the component was attached
|
|
36
|
+
*
|
|
37
|
+
* @type {Message}
|
|
38
|
+
*/
|
|
39
|
+
this.message = this.channel?.messages._add(data.message) ?? new (getMessage())(client, data.message);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The custom id of the component which was interacted with
|
|
43
|
+
*
|
|
44
|
+
* @type {string}
|
|
45
|
+
*/
|
|
46
|
+
this.customId = data.data.custom_id;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* The type of component which was interacted with
|
|
50
|
+
*
|
|
51
|
+
* @type {ComponentType}
|
|
52
|
+
*/
|
|
53
|
+
this.componentType = data.data.component_type;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Whether the reply to this interaction has been deferred
|
|
57
|
+
*
|
|
58
|
+
* @type {boolean}
|
|
59
|
+
*/
|
|
60
|
+
this.deferred = false;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Whether the reply to this interaction is ephemeral
|
|
64
|
+
*
|
|
65
|
+
* @type {?boolean}
|
|
66
|
+
*/
|
|
67
|
+
this.ephemeral = null;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Whether this interaction has already been replied to
|
|
71
|
+
*
|
|
72
|
+
* @type {boolean}
|
|
73
|
+
*/
|
|
74
|
+
this.replied = false;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* An associated interaction webhook, can be used to further interact with this interaction
|
|
78
|
+
*
|
|
79
|
+
* @type {InteractionWebhook}
|
|
80
|
+
*/
|
|
81
|
+
this.webhook = new InteractionWebhook(this.client, this.applicationId, this.token);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Components that can be placed in an action row for messages.
|
|
86
|
+
* - ButtonComponent
|
|
87
|
+
* - StringSelectMenuComponent
|
|
88
|
+
* - UserSelectMenuComponent
|
|
89
|
+
* - RoleSelectMenuComponent
|
|
90
|
+
* - MentionableSelectMenuComponent
|
|
91
|
+
* - ChannelSelectMenuComponent
|
|
92
|
+
*
|
|
93
|
+
* @typedef {ButtonComponent|StringSelectMenuComponent|UserSelectMenuComponent|
|
|
94
|
+
* RoleSelectMenuComponent|MentionableSelectMenuComponent|ChannelSelectMenuComponent} MessageActionRowComponent
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The component which was interacted with
|
|
99
|
+
*
|
|
100
|
+
* @type {MessageActionRowComponent|APIComponentInMessageActionRow}
|
|
101
|
+
* @readonly
|
|
102
|
+
*/
|
|
103
|
+
get component() {
|
|
104
|
+
return findComponentByCustomId(this.message.components, this.customId);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// These are here only for documentation purposes - they are implemented by InteractionResponses
|
|
108
|
+
|
|
109
|
+
deferReply() {}
|
|
110
|
+
|
|
111
|
+
reply() {}
|
|
112
|
+
|
|
113
|
+
fetchReply() {}
|
|
114
|
+
|
|
115
|
+
editReply() {}
|
|
116
|
+
|
|
117
|
+
deleteReply() {}
|
|
118
|
+
|
|
119
|
+
followUp() {}
|
|
120
|
+
|
|
121
|
+
deferUpdate() {}
|
|
122
|
+
|
|
123
|
+
update() {}
|
|
124
|
+
|
|
125
|
+
launchActivity() {}
|
|
126
|
+
|
|
127
|
+
showModal() {}
|
|
128
|
+
|
|
129
|
+
awaitModalSubmit() {}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
InteractionResponses.applyToClass(MessageComponentInteraction);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ContextMenuCommandInteraction } from './ContextMenuCommandInteraction.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents a message context menu interaction.
|
|
5
|
+
*
|
|
6
|
+
* @extends {ContextMenuCommandInteraction}
|
|
7
|
+
*/
|
|
8
|
+
export class MessageContextMenuCommandInteraction extends ContextMenuCommandInteraction {
|
|
9
|
+
/**
|
|
10
|
+
* The message this interaction was sent from
|
|
11
|
+
*
|
|
12
|
+
* @type {Message|APIMessage}
|
|
13
|
+
* @readonly
|
|
14
|
+
*/
|
|
15
|
+
get targetMessage() {
|
|
16
|
+
return this.options.getMessage('message');
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { Collection } from '@ovencord/collection';
|
|
2
|
+
import { FormattingPatterns } from 'discord-api-types/v10';
|
|
3
|
+
import { flatten } from '../util/Util.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Keeps track of mentions in a {@link Message}.
|
|
7
|
+
*/
|
|
8
|
+
export class MessageMentions {
|
|
9
|
+
public everyone: any;
|
|
10
|
+
public users: any;
|
|
11
|
+
public roles: any;
|
|
12
|
+
public _members: any;
|
|
13
|
+
public _channels: any;
|
|
14
|
+
public _parsedUsers: any;
|
|
15
|
+
public crosspostedChannels: any;
|
|
16
|
+
public repliedUser: any;
|
|
17
|
+
/**
|
|
18
|
+
* A regular expression that matches `@everyone` and `@here`.
|
|
19
|
+
* The `mention` group property is present on the `exec` result of this expression.
|
|
20
|
+
*
|
|
21
|
+
* @type {RegExp}
|
|
22
|
+
* @memberof MessageMentions
|
|
23
|
+
*/
|
|
24
|
+
static EveryonePattern = /@(?<mention>everyone|here)/;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* A regular expression that matches user mentions like `<@81440962496172032>`.
|
|
28
|
+
* The `id` group property is present on the `exec` result of this expression.
|
|
29
|
+
*
|
|
30
|
+
* @type {RegExp}
|
|
31
|
+
* @memberof MessageMentions
|
|
32
|
+
*/
|
|
33
|
+
static UsersPattern = FormattingPatterns.UserWithOptionalNickname;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* A regular expression that matches role mentions like `<@&297577916114403338>`.
|
|
37
|
+
* The `id` group property is present on the `exec` result of this expression.
|
|
38
|
+
*
|
|
39
|
+
* @type {RegExp}
|
|
40
|
+
* @memberof MessageMentions
|
|
41
|
+
*/
|
|
42
|
+
static RolesPattern = FormattingPatterns.Role;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A regular expression that matches channel mentions like `<#222079895583457280>`.
|
|
46
|
+
* The `id` group property is present on the `exec` result of this expression.
|
|
47
|
+
*
|
|
48
|
+
* @type {RegExp}
|
|
49
|
+
* @memberof MessageMentions
|
|
50
|
+
*/
|
|
51
|
+
static ChannelsPattern = FormattingPatterns.Channel;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* A global regular expression variant of {@link MessageMentions.ChannelsPattern}.
|
|
55
|
+
*
|
|
56
|
+
* @type {RegExp}
|
|
57
|
+
* @memberof MessageMentions
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
static GlobalChannelsPattern = new RegExp(this.ChannelsPattern.source, 'g');
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* A global regular expression variant of {@link MessageMentions.UsersPattern}.
|
|
64
|
+
*
|
|
65
|
+
* @type {RegExp}
|
|
66
|
+
* @memberof MessageMentions
|
|
67
|
+
* @private
|
|
68
|
+
*/
|
|
69
|
+
static GlobalUsersPattern = new RegExp(this.UsersPattern.source, 'g');
|
|
70
|
+
|
|
71
|
+
constructor(message, users, roles, everyone, crosspostedChannels, repliedUser) {
|
|
72
|
+
/**
|
|
73
|
+
* The client the message is from
|
|
74
|
+
*
|
|
75
|
+
* @type {Client}
|
|
76
|
+
* @readonly
|
|
77
|
+
*/
|
|
78
|
+
Object.defineProperty(this, 'client', { value: message.client });
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The guild the message is in
|
|
82
|
+
*
|
|
83
|
+
* @type {?Guild}
|
|
84
|
+
* @readonly
|
|
85
|
+
*/
|
|
86
|
+
Object.defineProperty(this, 'guild', { value: message.guild });
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The initial message content
|
|
90
|
+
*
|
|
91
|
+
* @type {string}
|
|
92
|
+
* @readonly
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
Object.defineProperty(this, '_content', { value: message.content });
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Whether `@everyone` or `@here` were mentioned
|
|
99
|
+
*
|
|
100
|
+
* @type {boolean}
|
|
101
|
+
*/
|
|
102
|
+
this.everyone = Boolean(everyone);
|
|
103
|
+
|
|
104
|
+
if (users) {
|
|
105
|
+
if (users instanceof Collection) {
|
|
106
|
+
/**
|
|
107
|
+
* Any users that were mentioned
|
|
108
|
+
* <info>Order as received from the API, not as they appear in the message content</info>
|
|
109
|
+
*
|
|
110
|
+
* @type {Collection<Snowflake, User>}
|
|
111
|
+
*/
|
|
112
|
+
this.users = new Collection(users);
|
|
113
|
+
} else {
|
|
114
|
+
this.users = new Collection();
|
|
115
|
+
for (const mention of users) {
|
|
116
|
+
if (mention.member && message.guild) {
|
|
117
|
+
message.guild.members._add(Object.assign(mention.member, { user: mention }));
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const user = message.client.users._add(mention);
|
|
121
|
+
this.users.set(user.id, user);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
this.users = new Collection();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (roles instanceof Collection) {
|
|
129
|
+
/**
|
|
130
|
+
* Any roles that were mentioned
|
|
131
|
+
* <info>Order as received from the API, not as they appear in the message content</info>
|
|
132
|
+
*
|
|
133
|
+
* @type {Collection<Snowflake, Role>}
|
|
134
|
+
*/
|
|
135
|
+
this.roles = new Collection(roles);
|
|
136
|
+
} else if (roles) {
|
|
137
|
+
this.roles = new Collection();
|
|
138
|
+
const guild = message.guild;
|
|
139
|
+
if (guild) {
|
|
140
|
+
for (const mention of roles) {
|
|
141
|
+
const role = guild.roles.cache.get(mention);
|
|
142
|
+
if (role) this.roles.set(role.id, role);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
this.roles = new Collection();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Cached members for {@link MessageMentions#members}
|
|
151
|
+
*
|
|
152
|
+
* @type {?Collection<Snowflake, GuildMember>}
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
this._members = null;
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Cached channels for {@link MessageMentions#channels}
|
|
159
|
+
*
|
|
160
|
+
* @type {?Collection<Snowflake, BaseChannel>}
|
|
161
|
+
* @private
|
|
162
|
+
*/
|
|
163
|
+
this._channels = null;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Cached users for {@link MessageMentions#parsedUsers}
|
|
167
|
+
*
|
|
168
|
+
* @type {?Collection<Snowflake, User>}
|
|
169
|
+
* @private
|
|
170
|
+
*/
|
|
171
|
+
this._parsedUsers = null;
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Crossposted channel data.
|
|
175
|
+
*
|
|
176
|
+
* @typedef {Object} CrosspostedChannel
|
|
177
|
+
* @property {Snowflake} channelId The mentioned channel's id
|
|
178
|
+
* @property {Snowflake} guildId The id of the guild that has the channel
|
|
179
|
+
* @property {ChannelType} type The channel's type
|
|
180
|
+
* @property {string} name The channel's name
|
|
181
|
+
*/
|
|
182
|
+
|
|
183
|
+
if (crosspostedChannels) {
|
|
184
|
+
if (crosspostedChannels instanceof Collection) {
|
|
185
|
+
/**
|
|
186
|
+
* A collection of crossposted channels
|
|
187
|
+
* <info>Order as received from the API, not as they appear in the message content</info>
|
|
188
|
+
*
|
|
189
|
+
* @type {Collection<Snowflake, CrosspostedChannel>}
|
|
190
|
+
*/
|
|
191
|
+
this.crosspostedChannels = new Collection(crosspostedChannels);
|
|
192
|
+
} else {
|
|
193
|
+
this.crosspostedChannels = new Collection();
|
|
194
|
+
for (const crosspostedChannel of crosspostedChannels) {
|
|
195
|
+
this.crosspostedChannels.set(crosspostedChannel.id, {
|
|
196
|
+
channelId: crosspostedChannel.id,
|
|
197
|
+
guildId: crosspostedChannel.guild_id,
|
|
198
|
+
type: crosspostedChannel.type,
|
|
199
|
+
name: crosspostedChannel.name,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
} else {
|
|
204
|
+
this.crosspostedChannels = new Collection();
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* The author of the message that this message is a reply to
|
|
209
|
+
*
|
|
210
|
+
* @type {?User}
|
|
211
|
+
*/
|
|
212
|
+
this.repliedUser = repliedUser ? this.client.users._add(repliedUser) : null;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Any members that were mentioned (only in {@link Guild}s)
|
|
217
|
+
* <info>Order as received from the API, not as they appear in the message content</info>
|
|
218
|
+
*
|
|
219
|
+
* @type {?Collection<Snowflake, GuildMember>}
|
|
220
|
+
* @readonly
|
|
221
|
+
*/
|
|
222
|
+
get members() {
|
|
223
|
+
if (this._members) return this._members;
|
|
224
|
+
if (!this.guild) return null;
|
|
225
|
+
this._members = new Collection();
|
|
226
|
+
for (const user of this.users.values()) {
|
|
227
|
+
const member = this.guild.members.resolve(user);
|
|
228
|
+
if (member) this._members.set(member.user.id, member);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return this._members;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Any channels that were mentioned
|
|
236
|
+
* <info>Order as they appear first in the message content</info>
|
|
237
|
+
*
|
|
238
|
+
* @type {Collection<Snowflake, BaseChannel>}
|
|
239
|
+
* @readonly
|
|
240
|
+
*/
|
|
241
|
+
get channels() {
|
|
242
|
+
if (this._channels) return this._channels;
|
|
243
|
+
this._channels = new Collection();
|
|
244
|
+
let matches;
|
|
245
|
+
|
|
246
|
+
while ((matches = this.constructor.GlobalChannelsPattern.exec(this._content)) !== null) {
|
|
247
|
+
const channel = this.client.channels.cache.get(matches.groups.id);
|
|
248
|
+
if (channel) this._channels.set(channel.id, channel);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return this._channels;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Any user mentions that were included in the message content
|
|
256
|
+
* <info>Order as they appear first in the message content</info>
|
|
257
|
+
*
|
|
258
|
+
* @type {Collection<Snowflake, User>}
|
|
259
|
+
* @readonly
|
|
260
|
+
*/
|
|
261
|
+
get parsedUsers() {
|
|
262
|
+
if (this._parsedUsers) return this._parsedUsers;
|
|
263
|
+
this._parsedUsers = new Collection();
|
|
264
|
+
let matches;
|
|
265
|
+
while ((matches = this.constructor.GlobalUsersPattern.exec(this._content)) !== null) {
|
|
266
|
+
const user = this.client.users.cache.get(matches[1]);
|
|
267
|
+
if (user) this._parsedUsers.set(user.id, user);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
return this._parsedUsers;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Options used to check for a mention.
|
|
275
|
+
*
|
|
276
|
+
* @typedef {Object} MessageMentionsHasOptions
|
|
277
|
+
* @property {boolean} [ignoreDirect=false] Whether to ignore direct mentions to the item
|
|
278
|
+
* @property {boolean} [ignoreRoles=false] Whether to ignore role mentions to a guild member
|
|
279
|
+
* @property {boolean} [ignoreRepliedUser=false] Whether to ignore replied user mention to an user
|
|
280
|
+
* @property {boolean} [ignoreEveryone=false] Whether to ignore `@everyone`/`@here` mentions
|
|
281
|
+
*/
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Checks if a user, guild member, thread member, role, or channel is mentioned.
|
|
285
|
+
* Takes into account user mentions, role mentions, channel mentions,
|
|
286
|
+
* replied user mention, and `@everyone`/`@here` mentions.
|
|
287
|
+
*
|
|
288
|
+
* @param {UserResolvable|RoleResolvable|ChannelResolvable} data The User/Role/Channel to check for
|
|
289
|
+
* @param {MessageMentionsHasOptions} [options] The options for the check
|
|
290
|
+
* @returns {boolean}
|
|
291
|
+
*/
|
|
292
|
+
has(data, { ignoreDirect = false, ignoreRoles = false, ignoreRepliedUser = false, ignoreEveryone = false } = {}) {
|
|
293
|
+
const user = this.client.users.resolve(data);
|
|
294
|
+
|
|
295
|
+
if (!ignoreEveryone && user && this.everyone) return true;
|
|
296
|
+
|
|
297
|
+
const userWasRepliedTo = user && this.repliedUser?.id === user.id;
|
|
298
|
+
|
|
299
|
+
if (!ignoreRepliedUser && userWasRepliedTo && this.users.has(user.id)) return true;
|
|
300
|
+
|
|
301
|
+
if (!ignoreDirect) {
|
|
302
|
+
if (user && (!ignoreRepliedUser || this.parsedUsers.has(user.id)) && this.users.has(user.id)) return true;
|
|
303
|
+
|
|
304
|
+
const role = this.guild?.roles.resolve(data);
|
|
305
|
+
if (role && this.roles.has(role.id)) return true;
|
|
306
|
+
|
|
307
|
+
const channel = this.client.channels.resolve(data);
|
|
308
|
+
if (channel && this.channels.has(channel.id)) return true;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
if (!ignoreRoles) {
|
|
312
|
+
const member = this.guild?.members.resolve(data);
|
|
313
|
+
if (member) {
|
|
314
|
+
for (const mentionedRole of this.roles.values()) if (member.roles.cache.has(mentionedRole.id)) return true;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
toJSON() {
|
|
322
|
+
return flatten(this, {
|
|
323
|
+
members: true,
|
|
324
|
+
channels: true,
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}
|