Files
bdgrp_go/main.go
2026-09-08 17:26:35 +08:00

86 lines
1.4 KiB
Go

//go:generate go run gen/gen.go
package main
import (
"fmt"
"log"
"os"
"regexp"
"slices"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/gookit/color"
"github.com/joho/godotenv"
"bdgrp_go/db"
"bdgrp_go/routes"
"os/signal"
"syscall"
)
const PORT = ":8482"
var servers = []string{"TW", "JP", "GL", "CN"}
func main() {
if _, err := os.Stat(".env"); os.IsNotExist(err) {
log.Fatal("Error: .env not found.")
}
godotenv.Load()
server := os.Getenv("SERVER")
valid := slices.Contains(servers, server)
if !valid {
log.Fatal("Error: Unknown Server.")
}
for _, s := range servers {
os.MkdirAll("resp/"+s, 0755)
}
db.Init(servers)
app := fiber.New(fiber.Config{
StrictRouting: true,
ETag: false,
})
app.Use(logger.New())
re := regexp.MustCompile(`/+`)
app.Use(func(c *fiber.Ctx) error {
c.Path(re.ReplaceAllString(c.Path(), "/"))
return c.Next()
})
routes.LoadAll(app)
app.Get("/", func(c *fiber.Ctx) error {
return c.SendString(os.Getenv("SERVER"))
})
log.Printf("Running on %s", PORT)
color.HEX("#00AABB").Printf("Server: %s\n", server)
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
go func() {
for {
<-quit
fmt.Print("\nProceed to exit? (y/n): ")
var input string
fmt.Scanln(&input)
if input == "y" {
db.Save()
app.Shutdown()
return
}
}
}()
app.Listen(PORT)
}