UNPKG

@getsolara/solara.js

Version:

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

35 lines 1.99 kB
const { PermissionsBitField } = require('discord.js'); module.exports = { name: "$hasPermission", description: "Checks if a member has permissions. Args: permission1;[permission2...];[memberID=@me]", takesBrackets: true, execute: async (context, args) => { if (args.length === 0) return "[Error: $hasPermission requires at least one permission name]"; let memberId = null; let permissionsToCheck = []; const lastArg = args[args.length - 1]; if (/^\d{17,19}$/.test(lastArg) || lastArg === '@me') { memberId = lastArg === '@me' ? (context.member?.id || context.user?.id) : lastArg; permissionsToCheck = args.slice(0, -1); } else { memberId = context.member?.id || context.user?.id; permissionsToCheck = args; } if (!memberId) return "[Error: Cannot determine target member for permission check]"; if (!context.guild) return "[Error: $hasPermission requires a guild context]"; let targetMember = context.member; if (memberId !== context.member?.id) { try { targetMember = await context.guild.members.fetch(memberId); } catch (e) { return `[Error: Could not find member with ID ${memberId} in this guild]`; } } if (!targetMember) return "[Error: Could not find member to check permissions]"; const perms = context.channel ? targetMember.permissionsIn(context.channel) : targetMember.permissions; if (!perms) return "[Error: Could not evaluate permissions]"; try { const permissionFlags = permissionsToCheck.map(p => { if (PermissionsBitField.Flags[p]) return PermissionsBitField.Flags[p]; throw new Error(`Invalid permission name: ${p}`); }); return perms.has(permissionFlags).toString(); } catch (e) { return `[Error: Permission Check Failed - ${e.message}]`; } } };