Added plugin ordering so that all queries are handled by the correct plugin

This commit is contained in:
Chris Sexton 2012-08-26 12:15:26 -04:00
parent c50a908af5
commit 94063c3967
2 changed files with 15 additions and 10 deletions

View File

@ -9,7 +9,8 @@ import "strings"
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 map[string]Handler
Plugins map[string]Handler
PluginOrdering []string
// Users holds information about all of our friends
Users []User
@ -59,17 +60,19 @@ func NewBot(config *config.Config, c *irc.Conn) *Bot {
db := session.DB(config.DbName)
return &Bot{
Config: config,
Plugins: make(map[string]Handler),
Users: make([]User, 1),
Conn: c,
DbSession: session,
Db: db,
Version: config.Version,
Config: config,
Plugins: make(map[string]Handler),
PluginOrdering: make([]string, 0),
Users: make([]User, 0),
Conn: c,
DbSession: session,
Db: db,
Version: config.Version,
}
}
// Adds a constructed handler to the bots handlers list
func (b *Bot) AddHandler(name string, h Handler) {
b.Plugins[strings.ToLower(name)] = h
b.PluginOrdering = append(b.PluginOrdering, name)
}

View File

@ -130,7 +130,8 @@ func (b *Bot) MsgRecieved(conn *irc.Conn, line *irc.Line) {
return
}
for _, p := range b.Plugins {
for _, name := range b.PluginOrdering {
p := b.Plugins[name]
if p.Message(msg) {
break
}
@ -163,7 +164,8 @@ func (b *Bot) Help(channel string, parts []string) {
func (b *Bot) UserJoined(conn *irc.Conn, line *irc.Line) {
msg := b.buildMessage(conn, line)
for _, p := range b.Plugins {
for _, name := range b.PluginOrdering {
p := b.Plugins[name]
if p.Event(line.Cmd, msg) {
break
}