package plugin import ( "encoding/json" "fmt" "net/http" "github.com/mattermost/mattermost/server/public/model" ) func (p *Plugin) handleDialogSubmit(w http.ResponseWriter, r *http.Request) { var req model.SubmitDialogRequest if err := json.NewDecoder(r.Body).Decode(&req); err != nil { w.WriteHeader(http.StatusBadRequest) return } if req.CallbackId != "sentry_setup" { w.WriteHeader(http.StatusOK) return } sub := req.Submission projectSlug := sub["project_slug"].(string) channelID := sub["default_channel_id"].(string) hooks := HookSettings{ EventAlert: getBool(sub, "hook_event_alert", true), MetricAlert: getBool(sub, "hook_metric_alert", true), Issue: getBool(sub, "hook_issue", true), Comment: getBool(sub, "hook_comment", true), } project, err := p.linkProjectToChannel(projectSlug, channelID, hooks) if err != nil { // Отправляем ошибку в личные сообщения post := &model.Post{ Message: "❌ " + err.Error(), } if dmErr := p.sendDMToUser(req.UserId, post); dmErr != nil { p.API.LogError("Failed to send DM to user", "error", dmErr.Error()) } return } // Отправляем успешное сообщение в личные сообщения post := &model.Post{ Message: fmt.Sprintf( "✅ Linked **%s** (`%s`)\nHooks: event=%v, metric=%v, issue=%v, comment=%v", project.Name, project.Slug, hooks.EventAlert, hooks.MetricAlert, hooks.Issue, hooks.Comment, ), } if dmErr := p.sendDMToUser(req.UserId, post); dmErr != nil { p.API.LogError("Failed to send DM to user", "error", dmErr.Error()) } } func (p *Plugin) openEventAlertSetup( args *model.CommandArgs, project *LinkedProject, ) (*model.CommandResponse, *model.AppError) { if args.TriggerId == "" { post := &model.Post{Message: "This command must be run from UI"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil } post := &model.Post{Message: "🛠 Event alert setup is not implemented yet"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil } func (p *Plugin) openMetricAlertSetup( args *model.CommandArgs, project *LinkedProject, ) (*model.CommandResponse, *model.AppError) { if args.TriggerId == "" { post := &model.Post{Message: "This command must be run from UI"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil } post := &model.Post{Message: "🛠 Metric alert setup is not implemented yet"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil } func (p *Plugin) openIssueSetup( args *model.CommandArgs, project *LinkedProject, ) (*model.CommandResponse, *model.AppError) { if args.TriggerId == "" { post := &model.Post{Message: "This command must be run from UI"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil } post := &model.Post{Message: "🛠 Issue setup is not implemented yet"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil } func (p *Plugin) openCommentSetup( args *model.CommandArgs, project *LinkedProject, ) (*model.CommandResponse, *model.AppError) { if args.TriggerId == "" { post := &model.Post{Message: "This command must be run from UI"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil } post := &model.Post{Message: "🛠 Comment setup is not implemented yet"} _ = p.sendDMToUser(args.UserId, post) return &model.CommandResponse{}, nil }