@velliajs/discord 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +191 -0
- package/README.md +133 -0
- package/package.json +82 -0
- package/src/client/BaseClient.js +83 -0
- package/src/client/Client.js +591 -0
- package/src/client/WebhookClient.js +103 -0
- package/src/client/actions/Action.js +119 -0
- package/src/client/actions/ActionsManager.js +79 -0
- package/src/client/actions/ApplicationCommandPermissionsUpdate.js +34 -0
- package/src/client/actions/AutoModerationActionExecution.js +26 -0
- package/src/client/actions/AutoModerationRuleCreate.js +27 -0
- package/src/client/actions/AutoModerationRuleDelete.js +31 -0
- package/src/client/actions/AutoModerationRuleUpdate.js +29 -0
- package/src/client/actions/ChannelCreate.js +23 -0
- package/src/client/actions/ChannelDelete.js +23 -0
- package/src/client/actions/ChannelUpdate.js +33 -0
- package/src/client/actions/GuildAuditLogEntryCreate.js +29 -0
- package/src/client/actions/GuildBanAdd.js +20 -0
- package/src/client/actions/GuildBanRemove.js +25 -0
- package/src/client/actions/GuildChannelsPositionUpdate.js +21 -0
- package/src/client/actions/GuildDelete.js +44 -0
- package/src/client/actions/GuildEmojiCreate.js +20 -0
- package/src/client/actions/GuildEmojiDelete.js +19 -0
- package/src/client/actions/GuildEmojiUpdate.js +20 -0
- package/src/client/actions/GuildEmojisUpdate.js +34 -0
- package/src/client/actions/GuildIntegrationsUpdate.js +19 -0
- package/src/client/actions/GuildMemberRemove.js +31 -0
- package/src/client/actions/GuildMemberUpdate.js +44 -0
- package/src/client/actions/GuildRoleCreate.js +25 -0
- package/src/client/actions/GuildRoleDelete.js +29 -0
- package/src/client/actions/GuildRoleUpdate.js +39 -0
- package/src/client/actions/GuildRolesPositionUpdate.js +21 -0
- package/src/client/actions/GuildScheduledEventCreate.js +27 -0
- package/src/client/actions/GuildScheduledEventDelete.js +31 -0
- package/src/client/actions/GuildScheduledEventUpdate.js +30 -0
- package/src/client/actions/GuildScheduledEventUserAdd.js +32 -0
- package/src/client/actions/GuildScheduledEventUserRemove.js +32 -0
- package/src/client/actions/GuildStickerCreate.js +20 -0
- package/src/client/actions/GuildStickerDelete.js +19 -0
- package/src/client/actions/GuildStickerUpdate.js +20 -0
- package/src/client/actions/GuildStickersUpdate.js +34 -0
- package/src/client/actions/GuildUpdate.js +33 -0
- package/src/client/actions/InteractionCreate.js +101 -0
- package/src/client/actions/InviteCreate.js +28 -0
- package/src/client/actions/InviteDelete.js +30 -0
- package/src/client/actions/MessageCreate.js +37 -0
- package/src/client/actions/MessageDelete.js +32 -0
- package/src/client/actions/MessageDeleteBulk.js +47 -0
- package/src/client/actions/MessageReactionAdd.js +55 -0
- package/src/client/actions/MessageReactionRemove.js +45 -0
- package/src/client/actions/MessageReactionRemoveAll.js +33 -0
- package/src/client/actions/MessageReactionRemoveEmoji.js +28 -0
- package/src/client/actions/MessageUpdate.js +26 -0
- package/src/client/actions/PresenceUpdate.js +42 -0
- package/src/client/actions/StageInstanceCreate.js +28 -0
- package/src/client/actions/StageInstanceDelete.js +31 -0
- package/src/client/actions/StageInstanceUpdate.js +30 -0
- package/src/client/actions/ThreadCreate.js +24 -0
- package/src/client/actions/ThreadDelete.js +26 -0
- package/src/client/actions/ThreadListSync.js +60 -0
- package/src/client/actions/ThreadMemberUpdate.js +30 -0
- package/src/client/actions/ThreadMembersUpdate.js +47 -0
- package/src/client/actions/TypingStart.js +29 -0
- package/src/client/actions/UserUpdate.js +36 -0
- package/src/client/actions/VoiceStateUpdate.js +43 -0
- package/src/client/actions/WebhooksUpdate.js +20 -0
- package/src/client/voice/ClientVoiceManager.js +44 -0
- package/src/client/websocket/WebSocketManager.js +393 -0
- package/src/client/websocket/WebSocketShard.js +231 -0
- package/src/client/websocket/handlers/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js +5 -0
- package/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_CREATE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_DELETE.js +5 -0
- package/src/client/websocket/handlers/CHANNEL_PINS_UPDATE.js +22 -0
- package/src/client/websocket/handlers/CHANNEL_UPDATE.js +16 -0
- package/src/client/websocket/handlers/GUILD_AUDIT_LOG_ENTRY_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_BAN_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_CREATE.js +26 -0
- package/src/client/websocket/handlers/GUILD_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_EMOJIS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_INTEGRATIONS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBERS_CHUNK.js +39 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_ADD.js +20 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_ROLE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_CREATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_DELETE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_ADD.js +5 -0
- package/src/client/websocket/handlers/GUILD_SCHEDULED_EVENT_USER_REMOVE.js +5 -0
- package/src/client/websocket/handlers/GUILD_STICKERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/GUILD_UPDATE.js +5 -0
- package/src/client/websocket/handlers/INTERACTION_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_CREATE.js +5 -0
- package/src/client/websocket/handlers/INVITE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_CREATE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_DELETE_BULK.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_ADD.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_ALL.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_REACTION_REMOVE_EMOJI.js +5 -0
- package/src/client/websocket/handlers/MESSAGE_UPDATE.js +16 -0
- package/src/client/websocket/handlers/PRESENCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/READY.js +27 -0
- package/src/client/websocket/handlers/RESUMED.js +14 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_CREATE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_DELETE.js +5 -0
- package/src/client/websocket/handlers/STAGE_INSTANCE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_CREATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_DELETE.js +5 -0
- package/src/client/websocket/handlers/THREAD_LIST_SYNC.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBERS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_MEMBER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/THREAD_UPDATE.js +16 -0
- package/src/client/websocket/handlers/TYPING_START.js +5 -0
- package/src/client/websocket/handlers/USER_UPDATE.js +5 -0
- package/src/client/websocket/handlers/VOICE_SERVER_UPDATE.js +6 -0
- package/src/client/websocket/handlers/VOICE_STATE_UPDATE.js +5 -0
- package/src/client/websocket/handlers/WEBHOOKS_UPDATE.js +5 -0
- package/src/client/websocket/handlers/index.js +64 -0
- package/src/errors/DJSError.js +48 -0
- package/src/errors/ErrorCodes.js +319 -0
- package/src/errors/Messages.js +170 -0
- package/src/errors/index.js +5 -0
- package/src/index.js +213 -0
- package/src/managers/ApplicationCommandManager.js +263 -0
- package/src/managers/ApplicationCommandPermissionsManager.js +434 -0
- package/src/managers/AutoModerationRuleManager.js +288 -0
- package/src/managers/BaseGuildEmojiManager.js +80 -0
- package/src/managers/BaseManager.js +19 -0
- package/src/managers/CachedManager.js +57 -0
- package/src/managers/CategoryChannelChildManager.js +77 -0
- package/src/managers/ChannelManager.js +128 -0
- package/src/managers/DataManager.js +61 -0
- package/src/managers/GuildApplicationCommandManager.js +28 -0
- package/src/managers/GuildBanManager.js +204 -0
- package/src/managers/GuildChannelManager.js +494 -0
- package/src/managers/GuildEmojiManager.js +174 -0
- package/src/managers/GuildEmojiRoleManager.js +118 -0
- package/src/managers/GuildForumThreadManager.js +83 -0
- package/src/managers/GuildInviteManager.js +213 -0
- package/src/managers/GuildManager.js +283 -0
- package/src/managers/GuildMemberManager.js +540 -0
- package/src/managers/GuildMemberRoleManager.js +204 -0
- package/src/managers/GuildScheduledEventManager.js +297 -0
- package/src/managers/GuildStickerManager.js +182 -0
- package/src/managers/GuildTextThreadManager.js +91 -0
- package/src/managers/MessageManager.js +259 -0
- package/src/managers/PermissionOverwriteManager.js +168 -0
- package/src/managers/PresenceManager.js +58 -0
- package/src/managers/ReactionManager.js +68 -0
- package/src/managers/ReactionUserManager.js +77 -0
- package/src/managers/RoleManager.js +360 -0
- package/src/managers/StageInstanceManager.js +154 -0
- package/src/managers/ThreadManager.js +204 -0
- package/src/managers/ThreadMemberManager.js +182 -0
- package/src/managers/UserManager.js +139 -0
- package/src/managers/VoiceStateManager.js +37 -0
- package/src/sharding/Shard.js +457 -0
- package/src/sharding/ShardClientUtil.js +285 -0
- package/src/sharding/ShardingManager.js +326 -0
- package/src/structures/ActionRow.js +46 -0
- package/src/structures/ActionRowBuilder.js +35 -0
- package/src/structures/AnonymousGuild.js +97 -0
- package/src/structures/ApplicationCommand.js +606 -0
- package/src/structures/ApplicationRoleConnectionMetadata.js +46 -0
- package/src/structures/Attachment.js +140 -0
- package/src/structures/AttachmentBuilder.js +116 -0
- package/src/structures/AutoModerationActionExecution.js +116 -0
- package/src/structures/AutoModerationRule.js +284 -0
- package/src/structures/AutocompleteInteraction.js +97 -0
- package/src/structures/Base.js +43 -0
- package/src/structures/BaseChannel.js +160 -0
- package/src/structures/BaseGuild.js +119 -0
- package/src/structures/BaseGuildEmoji.js +56 -0
- package/src/structures/BaseGuildTextChannel.js +186 -0
- package/src/structures/BaseGuildVoiceChannel.js +234 -0
- package/src/structures/BaseInteraction.js +344 -0
- package/src/structures/BaseSelectMenuComponent.js +56 -0
- package/src/structures/ButtonBuilder.js +44 -0
- package/src/structures/ButtonComponent.js +65 -0
- package/src/structures/ButtonInteraction.js +11 -0
- package/src/structures/CategoryChannel.js +45 -0
- package/src/structures/ChannelSelectMenuBuilder.js +31 -0
- package/src/structures/ChannelSelectMenuComponent.js +20 -0
- package/src/structures/ChannelSelectMenuInteraction.js +33 -0
- package/src/structures/ChatInputCommandInteraction.js +41 -0
- package/src/structures/ClientApplication.js +193 -0
- package/src/structures/ClientPresence.js +82 -0
- package/src/structures/ClientUser.js +185 -0
- package/src/structures/CommandInteraction.js +224 -0
- package/src/structures/CommandInteractionOptionResolver.js +308 -0
- package/src/structures/Component.js +47 -0
- package/src/structures/ContextMenuCommandInteraction.js +64 -0
- package/src/structures/DMChannel.js +129 -0
- package/src/structures/DirectoryChannel.js +36 -0
- package/src/structures/Embed.js +220 -0
- package/src/structures/EmbedBuilder.js +41 -0
- package/src/structures/Emoji.js +108 -0
- package/src/structures/ForumChannel.js +264 -0
- package/src/structures/Guild.js +1361 -0
- package/src/structures/GuildAuditLogs.js +91 -0
- package/src/structures/GuildAuditLogsEntry.js +527 -0
- package/src/structures/GuildBan.js +59 -0
- package/src/structures/GuildChannel.js +457 -0
- package/src/structures/GuildEmoji.js +148 -0
- package/src/structures/GuildMember.js +518 -0
- package/src/structures/GuildPreview.js +193 -0
- package/src/structures/GuildPreviewEmoji.js +27 -0
- package/src/structures/GuildScheduledEvent.js +439 -0
- package/src/structures/GuildTemplate.js +241 -0
- package/src/structures/Integration.js +220 -0
- package/src/structures/IntegrationApplication.js +85 -0
- package/src/structures/InteractionCollector.js +263 -0
- package/src/structures/InteractionResponse.js +102 -0
- package/src/structures/InteractionWebhook.js +59 -0
- package/src/structures/Invite.js +322 -0
- package/src/structures/InviteGuild.js +22 -0
- package/src/structures/InviteStageInstance.js +87 -0
- package/src/structures/MentionableSelectMenuBuilder.js +32 -0
- package/src/structures/MentionableSelectMenuComponent.js +11 -0
- package/src/structures/MentionableSelectMenuInteraction.js +71 -0
- package/src/structures/Message.js +997 -0
- package/src/structures/MessageCollector.js +146 -0
- package/src/structures/MessageComponentInteraction.js +107 -0
- package/src/structures/MessageContextMenuCommandInteraction.js +20 -0
- package/src/structures/MessageMentions.js +297 -0
- package/src/structures/MessagePayload.js +299 -0
- package/src/structures/MessageReaction.js +142 -0
- package/src/structures/ModalBuilder.js +34 -0
- package/src/structures/ModalSubmitFields.js +55 -0
- package/src/structures/ModalSubmitInteraction.js +121 -0
- package/src/structures/NewsChannel.js +32 -0
- package/src/structures/OAuth2Guild.js +28 -0
- package/src/structures/PartialGroupDMChannel.js +60 -0
- package/src/structures/PermissionOverwrites.js +196 -0
- package/src/structures/Presence.js +372 -0
- package/src/structures/ReactionCollector.js +229 -0
- package/src/structures/ReactionEmoji.js +31 -0
- package/src/structures/Role.js +458 -0
- package/src/structures/RoleSelectMenuBuilder.js +31 -0
- package/src/structures/RoleSelectMenuComponent.js +11 -0
- package/src/structures/RoleSelectMenuInteraction.js +33 -0
- package/src/structures/SelectMenuBuilder.js +26 -0
- package/src/structures/SelectMenuComponent.js +26 -0
- package/src/structures/SelectMenuInteraction.js +26 -0
- package/src/structures/SelectMenuOptionBuilder.js +26 -0
- package/src/structures/StageChannel.js +112 -0
- package/src/structures/StageInstance.js +167 -0
- package/src/structures/Sticker.js +272 -0
- package/src/structures/StickerPack.js +95 -0
- package/src/structures/StringSelectMenuBuilder.js +79 -0
- package/src/structures/StringSelectMenuComponent.js +20 -0
- package/src/structures/StringSelectMenuInteraction.js +21 -0
- package/src/structures/StringSelectMenuOptionBuilder.js +49 -0
- package/src/structures/Team.js +117 -0
- package/src/structures/TeamMember.js +70 -0
- package/src/structures/TextChannel.js +33 -0
- package/src/structures/TextInputBuilder.js +31 -0
- package/src/structures/TextInputComponent.js +29 -0
- package/src/structures/ThreadChannel.js +606 -0
- package/src/structures/ThreadMember.js +113 -0
- package/src/structures/Typing.js +74 -0
- package/src/structures/User.js +331 -0
- package/src/structures/UserContextMenuCommandInteraction.js +29 -0
- package/src/structures/UserSelectMenuBuilder.js +31 -0
- package/src/structures/UserSelectMenuComponent.js +11 -0
- package/src/structures/UserSelectMenuInteraction.js +51 -0
- package/src/structures/VoiceChannel.js +96 -0
- package/src/structures/VoiceRegion.js +46 -0
- package/src/structures/VoiceState.js +303 -0
- package/src/structures/Webhook.js +481 -0
- package/src/structures/WelcomeChannel.js +60 -0
- package/src/structures/WelcomeScreen.js +49 -0
- package/src/structures/Widget.js +88 -0
- package/src/structures/WidgetMember.js +99 -0
- package/src/structures/interfaces/Application.js +108 -0
- package/src/structures/interfaces/Collector.js +335 -0
- package/src/structures/interfaces/InteractionResponses.js +320 -0
- package/src/structures/interfaces/TextBasedChannel.js +413 -0
- package/src/util/APITypes.js +456 -0
- package/src/util/ActivityFlagsBitField.js +26 -0
- package/src/util/ApplicationFlagsBitField.js +26 -0
- package/src/util/BitField.js +176 -0
- package/src/util/ChannelFlagsBitField.js +41 -0
- package/src/util/Channels.js +150 -0
- package/src/util/Colors.js +73 -0
- package/src/util/Components.js +152 -0
- package/src/util/Constants.js +230 -0
- package/src/util/DataResolver.js +140 -0
- package/src/util/Enums.js +13 -0
- package/src/util/Events.js +160 -0
- package/src/util/Formatters.js +413 -0
- package/src/util/GuildMemberFlagsBitField.js +41 -0
- package/src/util/IntentsBitField.js +34 -0
- package/src/util/LimitedCollection.js +68 -0
- package/src/util/MessageFlagsBitField.js +32 -0
- package/src/util/Options.js +216 -0
- package/src/util/Partials.js +44 -0
- package/src/util/PermissionsBitField.js +104 -0
- package/src/util/ShardEvents.js +27 -0
- package/src/util/Status.js +33 -0
- package/src/util/Sweepers.js +467 -0
- package/src/util/SystemChannelFlagsBitField.js +43 -0
- package/src/util/ThreadMemberFlagsBitField.js +31 -0
- package/src/util/Transformers.js +36 -0
- package/src/util/UserFlagsBitField.js +32 -0
- package/src/util/Util.js +394 -0
- package/src/util/WebSocketShardEvents.js +25 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { Collection } = require('@discordjs/collection');
|
|
4
|
+
const { ApplicationCommandPermissionType, RESTJSONErrorCodes, Routes } = require('discord-api-types/v10');
|
|
5
|
+
const BaseManager = require('./BaseManager');
|
|
6
|
+
const { DiscordjsError, DiscordjsTypeError, ErrorCodes } = require('../errors');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Manages API methods for permissions of Application Commands.
|
|
10
|
+
* @extends {BaseManager}
|
|
11
|
+
*/
|
|
12
|
+
class ApplicationCommandPermissionsManager extends BaseManager {
|
|
13
|
+
constructor(manager) {
|
|
14
|
+
super(manager.client);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The manager or command that this manager belongs to
|
|
18
|
+
* @type {ApplicationCommandManager|ApplicationCommand}
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
this.manager = manager;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The guild that this manager acts on
|
|
25
|
+
* @type {?Guild}
|
|
26
|
+
*/
|
|
27
|
+
this.guild = manager.guild ?? null;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The id of the guild that this manager acts on
|
|
31
|
+
* @type {?Snowflake}
|
|
32
|
+
*/
|
|
33
|
+
this.guildId = manager.guildId ?? manager.guild?.id ?? null;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The id of the command this manager acts on
|
|
37
|
+
* @type {?Snowflake}
|
|
38
|
+
*/
|
|
39
|
+
this.commandId = manager.id ?? null;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The APIRouter path to the commands
|
|
44
|
+
* @param {Snowflake} guildId The guild's id to use in the path,
|
|
45
|
+
* @param {Snowflake} [commandId] The application command's id
|
|
46
|
+
* @returns {string}
|
|
47
|
+
* @private
|
|
48
|
+
*/
|
|
49
|
+
permissionsPath(guildId, commandId) {
|
|
50
|
+
if (commandId) {
|
|
51
|
+
return Routes.applicationCommandPermissions(this.client.application.id, guildId, commandId);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return Routes.guildApplicationCommandsPermissions(this.client.application.id, guildId);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* eslint-disable max-len */
|
|
58
|
+
/**
|
|
59
|
+
* The object returned when fetching permissions for an application command.
|
|
60
|
+
* @typedef {Object} ApplicationCommandPermissions
|
|
61
|
+
* @property {Snowflake} id The role, user, or channel's id. Can also be a
|
|
62
|
+
* {@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-constants permission constant}.
|
|
63
|
+
* @property {ApplicationCommandPermissionType} type Whether this permission is for a role or a user
|
|
64
|
+
* @property {boolean} permission Whether the role or user has the permission to use this command
|
|
65
|
+
*/
|
|
66
|
+
/* eslint-enable max-len */
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Options for managing permissions for one or more Application Commands
|
|
70
|
+
* <warn>When passing these options to a manager where `guildId` is `null`,
|
|
71
|
+
* `guild` is a required parameter</warn>
|
|
72
|
+
* @typedef {Object} BaseApplicationCommandPermissionsOptions
|
|
73
|
+
* @property {GuildResolvable} [guild] The guild to modify / check permissions for
|
|
74
|
+
* <warn>Ignored when the manager has a non-null `guildId` property</warn>
|
|
75
|
+
* @property {ApplicationCommandResolvable} [command] The command to modify / check permissions for
|
|
76
|
+
* <warn>Ignored when the manager has a non-null `commandId` property</warn>
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Fetches the permissions for one or multiple commands. Providing the client's id as the "command id" will fetch
|
|
81
|
+
* *only* the guild level permissions
|
|
82
|
+
* @param {BaseApplicationCommandPermissionsOptions} [options] Options used to fetch permissions
|
|
83
|
+
* @returns {Promise<ApplicationCommandPermissions[]|Collection<Snowflake, ApplicationCommandPermissions[]>>}
|
|
84
|
+
* @example
|
|
85
|
+
* // Fetch permissions for one command
|
|
86
|
+
* guild.commands.permissions.fetch({ command: '123456789012345678' })
|
|
87
|
+
* .then(perms => console.log(`Fetched ${perms.length} overwrites`))
|
|
88
|
+
* .catch(console.error);
|
|
89
|
+
* @example
|
|
90
|
+
* // Fetch permissions for all commands in a guild
|
|
91
|
+
* client.application.commands.permissions.fetch({ guild: '123456789012345678' })
|
|
92
|
+
* .then(perms => console.log(`Fetched permissions for ${perms.size} commands`))
|
|
93
|
+
* .catch(console.error);
|
|
94
|
+
* @example
|
|
95
|
+
* // Fetch guild level permissions
|
|
96
|
+
* guild.commands.permissions.fetch({ command: client.user.id })
|
|
97
|
+
* .then(perms => console.log(`Fetched ${perms.length} guild level permissions`))
|
|
98
|
+
* .catch(console.error);
|
|
99
|
+
*/
|
|
100
|
+
async fetch({ guild, command } = {}) {
|
|
101
|
+
const { guildId, commandId } = this._validateOptions(guild, command);
|
|
102
|
+
if (commandId) {
|
|
103
|
+
const data = await this.client.rest.get(this.permissionsPath(guildId, commandId));
|
|
104
|
+
return data.permissions;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
const data = await this.client.rest.get(this.permissionsPath(guildId));
|
|
108
|
+
return data.reduce((coll, perm) => coll.set(perm.id, perm.permissions), new Collection());
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Options used to set permissions for one or more Application Commands in a guild
|
|
113
|
+
* <warn>Omitting the `command` parameter edits the guild wide permissions
|
|
114
|
+
* when the manager's `commandId` is `null`</warn>
|
|
115
|
+
* @typedef {BaseApplicationCommandPermissionsOptions} ApplicationCommandPermissionsEditOptions
|
|
116
|
+
* @property {ApplicationCommandPermissions[]} permissions The new permissions for the guild or overwrite
|
|
117
|
+
* @property {string} token The bearer token to use that authorizes the permission edit
|
|
118
|
+
*/
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Sets the permissions for the guild or a command overwrite.
|
|
122
|
+
* @param {ApplicationCommandPermissionsEditOptions} options Options used to set permissions
|
|
123
|
+
* @returns {Promise<ApplicationCommandPermissions[]|Collection<Snowflake, ApplicationCommandPermissions[]>>}
|
|
124
|
+
* @example
|
|
125
|
+
* // Set a permission overwrite for a command
|
|
126
|
+
* client.application.commands.permissions.set({
|
|
127
|
+
* guild: '892455839386304532',
|
|
128
|
+
* command: '123456789012345678',
|
|
129
|
+
* token: 'TotallyRealToken',
|
|
130
|
+
* permissions: [
|
|
131
|
+
* {
|
|
132
|
+
* id: '876543210987654321',
|
|
133
|
+
* type: ApplicationCommandPermissionType.User,
|
|
134
|
+
* permission: false,
|
|
135
|
+
* },
|
|
136
|
+
* ]})
|
|
137
|
+
* .then(console.log)
|
|
138
|
+
* .catch(console.error);
|
|
139
|
+
* @example
|
|
140
|
+
* // Set the permissions used for the guild (commands without overwrites)
|
|
141
|
+
* guild.commands.permissions.set({ token: 'TotallyRealToken', permissions: [
|
|
142
|
+
* {
|
|
143
|
+
* id: '123456789012345678',
|
|
144
|
+
* permissions: [{
|
|
145
|
+
* id: '876543210987654321',
|
|
146
|
+
* type: ApplicationCommandPermissionType.User,
|
|
147
|
+
* permission: false,
|
|
148
|
+
* }],
|
|
149
|
+
* },
|
|
150
|
+
* ]})
|
|
151
|
+
* .then(console.log)
|
|
152
|
+
* .catch(console.error);
|
|
153
|
+
*/
|
|
154
|
+
async set({ guild, command, permissions, token } = {}) {
|
|
155
|
+
if (!token) {
|
|
156
|
+
throw new DiscordjsError(ErrorCodes.ApplicationCommandPermissionsTokenMissing);
|
|
157
|
+
}
|
|
158
|
+
let { guildId, commandId } = this._validateOptions(guild, command);
|
|
159
|
+
|
|
160
|
+
if (!Array.isArray(permissions)) {
|
|
161
|
+
throw new DiscordjsTypeError(
|
|
162
|
+
ErrorCodes.InvalidType,
|
|
163
|
+
'permissions',
|
|
164
|
+
'Array of ApplicationCommandPermissions',
|
|
165
|
+
true,
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (!commandId) {
|
|
170
|
+
commandId = this.client.user.id;
|
|
171
|
+
}
|
|
172
|
+
const data = await this.client.rest.put(this.permissionsPath(guildId, commandId), {
|
|
173
|
+
body: { permissions },
|
|
174
|
+
auth: false,
|
|
175
|
+
headers: { Authorization: `Bearer ${token}` },
|
|
176
|
+
});
|
|
177
|
+
return data.permissions;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Add permissions to a command.
|
|
182
|
+
* @param {ApplicationCommandPermissionsEditOptions} options Options used to add permissions
|
|
183
|
+
* @returns {Promise<ApplicationCommandPermissions[]>}
|
|
184
|
+
* @example
|
|
185
|
+
* // Add a rule to block a role from using a command
|
|
186
|
+
* guild.commands.permissions.add({ command: '123456789012345678', token: 'TotallyRealToken', permissions: [
|
|
187
|
+
* {
|
|
188
|
+
* id: '876543211234567890',
|
|
189
|
+
* type: ApplicationCommandPermissionType.Role,
|
|
190
|
+
* permission: false
|
|
191
|
+
* },
|
|
192
|
+
* ]})
|
|
193
|
+
* .then(console.log)
|
|
194
|
+
* .catch(console.error);
|
|
195
|
+
*/
|
|
196
|
+
async add({ guild, command, permissions, token } = {}) {
|
|
197
|
+
if (!token) {
|
|
198
|
+
throw new DiscordjsError(ErrorCodes.ApplicationCommandPermissionsTokenMissing);
|
|
199
|
+
}
|
|
200
|
+
let { guildId, commandId } = this._validateOptions(guild, command);
|
|
201
|
+
if (!commandId) {
|
|
202
|
+
commandId = this.client.user.id;
|
|
203
|
+
}
|
|
204
|
+
if (!Array.isArray(permissions)) {
|
|
205
|
+
throw new DiscordjsTypeError(
|
|
206
|
+
ErrorCodes.InvalidType,
|
|
207
|
+
'permissions',
|
|
208
|
+
'Array of ApplicationCommandPermissions',
|
|
209
|
+
true,
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
let existing = [];
|
|
214
|
+
try {
|
|
215
|
+
existing = await this.fetch({ guild: guildId, command: commandId });
|
|
216
|
+
} catch (error) {
|
|
217
|
+
if (error.code !== RESTJSONErrorCodes.UnknownApplicationCommandPermissions) throw error;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const newPermissions = permissions.slice();
|
|
221
|
+
for (const perm of existing) {
|
|
222
|
+
if (!newPermissions.some(x => x.id === perm.id)) {
|
|
223
|
+
newPermissions.push(perm);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return this.set({ guild: guildId, command: commandId, permissions: newPermissions, token });
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* A static snowflake that identifies the everyone role for application command permissions.
|
|
232
|
+
* It is the same as the guild id
|
|
233
|
+
* @typedef {Snowflake} RolePermissionConstant
|
|
234
|
+
*/
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* A static snowflake that identifies the "all channels" entity for application command permissions.
|
|
238
|
+
* It will be the result of the calculation `guildId - 1`
|
|
239
|
+
* @typedef {Snowflake} ChannelPermissionConstant
|
|
240
|
+
*/
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Options used to remove permissions from a command
|
|
244
|
+
* <warn>Omitting the `command` parameter removes from the guild wide permissions
|
|
245
|
+
* when the managers `commandId` is `null`</warn>
|
|
246
|
+
* <warn>At least one of `users`, `roles`, and `channels` is required</warn>
|
|
247
|
+
* @typedef {BaseApplicationCommandPermissionsOptions} RemoveApplicationCommandPermissionsOptions
|
|
248
|
+
* @property {string} token The bearer token to use that authorizes the permission removal
|
|
249
|
+
* @property {UserResolvable[]} [users] The user(s) to remove
|
|
250
|
+
* @property {Array<RoleResolvable|RolePermissionConstant>} [roles] The role(s) to remove
|
|
251
|
+
* @property {Array<GuildChannelResolvable|ChannelPermissionConstant>} [channels] The channel(s) to remove
|
|
252
|
+
*/
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Remove permissions from a command.
|
|
256
|
+
* @param {RemoveApplicationCommandPermissionsOptions} options Options used to remove permissions
|
|
257
|
+
* @returns {Promise<ApplicationCommandPermissions[]>}
|
|
258
|
+
* @example
|
|
259
|
+
* // Remove a user permission from this command
|
|
260
|
+
* guild.commands.permissions.remove({
|
|
261
|
+
* command: '123456789012345678', users: '876543210123456789', token: 'TotallyRealToken',
|
|
262
|
+
* })
|
|
263
|
+
* .then(console.log)
|
|
264
|
+
* .catch(console.error);
|
|
265
|
+
* @example
|
|
266
|
+
* // Remove multiple roles from this command
|
|
267
|
+
* guild.commands.permissions.remove({
|
|
268
|
+
* command: '123456789012345678', roles: ['876543210123456789', '765432101234567890'], token: 'TotallyRealToken',
|
|
269
|
+
* })
|
|
270
|
+
* .then(console.log)
|
|
271
|
+
* .catch(console.error);
|
|
272
|
+
*/
|
|
273
|
+
async remove({ guild, command, users, roles, channels, token } = {}) {
|
|
274
|
+
if (!token) {
|
|
275
|
+
throw new DiscordjsError(ErrorCodes.ApplicationCommandPermissionsTokenMissing);
|
|
276
|
+
}
|
|
277
|
+
let { guildId, commandId } = this._validateOptions(guild, command);
|
|
278
|
+
if (!commandId) {
|
|
279
|
+
commandId = this.client.user.id;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (!users && !roles && !channels) {
|
|
283
|
+
throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'users OR roles OR channels', 'Array or Resolvable', true);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
let resolvedUserIds = [];
|
|
287
|
+
if (Array.isArray(users)) {
|
|
288
|
+
for (const user of users) {
|
|
289
|
+
const userId = this.client.users.resolveId(user);
|
|
290
|
+
if (!userId) throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array', 'users', user);
|
|
291
|
+
resolvedUserIds.push(userId);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
let resolvedRoleIds = [];
|
|
296
|
+
if (Array.isArray(roles)) {
|
|
297
|
+
for (const role of roles) {
|
|
298
|
+
if (typeof role === 'string') {
|
|
299
|
+
resolvedRoleIds.push(role);
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if (!this.guild) throw new DiscordjsError(ErrorCodes.GuildUncachedEntityResolve, 'roles');
|
|
303
|
+
const roleId = this.guild.roles.resolveId(role);
|
|
304
|
+
if (!roleId) throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array', 'users', role);
|
|
305
|
+
resolvedRoleIds.push(roleId);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
let resolvedChannelIds = [];
|
|
310
|
+
if (Array.isArray(channels)) {
|
|
311
|
+
for (const channel of channels) {
|
|
312
|
+
if (typeof channel === 'string') {
|
|
313
|
+
resolvedChannelIds.push(channel);
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
if (!this.guild) throw new DiscordjsError(ErrorCodes.GuildUncachedEntityResolve, 'channels');
|
|
317
|
+
const channelId = this.guild.channels.resolveId(channel);
|
|
318
|
+
if (!channelId) throw new DiscordjsTypeError(ErrorCodes.InvalidElement, 'Array', 'channels', channel);
|
|
319
|
+
resolvedChannelIds.push(channelId);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
let existing = [];
|
|
324
|
+
try {
|
|
325
|
+
existing = await this.fetch({ guild: guildId, command: commandId });
|
|
326
|
+
} catch (error) {
|
|
327
|
+
if (error.code !== RESTJSONErrorCodes.UnknownApplicationCommandPermissions) throw error;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const permissions = existing.filter(perm => {
|
|
331
|
+
switch (perm.type) {
|
|
332
|
+
case ApplicationCommandPermissionType.Role:
|
|
333
|
+
return !resolvedRoleIds.includes(perm.id);
|
|
334
|
+
case ApplicationCommandPermissionType.User:
|
|
335
|
+
return !resolvedUserIds.includes(perm.id);
|
|
336
|
+
case ApplicationCommandPermissionType.Channel:
|
|
337
|
+
return !resolvedChannelIds.includes(perm.id);
|
|
338
|
+
}
|
|
339
|
+
return true;
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
return this.set({ guild: guildId, command: commandId, permissions, token });
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Options used to check the existence of permissions on a command
|
|
347
|
+
* <warn>The `command` parameter is not optional when the managers `commandId` is `null`</warn>
|
|
348
|
+
* @typedef {BaseApplicationCommandPermissionsOptions} HasApplicationCommandPermissionsOptions
|
|
349
|
+
* @property {ApplicationCommandPermissionIdResolvable} permissionId The entity to check if a permission exists for
|
|
350
|
+
* on this command.
|
|
351
|
+
* @property {ApplicationCommandPermissionType} [permissionType] Check for a specific type of permission
|
|
352
|
+
*/
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* Check whether a permission exists for a user, role, or channel
|
|
356
|
+
* @param {HasApplicationCommandPermissionsOptions} options Options used to check permissions
|
|
357
|
+
* @returns {Promise<boolean>}
|
|
358
|
+
* @example
|
|
359
|
+
* // Check whether a user has permission to use a command
|
|
360
|
+
* guild.commands.permissions.has({ command: '123456789012345678', permissionId: '876543210123456789' })
|
|
361
|
+
* .then(console.log)
|
|
362
|
+
* .catch(console.error);
|
|
363
|
+
*/
|
|
364
|
+
async has({ guild, command, permissionId, permissionType }) {
|
|
365
|
+
const { guildId, commandId } = this._validateOptions(guild, command);
|
|
366
|
+
if (!commandId) throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'command', 'ApplicationCommandResolvable');
|
|
367
|
+
|
|
368
|
+
if (!permissionId) {
|
|
369
|
+
throw new DiscordjsTypeError(
|
|
370
|
+
ErrorCodes.InvalidType,
|
|
371
|
+
'permissionId',
|
|
372
|
+
'UserResolvable, RoleResolvable, ChannelResolvable, or Permission Constant',
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
let resolvedId = permissionId;
|
|
376
|
+
if (typeof permissionId !== 'string') {
|
|
377
|
+
resolvedId = this.client.users.resolveId(permissionId);
|
|
378
|
+
if (!resolvedId) {
|
|
379
|
+
if (!this.guild) throw new DiscordjsError(ErrorCodes.GuildUncachedEntityResolve, 'roles');
|
|
380
|
+
resolvedId = this.guild.roles.resolveId(permissionId);
|
|
381
|
+
}
|
|
382
|
+
if (!resolvedId) {
|
|
383
|
+
resolvedId = this.guild.channels.resolveId(permissionId);
|
|
384
|
+
}
|
|
385
|
+
if (!resolvedId) {
|
|
386
|
+
throw new DiscordjsTypeError(
|
|
387
|
+
ErrorCodes.InvalidType,
|
|
388
|
+
'permissionId',
|
|
389
|
+
'UserResolvable, RoleResolvable, ChannelResolvable, or Permission Constant',
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
let existing = [];
|
|
395
|
+
try {
|
|
396
|
+
existing = await this.fetch({ guild: guildId, command: commandId });
|
|
397
|
+
} catch (error) {
|
|
398
|
+
if (error.code !== RESTJSONErrorCodes.UnknownApplicationCommandPermissions) throw error;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// Check permission type if provided for the single edge case where a channel id is the same as the everyone role id
|
|
402
|
+
return existing.some(perm => perm.id === resolvedId && (permissionType ?? perm.type) === perm.type);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
_validateOptions(guild, command) {
|
|
406
|
+
const guildId = this.guildId ?? this.client.guilds.resolveId(guild);
|
|
407
|
+
if (!guildId) throw new DiscordjsError(ErrorCodes.GlobalCommandPermissions);
|
|
408
|
+
let commandId = this.commandId;
|
|
409
|
+
if (command && !commandId) {
|
|
410
|
+
commandId = this.manager.resolveId?.(command);
|
|
411
|
+
if (!commandId && this.guild) {
|
|
412
|
+
commandId = this.guild.commands.resolveId(command);
|
|
413
|
+
}
|
|
414
|
+
commandId ??= this.client.application?.commands.resolveId(command);
|
|
415
|
+
if (!commandId) {
|
|
416
|
+
throw new DiscordjsTypeError(ErrorCodes.InvalidType, 'command', 'ApplicationCommandResolvable', true);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return { guildId, commandId };
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
module.exports = ApplicationCommandPermissionsManager;
|
|
424
|
+
|
|
425
|
+
/* eslint-disable max-len */
|
|
426
|
+
/**
|
|
427
|
+
* @external APIApplicationCommandPermissions
|
|
428
|
+
* @see {@link https://discord.com/developers/docs/interactions/application-commands#application-command-permissions-object-application-command-permissions-structure}
|
|
429
|
+
*/
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* Data that resolves to an id used for an application command permission
|
|
433
|
+
* @typedef {UserResolvable|RoleResolvable|GuildChannelResolvable|RolePermissionConstant|ChannelPermissionConstant} ApplicationCommandPermissionIdResolvable
|
|
434
|
+
*/
|