package main import ( "flag" "log" "math/rand" "strings" "time" "github.com/tcolgate/hugot" "github.com/tcolgate/hugot/adapters/irc" irce "github.com/thoj/go-ircevent" "golang.org/x/net/context" "ur.gs/lysenko/handlers/deadline" "ur.gs/lysenko/handlers/quotedb" ) var ( channels = flag.String("channels", "##testing,##test", "Channels to join (separated by comma)") host = flag.String("host", "chat.freenode.net", "Server host[:port]") ident = flag.String("ident", "lysenko", "Lysenko Bot") nick = flag.String("nick", "lysenko", "Lysenko Bot") nickserv = flag.String("nickserv", "", "NickServ password") quotes = flag.String("quotedb", ":memory:", "sqlite3 quote database") ssl = flag.Bool("ssl", true, "Enable SSL") ) func init() { // TODO: better rand.Seed rand.Seed(time.Now().Unix()) } func main() { flag.Parse() channelList := strings.Split(*channels, ",") conn := irce.IRC(*nick, *ident) conn.UseTLS = *ssl conn.Password = *nickserv if err := conn.Connect(*host); err != nil { log.Fatal(err) } defer conn.Quit() adapter, err := irc.New(conn) if err != nil { log.Fatal(err) } for _, channel := range channelList { conn.Join(channel) } ctx := context.Background() db, err := quotedb.New(*quotes) if err != nil { log.Fatal(err) } defer db.DB.Close() mux := hugot.DefaultMux mux.AddHearsHandler("edb.AddQuoteHandler{QuoteDB: db}) mux.AddHearsHandler(deadline.NewHears("edb.LastQuoteHandler{QuoteDB: db})) mux.AddHearsHandler(deadline.NewHears("edb.FindQuoteHandler{QuoteDB: db})) mux.AddHearsHandler(deadline.NewHears("edb.RandQuoteHandler{QuoteDB: db})) mux.AddHearsHandler(deadline.NewHears("edb.QuoteHandler{QuoteDB: db})) go hugot.ListenAndServe(ctx, adapter, mux) conn.Loop() }