@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
138 lines (136 loc) • 6.05 kB
JavaScript
;
const require_lib_errors_Identifiers = require('../lib/errors/Identifiers.cjs');
const require_lib_structures_Precondition = require('../lib/structures/Precondition.cjs');
let __sapphire_pieces = require("@sapphire/pieces");
let __sapphire_utilities = require("@sapphire/utilities");
let discord_js = require("discord.js");
//#region src/preconditions/ClientPermissions.ts
var CorePrecondition = class CorePrecondition extends require_lib_structures_Precondition.AllFlowsPrecondition {
constructor(..._args) {
super(..._args);
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: require_lib_errors_Identifiers.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 ((0, __sapphire_utilities.isNullish)(messageOrInteraction.applicationId)) {
const me = await messageOrInteraction.guild?.members.fetchMe();
if (me) permissions = channel.permissionsFor(me);
} else {
permissions = channel.permissionsFor(messageOrInteraction.applicationId);
if ((0, __sapphire_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: require_lib_errors_Identifiers.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: require_lib_errors_Identifiers.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;
}
};
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",
PinMessages: "Pin Messages",
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"
};
__sapphire_pieces.container.stores.loadPiece({
name: "ClientPermissions",
piece: CorePrecondition,
store: "preconditions"
});
//#endregion
exports.CorePrecondition = CorePrecondition;
//# sourceMappingURL=ClientPermissions.cjs.map