mirror of https://github.com/velour/catbase.git
Fixes #10: Bot can quote and count himself
This commit is contained in:
parent
46fa81cd68
commit
42c934f091
31
bot/bot.go
31
bot/bot.go
|
@ -17,6 +17,8 @@ type Bot struct {
|
||||||
|
|
||||||
// Users holds information about all of our friends
|
// Users holds information about all of our friends
|
||||||
Users []User
|
Users []User
|
||||||
|
// Represents the bot
|
||||||
|
Me User
|
||||||
|
|
||||||
// Conn allows us to send messages and modify our connection state
|
// Conn allows us to send messages and modify our connection state
|
||||||
Conn *irc.Conn
|
Conn *irc.Conn
|
||||||
|
@ -129,6 +131,7 @@ func NewBot(config *config.Config, c *irc.Conn) *Bot {
|
||||||
Plugins: make(map[string]Handler),
|
Plugins: make(map[string]Handler),
|
||||||
PluginOrdering: make([]string, 0),
|
PluginOrdering: make([]string, 0),
|
||||||
Users: users,
|
Users: users,
|
||||||
|
Me: users[0],
|
||||||
Conn: c,
|
Conn: c,
|
||||||
DbSession: session,
|
DbSession: session,
|
||||||
Db: db,
|
Db: db,
|
||||||
|
@ -148,9 +151,37 @@ func (b *Bot) AddHandler(name string, h Handler) {
|
||||||
// Sends message to channel
|
// Sends message to channel
|
||||||
func (b *Bot) SendMessage(channel, message string) {
|
func (b *Bot) SendMessage(channel, message string) {
|
||||||
b.Conn.Privmsg(channel, message)
|
b.Conn.Privmsg(channel, message)
|
||||||
|
|
||||||
|
// Notify plugins that we've said something
|
||||||
|
b.selfSaid(channel, message)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sends action to channel
|
// Sends action to channel
|
||||||
func (b *Bot) SendAction(channel, message string) {
|
func (b *Bot) SendAction(channel, message string) {
|
||||||
b.Conn.Action(channel, message)
|
b.Conn.Action(channel, message)
|
||||||
|
|
||||||
|
// Notify plugins that we've said something
|
||||||
|
b.selfSaid(channel, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handles incomming PRIVMSG requests
|
||||||
|
func (b *Bot) MsgRecieved(conn *irc.Conn, line *irc.Line) {
|
||||||
|
msg := b.buildMessage(conn, line)
|
||||||
|
|
||||||
|
if strings.HasPrefix(msg.Body, "help") && msg.Command {
|
||||||
|
parts := strings.Fields(strings.ToLower(msg.Body))
|
||||||
|
b.checkHelp(msg.Channel, parts)
|
||||||
|
goto RET
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, name := range b.PluginOrdering {
|
||||||
|
p := b.Plugins[name]
|
||||||
|
if p.Message(msg) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RET:
|
||||||
|
b.logIn <- msg
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import irc "github.com/fluffle/goirc/client"
|
||||||
type Handler interface {
|
type Handler interface {
|
||||||
Message(message Message) bool
|
Message(message Message) bool
|
||||||
Event(kind string, message Message) bool
|
Event(kind string, message Message) bool
|
||||||
|
BotMessage(message Message) bool
|
||||||
Help(channel string, parts []string)
|
Help(channel string, parts []string)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,28 +153,6 @@ func (b *Bot) LastMessage() (Message, error) {
|
||||||
return log[len(log)-1], nil
|
return log[len(log)-1], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handles incomming PRIVMSG requests
|
|
||||||
func (b *Bot) MsgRecieved(conn *irc.Conn, line *irc.Line) {
|
|
||||||
msg := b.buildMessage(conn, line)
|
|
||||||
|
|
||||||
if strings.HasPrefix(msg.Body, "help") && msg.Command {
|
|
||||||
parts := strings.Fields(strings.ToLower(msg.Body))
|
|
||||||
b.checkHelp(msg.Channel, parts)
|
|
||||||
goto RET
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, name := range b.PluginOrdering {
|
|
||||||
p := b.Plugins[name]
|
|
||||||
if p.Message(msg) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RET:
|
|
||||||
b.logIn <- msg
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Take an input string and mutate it based on $vars in the string
|
// Take an input string and mutate it based on $vars in the string
|
||||||
func (b *Bot) Filter(message Message, input string) string {
|
func (b *Bot) Filter(message Message, input string) string {
|
||||||
rand.Seed(time.Now().Unix())
|
rand.Seed(time.Now().Unix())
|
||||||
|
@ -257,3 +236,23 @@ func (b *Bot) ActionRecieved(conn *irc.Conn, line *irc.Line) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send our own musings to the plugins
|
||||||
|
func (b *Bot) selfSaid(channel, message string) {
|
||||||
|
msg := Message{
|
||||||
|
User: &b.Me, // hack
|
||||||
|
Channel: channel,
|
||||||
|
Body: message,
|
||||||
|
Raw: message, // hack
|
||||||
|
Command: false,
|
||||||
|
Time: time.Now(),
|
||||||
|
Host: "0.0.0.0", // hack
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, name := range b.PluginOrdering {
|
||||||
|
p := b.Plugins[name]
|
||||||
|
if p.BotMessage(msg) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/chrissexton/alepale/bot"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/chrissexton/alepale/bot"
|
||||||
"labix.org/v2/mgo"
|
"labix.org/v2/mgo"
|
||||||
"labix.org/v2/mgo/bson"
|
"labix.org/v2/mgo/bson"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
@ -91,3 +91,8 @@ func (p *AdminPlugin) Help(channel string, parts []string) {
|
||||||
func (p *AdminPlugin) Event(kind string, message bot.Message) bool {
|
func (p *AdminPlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *AdminPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/chrissexton/alepale/bot"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/chrissexton/alepale/bot"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"labix.org/v2/mgo"
|
"labix.org/v2/mgo"
|
||||||
"labix.org/v2/mgo/bson"
|
"labix.org/v2/mgo/bson"
|
||||||
|
@ -369,3 +369,8 @@ func (p *BeersPlugin) checkUntappd(channel string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *BeersPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -189,3 +189,8 @@ func (p *CounterPlugin) Help(channel string, parts []string) {
|
||||||
func (p *CounterPlugin) Event(kind string, message bot.Message) bool {
|
func (p *CounterPlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *CounterPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -93,3 +93,8 @@ func (p *DicePlugin) Help(channel string, parts []string) {
|
||||||
func (p *DicePlugin) Event(kind string, message bot.Message) bool {
|
func (p *DicePlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *DicePlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -148,3 +148,8 @@ func (p *DowntimePlugin) Event(kind string, message bot.Message) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *DowntimePlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/chrissexton/alepale/bot"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/chrissexton/alepale/bot"
|
||||||
"labix.org/v2/mgo"
|
"labix.org/v2/mgo"
|
||||||
"labix.org/v2/mgo/bson"
|
"labix.org/v2/mgo/bson"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
@ -437,3 +437,8 @@ func (p *FactoidPlugin) factTimer(channel string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *FactoidPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/chrissexton/alepale/bot"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/chrissexton/alepale/bot"
|
||||||
"labix.org/v2/mgo"
|
"labix.org/v2/mgo"
|
||||||
"labix.org/v2/mgo/bson"
|
"labix.org/v2/mgo/bson"
|
||||||
"log"
|
"log"
|
||||||
|
@ -141,3 +141,8 @@ func (p *FirstPlugin) Help(channel string, parts []string) {
|
||||||
func (p *FirstPlugin) Event(kind string, message bot.Message) bool {
|
func (p *FirstPlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *FirstPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import "github.com/chrissexton/alepale/bot"
|
||||||
type Plugin interface {
|
type Plugin interface {
|
||||||
Message(message bot.Message) bool
|
Message(message bot.Message) bool
|
||||||
Event(kind string, message bot.Message) bool
|
Event(kind string, message bot.Message) bool
|
||||||
|
BotMessage(message bot.Message) bool
|
||||||
LoadData()
|
LoadData()
|
||||||
Help()
|
Help()
|
||||||
}
|
}
|
||||||
|
@ -61,6 +62,11 @@ func (p *TestPlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *TestPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
type PluginConfig struct {
|
type PluginConfig struct {
|
||||||
Name string
|
Name string
|
||||||
Values map[string]interface{}
|
Values map[string]interface{}
|
||||||
|
@ -94,3 +100,8 @@ func (fp FalsePlugin) LoadData() {
|
||||||
func (p *FalsePlugin) Event(kind string, message bot.Message) bool {
|
func (p *FalsePlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *FalsePlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"github.com/chrissexton/alepale/bot"
|
"github.com/chrissexton/alepale/bot"
|
||||||
"labix.org/v2/mgo"
|
"labix.org/v2/mgo"
|
||||||
"labix.org/v2/mgo/bson"
|
"labix.org/v2/mgo/bson"
|
||||||
|
"log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -37,7 +38,6 @@ func NewRememberPlugin(b *bot.Bot) *RememberPlugin {
|
||||||
// users message. Otherwise, the function returns false and the bot continues
|
// users message. Otherwise, the function returns false and the bot continues
|
||||||
// execution of other plugins.
|
// execution of other plugins.
|
||||||
func (p *RememberPlugin) Message(message bot.Message) bool {
|
func (p *RememberPlugin) Message(message bot.Message) bool {
|
||||||
// This bot does not reply to anything
|
|
||||||
|
|
||||||
if message.Body == "quote" && message.Command {
|
if message.Body == "quote" && message.Command {
|
||||||
q := p.randQuote()
|
q := p.randQuote()
|
||||||
|
@ -58,7 +58,11 @@ func (p *RememberPlugin) Message(message bot.Message) bool {
|
||||||
|
|
||||||
for i := len(p.Log[message.Channel]) - 1; i >= 0; i-- {
|
for i := len(p.Log[message.Channel]) - 1; i >= 0; i-- {
|
||||||
entry := p.Log[message.Channel][i]
|
entry := p.Log[message.Channel][i]
|
||||||
if entry.User.Name == nick && strings.Contains(entry.Body, snip) {
|
if strings.ToLower(entry.User.Name) == strings.ToLower(nick) &&
|
||||||
|
strings.Contains(
|
||||||
|
strings.ToLower(entry.Body),
|
||||||
|
strings.ToLower(snip),
|
||||||
|
) {
|
||||||
// insert new remember entry
|
// insert new remember entry
|
||||||
var msg string
|
var msg string
|
||||||
|
|
||||||
|
@ -171,3 +175,19 @@ func (p *RememberPlugin) quoteTimer(channel string) {
|
||||||
func (p *RememberPlugin) Event(kind string, message bot.Message) bool {
|
func (p *RememberPlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Record what the bot says in the log
|
||||||
|
func (p *RememberPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
log.Printf("Recieved: %+v\n", message)
|
||||||
|
p.Log[message.Channel] = append(p.Log[message.Channel], message)
|
||||||
|
|
||||||
|
for ch, _ := range p.Log {
|
||||||
|
log.Printf("Channel: %+v\n", ch)
|
||||||
|
for _, msg := range p.Log[ch] {
|
||||||
|
log.Println(msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Printf("Log:\n%+v\n", p.Log)
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -39,3 +39,8 @@ func (p *SkeletonPlugin) Help(channel string, parts []string) {
|
||||||
func (p *SkeletonPlugin) Event(kind string, message bot.Message) bool {
|
func (p *SkeletonPlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *SkeletonPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/chrissexton/alepale/bot"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/chrissexton/alepale/bot"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -105,3 +105,8 @@ func (p *TalkerPlugin) Event(kind string, message bot.Message) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *TalkerPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/chrissexton/alepale/bot"
|
|
||||||
"bitbucket.org/phlyingpenguin/twitter"
|
"bitbucket.org/phlyingpenguin/twitter"
|
||||||
|
"github.com/chrissexton/alepale/bot"
|
||||||
"github.com/garyburd/go-oauth/oauth"
|
"github.com/garyburd/go-oauth/oauth"
|
||||||
"labix.org/v2/mgo"
|
"labix.org/v2/mgo"
|
||||||
"labix.org/v2/mgo/bson"
|
"labix.org/v2/mgo/bson"
|
||||||
|
@ -129,3 +129,8 @@ func (p *TwitterPlugin) checkMessages() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *TwitterPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
@ -52,3 +52,8 @@ func (p *YourPlugin) Help(channel string, parts []string) {
|
||||||
func (p *YourPlugin) Event(kind string, message bot.Message) bool {
|
func (p *YourPlugin) Event(kind string, message bot.Message) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler for bot's own messages
|
||||||
|
func (p *YourPlugin) BotMessage(message bot.Message) bool {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue