Bugfix to displaying missing permissions

This commit is contained in:
Erik 2023-12-08 15:15:54 +02:00
parent 2a4ea0cb25
commit 8c6ba57db4
3 changed files with 5 additions and 213 deletions

View File

@ -8,17 +8,14 @@ const safeCommands = [ 'command:settings', 'command:grant', 'command:revoke' ];
class Permissions extends Inhibitor
{
constructor (client: DiscordClient)
{
super(client, {
name: 'permissions',
priority: 5,
guarded: true,
guild: true
});
}
async execute (invoker: InvokerWrapper, command: Pick<Command, 'resolveable' | 'memberPermissions'>, override: PermissionsString[] | null = null)

View File

@ -16,7 +16,7 @@ const flagReg = /(?:^| )(?<flag>(?:--[a-z0-9]{3,})|(?:-[a-z]{1,2}))(?:$| )/iu;
type ErrorParams = {
type: string,
inhibitor?: Inhibitor,
args?: FormatParams,
params?: FormatParams | null,
error?: CommandError | boolean
}
@ -599,211 +599,6 @@ class CommandHandler extends Observer
return { options: args, verbose: true };
}
// Should be unnecessary -- moved to commandoption
// async _parseOption (interaction, option)
// {
// const { guild } = interaction;
// const types = {
// POINTS: (value) =>
// {
// return { value };
// },
// ROLES: async (string) =>
// {
// const args = Util.parseQuotes(string).map(([ str ]) => str);
// const roles = await guild.resolveRoles(args);
// if (!roles.length)
// return { error: true };
// return { value: roles };
// },
// MEMBERS: async (string) =>
// {
// const args = Util.parseQuotes(string).map(([ str ]) => str);
// const members = await guild.resolveMembers(args, option.strict);
// if (!members.length)
// return { error: true, message: option.strict ? guild.format('O_COMMANDHANDLER_TYPEMEMBER_STRICT') : null };
// return { value: members };
// },
// USERS: async (string) =>
// {
// const args = Util.parseQuotes(string).map(([ str ]) => str);
// const users = await guild.resolveUsers(args, option.strict);
// if (!users.length)
// return { error: true, message: option.strict ? guild.format('O_COMMANDHANDLER_TYPEUSERS_STRICT') : null };
// return { value: users };
// },
// CHANNELS: async (string) =>
// {
// const args = Util.parseQuotes(string).map(([ str ]) => str);
// const channels = await guild.resolveChannels(args);
// if (!channels.length)
// return { error: true };
// return { value: channels };
// },
// TEXT_CHANNELS: async (string) =>
// {
// const args = Util.parseQuotes(string).map(([ str ]) => str);
// const channels = await guild.resolveChannels(args, null, (channel) => channel.type === ChannelType.GuildText);
// if (!channels.length)
// return { error: true };
// return { value: channels };
// },
// VOICE_CHANNELS: async (string) =>
// {
// const args = Util.parseQuotes(string).map(([ str ]) => str);
// const channels = await guild.resolveChannels(args, null, (channel) => channel.type === ChannelType.GuildVoice);
// if (!channels.length)
// return { error: true };
// return { value: channels };
// },
// TIME: (string) =>
// {
// const value = this.client.resolver.resolveTime(string);
// if (value === null)
// return { error: true };
// return { error: false, value };
// },
// COMPONENT: (string) =>
// {
// const [ component ] = this.client.resolver.components(string, 'any');
// if (!component)
// return { error: true };
// return { value: component };
// },
// COMPONENTS: (string) =>
// {
// const strings = string.split(' ');
// const components = [];
// for (const str of strings)
// {
// const [ component ] = this.client.resolver.components(str, 'any');
// if (component && !components.includes(component))
// components.push(component);
// }
// if (!components.length)
// return { error: true };
// return { value: components };
// },
// COMMAND: (string) =>
// {
// const [ command ] = this.client.resolver.components(string, 'command');
// if (!command)
// return { error: true };
// return { value: command };
// },
// COMMANDS: (string) =>
// {
// const strings = string.split(' ');
// const commands = [];
// for (const str of strings)
// {
// const [ command ] = this.client.resolver.components(str, 'command');
// if (command && !commands.includes(command))
// commands.push(command);
// }
// if (!commands.length)
// return { error: true };
// return { value: commands };
// },
// MODULE: (string) =>
// {
// const [ module ] = this.client.resolver.components(string, 'module');
// if (!module)
// return { error: true };
// return { value: module };
// },
// STRING: (string) =>
// {
// return { error: false, value: string };
// },
// INTEGER: (integer) =>
// {
// if (option.minimum !== undefined && integer < option.minimum)
// return { error: true };
// if (option.maximum !== undefined && integer > option.maximum)
// return { error: true };
// return { error: false, value: parseInt(integer) };
// },
// BOOLEAN: (boolean) =>
// {
// boolean = this.client.resolver.resolveBoolean(boolean);
// return { error: false, value: boolean };
// },
// MEMBER: async (user) =>
// {
// let member = null;
// try
// {
// member = await guild.members.fetch(user);
// }
// catch (error)
// {} // eslint-disable-line no-empty
// if (!member)
// return { error: true };
// return { error: false, value: member };
// },
// USER: async (user) =>
// {
// user = await this.client.users.fetch(user);
// return { error: false, value: user };
// },
// TEXT_CHANNEL: async (channel) =>
// {
// channel = await guild.resolveChannel(channel);
// if (channel.type !== ChannelType.GuildText)
// return { error: true };
// return { error: false, value: channel };
// },
// VOICE_CHANNEL: async (channel) =>
// {
// channel = await guild.resolveChannel(channel);
// if (channel.type !== ChannelType.GuildVoice)
// return { error: true };
// return { error: false, value: channel };
// },
// CHANNEL: async (channel) =>
// {
// channel = await guild.resolveChannel(channel);
// return { error: false, value: channel };
// },
// ROLE: async (role) =>
// {
// role = await guild.roles.fetch(role);
// return { error: false, value: role };
// },
// MENTIONABLE: (mentionable) =>
// {
// return { error: false, value: mentionable };
// },
// NUMBER: (number) =>
// {
// if (option.minimum !== undefined && number < option.minimum)
// return { error: true };
// if (option.maximum !== undefined && number > option.maximum)
// return { error: true };
// return { error: false, value: number };
// },
// FLOAT: (float) =>
// {
// if (option.minimum !== undefined && float < option.minimum)
// return { error: true };
// if (option.maximum !== undefined && float > option.maximum)
// return { error: true };
// return { error: false, value: parseFloat(float) };
// },
// DATE: async (str) =>
// {
// const date = await this.client.resolver.resolveDate(str);
// if (!date)
// return { error: true };
// return { error: false, value: date };
// }
// };
// return types[option.type](option._rawValue);
// }
async _getCommand (message: MessageWrapper)
{
@ -880,7 +675,7 @@ class CommandHandler extends Observer
inhibitor: () =>
{
return {
content: `${invoker.format(info.inhibitor!.index, { command: invoker.command.resolveable, ...info.args })}\n**\`${info.inhibitor!.resolveable}\`**`,
content: `${invoker.format(info.inhibitor!.index, { command: invoker.command.resolveable, ...info.params })}\n**\`${info.inhibitor!.resolveable}\`**`,
ephemeral: !invoker.replied
};
}

View File

@ -61,7 +61,7 @@ class BanInfraction extends Infraction
{
await this.guild.members.ban(this.target!.id, {
reason: this._reason,
deleteMessageDays: days
deleteMessageSeconds: days * 24 * 60 * 60
});
}
catch (error)