package handler import ( "fmt" "strings" "git.kill0.net/chill9/beepboop/bot" "git.kill0.net/chill9/beepboop/lib/weather" "github.com/bwmarrin/discordgo" log "github.com/sirupsen/logrus" ) type WeatherHandler struct { Config bot.Config Name string } func NewWeatherHandler(s string) *WeatherHandler { h := new(WeatherHandler) h.Name = s return h } func (h *WeatherHandler) SetConfig(config bot.Config) { h.Config = config } func (h *WeatherHandler) Handle(s *discordgo.Session, m *discordgo.MessageCreate) { var ( err error loc string w weather.Weather ) if m.Author.ID == s.State.User.ID { return } if !strings.HasPrefix(m.Content, "!weather") { return } x := strings.SplitN(m.Content, " ", 2) if len(x) != 2 { s.ChannelMessageSend(m.ChannelID, "help: `!weather ,,`") return } loc = x[1] if h.Config.OpenWeatherMapToken == "" { log.Error("OpenWeather token is not set") return } wc := weather.NewClient(h.Config.OpenWeatherMapToken) log.Debugf("weather requested for '%s'", loc) w, err = wc.Get(loc) if err != nil { log.Errorf("weather client error: %v", err) return } log.Debugf("weather returned for '%s': %+v", loc, w) s.ChannelMessageSend(m.ChannelID, fmt.Sprintf( "%s (%.1f, %.1f) — C:%.1f F:%.1f K:%.1f", loc, w.Coord.Lat, w.Coord.Lon, w.Main.Temp.Celcius(), w.Main.Temp.Fahrenheit(), w.Main.Temp.Kelvin(), )) }