# Slash Command

> Triggers when a user runs a slash command.

- ID: `slash_command`
- Type: Interaction trigger
- Category: [Interactions](https://inventor.bot/docs/reference/triggers/interactions.md)

- Interaction trigger: blocks that respond to interactions (replies, modals, ...) can be used in its flows.
- Each command option is an extra output named `opt_<option id>`, e.g. `trigger.opt_user`.

**Options**

| Name | Required | Description | Value |
| --- | --- | --- | --- |
| `command_name` | yes | The name of the slash command (1-32 chars, lowercase, no spaces). | e.g. `"greet"` |
| `command_description` | yes | Description shown in Discord's command picker (1-100 chars). | e.g. `"Greets a user"` |
| `subcommand_name` |  | If set, this component is a subcommand under the parent command (1-32 chars, lowercase, no spaces). | e.g. `"hello"` |
| `subcommand_group` |  | Groups this subcommand under a named group. Requires Subcommand Name to be set. | e.g. `"greetings"` |
| `command_options` |  | Configure the arguments (options) for this command. | JSON text, format below |
| `default_member_permissions` |  | Permissions a member needs to use this command. Leave empty to allow everyone. | `"Add Reactions"`, `"Administrator"`, `"Attach Files"`, `"Ban Members"`, `"Bypass Slowmode"`, `"Change Nickname"`, `"Connect"`, `"Create Events"`, `"Create Expressions"`, `"Create Instant Invite"`, `"Create Private Threads"`, `"Create Public Threads"`, `"Deafen Members"`, `"Embed Links"`, `"Kick Members"`, `"Manage Channels"`, `"Manage Events"`, `"Manage Expressions"`, `"Manage Messages"`, `"Manage Nicknames"`, `"Manage Roles"`, `"Manage Server"`, `"Manage Threads"`, `"Manage Webhooks"`, `"Mention Everyone"`, `"Move Members"`, `"Mute Members"`, `"Pin Messages"`, `"Priority Speaker"`, `"Read Message History"`, `"Request to Speak"`, `"Send Messages"`, `"Send Messages in Threads"`, `"Send Polls"`, `"Send TTS Messages"`, `"Send Voice Messages"`, `"Set Voice Channel Status"`, `"Speak"`, `"Stream"`, `"Timeout Members"`, `"Use Application Commands"`, `"Use Embedded Activities"`, `"Use External Apps"`, `"Use External Emojis"`, `"Use External Sounds"`, `"Use External Stickers"`, `"Use Soundboard"`, `"Use VAD"`, `"View Audit Log"`, `"View Channel"`, `"View Creator Monetization Analytics"`, `"View Guild Insights"` |
| `command_nsfw` |  | If true, the command is only available in NSFW channels. | `"false"`, `"true"` |
| `command_contexts` |  | Where this command can be used. Defaults to Servers if empty. | `"Servers"`, `"Direct Messages"`, `"Group DMs"` |
| `command_integration_types` |  | Where this command can be installed. Defaults to Server Installable if empty. | `"Server Installable"`, `"User Installable"` |

**`command_options` format**: JSON text of type `SlashCommandOption[]`. Fields marked `?` are optional.

```ts
type SlashCommandOption = {
	id: string // unique; the trigger output is opt_<id>
	name: string // 1-32 chars, lowercase, no spaces
	description: string // 1-100 chars
	type: number // 3=String, 4=Integer, 5=Boolean, 6=User, 7=Channel, 8=Role, 9=Mentionable, 10=Number, 11=Attachment
	required: boolean
	choices?: SlashCommandChoice[] // types 3, 4 and 10 only
	min_value?: number // types 4 and 10 only
	max_value?: number // types 4 and 10 only
	min_length?: number // type 3 only
	max_length?: number // type 3 only
	channel_types?: number[] // Discord channel types, type 7 only
}

type SlashCommandChoice = {
	name: string
	value: any // a string for type 3, a number for types 4 and 10
}
```

**Outputs**

| Name | Description | Value |
| --- | --- | --- |
| `user_id` | ID of the user who ran the command. | e.g. `"123456789012345678"` |
| `username` | Username of the invoking user. | e.g. `"johndoe"` |
| `user_avatar` | Avatar URL of the invoking user. | e.g. `"https://cdn.discordapp.com/avatars/123/abc.png"` |
| `channel_id` | Channel where the command was used. | e.g. `"123456789012345678"` |
| `server_id` | Server where the command was used. | e.g. `"123456789012345678"` |
| `application_id` | ID of the application that received this interaction. | e.g. `"123456789012345678"` |
| `command_id` | ID of the slash command that Discord invoked. | e.g. `"123456789012345678"` |
| `interaction_id` | Unique interaction ID for this command invocation. | e.g. `"123456789012345678"` |
| `interaction_token` | Token for this interaction, useful for webhook follow-up/edit operations. | e.g. `"aW50ZXJhY3Rpb25fdG9rZW4"` |
| `app_permissions` | Permissions the bot/application had in the interaction channel, as a Discord bitfield string. | e.g. `"274877990912"` |
| `user_locale` | Discord locale of the user who ran the command. | e.g. `"en-US"` |
| `server_locale` | Preferred locale of the server where the command was used, when available. | e.g. `"en-US"` |
| `interaction_context` | Where the interaction was used (`server`, `bot_dm`, or `private_channel`). | e.g. `"server"` |

**Example**

```go
var trigger = slash_command(Args{command_name: "greet", command_description: "Greets a user"})

func main() {
	send_text_message(Args{
		channel_id:      trigger.channel_id,
		message_content: "User ID: " + trigger.user_id,
	})
}
```