@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,430 @@
|
|
|
1
|
+
import { Collection } from '@ovencord/collection';
|
|
2
|
+
import { lazy } from '@ovencord/util';
|
|
3
|
+
import { DiscordSnowflake } from '@sapphire/snowflake';
|
|
4
|
+
import { InteractionType, Routes } from 'discord-api-types/v10';
|
|
5
|
+
import { DiscordjsTypeError, DiscordjsError, ErrorCodes } from '../../errors/index.js';
|
|
6
|
+
import { MaxBulkDeletableMessageAge } from '../../util/Constants.js';
|
|
7
|
+
import { InteractionCollector } from '../InteractionCollector.js';
|
|
8
|
+
import { MessageCollector } from '../MessageCollector.js';
|
|
9
|
+
|
|
10
|
+
// Fixes circular dependencies.
|
|
11
|
+
const getGuildMessageManager = lazy(() => require('../../managers/GuildMessageManager.js').GuildMessageManager);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Interface for classes that have text-channel-like features.
|
|
15
|
+
*
|
|
16
|
+
* @interface
|
|
17
|
+
*/
|
|
18
|
+
export class TextBasedChannel {
|
|
19
|
+
public messages: any;
|
|
20
|
+
public lastMessageId: any;
|
|
21
|
+
public lastPinTimestamp: any;
|
|
22
|
+
constructor() {
|
|
23
|
+
/**
|
|
24
|
+
* A manager of the messages sent to this channel
|
|
25
|
+
*
|
|
26
|
+
* @type {GuildMessageManager}
|
|
27
|
+
*/
|
|
28
|
+
this.messages = new (getGuildMessageManager())(this);
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* The channel's last message id, if one was sent
|
|
32
|
+
*
|
|
33
|
+
* @type {?Snowflake}
|
|
34
|
+
*/
|
|
35
|
+
this.lastMessageId = null;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The timestamp when the last pinned message was pinned, if there was one
|
|
39
|
+
*
|
|
40
|
+
* @type {?number}
|
|
41
|
+
*/
|
|
42
|
+
this.lastPinTimestamp = null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The Message object of the last message in the channel, if one was sent
|
|
47
|
+
*
|
|
48
|
+
* @type {?Message}
|
|
49
|
+
* @readonly
|
|
50
|
+
*/
|
|
51
|
+
get lastMessage() {
|
|
52
|
+
return this.messages.resolve(this.lastMessageId);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The date when the last pinned message was pinned, if there was one
|
|
57
|
+
*
|
|
58
|
+
* @type {?Date}
|
|
59
|
+
* @readonly
|
|
60
|
+
*/
|
|
61
|
+
get lastPinAt() {
|
|
62
|
+
return this.lastPinTimestamp && new Date(this.lastPinTimestamp);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Represents the data for a poll answer.
|
|
67
|
+
*
|
|
68
|
+
* @typedef {Object} PollAnswerData
|
|
69
|
+
* @property {string} text The text for the poll answer
|
|
70
|
+
* @property {EmojiIdentifierResolvable} [emoji] The emoji for the poll answer
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Represents the data for a poll.
|
|
75
|
+
*
|
|
76
|
+
* @typedef {Object} PollData
|
|
77
|
+
* @property {PollQuestionMedia} question The question for the poll
|
|
78
|
+
* @property {PollAnswerData[]} answers The answers for the poll
|
|
79
|
+
* @property {number} duration The duration in hours for the poll
|
|
80
|
+
* @property {boolean} allowMultiselect Whether the poll allows multiple answers
|
|
81
|
+
* @property {PollLayoutType} [layoutType] The layout type for the poll
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The base message options for messages.
|
|
86
|
+
*
|
|
87
|
+
* @typedef {Object} BaseMessageOptions
|
|
88
|
+
* @property {?string} [content=''] The content for the message. This can only be `null` when editing a message.
|
|
89
|
+
* @property {Array<(EmbedBuilder|Embed|APIEmbed)>} [embeds] The embeds for the message
|
|
90
|
+
* @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content
|
|
91
|
+
* (see {@link https://discord.com/developers/docs/resources/message#allowed-mentions-object here} for more details)
|
|
92
|
+
* @property {Array<(Attachment|AttachmentPayload|BufferResolvable|FileBodyEncodable<APIAttachment>|Stream)>} [files]
|
|
93
|
+
* The files to send with the message.
|
|
94
|
+
* @property {Array<(ActionRowBuilder|MessageTopLevelComponent|APIMessageTopLevelComponent)>} [components]
|
|
95
|
+
* Action rows containing interactive components for the message (buttons, select menus) and other
|
|
96
|
+
* top-level components.
|
|
97
|
+
* <info>When using components v2, the flag {@link MessageFlags.IsComponentsV2} needs to be set
|
|
98
|
+
* and `content`, `embeds`, `stickers`, and `poll` cannot be used.</info>
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The base message options for messages including a poll.
|
|
103
|
+
*
|
|
104
|
+
* @typedef {BaseMessageOptions} BaseMessageOptionsWithPoll
|
|
105
|
+
* @property {PollData} [poll] The poll to send with the message
|
|
106
|
+
*/
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* The options for sending a message.
|
|
110
|
+
*
|
|
111
|
+
* @typedef {BaseMessageOptionsWithPoll} BaseMessageCreateOptions
|
|
112
|
+
* @property {boolean} [tts=false] Whether the message should be spoken aloud
|
|
113
|
+
* @property {string} [nonce] The nonce for the message
|
|
114
|
+
* <info>This property is required if `enforceNonce` set to `true`.</info>
|
|
115
|
+
* @property {boolean} [enforceNonce] Whether the nonce should be checked for uniqueness in the past few minutes.
|
|
116
|
+
* If another message was created by the same author with the same nonce,
|
|
117
|
+
* that message will be returned and no new message will be created
|
|
118
|
+
* @property {StickerResolvable[]} [stickers=[]] The stickers to send in the message
|
|
119
|
+
* @property {MessageFlags} [flags] Which flags to set for the message.
|
|
120
|
+
* <info>Only {@link MessageFlags.SuppressEmbeds}, {@link MessageFlags.SuppressNotifications},
|
|
121
|
+
* {@link MessageFlags.IsComponentsV2}, and {@link MessageFlags.IsVoiceMessage} can be set.</info>
|
|
122
|
+
* <info>{@link MessageFlags.IsComponentsV2} is required if passing components that aren't action rows</info>
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @typedef {MessageReference} MessageReferenceOptions
|
|
127
|
+
* @property {boolean} [failIfNotExists=this.client.options.failIfNotExists] Whether to error if the
|
|
128
|
+
* referenced message doesn't exist instead of sending as a normal (non-reply) message
|
|
129
|
+
*/
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The options for sending a message.
|
|
133
|
+
*
|
|
134
|
+
* @typedef {BaseMessageCreateOptions} MessageCreateOptions
|
|
135
|
+
* @property {MessageReferenceOptions} [messageReference] The options for a reference to a message
|
|
136
|
+
*/
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Options provided to control parsing of mentions by Discord
|
|
140
|
+
*
|
|
141
|
+
* @typedef {Object} MessageMentionOptions
|
|
142
|
+
* @property {MessageMentionTypes[]} [parse] Types of mentions to be parsed
|
|
143
|
+
* @property {Snowflake[]} [users] Snowflakes of Users to be parsed as mentions
|
|
144
|
+
* @property {Snowflake[]} [roles] Snowflakes of Roles to be parsed as mentions
|
|
145
|
+
* @property {boolean} [repliedUser=true] Whether the author of the Message being replied to should be pinged
|
|
146
|
+
*/
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Types of mentions to enable in MessageMentionOptions.
|
|
150
|
+
* - `roles`
|
|
151
|
+
* - `users`
|
|
152
|
+
* - `everyone`
|
|
153
|
+
*
|
|
154
|
+
* @typedef {string} MessageMentionTypes
|
|
155
|
+
*/
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Sends a message to this channel.
|
|
159
|
+
*
|
|
160
|
+
* @param {string|MessagePayload|MessageCreateOptions|JSONEncodable<RESTPostAPIChannelMessageJSONBody>|FileBodyEncodable<RESTPostAPIChannelMessageJSONBody>} options The options to provide
|
|
161
|
+
* @returns {Promise<Message>}
|
|
162
|
+
* @example
|
|
163
|
+
* // Send a basic message
|
|
164
|
+
* channel.send('hello!')
|
|
165
|
+
* .then(message => console.log(`Sent message: ${message.content}`))
|
|
166
|
+
* .catch(console.error);
|
|
167
|
+
* @example
|
|
168
|
+
* // Send a remote file
|
|
169
|
+
* channel.send({
|
|
170
|
+
* files: ['https://github.com/discordjs.png']
|
|
171
|
+
* })
|
|
172
|
+
* .then(console.log)
|
|
173
|
+
* .catch(console.error);
|
|
174
|
+
* @example
|
|
175
|
+
* // Send a local file
|
|
176
|
+
* channel.send({
|
|
177
|
+
* files: [{
|
|
178
|
+
* attachment: 'entire/path/to/file.jpg',
|
|
179
|
+
* name: 'file.jpg',
|
|
180
|
+
* description: 'A description of the file'
|
|
181
|
+
* }]
|
|
182
|
+
* })
|
|
183
|
+
* .then(console.log)
|
|
184
|
+
* .catch(console.error);
|
|
185
|
+
*/
|
|
186
|
+
async send(options) {
|
|
187
|
+
return this.client.channels.createMessage(this, options);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Sends a typing indicator in the channel.
|
|
192
|
+
*
|
|
193
|
+
* @returns {Promise<void>} Resolves upon the typing status being sent
|
|
194
|
+
* @example
|
|
195
|
+
* // Start typing in a channel
|
|
196
|
+
* channel.sendTyping();
|
|
197
|
+
*/
|
|
198
|
+
async sendTyping() {
|
|
199
|
+
await this.client.rest.post(Routes.channelTyping(this.id));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Creates a Message Collector.
|
|
204
|
+
*
|
|
205
|
+
* @param {MessageCollectorOptions} [options={}] The options to pass to the collector
|
|
206
|
+
* @returns {MessageCollector}
|
|
207
|
+
* @example
|
|
208
|
+
* // Create a message collector
|
|
209
|
+
* const filter = message => message.content.includes('discord');
|
|
210
|
+
* const collector = channel.createMessageCollector({ filter, time: 15_000 });
|
|
211
|
+
* collector.on('collect', message => console.log(`Collected ${message.content}`));
|
|
212
|
+
* collector.on('end', collected => console.log(`Collected ${collected.size} items`));
|
|
213
|
+
*/
|
|
214
|
+
createMessageCollector(options = {}) {
|
|
215
|
+
return new MessageCollector(this, options);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* An object containing the same properties as CollectorOptions, but a few more:
|
|
220
|
+
*
|
|
221
|
+
* @typedef {MessageCollectorOptions} AwaitMessagesOptions
|
|
222
|
+
* @property {string[]} [errors] Stop/end reasons that cause the promise to reject
|
|
223
|
+
*/
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Similar to createMessageCollector but in promise form.
|
|
227
|
+
* Resolves with a collection of messages that pass the specified filter.
|
|
228
|
+
*
|
|
229
|
+
* @param {AwaitMessagesOptions} [options={}] Optional options to pass to the internal collector
|
|
230
|
+
* @returns {Promise<Collection<Snowflake, Message>>}
|
|
231
|
+
* @example
|
|
232
|
+
* // Await !vote messages
|
|
233
|
+
* const filter = m => m.content.startsWith('!vote');
|
|
234
|
+
* // Errors: ['time'] treats ending because of the time limit as an error
|
|
235
|
+
* channel.awaitMessages({ filter, max: 4, time: 60_000, errors: ['time'] })
|
|
236
|
+
* .then(collected => console.log(collected.size))
|
|
237
|
+
* .catch(collected => console.log(`After a minute, only ${collected.size} out of 4 voted.`));
|
|
238
|
+
*/
|
|
239
|
+
async awaitMessages(options = {}) {
|
|
240
|
+
return new Promise((resolve, reject) => {
|
|
241
|
+
const collector = this.createMessageCollector(options);
|
|
242
|
+
collector.once('end', (collection, reason) => {
|
|
243
|
+
if (options.errors?.includes(reason)) {
|
|
244
|
+
reject(collection);
|
|
245
|
+
} else {
|
|
246
|
+
resolve(collection);
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Creates a component interaction collector.
|
|
254
|
+
*
|
|
255
|
+
* @param {MessageComponentCollectorOptions} [options={}] Options to send to the collector
|
|
256
|
+
* @returns {InteractionCollector}
|
|
257
|
+
* @example
|
|
258
|
+
* // Create a button interaction collector
|
|
259
|
+
* const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';
|
|
260
|
+
* const collector = channel.createMessageComponentCollector({ filter, time: 15_000 });
|
|
261
|
+
* collector.on('collect', interaction => console.log(`Collected ${interaction.customId}`));
|
|
262
|
+
* collector.on('end', collected => console.log(`Collected ${collected.size} items`));
|
|
263
|
+
*/
|
|
264
|
+
createMessageComponentCollector(options = {}) {
|
|
265
|
+
return new InteractionCollector(this.client, {
|
|
266
|
+
...options,
|
|
267
|
+
interactionType: InteractionType.MessageComponent,
|
|
268
|
+
channel: this,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Collects a single component interaction that passes the filter.
|
|
274
|
+
* The Promise will reject if the time expires.
|
|
275
|
+
*
|
|
276
|
+
* @param {AwaitMessageComponentOptions} [options={}] Options to pass to the internal collector
|
|
277
|
+
* @returns {Promise<MessageComponentInteraction>}
|
|
278
|
+
* @example
|
|
279
|
+
* // Collect a message component interaction
|
|
280
|
+
* const filter = (interaction) => interaction.customId === 'button' && interaction.user.id === 'someId';
|
|
281
|
+
* channel.awaitMessageComponent({ filter, time: 15_000 })
|
|
282
|
+
* .then(interaction => console.log(`${interaction.customId} was clicked!`))
|
|
283
|
+
* .catch(console.error);
|
|
284
|
+
*/
|
|
285
|
+
async awaitMessageComponent(options = {}) {
|
|
286
|
+
const _options = { ...options, max: 1 };
|
|
287
|
+
return new Promise((resolve, reject) => {
|
|
288
|
+
const collector = this.createMessageComponentCollector(_options);
|
|
289
|
+
collector.once('end', (interactions, reason) => {
|
|
290
|
+
const interaction = interactions.first();
|
|
291
|
+
if (interaction) resolve(interaction);
|
|
292
|
+
else reject(new DiscordjsError(ErrorCodes.InteractionCollectorError, reason));
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Bulk deletes given messages up to 2 weeks old.
|
|
299
|
+
*
|
|
300
|
+
* @param {Collection<Snowflake, Message>|MessageResolvable[]|number} messages
|
|
301
|
+
* Messages or number of messages to delete
|
|
302
|
+
* @param {boolean} [filterOld=false] Filter messages to remove those which are older than two weeks automatically
|
|
303
|
+
* @returns {Promise<Snowflake[]>} Returns the deleted messages ids
|
|
304
|
+
* @example
|
|
305
|
+
* // Bulk delete messages
|
|
306
|
+
* channel.bulkDelete(5)
|
|
307
|
+
* .then(messages => console.log(`Bulk deleted ${messages.length} messages`))
|
|
308
|
+
* .catch(console.error);
|
|
309
|
+
*/
|
|
310
|
+
async bulkDelete(messages, filterOld = false) {
|
|
311
|
+
if (Array.isArray(messages) || messages instanceof Collection) {
|
|
312
|
+
let messageIds =
|
|
313
|
+
messages instanceof Collection ? [...messages.keys()] : messages.map(message => message.id ?? message);
|
|
314
|
+
|
|
315
|
+
if (filterOld) {
|
|
316
|
+
messageIds = messageIds.filter(
|
|
317
|
+
id => Date.now() - DiscordSnowflake.timestampFrom(id) < MaxBulkDeletableMessageAge,
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
if (messageIds.length === 0) return [];
|
|
322
|
+
|
|
323
|
+
if (messageIds.length === 1) {
|
|
324
|
+
await this.client.rest.delete(Routes.channelMessage(this.id, messageIds[0]));
|
|
325
|
+
return messageIds;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
await this.client.rest.post(Routes.channelBulkDelete(this.id), { body: { messages: messageIds } });
|
|
329
|
+
return messageIds;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
if (!Number.isNaN(messages)) {
|
|
333
|
+
const msgs = await this.messages.fetch({ limit: messages });
|
|
334
|
+
return this.bulkDelete(msgs, filterOld);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
throw new DiscordjsTypeError(ErrorCodes.MessageBulkDeleteType);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Fetches all webhooks for the channel.
|
|
342
|
+
*
|
|
343
|
+
* @returns {Promise<Collection<Snowflake, Webhook>>}
|
|
344
|
+
* @example
|
|
345
|
+
* // Fetch webhooks
|
|
346
|
+
* channel.fetchWebhooks()
|
|
347
|
+
* .then(hooks => console.log(`This channel has ${hooks.size} hooks`))
|
|
348
|
+
* .catch(console.error);
|
|
349
|
+
*/
|
|
350
|
+
async fetchWebhooks() {
|
|
351
|
+
return this.guild.channels.fetchWebhooks(this.id);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Options used to create a {@link Webhook}.
|
|
356
|
+
*
|
|
357
|
+
* @typedef {Object} ChannelWebhookCreateOptions
|
|
358
|
+
* @property {string} name The name of the webhook
|
|
359
|
+
* @property {?(BufferResolvable|Base64Resolvable)} [avatar] Avatar for the webhook
|
|
360
|
+
* @property {string} [reason] Reason for creating the webhook
|
|
361
|
+
*/
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Creates a webhook for the channel.
|
|
365
|
+
*
|
|
366
|
+
* @param {ChannelWebhookCreateOptions} [options] Options for creating the webhook
|
|
367
|
+
* @returns {Promise<Webhook>} Returns the created Webhook
|
|
368
|
+
* @example
|
|
369
|
+
* // Create a webhook for the current channel
|
|
370
|
+
* channel.createWebhook({
|
|
371
|
+
* name: 'Snek',
|
|
372
|
+
* avatar: 'https://i.imgur.com/mI8XcpG.jpg',
|
|
373
|
+
* reason: 'Needed a cool new Webhook'
|
|
374
|
+
* })
|
|
375
|
+
* .then(console.log)
|
|
376
|
+
* .catch(console.error)
|
|
377
|
+
*/
|
|
378
|
+
async createWebhook(options) {
|
|
379
|
+
return this.guild.channels.createWebhook({ channel: this.id, ...options });
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Sets the rate limit per user (slowmode) for this channel.
|
|
384
|
+
*
|
|
385
|
+
* @param {number} rateLimitPerUser The new rate limit in seconds
|
|
386
|
+
* @param {string} [reason] Reason for changing the channel's rate limit
|
|
387
|
+
* @returns {Promise<this>}
|
|
388
|
+
*/
|
|
389
|
+
async setRateLimitPerUser(rateLimitPerUser, reason) {
|
|
390
|
+
return this.edit({ rateLimitPerUser, reason });
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Sets whether this channel is flagged as NSFW.
|
|
395
|
+
*
|
|
396
|
+
* @param {boolean} [nsfw=true] Whether the channel should be considered NSFW
|
|
397
|
+
* @param {string} [reason] Reason for changing the channel's NSFW flag
|
|
398
|
+
* @returns {Promise<this>}
|
|
399
|
+
*/
|
|
400
|
+
async setNSFW(nsfw = true, reason = undefined) {
|
|
401
|
+
return this.edit({ nsfw, reason });
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
static applyToClass(structure, ignore = []) {
|
|
405
|
+
const props = [
|
|
406
|
+
'lastMessage',
|
|
407
|
+
'lastPinAt',
|
|
408
|
+
'bulkDelete',
|
|
409
|
+
'sendTyping',
|
|
410
|
+
'createMessageCollector',
|
|
411
|
+
'awaitMessages',
|
|
412
|
+
'createMessageComponentCollector',
|
|
413
|
+
'awaitMessageComponent',
|
|
414
|
+
'fetchWebhooks',
|
|
415
|
+
'createWebhook',
|
|
416
|
+
'setRateLimitPerUser',
|
|
417
|
+
'setNSFW',
|
|
418
|
+
'send',
|
|
419
|
+
];
|
|
420
|
+
|
|
421
|
+
for (const prop of props) {
|
|
422
|
+
if (ignore.includes(prop)) continue;
|
|
423
|
+
Object.defineProperty(
|
|
424
|
+
structure.prototype,
|
|
425
|
+
prop,
|
|
426
|
+
Object.getOwnPropertyDescriptor(TextBasedChannel.prototype, prop),
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|