From f22db3b8ba23c66dce23602c5e948aa7b6d5af31 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 21 Jul 2015 17:06:35 +0200 Subject: Split a bit --- rfc.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 rfc.go (limited to 'rfc.go') diff --git a/rfc.go b/rfc.go new file mode 100644 index 0000000..69c0b7e --- /dev/null +++ b/rfc.go @@ -0,0 +1,52 @@ +package main + +import ( + "fmt" + "log" + "strconv" + "strings" + + "dim13.org/rfc" + irc "github.com/fluffle/goirc/client" +) + +var rfcMap = make(map[int]rfc.Entry) + +type RFC struct{ Command } + +func (_ RFC) Timeout() bool { return false } +func (_ RFC) WithArgs(n int) bool { return n == 2 } +func (_ RFC) Handle(conn *irc.Conn, line *irc.Line) { + if q := strings.Fields(line.Text()); len(q) == 2 { + if id, err := strconv.Atoi(q[1]); err != nil { + conn.Privmsg(line.Target(), err.Error()) + } else { + if entry, ok := rfcMap[id]; ok { + s := fmt.Sprint(entry) + conn.Privmsg(line.Target(), s) + } else { + conn.Privmsg(line.Target(), "not found") + } + } + } +} + +func init() { + fd, err := rfc.Open() + if err != nil { + log.Fatal(err) + } + entries, err := rfc.Decode(fd) + if err != nil { + log.Fatal(err) + } + for _, e := range entries { + id := e.ID() + rfcMap[id] = e + } + Register("rfc", &RFC{ + Command{ + Help: "Perform RFC lookup", + }, + }) +} -- cgit v1.2.3