perpetua/main.go

66 lines
1.3 KiB
Go

// Copyright © 2014-2015 Daniele Tricoli <eriol@mornie.org>.
// All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main // import "eriol.xyz/perpetua"
import (
"log"
"os"
"os/signal"
ircevent "github.com/thoj/go-ircevent"
"gopkg.in/alecthomas/kingpin.v2"
"eriol.xyz/perpetua/config"
"eriol.xyz/perpetua/db"
"eriol.xyz/perpetua/irc"
)
func main() {
var (
conf config.Config
store db.Store
)
var (
configFile = kingpin.Flag("config", "Configuration file path.").Short('c').Default("").String()
)
isDone := make(chan bool, 1)
ircChan := make(chan *ircevent.Connection, 1)
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, os.Kill)
kingpin.Version(config.Version)
kingpin.CommandLine.Help = "Quote bot for IRC."
kingpin.Parse()
if err := conf.Read(*configFile); err != nil {
log.Fatal(err)
}
if err := store.Open(config.DATABASE_FILE); err != nil {
log.Fatal(err)
}
defer store.Close()
log.Println("Starting...")
go irc.NewClient(&conf, &store, ircChan, isDone)
sig := <-sigChan
log.Printf("Got signal %v, exiting now.\n", sig)
conn := <-ircChan
log.Printf("Quitting from %v.\n", conn.Server)
conn.Quit()
done := <-isDone
if done {
log.Println("Stopped.")
}
}