2024-08-06 12:29:34 -03:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2024-08-13 21:33:11 -03:00
|
|
|
"flag"
|
2024-08-14 23:25:45 -03:00
|
|
|
"log/slog"
|
2024-08-06 13:48:37 -03:00
|
|
|
"os"
|
2024-08-07 14:36:55 -03:00
|
|
|
"os/signal"
|
|
|
|
|
"syscall"
|
2024-08-14 23:41:01 -03:00
|
|
|
"time"
|
2024-08-14 23:25:45 -03:00
|
|
|
|
2024-11-04 09:02:57 -03:00
|
|
|
"forge.capytal.company/capytal/dislate/bot"
|
|
|
|
|
"forge.capytal.company/capytal/dislate/bot/gconf"
|
|
|
|
|
"forge.capytal.company/capytal/dislate/guilddb"
|
|
|
|
|
"forge.capytal.company/capytal/dislate/translator"
|
2024-08-26 11:16:26 -03:00
|
|
|
|
2024-08-14 23:25:45 -03:00
|
|
|
"github.com/charmbracelet/log"
|
2024-08-06 12:29:34 -03:00
|
|
|
)
|
|
|
|
|
|
2024-08-13 21:33:11 -03:00
|
|
|
type TranslationProvider string
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
GOOGLE_TRANSLATE TranslationProvider = "google-translate"
|
|
|
|
|
)
|
|
|
|
|
|
2024-08-14 16:47:01 -03:00
|
|
|
// var translation_provider = flag.String("tprovider", string(GOOGLE_TRANSLATE), "Translation provider")
|
2024-08-28 10:04:55 -03:00
|
|
|
var (
|
|
|
|
|
database_file = flag.String("db", "file:./guild.db", "SQLite database file/location")
|
2024-08-29 13:59:23 -03:00
|
|
|
discord_token = flag.String(
|
|
|
|
|
"token",
|
|
|
|
|
os.Getenv("DISCORD_TOKEN"),
|
|
|
|
|
"Discord bot authentication token",
|
|
|
|
|
)
|
2024-08-28 10:04:55 -03:00
|
|
|
)
|
2024-08-13 21:33:11 -03:00
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
flag.Parse()
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-06 12:29:34 -03:00
|
|
|
func main() {
|
2024-08-14 23:41:01 -03:00
|
|
|
logger := slog.New(log.NewWithOptions(os.Stderr, log.Options{
|
2024-08-26 11:16:26 -03:00
|
|
|
TimeFormat: time.DateTime,
|
2024-08-14 23:41:01 -03:00
|
|
|
ReportTimestamp: true,
|
2024-08-26 11:16:26 -03:00
|
|
|
ReportCaller: true,
|
2024-08-14 23:41:01 -03:00
|
|
|
}))
|
2024-08-06 13:48:37 -03:00
|
|
|
|
2024-08-29 13:59:23 -03:00
|
|
|
db, err := guilddb.NewSQLiteDB[gconf.ConfigString](*database_file + "?_busy_timeout=5000")
|
2024-08-08 11:08:17 -03:00
|
|
|
if err != nil {
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Error("Failed to open database connection", slog.String("err", err.Error()))
|
2024-08-08 11:08:17 -03:00
|
|
|
return
|
|
|
|
|
}
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Info("Connection to database started", slog.String("file", *database_file))
|
2024-08-08 11:08:17 -03:00
|
|
|
defer func() {
|
|
|
|
|
err := db.Close()
|
|
|
|
|
if err != nil {
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Error("Failed to close database connection", slog.String("err", err.Error()))
|
2024-08-08 11:08:17 -03:00
|
|
|
return
|
|
|
|
|
}
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Info("Connection to database closed", slog.String("file", *database_file))
|
2024-08-08 11:08:17 -03:00
|
|
|
}()
|
|
|
|
|
|
2024-08-13 21:10:53 -03:00
|
|
|
if err := db.Prepare(); err != nil {
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Error("Failed to prepare database", slog.String("err", err.Error()))
|
2024-08-08 11:08:17 -03:00
|
|
|
return
|
|
|
|
|
}
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Info("Database ready to be used")
|
2024-08-08 11:08:17 -03:00
|
|
|
|
2024-08-14 23:25:45 -03:00
|
|
|
bot, err := bot.NewBot(*discord_token, db, translator.NewMockTranslator(), logger)
|
2024-08-06 13:48:37 -03:00
|
|
|
if err != nil {
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Error("Failed to create discord bot", slog.String("err", err.Error()))
|
2024-08-08 11:08:17 -03:00
|
|
|
return
|
2024-08-06 13:48:37 -03:00
|
|
|
}
|
2024-08-13 21:10:53 -03:00
|
|
|
if err := bot.Start(); err != nil {
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Error("Failed to start discord bot", slog.String("err", err.Error()))
|
2024-08-08 11:08:17 -03:00
|
|
|
return
|
2024-08-06 13:48:37 -03:00
|
|
|
}
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Info("Discord bot started")
|
2024-08-08 11:08:17 -03:00
|
|
|
defer func() {
|
2024-08-13 21:10:53 -03:00
|
|
|
if err := bot.Stop(); err != nil {
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Error("Failed to stop discord bot", slog.String("err", err.Error()))
|
2024-08-08 11:08:17 -03:00
|
|
|
return
|
|
|
|
|
}
|
2024-08-14 23:25:45 -03:00
|
|
|
logger.Info("Discord bot stopped")
|
2024-08-08 11:08:17 -03:00
|
|
|
}()
|
2024-08-06 15:33:26 -03:00
|
|
|
|
2024-08-07 14:36:55 -03:00
|
|
|
sig := make(chan os.Signal, 1)
|
|
|
|
|
signal.Notify(sig, os.Interrupt, syscall.SIGINT)
|
|
|
|
|
<-sig
|
2024-08-06 12:29:34 -03:00
|
|
|
}
|