> For the complete documentation index, see [llms.txt](https://docs.wildbeast.guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.wildbeast.guide/fundamentals/commands/slash-commands/subcommands.md).

# Subcommands

![](/files/FTfRBt8zvbmu0iXfmHNT)

Subcommands are a great way to nest seperate commands under one base command, each subcommand is their own seperate command and can be called as such.

## In practise

{% hint style="info" %}
We're continuing off the example from the [Slash commands](/fundamentals/commands/slash-commands.md) page
{% endhint %}

```typescript
import { Interaction } from 'detritus-client'
import { BaseSlashCommand, BaseCommandOption } from '../base'

export default class PingCommand extends BaseSlashCommand {
  constructor () {
    super({
      name: 'ping',
      // With subcommands, the description doesn't matter,
      // since it doesn't get shown to end users.
      description: '',
      options: [
        new PongCommand()
      ]
    })
  }
  // The base command should not have a run(), it never gets called
}

export class PongCommand extends BaseCommandOption {
  constructor () {
    super({
      name: 'pong'
      description: 'Pong!'
    })
  }
  
  async run (context: Interaction.InteractionContext): Promise<void> {
    await context.editOrRespond(context, 'Pong!')
  }
}
```
