Files
lysenko/lysenko.go

92 lines
2.5 KiB
Go
Raw Normal View History

2016-07-05 02:35:33 +01:00
package main
import (
"context"
2016-10-15 00:20:34 +01:00
"crypto/tls"
2016-07-05 02:35:33 +01:00
"flag"
"log"
"math/rand"
2016-10-15 00:20:34 +01:00
"net"
2016-07-05 02:35:33 +01:00
"strings"
"time"
"github.com/fluffle/goirc/client"
2016-07-05 02:35:33 +01:00
"github.com/tcolgate/hugot"
"github.com/tcolgate/hugot/adapters/irc"
"ur.gs/lysenko/adapters"
"ur.gs/lysenko/handlers/deadline"
2021-02-13 01:26:08 +00:00
"ur.gs/lysenko/handlers/ignore"
2016-07-05 02:35:33 +01:00
"ur.gs/lysenko/handlers/quotedb"
)
var (
channels = flag.String("channels", "##testing,##test", "Channels to join (separated by comma)")
2021-02-13 01:26:08 +00:00
ignores = flag.String("ignore", "", "Nicks to ignore (separated by comma)")
2020-01-01 16:18:13 +00:00
cooldown = flag.Int("cooldown", 120, "Command rate-limit, in seconds")
2016-07-05 02:35:33 +01:00
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")
testmode = flag.Bool("testmode", false, "Use STDIN/STDOUT instead of IRC for messages")
2016-07-05 02:35:33 +01:00
)
func init() {
// TODO: better rand.Seed
rand.Seed(time.Now().Unix())
}
func ircAdapter() hugot.Adapter {
channelList := strings.Split(*channels, ",")
2016-10-15 01:30:21 +01:00
config := client.NewConfig(*nick, "lysenko", "Comrade Trofim Lysenko")
config.Server = *host
config.Pass = *nickserv
config.SSL = *ssl
2016-10-15 00:20:34 +01:00
if config.SSL {
hostname, _, err := net.SplitHostPort(config.Server)
if err != nil {
2020-01-01 16:31:04 +00:00
hostname = config.Server
2016-10-15 00:20:34 +01:00
}
config.SSLConfig = &tls.Config{
ServerName: hostname,
}
}
return irc.New(config, channelList...)
}
func main() {
flag.Parse()
2021-02-13 01:26:08 +00:00
var ignoresList []string
if *ignores != "" {
ignoresList = strings.Split(*ignores, ",")
}
adapter := adapters.NewPrefixAdapter(ircAdapter(), "!")
adapter.PrivateHelpOnly = true
ctx := context.Background()
go adapter.Run(ctx)
2016-07-05 02:35:33 +01:00
db, err := quotedb.New(*quotes)
if err != nil {
log.Fatal(err)
}
defer db.DB.Close()
2020-01-01 16:18:13 +00:00
deadline.Cooldown = time.Second * time.Duration(*cooldown)
mux := hugot.DefaultMux
2021-02-13 01:26:08 +00:00
mux.HandleHears(ignore.NewHears(&quotedb.AddQuoteHandler{QuoteDB: db}, ignoresList...))
mux.HandleHears(ignore.NewHears(deadline.NewHears(&quotedb.LastQuoteHandler{QuoteDB: db}), ignoresList...))
mux.HandleHears(ignore.NewHears(deadline.NewHears(&quotedb.FindQuoteHandler{QuoteDB: db}), ignoresList...))
mux.HandleHears(ignore.NewHears(deadline.NewHears(&quotedb.RandQuoteHandler{QuoteDB: db}), ignoresList...))
mux.HandleHears(ignore.NewHears(deadline.NewHears(&quotedb.QuoteHandler{QuoteDB: db}), ignoresList...))
2016-07-05 02:35:33 +01:00
hugot.ListenAndServe(ctx, mux, adapter)
2016-07-05 02:35:33 +01:00
}