package main import ( "C" ) import ( "strings" "time" "git.bullercodeworks.com/brian/helperbot" "github.com/nlopes/slack" ) type StatsState struct { model helperbot.Model lag time.Duration } var State StatsState /* Plugin Interface Functions */ func (s *StatsState) Name() string { return "slack-stats" } func (s *StatsState) Initialize(m helperbot.Model) error { s.model = m return nil } func (s *StatsState) ProcessMessage(m helperbot.Message) { if m.GetSource() == "slack" { slackMsg := m.GetMessage() if len(slackMsg.Channel) == 0 { return } admin, err := s.model.GetSlackAdminDMId() if err != nil { s.SendAdminIdError() return } if slackMsg.Channel == admin { s.ProcessAdminDirectMessage(slackMsg) } } } func (s *StatsState) ProcessRTMEvent(msg slack.RTMEvent) { switch ev := msg.Data.(type) { case *slack.LatencyReport: s.lag = ev.Value } } func (s *StatsState) Run() {} func (s *StatsState) Exit() {} /* Other Functions */ func (s *StatsState) ProcessAdminDirectMessage(slackMsg slack.Message) { msgPts := strings.Fields(slackMsg.Text) if len(msgPts) < 2 || msgPts[0] != "!stats" { return } switch msgPts[1] { case "lag", "latency": s.DoLatencyCommand(slackMsg) } } func (s *StatsState) DoLatencyCommand(slackMsg slack.Message) { if s.lag == 0 { s.SendSlackMessage("Unknown", slackMsg.Channel) return } s.SendSlackMessage(s.lag.String(), slackMsg.Channel) } func (s *StatsState) SendSlackMessage(text, dest string) { s.model.SendMessage(s.Name(), "slack", s.BuildMessage("message", text, dest)) } func (s *StatsState) SendAdminIdError() { s.model.SendMessage(s.Name(), "error", s.BuildMessage("error", "Error getting Admin DM Id", "")) } func (s *StatsState) BuildMessage(tp, text, ch string) slack.Message { ret := slack.Message{} ret.Type = tp ret.Text = text ret.Channel = ch return ret }