package main import ( "flag" "fmt" "log" irc "github.com/fluffle/goirc/client" ) func notify(conn *irc.Conn, target string) chan string { const maxLen = 500 c := make(chan string, 1) go func() { for msg := range c { if len(msg) > maxLen { msg = msg[:maxLen] + "..." } log.Println("send", msg) conn.Notice(target, msg) } }() return c } func privmsg(room string) irc.HandlerFunc { return func(conn *irc.Conn, line *irc.Line) { switch t := line.Text(); { case isFlood(t): if line.Nick != conn.Me().Nick { log.Println("kick", line.Nick) conn.Kick(room, line.Nick) } default: for _, v := range getLinks(t) { log.Println("URL", v) title, err := getTitle(v) if err != nil { log.Println(err) } if title != "" { conn.Notice(line.Target(), fmt.Sprintf("Title: %v", t)) } } } } } func main() { 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() conf := irc.NewConfig(*name) conf.Server = *node conf.SSL = *ssl conn := irc.Client(conf) done := make(chan struct{}) 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(notify(conn, *room), Feeds) }) conn.HandleFunc(irc.PRIVMSG, privmsg(*room)) conn.HandleFunc(irc.KICK, func(conn *irc.Conn, _ *irc.Line) { conn.Join(*room) }) if err := conn.Connect(); err != nil { log.Fatal(err) } <-done }