@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
1 lines • 5.81 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/preconditions/UserPermissions.ts"],"names":["ClientPrecondition"],"mappings":";;;;;;;AAeO,IAAM,iBAAA,GAAN,MAAM,iBAAA,SAAyB,oBAAqB,CAAA;AAAA,EAApD,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA;AACN,IAAA,IAAA,CAAiB,uBAAuB,IAAI,mBAAA;AAAA,MAC3C,CAAC,IAAI,mBAAoB,CAAA;AAAA,QACxB,mBAAoB,CAAA,YAAA;AAAA,QACpB,mBAAoB,CAAA,WAAA;AAAA,QACpB,mBAAoB,CAAA,UAAA;AAAA,QACpB,mBAAoB,CAAA,kBAAA;AAAA,QACpB,mBAAoB,CAAA,YAAA;AAAA,QACpB,mBAAoB,CAAA,iBAAA;AAAA,QACpB,mBAAoB,CAAA,WAAA;AAAA,QACpB,mBAAoB,CAAA,mBAAA;AAAA,QACpB,mBAAoB,CAAA;AAAA,OACpB,CAAE,CAAA,QAAA,GAAW,mBAAoB,CAAA;AAAA,MACjC,MAAO,EAAA;AAAA;AAAA,EAEF,UAAA,CAAW,OAAkB,EAAA,QAAA,EAAmB,OAAqE,EAAA;AAC3H,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,WAAe,IAAA,IAAI,mBAAoB,EAAA;AAChE,IAAA,MAAM,UAAU,OAAQ,CAAA,OAAA;AACxB,IAAM,MAAA,WAAA,GAAc,QAAQ,KAAQ,GAAA,OAAA,CAAQ,eAAe,OAAQ,CAAA,MAAM,IAAI,IAAK,CAAA,oBAAA;AAElF,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,QAAU,EAAA,WAAA,EAAa,SAAS,CAAA;AAAA;AACvD,EAEO,YAAA,CACN,WACA,EAAA,QAAA,EACA,OAC8B,EAAA;AAC9B,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,WAAe,IAAA,IAAI,mBAAoB,EAAA;AAChE,IAAA,MAAM,WAAc,GAAA,WAAA,CAAY,OAAU,GAAA,WAAA,CAAY,oBAAoB,IAAK,CAAA,oBAAA;AAE/E,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,QAAU,EAAA,WAAA,EAAa,YAAY,CAAA;AAAA;AAC1D,EAEO,cAAA,CACN,WACA,EAAA,QAAA,EACA,OAC8B,EAAA;AAC9B,IAAA,MAAM,QAAW,GAAA,OAAA,CAAQ,WAAe,IAAA,IAAI,mBAAoB,EAAA;AAChE,IAAA,MAAM,WAAc,GAAA,WAAA,CAAY,OAAU,GAAA,WAAA,CAAY,oBAAoB,IAAK,CAAA,oBAAA;AAE/E,IAAA,OAAO,IAAK,CAAA,SAAA,CAAU,QAAU,EAAA,WAAA,EAAa,cAAc,CAAA;AAAA;AAC5D,EAEQ,SAAA,CACP,mBACA,EAAA,oBAAA,EACA,WAC8B,EAAA;AAC9B,IAAA,IAAI,CAAC,oBAAsB,EAAA;AAC1B,MAAA,OAAO,KAAK,KAAM,CAAA;AAAA,QACjB,YAAY,WAAY,CAAA,wCAAA;AAAA,QACxB,OAAA,EAAS,6DAA6D,WAAW,CAAA,4BAAA;AAAA,OACjF,CAAA;AAAA;AAGF,IAAM,MAAA,OAAA,GAAU,oBAAqB,CAAA,OAAA,CAAQ,mBAAmB,CAAA;AAChE,IAAA,OAAO,QAAQ,MAAW,KAAA,CAAA,GACvB,KAAK,EAAG,EAAA,GACR,KAAK,KAAM,CAAA;AAAA,MACX,YAAY,WAAY,CAAA,2BAAA;AAAA,MACxB,OAAS,EAAA,CAAA,+DAAA,EAAkE,OACzE,CAAA,GAAA,CAAI,CAAC,IAAA,KAASA,kBAAmB,CAAA,mBAAA,CAAoB,IAAI,CAAC,CAC1D,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,MACZ,OAAA,EAAS,EAAE,OAAQ;AAAA,KACnB,CAAA;AAAA;AAEL,CAAA;AApE2D,MAAA,CAAA,iBAAA,EAAA,kBAAA,CAAA;AAApD,IAAM,gBAAN,GAAA;AAsEP,KAAK,SAAA,CAAU,OAAO,SAAU,CAAA;AAAA,EAC/B,IAAM,EAAA,iBAAA;AAAA,EACN,KAAO,EAAA,gBAAA;AAAA,EACP,KAAO,EAAA;AACR,CAAC,CAAA","file":"UserPermissions.mjs","sourcesContent":["import { container } from '@sapphire/pieces';\nimport {\n\tChatInputCommandInteraction,\n\tContextMenuCommandInteraction,\n\tPermissionFlagsBits,\n\tPermissionsBitField,\n\ttype Message,\n\ttype NewsChannel,\n\ttype TextChannel\n} from 'discord.js';\nimport { Identifiers } from '../lib/errors/Identifiers';\nimport type { Command } from '../lib/structures/Command';\nimport { AllFlowsPrecondition } from '../lib/structures/Precondition';\nimport { CorePrecondition as ClientPrecondition, type PermissionPreconditionContext } from './ClientPermissions';\n\nexport class CorePrecondition extends AllFlowsPrecondition {\n\tprivate readonly dmChannelPermissions = new PermissionsBitField(\n\t\t~new PermissionsBitField([\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\tPermissionFlagsBits.UseExternalStickers,\n\t\t\tPermissionFlagsBits.MentionEveryone\n\t\t]).bitfield & PermissionsBitField.All\n\t).freeze();\n\n\tpublic messageRun(message: Message, _command: Command, context: PermissionPreconditionContext): AllFlowsPrecondition.Result {\n\t\tconst required = context.permissions ?? new PermissionsBitField();\n\t\tconst channel = message.channel as TextChannel | NewsChannel;\n\t\tconst permissions = message.guild ? channel.permissionsFor(message.author) : this.dmChannelPermissions;\n\n\t\treturn this.sharedRun(required, permissions, 'message');\n\t}\n\n\tpublic chatInputRun(\n\t\tinteraction: ChatInputCommandInteraction,\n\t\t_command: Command,\n\t\tcontext: PermissionPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst required = context.permissions ?? new PermissionsBitField();\n\t\tconst permissions = interaction.guildId ? interaction.memberPermissions : this.dmChannelPermissions;\n\n\t\treturn this.sharedRun(required, permissions, 'chat input');\n\t}\n\n\tpublic contextMenuRun(\n\t\tinteraction: ContextMenuCommandInteraction,\n\t\t_command: Command,\n\t\tcontext: PermissionPreconditionContext\n\t): AllFlowsPrecondition.Result {\n\t\tconst required = context.permissions ?? new PermissionsBitField();\n\t\tconst permissions = interaction.guildId ? interaction.memberPermissions : this.dmChannelPermissions;\n\n\t\treturn this.sharedRun(required, permissions, 'context menu');\n\t}\n\n\tprivate sharedRun(\n\t\trequiredPermissions: PermissionsBitField,\n\t\tavailablePermissions: PermissionsBitField | null,\n\t\tcommandType: string\n\t): AllFlowsPrecondition.Result {\n\t\tif (!availablePermissions) {\n\t\t\treturn this.error({\n\t\t\t\tidentifier: Identifiers.PreconditionUserPermissionsNoPermissions,\n\t\t\t\tmessage: `I was unable to resolve the end-user's 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.PreconditionUserPermissions,\n\t\t\t\t\tmessage: `You are missing the following permissions to run this command: ${missing\n\t\t\t\t\t\t.map((perm) => ClientPrecondition.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\nvoid container.stores.loadPiece({\n\tname: 'UserPermissions',\n\tpiece: CorePrecondition,\n\tstore: 'preconditions'\n});\n"]}