@SlashGroup
Subcommands and groups offer developers an organized and complex way to group commands.
Blueprint
We call this grouping Level 1
command
|
|__ subcommand
|
|__ subcommand
We call this grouping Level 2
command
|
|__ subcommand-group
|
|__ subcommand
|
|__ subcommand-group
|
|__ subcommand
Signature
// Create a new group or subgroup
SlashGroup(options: SlashGroupOptions): ClassDecoratorEx
// Assign slashes to a group
SlashGroup(name: string): ClassMethodDecorator
// Assign slashes to a subgroup
SlashGroup(name: string, root: string): ClassMethodDecorator
Example
In the following example, slash permission commands are grouped under permissions and subgrouped by role and user.
Create a group
To create a slash group, you need a class decorated with @Discord. Selected class metadata such as botId, permissions, etc will be used to build slash group command.
Group
We create a group with a selected class in the following code example
@Discord()
@SlashGroup({ description: "Manage permissions", name: "permission" })
class Example {
//
}
Subgroup
We create a group and subgroup with a selected class in the following code example
@Discord()
@SlashGroup({ description: "Manage permissions", name: "permission" })
@SlashGroup({
description: "Manage permissions",
name: "user",
root: "permission", // need to specify root
})
class Example {
//
}
Assign a group
We have created a group in the above steps, It's time to assign our slash commands to group.
Slashes can be added to a group in two ways
The following structure will be followed by our group
get
|
|__ role
|
|__ user
1. Class Level
@Discord()
// Create a group
@SlashGroup({ description: "Get a role or user", name: "get" })
// Assign all inherit slashes to the group
@SlashGroup("get")
class Example {
@Slash({ description: "role" })
role() {
// ...
}
@Slash({ description: "user" })
user() {
// ...
}
}
2. Method Level
@Discord()
// Create a group
@SlashGroup({ description: "Get a role or user", name: "get" })
class Example {
@Slash({ description: "role" })
// Assign slash to the group
@SlashGroup("get")
role() {
// ...
}
@Slash({ description: "user" })
// Assign slash to the group
@SlashGroup("get")
user() {
// ...
}
}
Assign a subgroup
We have created a group and a subgroup in the above steps, It's time to assign our slash commands to groups.
Slashes can be added to a group in two ways
The following structure will be followed by our group
permission
|
|__ user
|
|__ get
|
|__ set
1. Class Level
@Discord()
// Create a group
@SlashGroup({ description: "Manage permissions", name: "permission" })
// Create a sub group
@SlashGroup({
description: "User permissions",
name: "user",
root: "permission",
})
// Assign all inherit slashes to the subgroup
@SlashGroup("user", "permission")
class Example {
@Slash({ description: "get" })
get() {
// ...
}
@Slash({ description: "set" })
set() {
// ...
}
}
2. Method Level
@Discord()
// Create a group
@SlashGroup({ description: "Manage permissions", name: "permission" })
// Create a sub group
@SlashGroup({
description: "User permissions",
name: "user",
root: "permission",
})
class Example {
@Slash({ description: "get" })
// Assign slash to subgroup
@SlashGroup("user", "permission")
get() {
// ...
}
@Slash({ description: "set" })
// Assign slash to subgroup
@SlashGroup("user", "permission")
set() {
// ...
}
}
Structure - Multiple Classes
It's sometimes difficult to use a single class for too many commands. We offer the flexibility to divide your group into multiple classes.
The following structure will be followed by our group
permission
|
|__ info
|
|__ user
|
|__ get
|
|__ set
|
|__ role
|
|__ get
|
|__ set
Look closely at the code, only Permission class is used to create slash group, all other classes are children.
Other slashes class metadata won't be used and will be overwritten by the root class.
@Discord()
// Create a group
@SlashGroup({ description: "Manage permissions", name: "permission" })
// Assign all inherit slashes to the subgroup
@SlashGroup("permission")
class Permission {
@Slash({ description: "info" })
info() {
// ...
}
}
@Discord()
// Create a sub group
@SlashGroup({
description: "User permissions",
name: "user",
root: "permission",
})
// Assign all inherit slashes to the subgroup
@SlashGroup("user", "permission")
class UserPermission {
@Slash({ description: "get" })
get() {
// ...
}
@Slash({ description: "set" })
set() {
// ...
}
}
@Discord()
// Create a sub group
@SlashGroup({
description: "Role permissions",
name: "role",
root: "permission",
})
// Assign all inherit slashes to the subgroup
@SlashGroup("role", "permission")
class RolePermission {
@Slash({ description: "get" })
get() {
// ...
}
@Slash({ description: "set" })
set() {
// ...
}
}