plugins/ohmonday.go
// Package plugins provides a collection of example (and usable) plugins for instances
// of slackscot
package plugins
import (
"github.com/alexandre-normand/slackscot"
"github.com/alexandre-normand/slackscot/actions"
"github.com/alexandre-normand/slackscot/config"
"github.com/alexandre-normand/slackscot/plugin"
"github.com/alexandre-normand/slackscot/schedule"
"math/rand"
"time"
)
// Configuration keys
const (
atTimeKey = "atTime"
ohMondayChannelIDsKey = "channelIDs"
)
var mondayPictures = []string{"https://media.giphy.com/media/3og0IHx11gZBccA98c/giphy-downsized-large.gif",
"https://media.giphy.com/media/vguRpQzGag7M5h4UVt/giphy.gif",
"https://media.giphy.com/media/9GI7UlOQ6uU95v82q7/giphy-downsized-large.gif",
"https://media.giphy.com/media/hu3Z1fwuOZh3a/giphy.gif",
"https://media.giphy.com/media/5ZZSYqvcH6QppFQGI5/giphy-downsized-large.gif",
"https://media.giphy.com/media/7mMRX7gWzDVwA/giphy.gif",
"https://media.giphy.com/media/Mv6t9sASpgTEA/giphy.gif",
"https://media.giphy.com/media/GGFMa2baxgoLK/giphy.gif",
"https://media.giphy.com/media/WET6Ed65VUkuY/giphy.gif",
"https://media.giphy.com/media/26wkRxKJ9yUZzlorK/giphy.gif",
"https://media.giphy.com/media/l46Cbqvg6gxGvh2PS/giphy.gif",
"https://media.giphy.com/media/IlJ0FkaYggwkE/giphy.gif",
"https://media.giphy.com/media/13sz48R33vovLi/giphy.gif",
"https://media.giphy.com/media/Vj2fBk4JWGdxu/giphy.gif",
"https://media.giphy.com/media/ict1QSd2CrvFe/giphy.gif",
"https://media.giphy.com/media/3o752hpmTcQYvUsUmc/giphy.gif",
"https://media.giphy.com/media/5Szs80FJTKDHQmA1SD/giphy.gif",
"https://media.giphy.com/media/tvgUcaz62HqbC/giphy.gif",
"https://media.giphy.com/media/Ytz5fkp09VIyc/giphy.gif",
"https://media.giphy.com/media/3o7TKoktIaJdCiY1Ms/giphy.gif",
"https://media.giphy.com/media/3D1v8iexqiPbq/giphy.gif",
"https://media.giphy.com/media/f9RIpuEitaLuiczwFs/giphy.gif",
"https://media.giphy.com/media/c6DIpCp1922KQ/giphy.gif",
"https://media.giphy.com/media/3o6Zt4geeudbh6XxAs/giphy.gif",
"https://media.giphy.com/media/kYq5TduyLd2YE/giphy.gif",
"https://media.giphy.com/media/nsQpRYAvOn1eg/giphy.gif",
"https://media.giphy.com/media/SAY0JN07b9yXC/giphy.gif",
"https://media.giphy.com/media/jxTcPTeGxc5geNTzgU/giphy.gif",
"https://media.giphy.com/media/d2Z7xYpg6eV2wAAU/giphy.gif",
"https://media.giphy.com/media/pOKrXLf9N5g76/giphy.gif",
"https://media.giphy.com/media/69kTTpTRc2t7GU1rKX/200w_d.gif",
"https://media.giphy.com/media/l4FGG8qUJNxX6UJhK/giphy.gif",
"https://media.giphy.com/media/PhBf5O2mPItJm/giphy.gif",
"https://66.media.tumblr.com/0d8e767123ebd3b1cf2870ed0433a4a0/tumblr_inline_odd3fcGwAw1raprkq_400.gif",
"https://66.media.tumblr.com/c2b03e242ea5cd2b7b3f92de9a60b32a/tumblr_inline_odd3a4Zm4S1raprkq_500.gif",
"https://66.media.tumblr.com/e0e87cf77dfecb79d78afb94f12d3b17/tumblr_inline_oauhktAydg1raprkq_400.gif",
"https://66.media.tumblr.com/2d334e6df80465834cc410edc5f7fbc4/tumblr_inline_oa9i9maU1C1raprkq_400.gif",
"https://66.media.tumblr.com/94185caa6fa578cdf2492e62cb0666ab/tumblr_inline_o91sjrJiGK1raprkq_400.gif",
"https://66.media.tumblr.com/3edfac3344c0d902e10dc36a293bb9d9/tumblr_inline_o91sbhsOqL1raprkq_400.gif",
"https://66.media.tumblr.com/70c33cf96cdaced05c98c282186f79c8/tumblr_inline_o8bpkmLHEt1raprkq_400.gif",
"https://66.media.tumblr.com/9f9e82d2796baa356cc2b6bfa5e8b28e/tumblr_inline_o8bp9qj4DY1raprkq_400.gif",
}
const (
// OhMondayPluginName holds identifying name for the karma plugin
OhMondayPluginName = "ohMonday"
)
const (
defaultAtTime = "10:00"
)
var selectionRandom = rand.New(rand.NewSource(time.Now().Unix()))
// OhMonday holds the plugin data for the Oh Monday plugin
type OhMonday struct {
*slackscot.Plugin
channels []string
}
// NewOhMonday creates a new instance of the OhMonday plugin
func NewOhMonday(c *config.PluginConfig) (p *slackscot.Plugin, err error) {
c.SetDefault(atTimeKey, defaultAtTime)
o := new(OhMonday)
o.channels = c.GetStringSlice(ohMondayChannelIDsKey)
o.Plugin = plugin.New(OhMondayPluginName).
WithScheduledAction(actions.NewScheduledAction().
WithSchedule(schedule.New().
Every(time.Monday.String()).
AtTime(c.GetString(atTimeKey)).
Build()).
WithDescription("Start the week off with a nice greeting").
WithAction(o.sendGreeting).
Build()).
Build()
return o.Plugin, nil
}
func (o *OhMonday) sendGreeting() {
for _, c := range o.channels {
message := mondayPictures[selectionRandom.Intn(len(mondayPictures))]
o.Logger.Debugf("[%s] Sending morning greeting message [%s] to [%s]", OhMondayPluginName, message, c)
om := o.RealTimeMsgSender.NewOutgoingMessage(message, c)
o.RealTimeMsgSender.SendMessage(om)
}
}