mirror of https://github.com/velour/catbase.git
Added the felpsbot talker which exhibits the formatter a little bit. This is a
function that will be used to transform strings that include $variables into strings that include the original meaning. This eventually needs to be some kind of configurable thing so that new $vars can be added dynamically, however some of the $vars are static and need not change.
This commit is contained in:
parent
e1c841ecae
commit
f31362fca4
21
bot/bot.go
21
bot/bot.go
|
@ -6,10 +6,19 @@ import "godeepintir/config"
|
||||||
|
|
||||||
// Bot type provides storage for bot-wide information, configs, and database connections
|
// Bot type provides storage for bot-wide information, configs, and database connections
|
||||||
type Bot struct {
|
type Bot struct {
|
||||||
|
// Each plugin must be registered in our plugins handler. To come: a map so that this
|
||||||
|
// will allow plugins to respond to specific kinds of events
|
||||||
Plugins []Handler
|
Plugins []Handler
|
||||||
Users []User
|
|
||||||
Conn *irc.Conn
|
// Users holds information about all of our friends
|
||||||
// mongodb connection will go here
|
Users []User
|
||||||
|
|
||||||
|
// Conn allows us to send messages and modify our connection state
|
||||||
|
Conn *irc.Conn
|
||||||
|
|
||||||
|
Config *config.Config
|
||||||
|
|
||||||
|
// Mongo connection and db allow botwide access to the database
|
||||||
DbSession *mgo.Session
|
DbSession *mgo.Session
|
||||||
Db *mgo.Database
|
Db *mgo.Database
|
||||||
}
|
}
|
||||||
|
@ -29,6 +38,11 @@ type User struct {
|
||||||
MessageLog []string
|
MessageLog []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Message struct {
|
||||||
|
User *User
|
||||||
|
Channel, Body string
|
||||||
|
}
|
||||||
|
|
||||||
// NewBot creates a Bot for a given connection and set of handlers. The handlers must not
|
// NewBot creates a Bot for a given connection and set of handlers. The handlers must not
|
||||||
// require the bot as input for their creation (so use AddHandler instead to add handlers)
|
// require the bot as input for their creation (so use AddHandler instead to add handlers)
|
||||||
func NewBot(config *config.Config, c *irc.Conn, p ...Handler) *Bot {
|
func NewBot(config *config.Config, c *irc.Conn, p ...Handler) *Bot {
|
||||||
|
@ -40,6 +54,7 @@ func NewBot(config *config.Config, c *irc.Conn, p ...Handler) *Bot {
|
||||||
db := session.DB(config.DbName)
|
db := session.DB(config.DbName)
|
||||||
|
|
||||||
return &Bot{
|
return &Bot{
|
||||||
|
Config: config,
|
||||||
Plugins: p,
|
Plugins: p,
|
||||||
Users: make([]User, 10),
|
Users: make([]User, 10),
|
||||||
Conn: c,
|
Conn: c,
|
||||||
|
|
|
@ -2,12 +2,13 @@ package bot
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
import irc "github.com/fluffle/goirc/client"
|
import irc "github.com/fluffle/goirc/client"
|
||||||
|
|
||||||
// Interface used for compatibility with the Plugin interface
|
// Interface used for compatibility with the Plugin interface
|
||||||
type Handler interface {
|
type Handler interface {
|
||||||
Message(user *User, channel, message string) bool
|
Message(message Message) bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checks to see if our user exists and if any changes have occured to it
|
// Checks to see if our user exists and if any changes have occured to it
|
||||||
|
@ -44,14 +45,26 @@ func (b *Bot) Msg_recieved(conn *irc.Conn, line *irc.Line) {
|
||||||
|
|
||||||
fmt.Printf("In %s, %s said: '%s'\n", channel, line.Nick, message)
|
fmt.Printf("In %s, %s said: '%s'\n", channel, line.Nick, message)
|
||||||
for _, p := range b.Plugins {
|
for _, p := range b.Plugins {
|
||||||
if p.Message(user, channel, message) {
|
msg := Message{
|
||||||
|
User: user,
|
||||||
|
Channel: channel,
|
||||||
|
Body: message,
|
||||||
|
}
|
||||||
|
if p.Message(msg) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 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(input string) string {
|
func (b *Bot) Filter(message Message, input string) string {
|
||||||
|
if strings.Contains(input, "$NICK") {
|
||||||
|
nick := strings.ToUpper(message.User.Name)
|
||||||
|
input = strings.Replace(input, "$NICK", nick, -1)
|
||||||
|
} else if strings.Contains(input, "$nick") {
|
||||||
|
nick := message.User.Name
|
||||||
|
input = strings.Replace(input, "$nick", nick, -1)
|
||||||
|
}
|
||||||
return input
|
return input
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
"Dbname": "deepintir",
|
"Dbname": "deepintir",
|
||||||
"Dbserver": "127.0.0.1",
|
"Dbserver": "127.0.0.1",
|
||||||
"Channels": ["#AlePaleTest"],
|
"Channels": ["#AlePaleTest"],
|
||||||
|
"MainChannel": "#AlePaleTest",
|
||||||
"Plugins": [],
|
"Plugins": [],
|
||||||
"Server": "127.0.0.1:6666",
|
"Server": "127.0.0.1:6666",
|
||||||
"Nick": "AlePaleTest",
|
"Nick": "AlePaleTest",
|
||||||
|
|
|
@ -10,6 +10,7 @@ type Config struct {
|
||||||
DbName string
|
DbName string
|
||||||
DbServer string
|
DbServer string
|
||||||
Channels []string
|
Channels []string
|
||||||
|
MainChannel string
|
||||||
Plugins []string
|
Plugins []string
|
||||||
Nick, Server, Pass string
|
Nick, Server, Pass string
|
||||||
}
|
}
|
||||||
|
|
3
main.go
3
main.go
|
@ -42,7 +42,8 @@ func main() {
|
||||||
func(conn *irc.Conn, line *irc.Line) { quit <- true })
|
func(conn *irc.Conn, line *irc.Line) { quit <- true })
|
||||||
|
|
||||||
b := bot.NewBot(config, c)
|
b := bot.NewBot(config, c)
|
||||||
b.AddHandler(plugins.NewTestPlugin(b))
|
// b.AddHandler(plugins.NewTestPlugin(b))
|
||||||
|
b.AddHandler(plugins.NewTalkerPlugin(b))
|
||||||
|
|
||||||
c.AddHandler("PRIVMSG", func(conn *irc.Conn, line *irc.Line) {
|
c.AddHandler("PRIVMSG", func(conn *irc.Conn, line *irc.Line) {
|
||||||
b.Msg_recieved(conn, line)
|
b.Msg_recieved(conn, line)
|
||||||
|
|
|
@ -5,7 +5,7 @@ import "godeepintir/bot"
|
||||||
|
|
||||||
// Plugin interface defines the methods needed to accept a plugin
|
// Plugin interface defines the methods needed to accept a plugin
|
||||||
type Plugin interface {
|
type Plugin interface {
|
||||||
Message(user *bot.User, channel, message string) bool
|
Message(message bot.Message) bool
|
||||||
LoadData()
|
LoadData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,10 +33,14 @@ func (p *TestPlugin) LoadData() {
|
||||||
p.Feces = config.Values["Feces"].(string)
|
p.Feces = config.Values["Feces"].(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *TestPlugin) Message(user *bot.User, channel, message string) bool {
|
func (p *TestPlugin) Message(message bot.Message) bool {
|
||||||
fmt.Println(user, message)
|
user := message.User
|
||||||
|
channel := message.Channel
|
||||||
|
body := message.Body
|
||||||
|
|
||||||
|
fmt.Println(user, body)
|
||||||
fmt.Println("My plugin name is:", p.Name, " My feces are:", p.Feces)
|
fmt.Println("My plugin name is:", p.Name, " My feces are:", p.Feces)
|
||||||
p.Bot.SendMessage(channel, message)
|
p.Bot.SendMessage(channel, body)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
package plugins
|
||||||
|
|
||||||
|
import (
|
||||||
|
"godeepintir/bot"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TalkerPlugin struct {
|
||||||
|
Bot *bot.Bot
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewTalkerPlugin(bot *bot.Bot) *TalkerPlugin {
|
||||||
|
return &TalkerPlugin{
|
||||||
|
Bot: bot,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *TalkerPlugin) Message(message bot.Message) bool {
|
||||||
|
channel := message.Channel
|
||||||
|
body := message.Body
|
||||||
|
|
||||||
|
if channel != p.Bot.Config.MainChannel {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
lowermessage := strings.ToLower(body)
|
||||||
|
|
||||||
|
if strings.Contains(lowermessage, "felps") || strings.Contains(lowermessage, "fredfelps") {
|
||||||
|
outmsg := p.Bot.Filter(message, "GOD HATES $NICK")
|
||||||
|
p.Bot.SendMessage(channel, outmsg)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *TalkerPlugin) LoadData() {
|
||||||
|
// no data to load yet?
|
||||||
|
}
|
Loading…
Reference in New Issue