@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
60 lines (58 loc) • 2.8 kB
JavaScript
import { Identifiers } from "../lib/errors/Identifiers.mjs";
import { AllFlowsPrecondition } from "../lib/structures/Precondition.mjs";
import { CorePrecondition as CorePrecondition$1 } from "./ClientPermissions.mjs";
import { container } from "@sapphire/pieces";
import { ChatInputCommandInteraction, ContextMenuCommandInteraction, PermissionFlagsBits, PermissionsBitField } from "discord.js";
//#region src/preconditions/UserPermissions.ts
var CorePrecondition = class extends AllFlowsPrecondition {
constructor(..._args) {
super(..._args);
this.dmChannelPermissions = new PermissionsBitField(~new PermissionsBitField([
PermissionFlagsBits.AddReactions,
PermissionFlagsBits.AttachFiles,
PermissionFlagsBits.EmbedLinks,
PermissionFlagsBits.ReadMessageHistory,
PermissionFlagsBits.SendMessages,
PermissionFlagsBits.UseExternalEmojis,
PermissionFlagsBits.ViewChannel,
PermissionFlagsBits.UseExternalStickers,
PermissionFlagsBits.MentionEveryone
]).bitfield & PermissionsBitField.All).freeze();
}
messageRun(message, _command, context) {
const required = context.permissions ?? new PermissionsBitField();
const channel = message.channel;
const permissions = message.guild ? channel.permissionsFor(message.author) : this.dmChannelPermissions;
return this.sharedRun(required, permissions, "message");
}
chatInputRun(interaction, _command, context) {
const required = context.permissions ?? new PermissionsBitField();
const permissions = interaction.guildId ? interaction.memberPermissions : this.dmChannelPermissions;
return this.sharedRun(required, permissions, "chat input");
}
contextMenuRun(interaction, _command, context) {
const required = context.permissions ?? new PermissionsBitField();
const permissions = interaction.guildId ? interaction.memberPermissions : this.dmChannelPermissions;
return this.sharedRun(required, permissions, "context menu");
}
sharedRun(requiredPermissions, availablePermissions, commandType) {
if (!availablePermissions) return this.error({
identifier: Identifiers.PreconditionUserPermissionsNoPermissions,
message: `I was unable to resolve the end-user's permissions in the ${commandType} command invocation channel.`
});
const missing = availablePermissions.missing(requiredPermissions);
return missing.length === 0 ? this.ok() : this.error({
identifier: Identifiers.PreconditionUserPermissions,
message: `You are missing the following permissions to run this command: ${missing.map((perm) => CorePrecondition$1.readablePermissions[perm]).join(", ")}`,
context: { missing }
});
}
};
container.stores.loadPiece({
name: "UserPermissions",
piece: CorePrecondition,
store: "preconditions"
});
//#endregion
export { CorePrecondition };
//# sourceMappingURL=UserPermissions.mjs.map