UNPKG

@getsolara/solara.js

Version:

A lightweight and modular Discord bot framework built on discord.js v14, with truly optional feature packages.

28 lines 1.55 kB
const { PermissionsBitField } = require('discord.js'); const StopExecutionError = require('../errors/StopExecutionError'); module.exports = { name: "$onlyPerms", description: "Restricts command usage to users with specific permissions. Args: perm1;[perm2...];[errorMsg]", takesBrackets: true, execute: async (context, args) => { if (args.length === 0) throw new StopExecutionError("❌ Command requires permissions, but none were specified."); if (!context.member) throw new StopExecutionError("❌ Cannot check permissions outside of a server."); let errorMsg = `❌ You lack the required permissions to use this command.`; let permsToCheck = [...args]; const lastArg = permsToCheck[permsToCheck.length - 1]; if (permsToCheck.length > 1 && !PermissionsBitField.Flags[lastArg]) { errorMsg = permsToCheck.pop(); } try { const permissionFlags = permsToCheck.map(p => { if (PermissionsBitField.Flags[p]) return PermissionsBitField.Flags[p]; throw new Error(`Invalid permission: ${p}`); }); const memberPerms = context.channel ? context.member.permissionsIn(context.channel) : context.member.permissions; if (!memberPerms || !memberPerms.has(permissionFlags)) { throw new StopExecutionError(errorMsg); } } catch(e) { throw new StopExecutionError(`[Perm Check Error: ${e.message}]`); } return ""; } };