@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,65 @@
|
|
|
1
|
+
import { Base } from './Base.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Represents a ban in a guild on Discord.
|
|
5
|
+
*
|
|
6
|
+
* @extends {Base}
|
|
7
|
+
*/
|
|
8
|
+
export class GuildBan extends Base {
|
|
9
|
+
public client: any;
|
|
10
|
+
public guild: any;
|
|
11
|
+
public user: any;
|
|
12
|
+
public reason: any;
|
|
13
|
+
constructor(client, data, guild) {
|
|
14
|
+
super(client);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The guild in which the ban is
|
|
18
|
+
*
|
|
19
|
+
* @type {Guild}
|
|
20
|
+
*/
|
|
21
|
+
this.guild = guild;
|
|
22
|
+
|
|
23
|
+
this._patch(data);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
_patch(data) {
|
|
27
|
+
if ('user' in data) {
|
|
28
|
+
/**
|
|
29
|
+
* The user this ban applies to
|
|
30
|
+
*
|
|
31
|
+
* @type {User}
|
|
32
|
+
*/
|
|
33
|
+
this.user = this.client.users._add(data.user, true);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if ('reason' in data) {
|
|
37
|
+
/**
|
|
38
|
+
* The reason for the ban
|
|
39
|
+
*
|
|
40
|
+
* @type {?string}
|
|
41
|
+
*/
|
|
42
|
+
this.reason = data.reason;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Whether this GuildBan is partial. If the reason is not provided the value is null
|
|
48
|
+
*
|
|
49
|
+
* @type {boolean}
|
|
50
|
+
* @readonly
|
|
51
|
+
*/
|
|
52
|
+
get partial() {
|
|
53
|
+
return !('reason' in this);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Fetches this GuildBan.
|
|
58
|
+
*
|
|
59
|
+
* @param {boolean} [force=true] Whether to skip the cache check and request the API
|
|
60
|
+
* @returns {Promise<GuildBan>}
|
|
61
|
+
*/
|
|
62
|
+
async fetch(force = true) {
|
|
63
|
+
return this.guild.bans.fetch({ user: this.user, cache: true, force });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
import { Snowflake } from '@sapphire/snowflake';
|
|
2
|
+
import { PermissionFlagsBits, ChannelType } from 'discord-api-types/v10';
|
|
3
|
+
import { DiscordjsError, ErrorCodes } from '../errors/index.js';
|
|
4
|
+
import { PermissionOverwriteManager } from '../managers/PermissionOverwriteManager.js';
|
|
5
|
+
import { VoiceBasedChannelTypes } from '../util/Constants.js';
|
|
6
|
+
import { PermissionsBitField } from '../util/PermissionsBitField.js';
|
|
7
|
+
import { getSortableGroupTypes } from '../util/Util.js';
|
|
8
|
+
import { BaseChannel } from './BaseChannel.js';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Represents a guild channel from any of the following:
|
|
12
|
+
* - {@link TextChannel}
|
|
13
|
+
* - {@link VoiceChannel}
|
|
14
|
+
* - {@link CategoryChannel}
|
|
15
|
+
* - {@link AnnouncementChannel}
|
|
16
|
+
* - {@link StageChannel}
|
|
17
|
+
* - {@link ForumChannel}
|
|
18
|
+
* - {@link MediaChannel}
|
|
19
|
+
*
|
|
20
|
+
* @extends {BaseChannel}
|
|
21
|
+
* @abstract
|
|
22
|
+
*/
|
|
23
|
+
export class GuildChannel extends BaseChannel {
|
|
24
|
+
public client: any;
|
|
25
|
+
public guild: any;
|
|
26
|
+
public guildId: any;
|
|
27
|
+
public permissionOverwrites: any;
|
|
28
|
+
public name: any;
|
|
29
|
+
public rawPosition: any;
|
|
30
|
+
public parentId: any;
|
|
31
|
+
public type: any;
|
|
32
|
+
public id: any;
|
|
33
|
+
public topic: any;
|
|
34
|
+
constructor(guild, data, client, immediatePatch = true) {
|
|
35
|
+
super(client, data, false);
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The guild the channel is in
|
|
39
|
+
*
|
|
40
|
+
* @type {Guild}
|
|
41
|
+
*/
|
|
42
|
+
this.guild = guild;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The id of the guild the channel is in
|
|
46
|
+
*
|
|
47
|
+
* @type {Snowflake}
|
|
48
|
+
*/
|
|
49
|
+
this.guildId = guild?.id ?? data.guild_id;
|
|
50
|
+
/**
|
|
51
|
+
* A manager of permission overwrites that belong to this channel
|
|
52
|
+
*
|
|
53
|
+
* @type {PermissionOverwriteManager}
|
|
54
|
+
*/
|
|
55
|
+
this.permissionOverwrites = new PermissionOverwriteManager(this);
|
|
56
|
+
|
|
57
|
+
if (data && immediatePatch) this._patch(data);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
_patch(data) {
|
|
61
|
+
super._patch(data);
|
|
62
|
+
|
|
63
|
+
if ('name' in data) {
|
|
64
|
+
/**
|
|
65
|
+
* The name of the guild channel
|
|
66
|
+
*
|
|
67
|
+
* @type {string}
|
|
68
|
+
*/
|
|
69
|
+
this.name = data.name;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if ('position' in data) {
|
|
73
|
+
/**
|
|
74
|
+
* The raw position of the channel from Discord
|
|
75
|
+
*
|
|
76
|
+
* @type {number}
|
|
77
|
+
*/
|
|
78
|
+
this.rawPosition = data.position;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if ('guild_id' in data) {
|
|
82
|
+
this.guildId = data.guild_id;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if ('parent_id' in data) {
|
|
86
|
+
/**
|
|
87
|
+
* The id of the category parent of this channel
|
|
88
|
+
*
|
|
89
|
+
* @type {?Snowflake}
|
|
90
|
+
*/
|
|
91
|
+
this.parentId = data.parent_id;
|
|
92
|
+
} else {
|
|
93
|
+
this.parentId ??= null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if ('permission_overwrites' in data) {
|
|
97
|
+
this.permissionOverwrites.cache.clear();
|
|
98
|
+
for (const overwrite of data.permission_overwrites) {
|
|
99
|
+
this.permissionOverwrites._add(overwrite);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
_clone() {
|
|
105
|
+
const clone = super._clone();
|
|
106
|
+
clone.permissionOverwrites = new PermissionOverwriteManager(clone, this.permissionOverwrites.cache.values());
|
|
107
|
+
return clone;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* The category parent of this channel
|
|
112
|
+
*
|
|
113
|
+
* @type {?CategoryChannel}
|
|
114
|
+
* @readonly
|
|
115
|
+
*/
|
|
116
|
+
get parent() {
|
|
117
|
+
return this.guild.channels.resolve(this.parentId);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* If the permissionOverwrites match the parent channel, null if no parent
|
|
122
|
+
*
|
|
123
|
+
* @type {?boolean}
|
|
124
|
+
* @readonly
|
|
125
|
+
*/
|
|
126
|
+
get permissionsLocked() {
|
|
127
|
+
if (!this.parent) return null;
|
|
128
|
+
|
|
129
|
+
// Get all overwrites
|
|
130
|
+
const overwriteIds = new Set([
|
|
131
|
+
...this.permissionOverwrites.cache.keys(),
|
|
132
|
+
...this.parent.permissionOverwrites.cache.keys(),
|
|
133
|
+
]);
|
|
134
|
+
|
|
135
|
+
// Compare all overwrites
|
|
136
|
+
return [...overwriteIds].every(key => {
|
|
137
|
+
const channelVal = this.permissionOverwrites.cache.get(key);
|
|
138
|
+
const parentVal = this.parent.permissionOverwrites.cache.get(key);
|
|
139
|
+
|
|
140
|
+
// Handle empty overwrite
|
|
141
|
+
if (
|
|
142
|
+
(!channelVal &&
|
|
143
|
+
parentVal.deny.bitfield === PermissionsBitField.DefaultBit &&
|
|
144
|
+
parentVal.allow.bitfield === PermissionsBitField.DefaultBit) ||
|
|
145
|
+
(!parentVal &&
|
|
146
|
+
channelVal.deny.bitfield === PermissionsBitField.DefaultBit &&
|
|
147
|
+
channelVal.allow.bitfield === PermissionsBitField.DefaultBit)
|
|
148
|
+
) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Compare overwrites
|
|
153
|
+
return (
|
|
154
|
+
channelVal !== undefined &&
|
|
155
|
+
parentVal !== undefined &&
|
|
156
|
+
channelVal.deny.bitfield === parentVal.deny.bitfield &&
|
|
157
|
+
channelVal.allow.bitfield === parentVal.allow.bitfield
|
|
158
|
+
);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The position of the channel
|
|
164
|
+
*
|
|
165
|
+
* @type {number}
|
|
166
|
+
* @readonly
|
|
167
|
+
*/
|
|
168
|
+
get position() {
|
|
169
|
+
const selfIsCategory = this.type === ChannelType.GuildCategory;
|
|
170
|
+
const types = getSortableGroupTypes(this.type);
|
|
171
|
+
|
|
172
|
+
let count = 0;
|
|
173
|
+
for (const channel of this.guild.channels.cache.values()) {
|
|
174
|
+
if (!types.includes(channel.type)) continue;
|
|
175
|
+
if (!selfIsCategory && channel.parentId !== this.parentId) continue;
|
|
176
|
+
if (this.rawPosition === channel.rawPosition) {
|
|
177
|
+
if (Snowflake.compare(channel.id, this.id) === -1) count++;
|
|
178
|
+
} else if (this.rawPosition > channel.rawPosition) {
|
|
179
|
+
count++;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
return count;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Gets the overall set of permissions for a member or role in this channel, taking into account channel overwrites.
|
|
188
|
+
*
|
|
189
|
+
* @param {UserResolvable|RoleResolvable} memberOrRole The member or role to obtain the overall permissions for
|
|
190
|
+
* @param {boolean} [checkAdmin=true] Whether having the {@link PermissionFlagsBits.Administrator} permission
|
|
191
|
+
* will return all permissions
|
|
192
|
+
* @returns {?Readonly<PermissionsBitField>}
|
|
193
|
+
*/
|
|
194
|
+
permissionsFor(memberOrRole, checkAdmin = true) {
|
|
195
|
+
const member = this.guild.members.resolve(memberOrRole);
|
|
196
|
+
if (member) return this.memberPermissions(member, checkAdmin);
|
|
197
|
+
const role = this.guild.roles.resolve(memberOrRole);
|
|
198
|
+
return role && this.rolePermissions(role, checkAdmin);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
overwritesFor(member, verified = false, roles = null) {
|
|
202
|
+
const resolvedMember = verified ? member : this.guild.members.resolve(member);
|
|
203
|
+
if (!resolvedMember) return [];
|
|
204
|
+
|
|
205
|
+
const resolvedRoles = roles ?? resolvedMember.roles.cache;
|
|
206
|
+
const roleOverwrites = [];
|
|
207
|
+
let memberOverwrites;
|
|
208
|
+
let everyoneOverwrites;
|
|
209
|
+
|
|
210
|
+
for (const overwrite of this.permissionOverwrites.cache.values()) {
|
|
211
|
+
if (overwrite.id === this.guild.id) {
|
|
212
|
+
everyoneOverwrites = overwrite;
|
|
213
|
+
} else if (resolvedRoles.has(overwrite.id)) {
|
|
214
|
+
roleOverwrites.push(overwrite);
|
|
215
|
+
} else if (overwrite.id === resolvedMember.id) {
|
|
216
|
+
memberOverwrites = overwrite;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return {
|
|
221
|
+
everyone: everyoneOverwrites,
|
|
222
|
+
roles: roleOverwrites,
|
|
223
|
+
member: memberOverwrites,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Gets the overall set of permissions for a member in this channel, taking into account channel overwrites.
|
|
229
|
+
*
|
|
230
|
+
* @param {GuildMember} member The member to obtain the overall permissions for
|
|
231
|
+
* @param {boolean} checkAdmin Whether having the {@link PermissionFlagsBits.Administrator} permission
|
|
232
|
+
* will return all permissions
|
|
233
|
+
* @returns {Readonly<PermissionsBitField>}
|
|
234
|
+
* @private
|
|
235
|
+
*/
|
|
236
|
+
memberPermissions(member, checkAdmin) {
|
|
237
|
+
if (checkAdmin && member.id === this.guild.ownerId) {
|
|
238
|
+
return new PermissionsBitField(PermissionsBitField.All).freeze();
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const roles = member.roles.cache;
|
|
242
|
+
const permissions = new PermissionsBitField(roles.map(role => role.permissions));
|
|
243
|
+
|
|
244
|
+
if (checkAdmin && permissions.has(PermissionFlagsBits.Administrator)) {
|
|
245
|
+
return new PermissionsBitField(PermissionsBitField.All).freeze();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const overwrites = this.overwritesFor(member, true, roles);
|
|
249
|
+
|
|
250
|
+
return permissions
|
|
251
|
+
.remove(overwrites.everyone?.deny ?? PermissionsBitField.DefaultBit)
|
|
252
|
+
.add(overwrites.everyone?.allow ?? PermissionsBitField.DefaultBit)
|
|
253
|
+
.remove(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.deny) : PermissionsBitField.DefaultBit)
|
|
254
|
+
.add(overwrites.roles.length > 0 ? overwrites.roles.map(role => role.allow) : PermissionsBitField.DefaultBit)
|
|
255
|
+
.remove(overwrites.member?.deny ?? PermissionsBitField.DefaultBit)
|
|
256
|
+
.add(overwrites.member?.allow ?? PermissionsBitField.DefaultBit)
|
|
257
|
+
.freeze();
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Gets the overall set of permissions for a role in this channel, taking into account channel overwrites.
|
|
262
|
+
*
|
|
263
|
+
* @param {Role} role The role to obtain the overall permissions for
|
|
264
|
+
* @param {boolean} checkAdmin Whether having the {@link PermissionFlagsBits.Administrator} permission
|
|
265
|
+
* will return all permissions
|
|
266
|
+
* @returns {Readonly<PermissionsBitField>}
|
|
267
|
+
* @private
|
|
268
|
+
*/
|
|
269
|
+
rolePermissions(role, checkAdmin) {
|
|
270
|
+
if (checkAdmin && role.permissions.has(PermissionFlagsBits.Administrator)) {
|
|
271
|
+
return new PermissionsBitField(PermissionsBitField.All).freeze();
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const basePermissions = new PermissionsBitField([role.permissions, role.guild.roles.everyone.permissions]);
|
|
275
|
+
const everyoneOverwrites = this.permissionOverwrites.cache.get(this.guild.id);
|
|
276
|
+
const roleOverwrites = this.permissionOverwrites.cache.get(role.id);
|
|
277
|
+
|
|
278
|
+
return basePermissions
|
|
279
|
+
.remove(everyoneOverwrites?.deny ?? PermissionsBitField.DefaultBit)
|
|
280
|
+
.add(everyoneOverwrites?.allow ?? PermissionsBitField.DefaultBit)
|
|
281
|
+
.remove(roleOverwrites?.deny ?? PermissionsBitField.DefaultBit)
|
|
282
|
+
.add(roleOverwrites?.allow ?? PermissionsBitField.DefaultBit)
|
|
283
|
+
.freeze();
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Locks in the permission overwrites from the parent channel.
|
|
288
|
+
*
|
|
289
|
+
* @returns {Promise<GuildChannel>}
|
|
290
|
+
*/
|
|
291
|
+
async lockPermissions() {
|
|
292
|
+
if (!this.parent) throw new DiscordjsError(ErrorCodes.GuildChannelOrphan);
|
|
293
|
+
const permissionOverwrites = this.parent.permissionOverwrites.cache.map(overwrite => overwrite.toJSON());
|
|
294
|
+
return this.edit({ permissionOverwrites });
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* A collection of cached members of this channel, mapped by their ids.
|
|
299
|
+
* Members that can view this channel, if the channel is text-based.
|
|
300
|
+
* Members in the channel, if the channel is voice-based.
|
|
301
|
+
*
|
|
302
|
+
* @type {Collection<Snowflake, GuildMember>}
|
|
303
|
+
* @readonly
|
|
304
|
+
*/
|
|
305
|
+
get members() {
|
|
306
|
+
return this.guild.members.cache.filter(member =>
|
|
307
|
+
this.permissionsFor(member).has(PermissionFlagsBits.ViewChannel, false),
|
|
308
|
+
);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Edits the channel.
|
|
313
|
+
*
|
|
314
|
+
* @param {GuildChannelEditOptions} options The options to provide
|
|
315
|
+
* @returns {Promise<GuildChannel>}
|
|
316
|
+
* @example
|
|
317
|
+
* // Edit a channel
|
|
318
|
+
* channel.edit({ name: 'new-channel' })
|
|
319
|
+
* .then(console.log)
|
|
320
|
+
* .catch(console.error);
|
|
321
|
+
*/
|
|
322
|
+
async edit(options) {
|
|
323
|
+
return this.guild.channels.edit(this, options);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Sets a new name for the guild channel.
|
|
328
|
+
*
|
|
329
|
+
* @param {string} name The new name for the guild channel
|
|
330
|
+
* @param {string} [reason] Reason for changing the guild channel's name
|
|
331
|
+
* @returns {Promise<GuildChannel>}
|
|
332
|
+
* @example
|
|
333
|
+
* // Set a new channel name
|
|
334
|
+
* channel.setName('not_general')
|
|
335
|
+
* .then(newChannel => console.log(`Channel's new name is ${newChannel.name}`))
|
|
336
|
+
* .catch(console.error);
|
|
337
|
+
*/
|
|
338
|
+
async setName(name, reason) {
|
|
339
|
+
return this.edit({ name, reason });
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Options used to set the parent of a channel.
|
|
344
|
+
*
|
|
345
|
+
* @typedef {Object} SetParentOptions
|
|
346
|
+
* @property {boolean} [lockPermissions=false] Whether to lock the permissions to what the parent's permissions are
|
|
347
|
+
* @property {string} [reason] The reason for modifying the parent of the channel
|
|
348
|
+
*/
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Sets the parent of this channel.
|
|
352
|
+
*
|
|
353
|
+
* @param {?CategoryChannelResolvable} channel The category channel to set as the parent
|
|
354
|
+
* @param {SetParentOptions} [options={}] The options for setting the parent
|
|
355
|
+
* @returns {Promise<GuildChannel>}
|
|
356
|
+
* @example
|
|
357
|
+
* // Add a parent to a channel
|
|
358
|
+
* message.channel.setParent('355908108431917066')
|
|
359
|
+
* .then(channel => console.log(`New parent of ${channel.name}: ${channel.parent.name}`))
|
|
360
|
+
* .catch(console.error);
|
|
361
|
+
* @example
|
|
362
|
+
* // Move a channel and sync its permissions with the parent
|
|
363
|
+
* message.channel.setParent('355908108431917066', { lockPermissions: true })
|
|
364
|
+
* .then(channel => console.log(`Moved ${message.channel.name} to ${channel.parent.name}`))
|
|
365
|
+
* .catch(console.error);
|
|
366
|
+
*/
|
|
367
|
+
async setParent(channel, { lockPermissions = false, reason } = {}) {
|
|
368
|
+
return this.edit({
|
|
369
|
+
parent: channel ?? null,
|
|
370
|
+
lockPermissions,
|
|
371
|
+
reason,
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Options used to set the position of a channel.
|
|
377
|
+
*
|
|
378
|
+
* @typedef {Object} SetChannelPositionOptions
|
|
379
|
+
* @property {boolean} [relative=false] Whether or not to change the position relative to its current value
|
|
380
|
+
* @property {string} [reason] The reason for changing the position
|
|
381
|
+
*/
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Sets a new position for the guild channel.
|
|
385
|
+
*
|
|
386
|
+
* @param {number} position The new position for the guild channel
|
|
387
|
+
* @param {SetChannelPositionOptions} [options] Options for setting position
|
|
388
|
+
* @returns {Promise<GuildChannel>}
|
|
389
|
+
* @example
|
|
390
|
+
* // Set a new channel position
|
|
391
|
+
* channel.setPosition(2)
|
|
392
|
+
* .then(newChannel => console.log(`Channel's new position is ${newChannel.position}`))
|
|
393
|
+
* .catch(console.error);
|
|
394
|
+
*/
|
|
395
|
+
async setPosition(position, options = {}) {
|
|
396
|
+
return this.guild.channels.setPosition(this, position, options);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Options used to clone a guild channel.
|
|
401
|
+
*
|
|
402
|
+
* @typedef {GuildChannelCreateOptions} GuildChannelCloneOptions
|
|
403
|
+
* @property {string} [name=this.name] Name of the new channel
|
|
404
|
+
*/
|
|
405
|
+
|
|
406
|
+
/**
|
|
407
|
+
* Clones this channel.
|
|
408
|
+
*
|
|
409
|
+
* @param {GuildChannelCloneOptions} [options] The options for cloning this channel
|
|
410
|
+
* @returns {Promise<GuildChannel>}
|
|
411
|
+
*/
|
|
412
|
+
async clone(options = {}) {
|
|
413
|
+
return this.guild.channels.create({
|
|
414
|
+
name: options.name ?? this.name,
|
|
415
|
+
permissionOverwrites: this.permissionOverwrites.cache,
|
|
416
|
+
topic: this.topic,
|
|
417
|
+
type: this.type,
|
|
418
|
+
nsfw: this.nsfw,
|
|
419
|
+
parent: this.parent,
|
|
420
|
+
bitrate: this.bitrate,
|
|
421
|
+
userLimit: this.userLimit,
|
|
422
|
+
rateLimitPerUser: this.rateLimitPerUser,
|
|
423
|
+
position: this.rawPosition,
|
|
424
|
+
reason: null,
|
|
425
|
+
...options,
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Checks if this channel has the same type, topic, position, name, overwrites, and id as another channel.
|
|
431
|
+
* In most cases, a simple `channel.id === channel2.id` will do, and is much faster too.
|
|
432
|
+
*
|
|
433
|
+
* @param {GuildChannel} channel Channel to compare with
|
|
434
|
+
* @returns {boolean}
|
|
435
|
+
*/
|
|
436
|
+
equals(channel) {
|
|
437
|
+
let equal =
|
|
438
|
+
channel &&
|
|
439
|
+
this.id === channel.id &&
|
|
440
|
+
this.type === channel.type &&
|
|
441
|
+
this.topic === channel.topic &&
|
|
442
|
+
this.position === channel.position &&
|
|
443
|
+
this.name === channel.name;
|
|
444
|
+
|
|
445
|
+
if (equal) {
|
|
446
|
+
if (this.permissionOverwrites && channel.permissionOverwrites) {
|
|
447
|
+
equal = this.permissionOverwrites.cache.equals(channel.permissionOverwrites.cache);
|
|
448
|
+
} else {
|
|
449
|
+
equal = !this.permissionOverwrites && !channel.permissionOverwrites;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
return equal;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
/**
|
|
457
|
+
* Whether the channel is deletable by the client user
|
|
458
|
+
*
|
|
459
|
+
* @type {boolean}
|
|
460
|
+
* @readonly
|
|
461
|
+
*/
|
|
462
|
+
get deletable() {
|
|
463
|
+
return this.manageable && this.guild.rulesChannelId !== this.id && this.guild.publicUpdatesChannelId !== this.id;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Whether the channel is manageable by the client user
|
|
468
|
+
*
|
|
469
|
+
* @type {boolean}
|
|
470
|
+
* @readonly
|
|
471
|
+
*/
|
|
472
|
+
get manageable() {
|
|
473
|
+
const permissions = this.permissionsFor(this.client.user);
|
|
474
|
+
if (!permissions) return false;
|
|
475
|
+
|
|
476
|
+
// This flag allows managing even if timed out
|
|
477
|
+
if (permissions.has(PermissionFlagsBits.Administrator, false)) return true;
|
|
478
|
+
if (this.guild.members.me.communicationDisabledUntilTimestamp > Date.now()) return false;
|
|
479
|
+
|
|
480
|
+
const baseBitfield = PermissionFlagsBits.ViewChannel | PermissionFlagsBits.ManageChannels;
|
|
481
|
+
const bitfield = VoiceBasedChannelTypes.includes(this.type)
|
|
482
|
+
? baseBitfield | PermissionFlagsBits.Connect
|
|
483
|
+
: baseBitfield;
|
|
484
|
+
|
|
485
|
+
return permissions.has(bitfield, false);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* Whether the channel is viewable by the client user
|
|
490
|
+
*
|
|
491
|
+
* @type {boolean}
|
|
492
|
+
* @readonly
|
|
493
|
+
*/
|
|
494
|
+
get viewable() {
|
|
495
|
+
const permissions = this.permissionsFor(this.client.user);
|
|
496
|
+
if (!permissions) return false;
|
|
497
|
+
return permissions.has(PermissionFlagsBits.ViewChannel, false);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Deletes this channel.
|
|
502
|
+
*
|
|
503
|
+
* @param {string} [reason] Reason for deleting this channel
|
|
504
|
+
* @returns {Promise<GuildChannel>}
|
|
505
|
+
* @example
|
|
506
|
+
* // Delete the channel
|
|
507
|
+
* channel.delete('making room for new channels')
|
|
508
|
+
* .then(console.log)
|
|
509
|
+
* .catch(console.error);
|
|
510
|
+
*/
|
|
511
|
+
async delete(reason) {
|
|
512
|
+
await this.guild.channels.delete(this.id, reason);
|
|
513
|
+
return this;
|
|
514
|
+
}
|
|
515
|
+
}
|