summaryrefslogtreecommitdiff
path: root/rfc.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-07-21 17:06:35 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-07-21 17:06:35 +0200
commitf22db3b8ba23c66dce23602c5e948aa7b6d5af31 (patch)
tree71eb4a2b0a636b739cea9f857b632fcf898be97e /rfc.go
parent612217ce228a955bae03b2b5f0552abbc84c9f03 (diff)
Split a bit
Diffstat (limited to 'rfc.go')
-rw-r--r--rfc.go52
1 files changed, 52 insertions, 0 deletions
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",
+ },
+ })
+}