command handler
This commit is contained in:
parent
17841a4c00
commit
423337a7f0
@ -22,13 +22,16 @@ class CommandHandler extends Observer {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async messageCreate(message) {
|
async messageCreate(message) {
|
||||||
|
|
||||||
if(!this.client._built
|
if(!this.client._built
|
||||||
|| message.webhookId
|
|| message.webhookId
|
||||||
|| message.author.bot
|
|| message.author.bot
|
||||||
|| message.guild && !message.guild.available) return undefined;
|
|| message.guild && !message.guild.available) return undefined;
|
||||||
|
|
||||||
|
const userWrapper = await this.client.getUserWrapper(message.author.id);
|
||||||
|
if (!userWrapper.developer) return;
|
||||||
|
|
||||||
if(message.guild) {
|
if(message.guild) {
|
||||||
if(!message.member) await message.guild.members.fetch(message.author.id);
|
if(!message.member) await message.guild.members.fetch(message.author.id);
|
||||||
}
|
}
|
||||||
@ -42,10 +45,12 @@ class CommandHandler extends Observer {
|
|||||||
const inhibitors = await this._handleInhibitors(invoker);
|
const inhibitors = await this._handleInhibitors(invoker);
|
||||||
if (inhibitors.length) return this._generateError(invoker, { type: 'inhibitor', ...inhibitors[0] });
|
if (inhibitors.length) return this._generateError(invoker, { type: 'inhibitor', ...inhibitors[0] });
|
||||||
|
|
||||||
const options = await this._parseMessage(invoker, parameters);
|
const response = await this._parseMessage(invoker, parameters);
|
||||||
|
// There was an error if _parseResponse return value is truthy, i.e. an error message was sent
|
||||||
|
if (await this._parseResponse(invoker, response)) return;
|
||||||
|
|
||||||
// Temp setup
|
// Temp setup
|
||||||
//this._executeCommand(invoker, parameters);
|
this._executeCommand(invoker, response.options);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +63,6 @@ class CommandHandler extends Observer {
|
|||||||
|| interaction.guild && !interaction.guild.available) return undefined;
|
|| interaction.guild && !interaction.guild.available) return undefined;
|
||||||
|
|
||||||
const command = this._matchCommand(interaction.commandName);
|
const command = this._matchCommand(interaction.commandName);
|
||||||
// interaction.command = command;
|
|
||||||
const invoker = new InvokerWrapper(this.client, interaction, command);
|
const invoker = new InvokerWrapper(this.client, interaction, command);
|
||||||
|
|
||||||
if (!command) return invoker.reply({
|
if (!command) return invoker.reply({
|
||||||
@ -70,6 +74,15 @@ class CommandHandler extends Observer {
|
|||||||
if(inhibitors.length) return this._generateError(invoker, { type: 'inhibitor', ...inhibitors[0] });
|
if(inhibitors.length) return this._generateError(invoker, { type: 'inhibitor', ...inhibitors[0] });
|
||||||
|
|
||||||
const response = await this._parseInteraction(interaction, command);
|
const response = await this._parseInteraction(interaction, command);
|
||||||
|
if (await this._parseResponse(invoker, response)) return;
|
||||||
|
|
||||||
|
this.logger.info(`${interaction.user.tag} (${interaction.user.id}) is executing ${command.name}`);
|
||||||
|
await this._executeCommand(invoker, response.options);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
_parseResponse(invoker, response) {
|
||||||
|
const { command } = invoker;
|
||||||
if (response.error) {
|
if (response.error) {
|
||||||
let content = invoker.format(`O_COMMANDHANDLER_TYPE${response.option.type}`, {
|
let content = invoker.format(`O_COMMANDHANDLER_TYPE${response.option.type}`, {
|
||||||
option: response.option.name, min: response.option.minimum, max: response.option.maximum
|
option: response.option.name, min: response.option.minimum, max: response.option.maximum
|
||||||
@ -77,17 +90,13 @@ class CommandHandler extends Observer {
|
|||||||
if (response.dependency) content = invoker.format(`O_COMMANDHANDLER_DEPEDENCY`,
|
if (response.dependency) content = invoker.format(`O_COMMANDHANDLER_DEPEDENCY`,
|
||||||
{ option: response.option.name, dependency: response.dependency });
|
{ option: response.option.name, dependency: response.dependency });
|
||||||
return invoker.reply({
|
return invoker.reply({
|
||||||
content,
|
content,
|
||||||
emoji: 'failure',
|
emoji: 'failure',
|
||||||
ephemeral: true
|
ephemeral: true
|
||||||
});
|
});
|
||||||
} else if (command.showUsage && !Object.keys(response.options).length) {
|
} else if (command.showUsage && response.options && !Object.keys(response.options).length || response.showUsage) {
|
||||||
return invoker.reply({ embeds: [command.usageEmbed(invoker)] });
|
return invoker.reply({ embeds: [command.usageEmbed(invoker, response.verbose)] });
|
||||||
}
|
}
|
||||||
|
|
||||||
this.logger.info(`${interaction.user.tag} (${interaction.user.id}) is executing ${command.name}`);
|
|
||||||
await this._executeCommand(invoker, response.options);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async _handleInhibitors(invoker) {
|
async _handleInhibitors(invoker) {
|
||||||
@ -139,9 +148,10 @@ class CommandHandler extends Observer {
|
|||||||
|
|
||||||
const { subcommand } = interaction;
|
const { subcommand } = interaction;
|
||||||
|
|
||||||
if(!interaction.guild && command.guildOnly) {
|
// Handled by inhibitors -- cleanup later
|
||||||
return interaction.reply({ index: 'O_COMMANDHANDLER_GUILDONLY', emoji: 'failure', ephemeral: true });
|
// if(!interaction.guild && command.guildOnly) {
|
||||||
}
|
// return interaction.reply({ index: 'O_COMMANDHANDLER_GUILDONLY', emoji: 'failure', ephemeral: true });
|
||||||
|
// }
|
||||||
|
|
||||||
let error = null;
|
let error = null;
|
||||||
const options = {};
|
const options = {};
|
||||||
@ -158,12 +168,13 @@ class CommandHandler extends Observer {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const newOption = new CommandOption({
|
// const newOption = new CommandOption({
|
||||||
name: matched.name, type: matched.type,
|
// name: matched.name, type: matched.type,
|
||||||
minimum: matched.minimum, maximum: matched.maximum,
|
// minimum: matched.minimum, maximum: matched.maximum,
|
||||||
_rawValue: option.value,
|
// _rawValue: option.value,
|
||||||
dependsOn: matched.dependsOn, dependsOnMode: matched.dependsOnMode
|
// dependsOn: matched.dependsOn, dependsOnMode: matched.dependsOnMode
|
||||||
});
|
// });
|
||||||
|
const newOption = matched.clone(option.value);
|
||||||
const parsed = await this._parseOption(interaction, newOption);
|
const parsed = await this._parseOption(interaction, newOption);
|
||||||
|
|
||||||
if(parsed.error) {
|
if(parsed.error) {
|
||||||
@ -200,8 +211,34 @@ class CommandHandler extends Observer {
|
|||||||
|
|
||||||
async _parseMessage(invoker, params) {
|
async _parseMessage(invoker, params) {
|
||||||
|
|
||||||
const { options } = invoker.command;
|
const { command, target: message } = invoker;
|
||||||
console.log(options);
|
const { subcommands, subcommandGroups } = command;
|
||||||
|
const args = {};
|
||||||
|
// console.log(options);
|
||||||
|
let group = null,
|
||||||
|
subcommand = null;
|
||||||
|
|
||||||
|
if (subcommandGroups.length || subcommands.length) {
|
||||||
|
const [first, second, ...rest] = params;
|
||||||
|
group = command.subcommandGroup(first);
|
||||||
|
|
||||||
|
// Depending on how thoroughly I want to support old style commands this might have to try and resolve to other options
|
||||||
|
// But for now I'm followin discord's structure for commands
|
||||||
|
if (!group) {
|
||||||
|
subcommand = command.subcommand(first)?.raw;
|
||||||
|
params = [second, ...rest];
|
||||||
|
} else {
|
||||||
|
subcommand = command.subcommand(second)?.raw;
|
||||||
|
params = rest;
|
||||||
|
}
|
||||||
|
message.subcommand = subcommand;
|
||||||
|
message.subcommandGroup = group;
|
||||||
|
|
||||||
|
if(!subcommand) return { showUsage: true, verbose: true };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return { options: { args, parameters: params }, verbose: true };
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user