mirror of https://github.com/velour/catbase.git
It looks like the beers plugin is faithfully copied over to the new bot
framework. I'm not sure that commands vs non-commands are well represented in this as compared to the old bot.
This commit is contained in:
parent
1dafd3af6e
commit
9990decfc7
|
@ -36,7 +36,7 @@ func (b *Bot) checkuser(nick string) *User {
|
|||
|
||||
// Checks to see if the user is asking for help, returns true if so and handles the situation.
|
||||
func (b *Bot) checkHelp(channel string, parts []string) {
|
||||
if len(parts) > 1 {
|
||||
if len(parts) == 1 {
|
||||
// just print out a list of help topics
|
||||
topics := "Help topics: about"
|
||||
for name, _ := range b.Plugins {
|
||||
|
|
|
@ -3,6 +3,8 @@ package plugins
|
|||
import (
|
||||
"bitbucket.org/phlyingpenguin/godeepintir/bot"
|
||||
"fmt"
|
||||
"labix.org/v2/mgo"
|
||||
"labix.org/v2/mgo/bson"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -12,20 +14,44 @@ import (
|
|||
|
||||
type BeersPlugin struct {
|
||||
Bot *bot.Bot
|
||||
Coll *mgo.Collection
|
||||
}
|
||||
|
||||
// NewBeersPlugin creates a new BeersPlugin with the Plugin interface
|
||||
func NewBeersPlugin(bot *bot.Bot) *BeersPlugin {
|
||||
return &BeersPlugin{
|
||||
p := BeersPlugin{
|
||||
Bot: bot,
|
||||
}
|
||||
p.LoadData()
|
||||
return &p
|
||||
}
|
||||
|
||||
type userBeers struct {
|
||||
Nick string
|
||||
Beercount int
|
||||
Lastdrunk time.Time
|
||||
Momentum float64
|
||||
New bool
|
||||
}
|
||||
|
||||
func (u *userBeers) Save(coll *mgo.Collection) {
|
||||
_, err := coll.Upsert(bson.M{"nick": u.Nick}, u)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
type UserBeers struct {
|
||||
Nick string
|
||||
berrcount int
|
||||
lastdrunk time.Time
|
||||
momentum float64
|
||||
func getUserBeers(coll *mgo.Collection, nick string) *userBeers {
|
||||
ub := userBeers{New: true}
|
||||
err := coll.Find(bson.M{"nick": nick}).One(&ub)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if ub.New == true {
|
||||
ub.New = false
|
||||
ub.Save(coll)
|
||||
}
|
||||
return &ub
|
||||
}
|
||||
|
||||
// Message responds to the bot hook on recieving messages.
|
||||
|
@ -51,10 +77,11 @@ func (p *BeersPlugin) Message(message bot.Message) bool {
|
|||
if err != nil {
|
||||
// if it's not a number, maybe it's a nick!
|
||||
if p.doIKnow(parts[2]) {
|
||||
p.reportCount(parts[2], false)
|
||||
p.reportCount(parts[2], channel, false)
|
||||
} else {
|
||||
msg := fmt.Sprintf("Sorry, I don't know %s.", parts[2])
|
||||
p.Bot.SendMessage(channel, msg)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -64,26 +91,36 @@ func (p *BeersPlugin) Message(message bot.Message) bool {
|
|||
p.Bot.SendMessage(channel, msg)
|
||||
}
|
||||
if parts[1] == "+=" {
|
||||
p.setBeers(user, p.getBeers(user)+count)
|
||||
p.setBeers(user, p.getBeers(nick)+count)
|
||||
p.reportCount(nick, channel, true)
|
||||
} else if parts[1] == "=" {
|
||||
if count == 0 {
|
||||
p.puke(user)
|
||||
p.puke(user, channel)
|
||||
} else {
|
||||
p.setBeers(user, count)
|
||||
p.reportCount(nick, true)
|
||||
p.reportCount(nick, channel, true)
|
||||
}
|
||||
} else {
|
||||
p.Bot.SendMessage(channel, "I don't know your math.")
|
||||
}
|
||||
} else if len(parts) == 1 {
|
||||
p.reportCount(nick, channel, true)
|
||||
}
|
||||
|
||||
// no matter what, if we're in here, then we've responded
|
||||
return true
|
||||
} else if parts[0] == "beers++" {
|
||||
p.addBeers(user)
|
||||
p.reportCount(nick, channel, true)
|
||||
return true
|
||||
} else if parts[0] == "puke" {
|
||||
p.puke(user, channel)
|
||||
return true
|
||||
}
|
||||
|
||||
if message.Command && parts[0] == "imbibe" {
|
||||
p.setBeers(user, p.getBeers(user)+1)
|
||||
p.reportCount(nick, true)
|
||||
p.addBeers(user)
|
||||
p.reportCount(nick, channel, true)
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -94,7 +131,7 @@ func (p *BeersPlugin) Message(message bot.Message) bool {
|
|||
// than the fact that the Plugin interface demands it exist. This may be deprecated at a later
|
||||
// date.
|
||||
func (p *BeersPlugin) LoadData() {
|
||||
// This bot has no data to load
|
||||
p.Coll = p.Bot.Db.C("beers")
|
||||
}
|
||||
|
||||
// Help responds to help requests. Every plugin must implement a help function.
|
||||
|
@ -103,24 +140,41 @@ func (p *BeersPlugin) Help(channel string, parts []string) {
|
|||
}
|
||||
|
||||
func (p *BeersPlugin) setBeers(user *bot.User, amount int) {
|
||||
ub := getUserBeers(p.Coll, user.Name)
|
||||
ub.Beercount = amount
|
||||
ub.Save(p.Coll)
|
||||
}
|
||||
|
||||
func (p *BeersPlugin) addBeers(user *bot.User) {
|
||||
p.setBeers(user, p.getBeers(user.Name)+1)
|
||||
}
|
||||
|
||||
func (p *BeersPlugin) getBeers(user *bot.User) int {
|
||||
return 0
|
||||
func (p *BeersPlugin) getBeers(nick string) int {
|
||||
ub := getUserBeers(p.Coll, nick)
|
||||
|
||||
return ub.Beercount
|
||||
}
|
||||
|
||||
func (p *BeersPlugin) hasBeers(user *bot.User) {
|
||||
func (p *BeersPlugin) reportCount(nick, channel string, himself bool) {
|
||||
beers := p.getBeers(nick)
|
||||
msg := fmt.Sprintf("%s has had %d beers so far.", nick, beers)
|
||||
if himself {
|
||||
msg = fmt.Sprintf("You've had %d beers so far, %s.", beers, nick)
|
||||
}
|
||||
p.Bot.SendMessage(channel, msg)
|
||||
fmt.Println("I should have reported a beer count!")
|
||||
}
|
||||
|
||||
func (p *BeersPlugin) reportCount(user string, himself bool) {
|
||||
func (p *BeersPlugin) puke(user *bot.User, channel string) {
|
||||
p.setBeers(user, 0)
|
||||
msg := fmt.Sprintf("Ohhhhhh, and a reversal of fortune for %s!", user.Name)
|
||||
p.Bot.SendMessage(channel, msg)
|
||||
}
|
||||
|
||||
func (p *BeersPlugin) puke(user *bot.User) {
|
||||
func (p *BeersPlugin) doIKnow(nick string) bool {
|
||||
count, err := p.Coll.Find(bson.M{"nick": nick}).Count()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
func (p *BeersPlugin) doIKnow(user string) bool {
|
||||
return false
|
||||
return count > 0
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue