Skip to content

[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. #464

@favna

Description

@favna

Is there an existing issue for this?

  • 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:

if (mapping.type === 'group' && subcommandOrGroup.isSome() && subcommandName.isSome()) {

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions