|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"image"
|
|
|
|
"math/rand"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/llgcode/draw2d/draw2dimg"
|
|
|
|
"github.com/rogpeppe/misc/svg"
|
|
|
|
"github.com/rudi9719/loggy"
|
|
|
|
"samhofi.us/x/keybase/v2"
|
|
|
|
"samhofi.us/x/keybase/v2/types/chat1"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
k = keybase.NewKeybase()
|
|
|
|
|
|
|
|
configFile = "config.json"
|
|
|
|
config = loadConfig()
|
|
|
|
log = loggy.NewLogger(config.LogOpts)
|
|
|
|
r = rand.New(rand.NewSource(time.Now().UnixNano()))
|
|
|
|
)
|
|
|
|
|
|
|
|
func printChat(m chat1.MsgSummary) {
|
|
|
|
defer log.PanicSafe()
|
|
|
|
if m.Sender.Username == k.Username {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if strings.HasPrefix(m.Content.Text.Body, "@chessbot") {
|
|
|
|
chessCommand(m)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
log.LogInfo("%s: %s\n", m.Sender.Username, m.Content.Text.Body)
|
|
|
|
}
|
|
|
|
func main() {
|
|
|
|
fmt.Println("Loading config.")
|
|
|
|
fmt.Println("Starting log")
|
|
|
|
log = loggy.NewLogger(config.LogOpts)
|
|
|
|
fmt.Println("Log configured")
|
|
|
|
defer log.PanicSafe()
|
|
|
|
log.LogInfo("Logger configured")
|
|
|
|
chat := printChat
|
|
|
|
err := log.LogErrorType
|
|
|
|
handlers := keybase.Handlers{
|
|
|
|
ChatHandler: &chat,
|
|
|
|
ErrorHandler: &err,
|
|
|
|
}
|
|
|
|
log.LogCritical("Starting Chessbot")
|
|
|
|
k.Run(handlers, &keybase.RunOptions{})
|
|
|
|
}
|
|
|
|
func svgToPNG(path string) bool {
|
|
|
|
defer log.PanicSafe()
|
|
|
|
file, err := os.Open(fmt.Sprintf("%+v.svg", path))
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
defer file.Close()
|
|
|
|
size := image.Point{512, 512}
|
|
|
|
dest, err := svg.Render(file, size)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
err = draw2dimg.SaveToPngFile(fmt.Sprintf("%+v.png", path), dest)
|
|
|
|
if err != nil {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
|
|
|
|
}
|