summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-12-24 20:43:43 +0100
committerDimitri Sokolyuk <demon@dim13.org>2016-12-24 20:43:43 +0100
commitb114a48e677059e24e1e0cea4a424ebfda879a72 (patch)
tree29672ab7693f9996afa36c316766f10217e01dde
parentddd7dba5aca6abc2ce70ba13456f09a0568209de (diff)
readd last
-rw-r--r--main.go32
1 files 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()
}
}