-
Notifications
You must be signed in to change notification settings - Fork 10
/
ohmonday.go
110 lines (97 loc) · 4.58 KB
/
ohmonday.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// 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)
}
}