@sapphire/framework
Version:
Discord bot framework built for advanced and amazing bots.
154 lines (151 loc) • 6.42 kB
JavaScript
;
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