88 lines
1.5 KiB
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()
|
|
}
|