plugins icon indicating copy to clipboard operation
plugins copied to clipboard

[SFW-80] bug: provided a subcommand group is configured with a default match and the command is ran with only the name of the subcommand the default match doesn't get executed.

Open favna opened this issue 2 years ago • 0 comments

Is there an existing issue for this?

  • [X] I have searched the existing issues

Description of the bug

Provided the following subcommand array:

subcommands: [
  {
    type: 'group',
    name: 'config',
    entries: [
      { name: 'edit', messageRun: 'configEdit' },
      { name: 'show', messageRun: 'configShow', default: true },
      { name: 'remove', messageRun: 'configRemove' },
      { name: 'reset', messageRun: 'configReset' }
    ]
  }
]

The expected behaviour is that running !command config would execute show as that is the configured default.

Currently however an error is thrown due to subcommandName.isSome() returning false here: https://github.com/sapphiredev/plugins/blob/79d7230c84ad59338197d8109e6f3ba46a5c2158/packages/subcommands/src/lib/Subcommand.ts#L153

Steps To Reproduce

  1. Copy the following subcommand code as a new command:
import { Subcommand } from '@sapphire/plugin-subcommands';
import type { Message } from 'discord.js';

export class UserCommand extends Subcommand {
  public constructor(context: Subcommand.Context) {
    super(context, {
      aliases: ['sg'],
      description: 'A message command with some subcommand groups',
      subcommands: [
        {
          type: 'group',
          name: 'config',
          entries: [
            { name: 'edit', messageRun: 'configEdit' },
            { name: 'show', messageRun: 'configShow', default: true },
            { name: 'remove', messageRun: 'configRemove' },
            { name: 'reset', messageRun: 'configReset' }
          ]
        }
      ]
    });
  }
  public async configShow(message: Message) {
    return message.channel.send('Showing!');
  }

  public async configEdit(message: Message) {
    return message.channel.send('Editing!');
  }

  public async configRemove(message: Message) {
    return message.channel.send('Removing!');
  }

  public async configReset(message: Message) {
    return message.channel.send('Resetting!');
  }
}
  1. Run !sg config
  2. Observe that show subcommand does not get executed and instead a messageSubcommandNoMatch error is thrown.

Expected behavior

The default subcommand within the subcommand group executes as described

Screenshots

No response

Additional context

No response

SFW-80

favna avatar Aug 12 '23 19:08 favna