package plugin import ( "net/http" "strings" "github.com/gorilla/mux" "github.com/mattermost/mattermost/server/public/model" "github.com/mattermost/mattermost/server/public/plugin" ) func (p *Plugin) InitApi() { p.router = mux.NewRouter() p.router.HandleFunc("/webhook", p.handleWebhook).Methods("POST") } func (p *Plugin) ServeHTTP(c *plugin.Context, w http.ResponseWriter, r *http.Request) { if !p.IsReady { http.Error(w, "Plugin not ready", http.StatusServiceUnavailable) return } p.router.ServeHTTP(w, r) } func (p *Plugin) registerCommands() error { command := &model.Command{ Trigger: "sentry", DisplayName: "Sentry", Description: "Manage Sentry alerts and integrations", AutoComplete: true, AutocompleteData: p.getAutocompleteData(), } if err := p.API.RegisterCommand(command); err != nil { p.API.LogError("Failed to register Sentry command", "error", err.Error()) return err } return nil } func (p *Plugin) ExecuteCommand( ctx *plugin.Context, args *model.CommandArgs, ) (*model.CommandResponse, *model.AppError) { split := strings.Fields(args.Command) if len(split) < 2 { return p.commandHelp(), nil } switch split[1] { case "setup": return p.commandSetup(args) case "link": return p.commandLink(args, split) case "unlink": return p.commandUnlink(args, split) case "list": return p.commandList(args) case "help": fallthrough default: return p.commandHelp(), nil } } func (p *Plugin) getAutocompleteData() *model.AutocompleteData { sentry := model.NewAutocompleteData( "sentry", "", "Sentry integration commands", ) setup := model.NewAutocompleteData( "setup", "", "Initial setup of Sentry integration", ) help := model.NewAutocompleteData( "help", "", "Show help for Sentry commands", ) list := model.NewAutocompleteData( "list", "", "List linked Sentry projects", ) link := model.NewAutocompleteData( "link", "[project]", "Link a Sentry project to this channel", ) unlink := model.NewAutocompleteData( "unlink", "[project]", "Unlink a Sentry project from this channel", ) sentry.AddCommand(setup) sentry.AddCommand(help) sentry.AddCommand(list) sentry.AddCommand(link) sentry.AddCommand(unlink) return sentry }