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(-) 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