64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package command
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
"github.com/mattermost/mattermost/server/public/pluginapi"
|
|
)
|
|
|
|
type Handler struct {
|
|
client *pluginapi.Client
|
|
}
|
|
|
|
type Command interface {
|
|
Handle(args *model.CommandArgs) (*model.CommandResponse, error)
|
|
executeHelloCommand(args *model.CommandArgs) *model.CommandResponse
|
|
}
|
|
|
|
const helloCommandTrigger = "hello"
|
|
|
|
// Register all your slash commands in the NewCommandHandler function.
|
|
func NewCommandHandler(client *pluginapi.Client) Command {
|
|
err := client.SlashCommand.Register(&model.Command{
|
|
Trigger: helloCommandTrigger,
|
|
AutoComplete: true,
|
|
AutoCompleteDesc: "Say hello to someone",
|
|
AutoCompleteHint: "[@username]",
|
|
AutocompleteData: model.NewAutocompleteData(helloCommandTrigger, "[@username]", "Username to say hello to"),
|
|
})
|
|
if err != nil {
|
|
client.Log.Error("Failed to register command", "error", err)
|
|
}
|
|
return &Handler{
|
|
client: client,
|
|
}
|
|
}
|
|
|
|
// ExecuteCommand hook calls this method to execute the commands that were registered in the NewCommandHandler function.
|
|
func (c *Handler) Handle(args *model.CommandArgs) (*model.CommandResponse, error) {
|
|
trigger := strings.TrimPrefix(strings.Fields(args.Command)[0], "/")
|
|
switch trigger {
|
|
case helloCommandTrigger:
|
|
return c.executeHelloCommand(args), nil
|
|
default:
|
|
return &model.CommandResponse{
|
|
ResponseType: model.CommandResponseTypeEphemeral,
|
|
Text: fmt.Sprintf("Unknown command: %s", args.Command),
|
|
}, nil
|
|
}
|
|
}
|
|
|
|
func (c *Handler) executeHelloCommand(args *model.CommandArgs) *model.CommandResponse {
|
|
if len(strings.Fields(args.Command)) < 2 {
|
|
return &model.CommandResponse{
|
|
ResponseType: model.CommandResponseTypeEphemeral,
|
|
Text: "Please specify a username",
|
|
}
|
|
}
|
|
username := strings.Fields(args.Command)[1]
|
|
return &model.CommandResponse{
|
|
Text: "Hello, " + username,
|
|
}
|
|
}
|