mirror of https://github.com/velour/catbase.git
Added first plugin to track who said first in the channel
This commit is contained in:
parent
64d0d73734
commit
6434b27626
1
main.go
1
main.go
|
@ -44,6 +44,7 @@ func main() {
|
|||
b := bot.NewBot(config, c)
|
||||
// b.AddHandler(plugins.NewTestPlugin(b))
|
||||
b.AddHandler("admin", plugins.NewAdminPlugin(b))
|
||||
b.AddHandler("first", plugins.NewFirstPlugin(b))
|
||||
b.AddHandler("downtime", plugins.NewDowntimePlugin(b))
|
||||
b.AddHandler("talker", plugins.NewTalkerPlugin(b))
|
||||
b.AddHandler("dice", plugins.NewDicePlugin(b))
|
||||
|
|
|
@ -0,0 +1,106 @@
|
|||
package plugins
|
||||
|
||||
import (
|
||||
"bitbucket.org/phlyingpenguin/godeepintir/bot"
|
||||
"fmt"
|
||||
"labix.org/v2/mgo"
|
||||
"labix.org/v2/mgo/bson"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// This is a first plugin to serve as an example and quick copy/paste for new plugins.
|
||||
|
||||
type FirstPlugin struct {
|
||||
First *FirstEntry
|
||||
Bot *bot.Bot
|
||||
Coll *mgo.Collection
|
||||
}
|
||||
|
||||
type FirstEntry struct {
|
||||
Day time.Time
|
||||
Time time.Time
|
||||
Body string
|
||||
Nick string
|
||||
}
|
||||
|
||||
// NewFirstPlugin creates a new FirstPlugin with the Plugin interface
|
||||
func NewFirstPlugin(b *bot.Bot) *FirstPlugin {
|
||||
coll := b.Db.C("first")
|
||||
var firsts []FirstEntry
|
||||
query := bson.M{"day": midnight(time.Now().UTC())}
|
||||
coll.Find(query).All(&firsts)
|
||||
|
||||
return &FirstPlugin{
|
||||
Bot: b,
|
||||
Coll: coll,
|
||||
First: &firsts[0],
|
||||
}
|
||||
}
|
||||
|
||||
func midnight(t time.Time) time.Time {
|
||||
y, m, d := t.Date()
|
||||
return time.Date(y, m, d, 0, 0, 0, 0, time.UTC)
|
||||
}
|
||||
|
||||
func isToday(t time.Time) bool {
|
||||
t0 := midnight(t)
|
||||
return t0.Before(midnight(time.Now()))
|
||||
}
|
||||
|
||||
// Message responds to the bot hook on recieving messages.
|
||||
// This function returns true if the plugin responds in a meaningful way to the users message.
|
||||
// Otherwise, the function returns false and the bot continues execution of other plugins.
|
||||
func (p *FirstPlugin) Message(message bot.Message) bool {
|
||||
// This bot does not reply to anything
|
||||
|
||||
if p.First == nil {
|
||||
p.recordFirst(message)
|
||||
} else {
|
||||
if isToday(p.First.Time) {
|
||||
p.recordFirst(message)
|
||||
}
|
||||
}
|
||||
|
||||
r := strings.NewReplacer("'", "", "\"", "", ",", "", ".", "", ":", "",
|
||||
"?", "", "!", "")
|
||||
msg := strings.ToLower(message.Body)
|
||||
if r.Replace(msg) == "whos on first" {
|
||||
c := message.Channel
|
||||
if p.First != nil {
|
||||
p.Bot.SendMessage(c, fmt.Sprintf("%s had first at %s with the message: \"%s\"",
|
||||
p.First.Nick, p.First.Time.Format(time.Kitchen), p.First.Body))
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (p *FirstPlugin) recordFirst(message bot.Message) {
|
||||
log.Println("Recording first: ", message.User.Name, ":", message.Body)
|
||||
p.First = &FirstEntry{
|
||||
Day: midnight(time.Now()),
|
||||
Time: message.Time,
|
||||
Body: message.Body,
|
||||
Nick: message.User.Name,
|
||||
}
|
||||
p.Coll.Insert(p.First)
|
||||
}
|
||||
|
||||
// LoadData imports any configuration data into the plugin. This is not strictly necessary other
|
||||
// than the fact that the Plugin interface demands it exist. This may be deprecated at a later
|
||||
// date.
|
||||
func (p *FirstPlugin) LoadData() {
|
||||
// This bot has no data to load
|
||||
}
|
||||
|
||||
// Help responds to help requests. Every plugin must implement a help function.
|
||||
func (p *FirstPlugin) Help(channel string, parts []string) {
|
||||
p.Bot.SendMessage(channel, "Sorry, First does not do a goddamn thing.")
|
||||
}
|
||||
|
||||
// Empty event handler because this plugin does not do anything on event recv
|
||||
func (p *FirstPlugin) Event(kind string, message bot.Message) bool {
|
||||
return false
|
||||
}
|
Loading…
Reference in New Issue