0
Files
aleesa-irc-go/main.go
2022-09-04 04:29:50 +03:00

103 lines
2.4 KiB
Go

package main
import (
"context"
"fmt"
"os"
"os/signal"
"syscall"
"github.com/go-redis/redis/v8"
log "github.com/sirupsen/logrus"
)
// Производит некоторую инициализацию перед запуском main()
func init() {
log.SetFormatter(&log.TextFormatter{
DisableQuote: true,
DisableLevelTruncation: false,
DisableColors: true,
FullTimestamp: true,
TimestampFormat: "2006-01-02 15:04:05",
})
readConfig()
// no panic, no trace
switch config.Loglevel {
case "fatal":
log.SetLevel(log.FatalLevel)
case "error":
log.SetLevel(log.ErrorLevel)
case "warn":
log.SetLevel(log.WarnLevel)
case "info":
log.SetLevel(log.InfoLevel)
case "debug":
log.SetLevel(log.DebugLevel)
default:
log.SetLevel(log.InfoLevel)
}
// Проинициализируем мапку MODE-ами пользователей произвольным значением и удалим его
var usersModes = map[string]map[string]map[string]bool{
"user": {
"mode": {
"v": true,
},
},
}
userMode.Set("channel", usersModes)
userMode.Delete("channel")
}
// Собственно, какбэ "точка входа" - основная процедура в нашем боте
func main() {
// Main context
var ctx = context.Background()
// Откроем лог и скормим его логгеру
if config.Log != "" {
logfile, err := os.OpenFile(config.Log, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644)
if err != nil {
log.Fatalf("Unable to open log file %s: %s", config.Log, err)
}
log.SetOutput(logfile)
}
// Иницализируем redis-клиента
redisClient = redis.NewClient(&redis.Options{
Addr: fmt.Sprintf("%s:%d", config.Redis.Server, config.Redis.Port),
})
log.Debugf("Lazy connect() to redis at %s:%d", config.Redis.Server, config.Redis.Port)
subscriber = redisClient.Subscribe(ctx, config.Redis.MyChannel)
redisMsgChan := subscriber.Channel()
go ircClientRun()
go ircSend()
go ircSendUnrestricted()
// Самое время поставить траппер сигналов
signal.Notify(sigChan,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
go sigHandler()
// Обработчик событий от редиски
for msg := range redisMsgChan {
if shutdown {
continue
}
redisMsgParser(msg.Payload)
}
}
/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */