@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
1 lines • 9.71 kB
Source Map (JSON)
{"version":3,"file":"ClientPermissions.cjs","names":["AllFlowsPrecondition","PermissionsBitField","PermissionFlagsBits","Identifiers","permissions: PermissionsBitField | null","container"],"sources":["../../../src/preconditions/ClientPermissions.ts"],"sourcesContent":["import { container } from '@sapphire/pieces';\nimport { isNullish } from '@sapphire/utilities';\nimport {\n\tBaseInteraction,\n\tChatInputCommandInteraction,\n\tContextMenuCommandInteraction,\n\tPermissionFlagsBits,\n\tPermissionsBitField,\n\ttype Message,\n\ttype PermissionsString,\n\ttype TextBasedChannel\n} from 'discord.js';\nimport { Identifiers } from '../lib/errors/Identifiers';\nimport type { Command } from '../lib/structures/Command';\nimport { AllFlowsPrecondition } from '../lib/structures/Precondition';\n\nexport interface PermissionPreconditionContext extends AllFlowsPrecondition.Context {\n\tpermissions?: PermissionsBitField;\n}\n\nexport class CorePrecondition extends AllFlowsPrecondition {\n\tprivate readonly dmChannelPermissions = new PermissionsBitField(\n\t\t~new PermissionsBitField([\n\t\t\t//\n\t\t\tPermissionFlagsBits.AddReactions,\n\t\t\tPermissionFlagsBits.AttachFiles,\n\t\t\tPermissionFlagsBits.EmbedLinks,\n\t\t\tPermissionFlagsBits.ReadMessageHistory,\n\t\t\tPermissionFlagsBits.SendMessages,\n\t\t\tPermissionFlagsBits.UseExternalEmojis,\n\t\t\tPermissionFlagsBits.ViewChannel\n\t\t]).bitfield & PermissionsBitField.All\n\t).freeze();\n\n\tpublic async messageRun(message: Message, _: Command, context: PermissionPreconditionContext): AllFlowsPrecondition.AsyncResult {\n\t\tconst required = context.permissions ?? new PermissionsBitField();\n\t\tconst { channel } = message;\n\n\t\tif (!message.client.id) {\n\t\t\treturn this.error({\n\t\t\t\tidentifier: Identifiers.PreconditionClientPermissionsNoClient,\n\t\t\t\tmessage: 'There was no client to validate the permissions for.'\n\t\t\t});\n\t\t}\n\n\t\tconst permissions = await this.getPermissionsForChannel(channel, message);\n\n\t\treturn this.sharedRun(required, permissions, 'message');\n\t}\n\n\tpublic async chatInputRun(\n\t\tinteraction: ChatInputCommandInteraction,\n\t\t_: Command,\n\t\tcontext: PermissionPreconditionContext\n\t): AllFlowsPrecondition.AsyncResult {\n\t\tconst required = context.permissions ?? new PermissionsBitField();\n\n\t\tconst availablePermissions = await this.getAvailablePermissions(interaction);\n\n\t\treturn this.sharedRun(required, availablePermissions, 'chat input');\n\t}\n\n\tpublic async contextMenuRun(\n\t\tinteraction: ContextMenuCommandInteraction,\n\t\t_: Command,\n\t\tcontext: PermissionPreconditionContext\n\t): AllFlowsPrecondition.AsyncResult {\n\t\tconst required = context.permissions ?? new PermissionsBitField();\n\n\t\tconst availablePermissions = await this.getAvailablePermissions(interaction);\n\n\t\treturn this.sharedRun(required, availablePermissions, 'context menu');\n\t}\n\n\tprivate async getPermissionsForChannel(channel: TextBasedChannel, messageOrInteraction: Message | BaseInteraction) {\n\t\tlet permissions: PermissionsBitField | null = this.dmChannelPermissions;\n\n\t\tif (messageOrInteraction.inGuild() && !channel.isDMBased()) {\n\t\t\tif (isNullish(messageOrInteraction.applicationId)) {\n\t\t\t\tconst me = await messageOrInteraction.guild?.members.fetchMe();\n\t\t\t\tif (me) {\n\t\t\t\t\tpermissions = channel.permissionsFor(me);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpermissions = channel.permissionsFor(messageOrInteraction.applicationId);\n\t\t\t\tif (isNullish(permissions)) {\n\t\t\t\t\tconst me = await messageOrInteraction.guild?.members.fetchMe();\n\t\t\t\t\tif (me) {\n\t\t\t\t\t\tpermissions = channel.permissionsFor(me);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn permissions;\n\t}\n\n\tprivate sharedRun(requiredPermissions: PermissionsBitField, availablePermissions: PermissionsBitField | null, commandType: string) {\n\t\tif (!availablePermissions) {\n\t\t\treturn this.error({\n\t\t\t\tidentifier: Identifiers.PreconditionClientPermissionsNoPermissions,\n\t\t\t\tmessage: `I was unable to resolve my permissions in the ${commandType} command invocation channel.`\n\t\t\t});\n\t\t}\n\n\t\tconst missing = availablePermissions.missing(requiredPermissions);\n\t\treturn missing.length === 0\n\t\t\t? this.ok()\n\t\t\t: this.error({\n\t\t\t\t\tidentifier: Identifiers.PreconditionClientPermissions,\n\t\t\t\t\tmessage: `I am missing the following permissions to run this command: ${missing\n\t\t\t\t\t\t.map((perm) => CorePrecondition.readablePermissions[perm])\n\t\t\t\t\t\t.join(', ')}`,\n\t\t\t\t\tcontext: { missing }\n\t\t\t\t});\n\t}\n\n\tprivate async getAvailablePermissions(interaction: ChatInputCommandInteraction | ContextMenuCommandInteraction) {\n\t\tif (interaction.channel) {\n\t\t\tif (interaction.channel.isDMBased()) return this.dmChannelPermissions;\n\n\t\t\tconst channel = await this.fetchChannelFromInteraction(interaction);\n\t\t\treturn this.getPermissionsForChannel(channel, interaction);\n\t\t}\n\n\t\treturn interaction.appPermissions;\n\t}\n\n\tpublic static readonly readablePermissions: Record<PermissionsString, string> = {\n\t\tAddReactions: 'Add Reactions',\n\t\tAdministrator: 'Administrator',\n\t\tAttachFiles: 'Attach Files',\n\t\tBanMembers: 'Ban Members',\n\t\tChangeNickname: 'Change Nickname',\n\t\tConnect: 'Connect',\n\t\tCreateEvents: 'Create Events',\n\t\tCreateGuildExpressions: 'Create Expressions',\n\t\tCreateInstantInvite: 'Create Instant Invite',\n\t\tCreatePrivateThreads: 'Create Private Threads',\n\t\tCreatePublicThreads: 'Create Public Threads',\n\t\tDeafenMembers: 'Deafen Members',\n\t\tEmbedLinks: 'Embed Links',\n\t\tKickMembers: 'Kick Members',\n\t\tManageChannels: 'Manage Channels',\n\t\tManageEmojisAndStickers: 'Manage Emojis and Stickers',\n\t\tManageEvents: 'Manage Events',\n\t\tManageGuild: 'Manage Server',\n\t\tManageGuildExpressions: 'Manage Guild Expressions',\n\t\tManageMessages: 'Manage Messages',\n\t\tManageNicknames: 'Manage Nicknames',\n\t\tManageRoles: 'Manage Roles',\n\t\tManageThreads: 'Manage Threads',\n\t\tManageWebhooks: 'Manage Webhooks',\n\t\tMentionEveryone: 'Mention Everyone',\n\t\tModerateMembers: 'Moderate Members',\n\t\tMoveMembers: 'Move Members',\n\t\tMuteMembers: 'Mute Members',\n\t\tPinMessages: 'Pin Messages',\n\t\tPrioritySpeaker: 'Priority Speaker',\n\t\tReadMessageHistory: 'Read Message History',\n\t\tRequestToSpeak: 'Request to Speak',\n\t\tSendMessages: 'Send Messages',\n\t\tSendMessagesInThreads: 'Send Messages in Threads',\n\t\tSendPolls: 'Create Polls',\n\t\tSendTTSMessages: 'Send TTS Messages',\n\t\tSendVoiceMessages: 'Send Voice Messages',\n\t\tSpeak: 'Speak',\n\t\tStream: 'Stream',\n\t\tUseApplicationCommands: 'Use Application Commands',\n\t\tUseEmbeddedActivities: 'Start Activities',\n\t\tUseExternalApps: 'Use External Apps',\n\t\tUseExternalEmojis: 'Use External Emojis',\n\t\tUseExternalSounds: 'Use External Sounds',\n\t\tUseExternalStickers: 'Use External Stickers',\n\t\tUseSoundboard: 'Use Soundboard',\n\t\tUseVAD: 'Use Voice Activity',\n\t\tViewAuditLog: 'View Audit Log',\n\t\tViewChannel: 'Read Messages',\n\t\tViewCreatorMonetizationAnalytics: 'View Creator Monetization Analytics',\n\t\tViewGuildInsights: 'View Guild Insights'\n\t};\n}\n\nvoid container.stores.loadPiece({\n\tname: 'ClientPermissions',\n\tpiece: CorePrecondition,\n\tstore: 'preconditions'\n});\n"],"mappings":";;;;;;;;AAoBA,IAAa,mBAAb,MAAa,yBAAyBA,yDAAqB;;;OACzC,uBAAuB,IAAIC,+BAC3C,CAAC,IAAIA,+BAAoB;GAExBC,+BAAoB;GACpBA,+BAAoB;GACpBA,+BAAoB;GACpBA,+BAAoB;GACpBA,+BAAoB;GACpBA,+BAAoB;GACpBA,+BAAoB;GACpB,CAAC,CAAC,WAAWD,+BAAoB,IAClC,CAAC,QAAQ;;CAEV,MAAa,WAAW,SAAkB,GAAY,SAA0E;EAC/H,MAAM,WAAW,QAAQ,eAAe,IAAIA,gCAAqB;EACjE,MAAM,EAAE,YAAY;AAEpB,MAAI,CAAC,QAAQ,OAAO,GACnB,QAAO,KAAK,MAAM;GACjB,YAAYE,2CAAY;GACxB,SAAS;GACT,CAAC;EAGH,MAAM,cAAc,MAAM,KAAK,yBAAyB,SAAS,QAAQ;AAEzE,SAAO,KAAK,UAAU,UAAU,aAAa,UAAU;;CAGxD,MAAa,aACZ,aACA,GACA,SACmC;EACnC,MAAM,WAAW,QAAQ,eAAe,IAAIF,gCAAqB;EAEjE,MAAM,uBAAuB,MAAM,KAAK,wBAAwB,YAAY;AAE5E,SAAO,KAAK,UAAU,UAAU,sBAAsB,aAAa;;CAGpE,MAAa,eACZ,aACA,GACA,SACmC;EACnC,MAAM,WAAW,QAAQ,eAAe,IAAIA,gCAAqB;EAEjE,MAAM,uBAAuB,MAAM,KAAK,wBAAwB,YAAY;AAE5E,SAAO,KAAK,UAAU,UAAU,sBAAsB,eAAe;;CAGtE,MAAc,yBAAyB,SAA2B,sBAAiD;EAClH,IAAIG,cAA0C,KAAK;AAEnD,MAAI,qBAAqB,SAAS,IAAI,CAAC,QAAQ,WAAW,CACzD,yCAAc,qBAAqB,cAAc,EAAE;GAClD,MAAM,KAAK,MAAM,qBAAqB,OAAO,QAAQ,SAAS;AAC9D,OAAI,GACH,eAAc,QAAQ,eAAe,GAAG;SAEnC;AACN,iBAAc,QAAQ,eAAe,qBAAqB,cAAc;AACxE,2CAAc,YAAY,EAAE;IAC3B,MAAM,KAAK,MAAM,qBAAqB,OAAO,QAAQ,SAAS;AAC9D,QAAI,GACH,eAAc,QAAQ,eAAe,GAAG;;;AAM5C,SAAO;;CAGR,AAAQ,UAAU,qBAA0C,sBAAkD,aAAqB;AAClI,MAAI,CAAC,qBACJ,QAAO,KAAK,MAAM;GACjB,YAAYD,2CAAY;GACxB,SAAS,iDAAiD,YAAY;GACtE,CAAC;EAGH,MAAM,UAAU,qBAAqB,QAAQ,oBAAoB;AACjE,SAAO,QAAQ,WAAW,IACvB,KAAK,IAAI,GACT,KAAK,MAAM;GACX,YAAYA,2CAAY;GACxB,SAAS,+DAA+D,QACtE,KAAK,SAAS,iBAAiB,oBAAoB,MAAM,CACzD,KAAK,KAAK;GACZ,SAAS,EAAE,SAAS;GACpB,CAAC;;CAGL,MAAc,wBAAwB,aAA0E;AAC/G,MAAI,YAAY,SAAS;AACxB,OAAI,YAAY,QAAQ,WAAW,CAAE,QAAO,KAAK;GAEjD,MAAM,UAAU,MAAM,KAAK,4BAA4B,YAAY;AACnE,UAAO,KAAK,yBAAyB,SAAS,YAAY;;AAG3D,SAAO,YAAY;;;iBAGG,sBAAyD;CAC/E,cAAc;CACd,eAAe;CACf,aAAa;CACb,YAAY;CACZ,gBAAgB;CAChB,SAAS;CACT,cAAc;CACd,wBAAwB;CACxB,qBAAqB;CACrB,sBAAsB;CACtB,qBAAqB;CACrB,eAAe;CACf,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB,yBAAyB;CACzB,cAAc;CACd,aAAa;CACb,wBAAwB;CACxB,gBAAgB;CAChB,iBAAiB;CACjB,aAAa;CACb,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CACjB,iBAAiB;CACjB,aAAa;CACb,aAAa;CACb,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,gBAAgB;CAChB,cAAc;CACd,uBAAuB;CACvB,WAAW;CACX,iBAAiB;CACjB,mBAAmB;CACnB,OAAO;CACP,QAAQ;CACR,wBAAwB;CACxB,uBAAuB;CACvB,iBAAiB;CACjB,mBAAmB;CACnB,mBAAmB;CACnB,qBAAqB;CACrB,eAAe;CACf,QAAQ;CACR,cAAc;CACd,aAAa;CACb,kCAAkC;CAClC,mBAAmB;CACnB;AAGGE,4BAAU,OAAO,UAAU;CAC/B,MAAM;CACN,OAAO;CACP,OAAO;CACP,CAAC"}