Archived
Custom permission function
This commit is contained in:
1 parent
f57c3b3f86
commit
a1ffd7c9d9
4 files changed
+23
-7
No files matched your search
+12
-4
@@ -1,5 +1,5 @@
|
||||
//IMPORTS
|
||||
import { Permissions, Message, MessageEmbed, CommandInteraction, GuildMember, ReplyMessageOptions } from "discord.js";
|
||||
import { Permissions, Message, MessageEmbed, CommandInteraction, GuildMember, ReplyMessageOptions, PermissionResolvable } from "discord.js";
|
||||
import { CommandBuilder, ParameterResolvable, PermissionCheckTypes } from "./types.js";
|
||||
import { OperationSuccess, PermissionsError } from "./errors.js";
|
||||
import { DefaultParameter, InputParameter, Parameter } from "./Parameter.js";
|
||||
@@ -12,7 +12,7 @@ export class Command {
|
||||
description: string;
|
||||
usage?: string;
|
||||
permissionCheck: PermissionCheckTypes;
|
||||
permissions?: Permissions;
|
||||
permissions?: Permissions | ((m?: Message | CommandInteraction) => boolean);
|
||||
guilds?: string[];
|
||||
visible: boolean;
|
||||
slash: boolean;
|
||||
@@ -50,7 +50,7 @@ export class Command {
|
||||
this.description = options.description || "No description";
|
||||
this.usage = options.usage || this.generateUsageFromArguments();
|
||||
this.permissionCheck = options.permissionCheck == "ALL" || options.permissionCheck == "ANY" ? options.permissionCheck : "ANY";
|
||||
this.permissions = options.permissions ? new Permissions(options.permissions) : undefined;
|
||||
this.permissions = options.permissions ? (options.permissions instanceof Function ? options.permissions : new Permissions(options.permissions)) : undefined;
|
||||
this.guilds = options.guilds;
|
||||
this.visible = options.visible !== undefined ? options.visible : true;
|
||||
this.slash = options.slash !== undefined ? options.slash : true;
|
||||
@@ -75,7 +75,15 @@ export class Command {
|
||||
return returnType === "object" ? cmdParams?.find((p) => p.name === query) || null : cmdParams?.find((p) => p.name === query)?.value || null;
|
||||
};
|
||||
const memberPermissions: Readonly<Permissions> = (interaction?.member?.permissions as Permissions) || new Permissions();
|
||||
if (!this.permissions || (this.permissionCheck == "ALL" ? memberPermissions.has(this.permissions, true) : memberPermissions.any(this.permissions, true))) {
|
||||
if (
|
||||
!this.permissions ||
|
||||
(this.permissions instanceof Function && this.permissions(interaction)) ||
|
||||
(!(this.permissions instanceof Function)
|
||||
? this.permissionCheck == "ALL"
|
||||
? memberPermissions.has(this.permissions as PermissionResolvable, true)
|
||||
: memberPermissions.any(this.permissions as PermissionResolvable, true)
|
||||
: false)
|
||||
) {
|
||||
if (interaction instanceof CommandInteraction) {
|
||||
await interaction.deferReply();
|
||||
}
|
||||
|
||||
+5
-1
@@ -30,13 +30,17 @@ export class HelpMessage extends Command {
|
||||
helpMsg.setTitle(`${cmd.name} ${cmd.visible ? "" : "[HIDDEN]"}`);
|
||||
helpMsg.setDescription(cmd.description);
|
||||
if (cmd.usage) helpMsg.addField("Usage:", `${cmdManager.prefix || "/"}${cmd.name} ${cmd.usage}`, false);
|
||||
if (cmd.permissions && cmd.permissions.toArray(false).length > 0) {
|
||||
if (cmd.permissions) {
|
||||
if (cmd.permissions instanceof Function) {
|
||||
helpMsg.addField("Permissions:", "Custom", false);
|
||||
} else if (cmd.permissions.toArray(false).length > 0) {
|
||||
let permList: string = "";
|
||||
cmd.permissions.toArray(false).map((p) => {
|
||||
permList += p + "\n";
|
||||
});
|
||||
helpMsg.addField("Permissions:", permList, false);
|
||||
}
|
||||
}
|
||||
if (cmd.aliases && cmd.aliases.length > 0) {
|
||||
let aList: string = "";
|
||||
cmd.aliases.map((a) => {
|
||||
|
||||
@@ -107,7 +107,11 @@ export class SystemMessageManager {
|
||||
embed.addField("Command name:", data.command.name, false);
|
||||
if (data.command.permissions) {
|
||||
let permList: string = "";
|
||||
data.command.permissions.toArray(false).map((p) => {
|
||||
data.command.permissions instanceof Function
|
||||
? (() => {
|
||||
permList = "Custom";
|
||||
})()
|
||||
: data.command.permissions.toArray(false).map((p) => {
|
||||
permList += p + "\n";
|
||||
});
|
||||
embed.addField("Required permissions:", permList, false);
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ export interface CommandBuilder {
|
||||
description?: string;
|
||||
usage?: string;
|
||||
permissionCheck?: PermissionCheckTypes;
|
||||
permissions?: PermissionResolvable;
|
||||
permissions?: PermissionResolvable | ((m?: Message | CommandInteraction) => boolean);
|
||||
guilds?: string[];
|
||||
visible?: boolean;
|
||||
slash?: boolean;
|
||||
|
||||
Reference in new issue
Block a user