From 3e83d30e71ab21c2608ba28887d74113e0756cec Mon Sep 17 00:00:00 2001 From: raylu Date: Wed, 13 Oct 2010 21:16:16 -0400 Subject: [PATCH] Add a command system --- Makefile | 1 + handler.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ rbot.conf.example | 1 + rbot.go | 6 +++++- 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 handler.go diff --git a/Makefile b/Makefile index 8751f02..1502278 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ include $(GOROOT)/src/Make.inc TARG=rbot GOFILES=\ rbot.go\ + handler.go\ include $(GOROOT)/src/Make.cmd diff --git a/handler.go b/handler.go new file mode 100644 index 0000000..e1db5d5 --- /dev/null +++ b/handler.go @@ -0,0 +1,44 @@ +package main + +import ( + "irc" + //"fmt" + "strings" +) + +var commands = map [string]func(*irc.Conn, string, string, string) { + "kill": kill, +} + +func handlePrivmsg(conn *irc.Conn, line *irc.Line) { + target := line.Args[0] + if target[0] == '#' || target[0] == '&' { + // message to a channel + command(conn, line.Nick, line.Text, target) + } else if target == nick { + // message to us + command(conn, line.Nick, line.Text, target) + } +} + +func command(conn *irc.Conn, nick, text, target string) { + if text[:len(trigger)] != trigger { + return + } + split := strings.Split(text, " ", 2) + if len(split[0]) < 2 { + return + } + handler := commands[split[0][1:]] + if handler != nil { + if len(split) > 1 { + handler(conn, nick, split[1], target) + } else { + handler(conn, nick, "", target) + } + } +} + +func kill(conn *irc.Conn, nick, args, target string) { + conn.Action(target, "dies.") +} diff --git a/rbot.conf.example b/rbot.conf.example index 923440c..ce22100 100644 --- a/rbot.conf.example +++ b/rbot.conf.example @@ -3,5 +3,6 @@ server: irc.rizon.net nick: rbot user: rbot ssl: false +trigger: ! [#raylu] diff --git a/rbot.go b/rbot.go index 1e78a2f..8811b5a 100644 --- a/rbot.go +++ b/rbot.go @@ -7,7 +7,7 @@ import ( "github.com/kless/goconfig/config" ) -var nick, server, user string +var nick, server, user, trigger string var ssl bool var channels []string @@ -22,6 +22,7 @@ func main() { conn.Join(c) } }) + c.AddHandler("privmsg", handlePrivmsg) for { fmt.Printf("Connecting to %s...\n", server) @@ -62,4 +63,7 @@ func parseConfig(confFile string) { i++ } } + + trigger, err = conf.String("DEFAULT", "trigger") + if err != nil { fmt.Printf("Config error: %s\n", err); os.Exit(1) } }