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
|
//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 { CommandBuilder, ParameterResolvable, PermissionCheckTypes } from "./types.js";
|
||||||
import { OperationSuccess, PermissionsError } from "./errors.js";
|
import { OperationSuccess, PermissionsError } from "./errors.js";
|
||||||
import { DefaultParameter, InputParameter, Parameter } from "./Parameter.js";
|
import { DefaultParameter, InputParameter, Parameter } from "./Parameter.js";
|
||||||
@@ -12,7 +12,7 @@ export class Command {
|
|||||||
description: string;
|
description: string;
|
||||||
usage?: string;
|
usage?: string;
|
||||||
permissionCheck: PermissionCheckTypes;
|
permissionCheck: PermissionCheckTypes;
|
||||||
permissions?: Permissions;
|
permissions?: Permissions | ((m?: Message | CommandInteraction) => boolean);
|
||||||
guilds?: string[];
|
guilds?: string[];
|
||||||
visible: boolean;
|
visible: boolean;
|
||||||
slash: boolean;
|
slash: boolean;
|
||||||
@@ -50,7 +50,7 @@ export class Command {
|
|||||||
this.description = options.description || "No description";
|
this.description = options.description || "No description";
|
||||||
this.usage = options.usage || this.generateUsageFromArguments();
|
this.usage = options.usage || this.generateUsageFromArguments();
|
||||||
this.permissionCheck = options.permissionCheck == "ALL" || options.permissionCheck == "ANY" ? options.permissionCheck : "ANY";
|
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.guilds = options.guilds;
|
||||||
this.visible = options.visible !== undefined ? options.visible : true;
|
this.visible = options.visible !== undefined ? options.visible : true;
|
||||||
this.slash = options.slash !== undefined ? options.slash : 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;
|
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();
|
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) {
|
if (interaction instanceof CommandInteraction) {
|
||||||
await interaction.deferReply();
|
await interaction.deferReply();
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -30,13 +30,17 @@ export class HelpMessage extends Command {
|
|||||||
helpMsg.setTitle(`${cmd.name} ${cmd.visible ? "" : "[HIDDEN]"}`);
|
helpMsg.setTitle(`${cmd.name} ${cmd.visible ? "" : "[HIDDEN]"}`);
|
||||||
helpMsg.setDescription(cmd.description);
|
helpMsg.setDescription(cmd.description);
|
||||||
if (cmd.usage) helpMsg.addField("Usage:", `${cmdManager.prefix || "/"}${cmd.name} ${cmd.usage}`, false);
|
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 = "";
|
let permList: string = "";
|
||||||
cmd.permissions.toArray(false).map((p) => {
|
cmd.permissions.toArray(false).map((p) => {
|
||||||
permList += p + "\n";
|
permList += p + "\n";
|
||||||
});
|
});
|
||||||
helpMsg.addField("Permissions:", permList, false);
|
helpMsg.addField("Permissions:", permList, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (cmd.aliases && cmd.aliases.length > 0) {
|
if (cmd.aliases && cmd.aliases.length > 0) {
|
||||||
let aList: string = "";
|
let aList: string = "";
|
||||||
cmd.aliases.map((a) => {
|
cmd.aliases.map((a) => {
|
||||||
|
|||||||
@@ -107,7 +107,11 @@ export class SystemMessageManager {
|
|||||||
embed.addField("Command name:", data.command.name, false);
|
embed.addField("Command name:", data.command.name, false);
|
||||||
if (data.command.permissions) {
|
if (data.command.permissions) {
|
||||||
let permList: string = "";
|
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";
|
permList += p + "\n";
|
||||||
});
|
});
|
||||||
embed.addField("Required permissions:", permList, false);
|
embed.addField("Required permissions:", permList, false);
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ export interface CommandBuilder {
|
|||||||
description?: string;
|
description?: string;
|
||||||
usage?: string;
|
usage?: string;
|
||||||
permissionCheck?: PermissionCheckTypes;
|
permissionCheck?: PermissionCheckTypes;
|
||||||
permissions?: PermissionResolvable;
|
permissions?: PermissionResolvable | ((m?: Message | CommandInteraction) => boolean);
|
||||||
guilds?: string[];
|
guilds?: string[];
|
||||||
visible?: boolean;
|
visible?: boolean;
|
||||||
slash?: boolean;
|
slash?: boolean;
|
||||||
|
|||||||
Reference in new issue
Block a user