UNPKG

@sapphire/framework

Version:

Discord bot framework built for advanced and amazing bots.

154 lines (151 loc) • 6.42 kB
'use strict'; var pieces = require('@sapphire/pieces'); var utilities = require('@sapphire/utilities'); var discord_js = require('discord.js'); var Identifiers_cjs = require('../lib/errors/Identifiers.cjs'); var Precondition_cjs = require('../lib/structures/Precondition.cjs'); var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var _CorePrecondition = class _CorePrecondition extends Precondition_cjs.AllFlowsPrecondition { constructor() { super(...arguments); this.dmChannelPermissions = new discord_js.PermissionsBitField( ~new discord_js.PermissionsBitField([ // discord_js.PermissionFlagsBits.AddReactions, discord_js.PermissionFlagsBits.AttachFiles, discord_js.PermissionFlagsBits.EmbedLinks, discord_js.PermissionFlagsBits.ReadMessageHistory, discord_js.PermissionFlagsBits.SendMessages, discord_js.PermissionFlagsBits.UseExternalEmojis, discord_js.PermissionFlagsBits.ViewChannel ]).bitfield & discord_js.PermissionsBitField.All ).freeze(); } async messageRun(message, _, context) { const required = context.permissions ?? new discord_js.PermissionsBitField(); const { channel } = message; if (!message.client.id) { return this.error({ identifier: Identifiers_cjs.Identifiers.PreconditionClientPermissionsNoClient, message: "There was no client to validate the permissions for." }); } const permissions = await this.getPermissionsForChannel(channel, message); return this.sharedRun(required, permissions, "message"); } async chatInputRun(interaction, _, context) { const required = context.permissions ?? new discord_js.PermissionsBitField(); const availablePermissions = await this.getAvailablePermissions(interaction); return this.sharedRun(required, availablePermissions, "chat input"); } async contextMenuRun(interaction, _, context) { const required = context.permissions ?? new discord_js.PermissionsBitField(); const availablePermissions = await this.getAvailablePermissions(interaction); return this.sharedRun(required, availablePermissions, "context menu"); } async getPermissionsForChannel(channel, messageOrInteraction) { let permissions = this.dmChannelPermissions; if (messageOrInteraction.inGuild() && !channel.isDMBased()) { if (utilities.isNullish(messageOrInteraction.applicationId)) { const me = await messageOrInteraction.guild?.members.fetchMe(); if (me) { permissions = channel.permissionsFor(me); } } else { permissions = channel.permissionsFor(messageOrInteraction.applicationId); if (utilities.isNullish(permissions)) { const me = await messageOrInteraction.guild?.members.fetchMe(); if (me) { permissions = channel.permissionsFor(me); } } } } return permissions; } sharedRun(requiredPermissions, availablePermissions, commandType) { if (!availablePermissions) { return this.error({ identifier: Identifiers_cjs.Identifiers.PreconditionClientPermissionsNoPermissions, message: `I was unable to resolve my permissions in the ${commandType} command invocation channel.` }); } const missing = availablePermissions.missing(requiredPermissions); return missing.length === 0 ? this.ok() : this.error({ identifier: Identifiers_cjs.Identifiers.PreconditionClientPermissions, message: `I am missing the following permissions to run this command: ${missing.map((perm) => _CorePrecondition.readablePermissions[perm]).join(", ")}`, context: { missing } }); } async getAvailablePermissions(interaction) { if (interaction.channel) { if (interaction.channel.isDMBased()) return this.dmChannelPermissions; const channel = await this.fetchChannelFromInteraction(interaction); return this.getPermissionsForChannel(channel, interaction); } return interaction.appPermissions; } }; __name(_CorePrecondition, "CorePrecondition"); _CorePrecondition.readablePermissions = { AddReactions: "Add Reactions", Administrator: "Administrator", AttachFiles: "Attach Files", BanMembers: "Ban Members", ChangeNickname: "Change Nickname", Connect: "Connect", CreateEvents: "Create Events", CreateGuildExpressions: "Create Expressions", CreateInstantInvite: "Create Instant Invite", CreatePrivateThreads: "Create Private Threads", CreatePublicThreads: "Create Public Threads", DeafenMembers: "Deafen Members", EmbedLinks: "Embed Links", KickMembers: "Kick Members", ManageChannels: "Manage Channels", ManageEmojisAndStickers: "Manage Emojis and Stickers", ManageEvents: "Manage Events", ManageGuild: "Manage Server", ManageGuildExpressions: "Manage Guild Expressions", ManageMessages: "Manage Messages", ManageNicknames: "Manage Nicknames", ManageRoles: "Manage Roles", ManageThreads: "Manage Threads", ManageWebhooks: "Manage Webhooks", MentionEveryone: "Mention Everyone", ModerateMembers: "Moderate Members", MoveMembers: "Move Members", MuteMembers: "Mute Members", PrioritySpeaker: "Priority Speaker", ReadMessageHistory: "Read Message History", RequestToSpeak: "Request to Speak", SendMessages: "Send Messages", SendMessagesInThreads: "Send Messages in Threads", SendPolls: "Create Polls", SendTTSMessages: "Send TTS Messages", SendVoiceMessages: "Send Voice Messages", Speak: "Speak", Stream: "Stream", UseApplicationCommands: "Use Application Commands", UseEmbeddedActivities: "Start Activities", UseExternalApps: "Use External Apps", UseExternalEmojis: "Use External Emojis", UseExternalSounds: "Use External Sounds", UseExternalStickers: "Use External Stickers", UseSoundboard: "Use Soundboard", UseVAD: "Use Voice Activity", ViewAuditLog: "View Audit Log", ViewChannel: "Read Messages", ViewCreatorMonetizationAnalytics: "View Creator Monetization Analytics", ViewGuildInsights: "View Guild Insights" }; var CorePrecondition = _CorePrecondition; void pieces.container.stores.loadPiece({ name: "ClientPermissions", piece: CorePrecondition, store: "preconditions" }); exports.CorePrecondition = CorePrecondition; //# sourceMappingURL=ClientPermissions.cjs.map //# sourceMappingURL=ClientPermissions.cjs.map