From 5fe432b7c1d6d626699e8091005a0de788d8168a Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 20 Dec 2016 23:05:09 +0100 Subject: links --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index 84b0d6b..9dcf9d6 100644 --- a/main.go +++ b/main.go @@ -32,7 +32,7 @@ func main() { c.HandleFunc(irc.PRIVMSG, func(conn *irc.Conn, line *irc.Line) { go Dispatch(conn, line) - go ExtractLinks(conn, line) + go Links(conn, line) if line.Public() && line.Nick != conn.Me().Nick { if isFlood(line.Text()) { log.Println("flood", line.Nick) -- cgit v1.2.3 From d3203ad6128ec64ce5422e7609b71f518bc9a01a Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 20 Dec 2016 23:11:53 +0100 Subject: Watch news --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index 9dcf9d6..1abe5e1 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ func main() { c.HandleFunc(irc.CONNECTED, func(conn *irc.Conn, line *irc.Line) { conn.Join(*room) - ShowNews(conn, *room) + go ShowNews(conn, *room) }) c.HandleFunc(irc.KICK, func(conn *irc.Conn, line *irc.Line) { -- cgit v1.2.3 From 8352e63f1604786e5a37312910a78ef78cfc296d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 20 Dec 2016 23:14:33 +0100 Subject: Watch news --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index 1abe5e1..0ca82c3 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ func main() { c.HandleFunc(irc.CONNECTED, func(conn *irc.Conn, line *irc.Line) { conn.Join(*room) - go ShowNews(conn, *room) + go WatchNews(conn, *room) }) c.HandleFunc(irc.KICK, func(conn *irc.Conn, line *irc.Line) { -- cgit v1.2.3 From c2eaea7276945057ac18b31d06b79a6326932b57 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 20 Dec 2016 23:50:27 +0100 Subject: cleanup main --- main.go | 84 +++++++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 61 insertions(+), 23 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 0ca82c3..442ef56 100644 --- a/main.go +++ b/main.go @@ -7,45 +7,83 @@ import ( irc "github.com/fluffle/goirc/client" ) -func main() { - node := flag.String("node", "irc.freenode.org:6667", "IRC Server") - room := flag.String("room", "#lor", "IRC Channel") - name := flag.String("name", "dim13", "Bots Name") - flag.Parse() - - c := irc.SimpleClient(*name) - c.EnableStateTracking() +func notify(conn *irc.Conn, target string) chan string { + c := make(chan string) + go func() { + for msg := range c { + conn.Notice(target, msg) + } + }() + return c +} - discon := make(chan struct{}) - c.HandleFunc(irc.DISCONNECTED, func(conn *irc.Conn, line *irc.Line) { - close(discon) - }) +func kicker(conn *irc.Conn, target string) chan string { + c := make(chan string) + go func() { + for nick := range c { + conn.Kick(target, nick) + } + }() + return c +} - c.HandleFunc(irc.CONNECTED, func(conn *irc.Conn, line *irc.Line) { - conn.Join(*room) - go WatchNews(conn, *room) - }) +func join(room string) irc.HandlerFunc { + return func(conn *irc.Conn, _ *irc.Line) { + conn.Join(room) + } +} - c.HandleFunc(irc.KICK, func(conn *irc.Conn, line *irc.Line) { - conn.Join(*room) - }) +func discon(c chan struct{}) irc.HandlerFunc { + return func(_ *irc.Conn, _ *irc.Line) { + close(c) + } +} - c.HandleFunc(irc.PRIVMSG, func(conn *irc.Conn, line *irc.Line) { +func privmsg(room string) irc.HandlerFunc { + return func(conn *irc.Conn, line *irc.Line) { go Dispatch(conn, line) go Links(conn, line) if line.Public() && line.Nick != conn.Me().Nick { if isFlood(line.Text()) { log.Println("flood", line.Nick) - conn.Kick(*room, line.Nick, "flood") + conn.Kick(room, line.Nick, "flood") } Push(line) } - }) + } +} + +func main() { + node := flag.String("node", "irc.freenode.org:6667", "IRC Server") + room := flag.String("room", "#lor", "IRC Channel") + name := flag.String("name", "dim13", "Bots Name") + flag.Parse() + + c := irc.SimpleClient(*name) + c.EnableStateTracking() // XXX + done := make(chan struct{}) + + // setup event handler + handler := []struct { + ev string + f irc.HandlerFunc + }{ + {irc.DISCONNECTED, discon(done)}, + {irc.CONNECTED, join(*room)}, + {irc.KICK, join(*room)}, + {irc.PRIVMSG, privmsg(*room)}, + } + for _, h := range handler { + c.HandleFunc(h.ev, h.f) + } log.Println("Connect to", *node) if err := c.ConnectTo(*node); err != nil { log.Fatal(err) } - <-discon + + go WatchNews(c, *room) + + <-done log.Println("Disconnected") } -- cgit v1.2.3 From 44b2a071555235d8e7c1d64d85541ade50527e3b Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 20 Dec 2016 23:58:49 +0100 Subject: news watcher --- main.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 442ef56..1b8ac33 100644 --- a/main.go +++ b/main.go @@ -17,11 +17,11 @@ func notify(conn *irc.Conn, target string) chan string { return c } -func kicker(conn *irc.Conn, target string) chan string { +func kicker(conn *irc.Conn, channel string) chan string { c := make(chan string) go func() { for nick := range c { - conn.Kick(target, nick) + conn.Kick(channel, nick) } }() return c @@ -82,7 +82,8 @@ func main() { log.Fatal(err) } - go WatchNews(c, *room) + n := notify(c, *room) + go watchNews(n) <-done log.Println("Disconnected") -- cgit v1.2.3 From 91d96257792d34ef8af6027d70775b8bc376618f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 21 Dec 2016 00:00:22 +0100 Subject: Remove all commands --- main.go | 2 -- 1 file changed, 2 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 1b8ac33..3b8daa5 100644 --- a/main.go +++ b/main.go @@ -41,14 +41,12 @@ func discon(c chan struct{}) irc.HandlerFunc { func privmsg(room string) irc.HandlerFunc { return func(conn *irc.Conn, line *irc.Line) { - go Dispatch(conn, line) go Links(conn, line) if line.Public() && line.Nick != conn.Me().Nick { if isFlood(line.Text()) { log.Println("flood", line.Nick) conn.Kick(room, line.Nick, "flood") } - Push(line) } } } -- cgit v1.2.3 From 429466e258c9228483ae8928f66fd52cec1178eb Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 21 Dec 2016 00:25:57 +0100 Subject: privmsg --- main.go | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 3b8daa5..da2f50b 100644 --- a/main.go +++ b/main.go @@ -7,10 +7,16 @@ import ( irc "github.com/fluffle/goirc/client" ) +const maxLen = 500 + func notify(conn *irc.Conn, target string) chan string { c := make(chan string) go func() { for msg := range c { + log.Println("send", msg) + if len(msg) > maxLen { + msg = msg[:maxLen] + "..." + } conn.Notice(target, msg) } }() @@ -21,7 +27,10 @@ func kicker(conn *irc.Conn, channel string) chan string { c := make(chan string) go func() { for nick := range c { - conn.Kick(channel, nick) + if nick != conn.Me().Nick { + log.Println("kick", nick) + conn.Kick(channel, nick) + } } }() return c @@ -39,14 +48,14 @@ func discon(c chan struct{}) irc.HandlerFunc { } } -func privmsg(room string) irc.HandlerFunc { +func privmsg(n, k chan string, room string) irc.HandlerFunc { + go watchNews(n) // TODO shall it be there? + l := links(n) return func(conn *irc.Conn, line *irc.Line) { - go Links(conn, line) - if line.Public() && line.Nick != conn.Me().Nick { - if isFlood(line.Text()) { - log.Println("flood", line.Nick) - conn.Kick(room, line.Nick, "flood") - } + t := line.Text() + l <- t + if isFlood(t) { + k <- line.Nick } } } @@ -58,8 +67,10 @@ func main() { flag.Parse() c := irc.SimpleClient(*name) - c.EnableStateTracking() // XXX + //c.EnableStateTracking() // XXX done := make(chan struct{}) + n := notify(c, *room) + k := kicker(c, *room) // setup event handler handler := []struct { @@ -69,7 +80,7 @@ func main() { {irc.DISCONNECTED, discon(done)}, {irc.CONNECTED, join(*room)}, {irc.KICK, join(*room)}, - {irc.PRIVMSG, privmsg(*room)}, + {irc.PRIVMSG, privmsg(n, k, *room)}, } for _, h := range handler { c.HandleFunc(h.ev, h.f) @@ -80,9 +91,6 @@ func main() { log.Fatal(err) } - n := notify(c, *room) - go watchNews(n) - <-done log.Println("Disconnected") } -- cgit v1.2.3 From 75bec51affee1f01d107e68b38180c9d5d5edae0 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 21 Dec 2016 00:38:25 +0100 Subject: Split feeds --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index da2f50b..cd1d751 100644 --- a/main.go +++ b/main.go @@ -49,7 +49,6 @@ func discon(c chan struct{}) irc.HandlerFunc { } func privmsg(n, k chan string, room string) irc.HandlerFunc { - go watchNews(n) // TODO shall it be there? l := links(n) return func(conn *irc.Conn, line *irc.Line) { t := line.Text() @@ -71,6 +70,7 @@ func main() { done := make(chan struct{}) n := notify(c, *room) k := kicker(c, *room) + go Watch(n, Feeds) // TODO shall it be there? // setup event handler handler := []struct { -- cgit v1.2.3 From 2edd25a655c9d0c908edae0b3c752630bde299ed Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 21 Dec 2016 00:47:29 +0100 Subject: go flood --- main.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index cd1d751..45758b0 100644 --- a/main.go +++ b/main.go @@ -10,7 +10,7 @@ import ( const maxLen = 500 func notify(conn *irc.Conn, target string) chan string { - c := make(chan string) + c := make(chan string, 1) go func() { for msg := range c { log.Println("send", msg) @@ -24,7 +24,7 @@ func notify(conn *irc.Conn, target string) chan string { } func kicker(conn *irc.Conn, channel string) chan string { - c := make(chan string) + c := make(chan string, 1) go func() { for nick := range c { if nick != conn.Me().Nick { @@ -50,13 +50,15 @@ func discon(c chan struct{}) irc.HandlerFunc { func privmsg(n, k chan string, room string) irc.HandlerFunc { l := links(n) - return func(conn *irc.Conn, line *irc.Line) { - t := line.Text() - l <- t - if isFlood(t) { + f := func(line *irc.Line) { + if isFlood(line.Text()) { k <- line.Nick } } + return func(conn *irc.Conn, line *irc.Line) { + go f(line) + l <- line.Text() + } } func main() { -- cgit v1.2.3 From d3c97e413a8731bf61dba3f5a0fa9d8a62def0e5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 21 Dec 2016 01:07:35 +0100 Subject: add ssl flag --- main.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 45758b0..ac44a7e 100644 --- a/main.go +++ b/main.go @@ -62,16 +62,20 @@ func privmsg(n, k chan string, room string) irc.HandlerFunc { } func main() { - node := flag.String("node", "irc.freenode.org:6667", "IRC Server") + node := flag.String("node", "irc.freenode.org", "IRC Server") + ssl := flag.Bool("ssl", false, "Use SSL") room := flag.String("room", "#lor", "IRC Channel") name := flag.String("name", "dim13", "Bots Name") flag.Parse() - c := irc.SimpleClient(*name) - //c.EnableStateTracking() // XXX + conf := irc.NewConfig(*name) + conf.Server = *node + conf.SSL = *ssl + conn := irc.Client(conf) + //conn.EnableStateTracking() // XXX done := make(chan struct{}) - n := notify(c, *room) - k := kicker(c, *room) + n := notify(conn, *room) + k := kicker(conn, *room) go Watch(n, Feeds) // TODO shall it be there? // setup event handler @@ -85,11 +89,11 @@ func main() { {irc.PRIVMSG, privmsg(n, k, *room)}, } for _, h := range handler { - c.HandleFunc(h.ev, h.f) + conn.HandleFunc(h.ev, h.f) } log.Println("Connect to", *node) - if err := c.ConnectTo(*node); err != nil { + if err := conn.Connect(); err != nil { log.Fatal(err) } -- cgit v1.2.3 From b4c6a6a35a9416ed57a636352fcc4152ff6f08bf Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Wed, 21 Dec 2016 01:10:24 +0100 Subject: cleanup --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index ac44a7e..a33ab2c 100644 --- a/main.go +++ b/main.go @@ -92,7 +92,7 @@ func main() { conn.HandleFunc(h.ev, h.f) } - log.Println("Connect to", *node) + log.Println("Connect to", conf.Server) if err := conn.Connect(); err != nil { log.Fatal(err) } -- cgit v1.2.3 From b114a48e677059e24e1e0cea4a424ebfda879a72 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 24 Dec 2016 20:43:43 +0100 Subject: readd last --- main.go | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index a33ab2c..e1fd32f 100644 --- a/main.go +++ b/main.go @@ -1,14 +1,36 @@ package main import ( + "container/ring" "flag" + "fmt" "log" + "time" irc "github.com/fluffle/goirc/client" ) const maxLen = 500 +var buffer = ring.New(10) + +func push(l *irc.Line) { + buffer.Value = l + buffer = buffer.Next() +} + +func last(target string) { + buffer.Do(func(v interface{}) { + if v != nil { + l := v.(*irc.Line) + s := fmt.Sprintf("%v <%v> %v", + l.Time.UTC().Format(time.Kitchen), + l.Nick, l.Text()) + conn.Notice(target, s) + } + }) +} + func notify(conn *irc.Conn, target string) chan string { c := make(chan string, 1) go func() { @@ -50,13 +72,15 @@ func discon(c chan struct{}) irc.HandlerFunc { func privmsg(n, k chan string, room string) irc.HandlerFunc { l := links(n) - f := func(line *irc.Line) { + return func(conn *irc.Conn, line *irc.Line) { if isFlood(line.Text()) { k <- line.Nick } - } - return func(conn *irc.Conn, line *irc.Line) { - go f(line) + if line.Text() == "last" { + last(line.Nick) + } else { + push(line) + } l <- line.Text() } } -- cgit v1.2.3 From 6f756f7f5e0f196476ea2b7910d38e6bab6e2f47 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Dec 2016 10:52:43 +0100 Subject: wip --- main.go | 97 +++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 32 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index e1fd32f..79fd538 100644 --- a/main.go +++ b/main.go @@ -10,28 +10,61 @@ import ( irc "github.com/fluffle/goirc/client" ) -const maxLen = 500 +type bot struct { + room string + conn *irc.Conn + notice chan string + kick chan string + last *ring.Ring +} -var buffer = ring.New(10) +func New(name, node, room string, ssl bool) *bot { + conf := irc.NewConfig(name) + conf.Server = node + conf.SSL = ssl + conn := irc.Client(conf) + return &bot{ + room: room, + conn: conn, + notice: notify(conn, room), + kick: kicker(conn, room), + last: ring.New(10), + } +} -func push(l *irc.Line) { - buffer.Value = l - buffer = buffer.Next() +func (b *bot) push(line *irc.Line) { + b.last.Value = line + b.last = b.last.Next() +} + +func (b *bot) find(c chan string, nick string) { + var msg string + b.last.Do(func(v interface{}) { + if v != nil { + l := v.(*irc.Line) + if l.Nick == nick { + msg = l.Text() + } + } + }) + if msg != "" { + c <- msg + } } -func last(target string) { - buffer.Do(func(v interface{}) { +func (b *bot) lastMsgs(c chan string) { + b.last.Do(func(v interface{}) { if v != nil { l := v.(*irc.Line) - s := fmt.Sprintf("%v <%v> %v", + c <- fmt.Sprintf("%v <%v> %v", l.Time.UTC().Format(time.Kitchen), l.Nick, l.Text()) - conn.Notice(target, s) } }) } func notify(conn *irc.Conn, target string) chan string { + const maxLen = 500 c := make(chan string, 1) go func() { for msg := range c { @@ -58,9 +91,9 @@ func kicker(conn *irc.Conn, channel string) chan string { return c } -func join(room string) irc.HandlerFunc { +func (b *bot) join() irc.HandlerFunc { return func(conn *irc.Conn, _ *irc.Line) { - conn.Join(room) + conn.Join(b.room) } } @@ -70,16 +103,21 @@ func discon(c chan struct{}) irc.HandlerFunc { } } -func privmsg(n, k chan string, room string) irc.HandlerFunc { - l := links(n) +func (b *bot) privmsg() irc.HandlerFunc { + l := links(b.notice) return func(conn *irc.Conn, line *irc.Line) { if isFlood(line.Text()) { - k <- line.Nick + b.kick <- line.Nick } - if line.Text() == "last" { - last(line.Nick) - } else { - push(line) + switch line.Text() { + case "last": + c := notify(conn, line.Nick) + defer close(c) + b.lastMsgs(c) + case "find": + b.find(b.notice, line.Nick) + default: + b.push(line) } l <- line.Text() } @@ -92,15 +130,10 @@ func main() { name := flag.String("name", "dim13", "Bots Name") flag.Parse() - conf := irc.NewConfig(*name) - conf.Server = *node - conf.SSL = *ssl - conn := irc.Client(conf) - //conn.EnableStateTracking() // XXX + b := New(*name, *node, *room, *ssl) + done := make(chan struct{}) - n := notify(conn, *room) - k := kicker(conn, *room) - go Watch(n, Feeds) // TODO shall it be there? + go Watch(b.notice, Feeds) // TODO shall it be there? // setup event handler handler := []struct { @@ -108,19 +141,19 @@ func main() { f irc.HandlerFunc }{ {irc.DISCONNECTED, discon(done)}, - {irc.CONNECTED, join(*room)}, - {irc.KICK, join(*room)}, - {irc.PRIVMSG, privmsg(n, k, *room)}, + {irc.CONNECTED, b.join()}, + {irc.KICK, b.join()}, + {irc.PRIVMSG, b.privmsg()}, } for _, h := range handler { - conn.HandleFunc(h.ev, h.f) + b.conn.HandleFunc(h.ev, h.f) } - log.Println("Connect to", conf.Server) - if err := conn.Connect(); err != nil { + if err := b.conn.Connect(); err != nil { log.Fatal(err) } + log.Println("Connected") <-done log.Println("Disconnected") } -- cgit v1.2.3 From 1c780ab0000890760bc923fc9322dd8462e83fa1 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Dec 2016 14:31:37 +0100 Subject: Split last --- main.go | 126 +++++++++++++++++++--------------------------------------------- 1 file changed, 36 insertions(+), 90 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 79fd538..82940ff 100644 --- a/main.go +++ b/main.go @@ -1,77 +1,23 @@ package main import ( - "container/ring" "flag" "fmt" "log" - "time" + "strings" irc "github.com/fluffle/goirc/client" ) -type bot struct { - room string - conn *irc.Conn - notice chan string - kick chan string - last *ring.Ring -} - -func New(name, node, room string, ssl bool) *bot { - conf := irc.NewConfig(name) - conf.Server = node - conf.SSL = ssl - conn := irc.Client(conf) - return &bot{ - room: room, - conn: conn, - notice: notify(conn, room), - kick: kicker(conn, room), - last: ring.New(10), - } -} - -func (b *bot) push(line *irc.Line) { - b.last.Value = line - b.last = b.last.Next() -} - -func (b *bot) find(c chan string, nick string) { - var msg string - b.last.Do(func(v interface{}) { - if v != nil { - l := v.(*irc.Line) - if l.Nick == nick { - msg = l.Text() - } - } - }) - if msg != "" { - c <- msg - } -} - -func (b *bot) lastMsgs(c chan string) { - b.last.Do(func(v interface{}) { - if v != nil { - l := v.(*irc.Line) - c <- fmt.Sprintf("%v <%v> %v", - l.Time.UTC().Format(time.Kitchen), - l.Nick, l.Text()) - } - }) -} - func notify(conn *irc.Conn, target string) chan string { const maxLen = 500 c := make(chan string, 1) go func() { for msg := range c { - log.Println("send", msg) if len(msg) > maxLen { msg = msg[:maxLen] + "..." } + log.Println("send", msg) conn.Notice(target, msg) } }() @@ -91,9 +37,9 @@ func kicker(conn *irc.Conn, channel string) chan string { return c } -func (b *bot) join() irc.HandlerFunc { +func join(room string) irc.HandlerFunc { return func(conn *irc.Conn, _ *irc.Line) { - conn.Join(b.room) + conn.Join(room) } } @@ -103,23 +49,30 @@ func discon(c chan struct{}) irc.HandlerFunc { } } -func (b *bot) privmsg() irc.HandlerFunc { - l := links(b.notice) +func privmsg(note, kick chan string) irc.HandlerFunc { + last := NewLastBuf(10) + links := linker(note) + go Watch(note, Feeds) return func(conn *irc.Conn, line *irc.Line) { - if isFlood(line.Text()) { - b.kick <- line.Nick - } - switch line.Text() { - case "last": + switch t := line.Text(); { + case isFlood(t): + kick <- line.Nick + case t == "last": c := notify(conn, line.Nick) - defer close(c) - b.lastMsgs(c) - case "find": - b.find(b.notice, line.Nick) + last.Dump(c) + close(c) + case strings.HasPrefix(t, "s"): + tofix := last.Last(line.Nick) + if fixed := re(tofix, t); fixed != "" { + note <- fmt.Sprintf("%v meant to say: %v", + line.Nick, fixed) + return + } + fallthrough default: - b.push(line) + links <- t + last.Push(line.Time, line.Nick, t) } - l <- line.Text() } } @@ -130,30 +83,23 @@ func main() { name := flag.String("name", "dim13", "Bots Name") flag.Parse() - b := New(*name, *node, *room, *ssl) + conf := irc.NewConfig(*name) + conf.Server = *node + conf.SSL = *ssl + conn := irc.Client(conf) + + note := notify(conn, *room) + kick := kicker(conn, *room) done := make(chan struct{}) - go Watch(b.notice, Feeds) // TODO shall it be there? - // setup event handler - handler := []struct { - ev string - f irc.HandlerFunc - }{ - {irc.DISCONNECTED, discon(done)}, - {irc.CONNECTED, b.join()}, - {irc.KICK, b.join()}, - {irc.PRIVMSG, b.privmsg()}, - } - for _, h := range handler { - b.conn.HandleFunc(h.ev, h.f) - } + conn.HandleFunc(irc.DISCONNECTED, discon(done)) + conn.HandleFunc(irc.CONNECTED, join(*room)) + conn.HandleFunc(irc.KICK, join(*room)) + conn.HandleFunc(irc.PRIVMSG, privmsg(note, kick)) - if err := b.conn.Connect(); err != nil { + if err := conn.Connect(); err != nil { log.Fatal(err) } - - log.Println("Connected") <-done - log.Println("Disconnected") } -- cgit v1.2.3 From b646b6d6b5d6715fe80d3eb508c8bcda937145b9 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Dec 2016 14:44:18 +0100 Subject: kiss --- main.go | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 82940ff..2ff436c 100644 --- a/main.go +++ b/main.go @@ -37,22 +37,9 @@ func kicker(conn *irc.Conn, channel string) chan string { return c } -func join(room string) irc.HandlerFunc { - return func(conn *irc.Conn, _ *irc.Line) { - conn.Join(room) - } -} - -func discon(c chan struct{}) irc.HandlerFunc { - return func(_ *irc.Conn, _ *irc.Line) { - close(c) - } -} - func privmsg(note, kick chan string) irc.HandlerFunc { last := NewLastBuf(10) links := linker(note) - go Watch(note, Feeds) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): @@ -93,11 +80,21 @@ func main() { done := make(chan struct{}) - conn.HandleFunc(irc.DISCONNECTED, discon(done)) - conn.HandleFunc(irc.CONNECTED, join(*room)) - conn.HandleFunc(irc.KICK, join(*room)) + conn.HandleFunc(irc.DISCONNECTED, func(_ *irc.Conn, _ *irc.Line) { + close(done) + }) + + conn.HandleFunc(irc.CONNECTED, func(conn *irc.Conn, _ *irc.Line) { + conn.Join(*room) + go Watch(note, Feeds) + }) + conn.HandleFunc(irc.PRIVMSG, privmsg(note, kick)) + conn.HandleFunc(irc.KICK, func(conn *irc.Conn, _ *irc.Line) { + conn.Join(*room) + }) + if err := conn.Connect(); err != nil { log.Fatal(err) } -- cgit v1.2.3 From 422a15a09efd2d44fe53c5ce2c46bc8b5aee08e6 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Dec 2016 14:51:25 +0100 Subject: last --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index 2ff436c..e2fd650 100644 --- a/main.go +++ b/main.go @@ -38,7 +38,7 @@ func kicker(conn *irc.Conn, channel string) chan string { } func privmsg(note, kick chan string) irc.HandlerFunc { - last := NewLastBuf(10) + last := NewLast(10) links := linker(note) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { -- cgit v1.2.3 From fc1b0999a35bba9760d9d58395fb04581784c160 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Dec 2016 16:45:15 +0100 Subject: watchlist --- main.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'main.go') diff --git a/main.go b/main.go index e2fd650..c884fe5 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "strings" + "time" irc "github.com/fluffle/goirc/client" ) @@ -40,6 +41,7 @@ func kicker(conn *irc.Conn, channel string) chan string { func privmsg(note, kick chan string) irc.HandlerFunc { last := NewLast(10) links := linker(note) + wl := NewWatchList(3, 5*time.Second) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): @@ -59,6 +61,7 @@ func privmsg(note, kick chan string) irc.HandlerFunc { default: links <- t last.Push(line.Time, line.Nick, t) + wl.Add(kick, line.Nick) } } } -- cgit v1.2.3 From a04048625848c4aeab33e3e2dce24e006ebe59e1 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 25 Dec 2016 17:30:34 +0100 Subject: Bump # of messages per second --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index c884fe5..b2e3abf 100644 --- a/main.go +++ b/main.go @@ -41,7 +41,7 @@ func kicker(conn *irc.Conn, channel string) chan string { func privmsg(note, kick chan string) irc.HandlerFunc { last := NewLast(10) links := linker(note) - wl := NewWatchList(3, 5*time.Second) + wl := NewWatchList(5, 5*time.Second) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): -- cgit v1.2.3 From 5d506643a6b543d46d18f3ec832f84f094a4f438 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 26 Dec 2016 05:03:32 +0100 Subject: Tweak --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index b2e3abf..68965b1 100644 --- a/main.go +++ b/main.go @@ -41,7 +41,7 @@ func kicker(conn *irc.Conn, channel string) chan string { func privmsg(note, kick chan string) irc.HandlerFunc { last := NewLast(10) links := linker(note) - wl := NewWatchList(5, 5*time.Second) + wl := NewWatchList(3, 5*time.Second) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): @@ -50,7 +50,7 @@ func privmsg(note, kick chan string) irc.HandlerFunc { c := notify(conn, line.Nick) last.Dump(c) close(c) - case strings.HasPrefix(t, "s"): + case strings.HasPrefix(t, "s/"): tofix := last.Last(line.Nick) if fixed := re(tofix, t); fixed != "" { note <- fmt.Sprintf("%v meant to say: %v", -- cgit v1.2.3 From e144aa0bc9a66b2314f57b9344697d429049944f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 27 Dec 2016 17:11:02 +0100 Subject: wip --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'main.go') diff --git a/main.go b/main.go index 68965b1..ea85c63 100644 --- a/main.go +++ b/main.go @@ -41,7 +41,7 @@ func kicker(conn *irc.Conn, channel string) chan string { func privmsg(note, kick chan string) irc.HandlerFunc { last := NewLast(10) links := linker(note) - wl := NewWatchList(3, 5*time.Second) + wl := NewWatchList(2, time.Second) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): -- cgit v1.2.3 From 01d5301e77b4054223d21289a17ace48539cbeb6 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 6 Mar 2017 11:14:21 +0100 Subject: Drop watchlist --- main.go | 3 --- 1 file changed, 3 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index ea85c63..802fc8f 100644 --- a/main.go +++ b/main.go @@ -5,7 +5,6 @@ import ( "fmt" "log" "strings" - "time" irc "github.com/fluffle/goirc/client" ) @@ -41,7 +40,6 @@ func kicker(conn *irc.Conn, channel string) chan string { func privmsg(note, kick chan string) irc.HandlerFunc { last := NewLast(10) links := linker(note) - wl := NewWatchList(2, time.Second) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): @@ -61,7 +59,6 @@ func privmsg(note, kick chan string) irc.HandlerFunc { default: links <- t last.Push(line.Time, line.Nick, t) - wl.Add(kick, line.Nick) } } } -- cgit v1.2.3 From 0d651bca8901257683f5fe366e840bb59f8fd84d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 31 Dec 2017 23:43:39 +0100 Subject: remove unnecessary stuff --- main.go | 16 ---------------- 1 file changed, 16 deletions(-) (limited to 'main.go') diff --git a/main.go b/main.go index 802fc8f..d7c6e38 100644 --- a/main.go +++ b/main.go @@ -2,9 +2,7 @@ package main import ( "flag" - "fmt" "log" - "strings" irc "github.com/fluffle/goirc/client" ) @@ -38,27 +36,13 @@ func kicker(conn *irc.Conn, channel string) chan string { } func privmsg(note, kick chan string) irc.HandlerFunc { - last := NewLast(10) links := linker(note) return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): kick <- line.Nick - case t == "last": - c := notify(conn, line.Nick) - last.Dump(c) - close(c) - case strings.HasPrefix(t, "s/"): - tofix := last.Last(line.Nick) - if fixed := re(tofix, t); fixed != "" { - note <- fmt.Sprintf("%v meant to say: %v", - line.Nick, fixed) - return - } - fallthrough default: links <- t - last.Push(line.Time, line.Nick, t) } } } -- cgit v1.2.3