package plugin import ( "fmt" "os" "path/filepath" "github.com/mattermost/mattermost/server/public/model" ) // ensureBot создает или получает бота для отправки сообщений func (p *Plugin) ensureBot() error { const botUsername = "sentry" user, appErr := p.API.GetUserByUsername(botUsername) if appErr == nil && user != nil { if !user.IsBot { return fmt.Errorf("user @%s exists but is not a bot", botUsername) } p.botUserID = user.Id return nil } bot := &model.Bot{ Username: botUsername, DisplayName: "Sentry", Description: "Sentry notifications bot", } createdBot, appErr := p.API.CreateBot(bot) if appErr != nil { p.API.LogError("Failed to create Sentry bot", "error", appErr.Error()) return appErr } p.botUserID = createdBot.UserId // Устанавливаем иконку после создания бота if err := p.setBotIcon(); err != nil { p.API.LogWarn("Failed to set bot icon", "error", err.Error()) } return nil } func (p *Plugin) setBotIcon() error { if p.botUserID == "" { return fmt.Errorf("bot user ID is not set") } bundlePath := p.bundlePath if bundlePath == "" { var err error bundlePath, err = p.API.GetBundlePath() if err != nil { return fmt.Errorf("failed to get bundle path: %w", err) } } iconPath := filepath.Join(bundlePath, "assets", "icon.png") iconData, err := os.ReadFile(iconPath) if err != nil { return fmt.Errorf("failed to read icon file: %w", err) } if appErr := p.API.SetProfileImage(p.botUserID, iconData); appErr != nil { return fmt.Errorf("failed to set profile image: %s", appErr.Error()) } p.API.LogInfo("Bot icon set successfully") return nil }