route/vendor/github.com/Xe/x/irc/trolling/smartbot/main.go

88 lines
1.5 KiB
Go

package main
import (
"bufio"
"flag"
"log"
"math/rand"
"os"
"time"
"github.com/thoj/go-ircevent"
)
var (
brainInput = flag.String("brain", "", "brain file")
lastSpoken time.Time
)
func main() {
flag.Parse()
chain := NewChain(3)
if *brainInput != "" {
log.Printf("Opening %s...", *brainInput)
fin, err := os.Open(*brainInput)
if err != nil {
panic(err)
}
s := bufio.NewScanner(fin)
for s.Scan() {
t := s.Text()
_, err := chain.Write(t)
if err != nil {
panic(err)
}
}
err = chain.Save("mybrain-pc.gob")
if err != nil {
panic(err)
}
} else {
err := chain.Load("mybrain-pc.gob")
if err != nil {
panic(err)
}
}
rand.Seed(time.Now().Unix())
conn := irc.IRC("BeefSupreme", "Doritos")
err := conn.Connect("irc.ponychat.net:6667")
if err != nil {
panic(err)
}
conn.AddCallback("001", func(e *irc.Event) {
conn.Join("#geek")
})
conn.AddCallback("PRIVMSG", func(e *irc.Event) {
log.Printf("writing brain with %s", e.Arguments[1])
chain.Write(e.Arguments[1])
chain.Save("mybrain-pc.gob")
})
conn.AddCallback("PRIVMSG", func(e *irc.Event) {
if lastSpoken.Add(5 * time.Minute).Before(time.Now()) {
log.Println("It's been long enough that I can speak!")
if rand.Int()%4 == 2 {
log.Printf("About to say something...")
time.Sleep(time.Duration((rand.Int()%15)+4) * time.Second)
conn.Privmsg(e.Arguments[0], chain.Generate(15))
lastSpoken = time.Now()
}
}
})
conn.Loop()
}