package main import ( "flag" "fmt" "log" "os" "os/signal" "runtime" "syscall" "time" "github.com/allegro/bigcache/v3" "github.com/gookit/color" "github.com/xujiajun/nutsdb" "golang.org/x/time/rate" ) const ( husoVersion = "1.0" registerSecret = "綾波レイ" seasonApiJikan = "seasons/now" userApiJikan = "users/" userApiMal = "users/" animeApiMal = "anime/" searchApiMal = "anime?q=" malApiStatusP = "plan_to_watch" malApiStatusW = "watching" malApiStatusC = "completed" malApiStatusH = "on_hold" malApiStatusD = "dropped" bucketUsers = "users" bucketAnime = "anime" bucketMedia = "media" bucketAppoint = "appoint" bucketChat = "chat" AppointSplit = "§" chatLength = 10101 ) var ( webServerPort = flag.Int("port", 4876, "Port used by internal webserver") malApiBaseUri = flag.String("malApiBaseUri", "https://api.myanimelist.net/v2/", "MyAnimeList API base URL") jikanApiBaseUri = flag.String("jikanApiBaseUri", "https://api.jikan.moe/v4/", "Jikan API base URL") malApiId = flag.String("malApiId", "cc17dcf40581b9dfc8a5a12dba458153", "MyAnimeList API Client ID") localServer = flag.Bool("localServer", false, "Set varius headers for running locally") animeCache *bigcache.BigCache seasoncache *bigcache.BigCache userCache *bigcache.BigCache searchCache *bigcache.BigCache animeListCache *bigcache.BigCache db *nutsdb.DB jikanLimiter *rate.Limiter logOut *RingBuf ) func main() { // lese Flaggen flag.Parse() // bleib bei uns sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt) logOut = NewRingBuf(10101) color.Notice.Printf("huso %s %s\n", husoVersion, runtime.Version()) logOut.WriteLine(fmt.Sprintf("🎉 huso %s %s", husoVersion, runtime.Version())) jikanLimiter = rate.NewLimiter(rate.Every(time.Second), 1) // cache init var err error animeCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(7 * time.Hour)) if err != nil { log.Fatal(err) } defer animeCache.Close() seasoncache, err = bigcache.NewBigCache(bigcache.DefaultConfig(2 * time.Hour)) if err != nil { log.Fatal(err) } defer seasoncache.Close() userCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(7 * time.Hour)) if err != nil { log.Fatal(err) } defer userCache.Close() searchCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(7 * time.Minute)) if err != nil { log.Fatal(err) } defer searchCache.Close() animeListCache, err = bigcache.NewBigCache(bigcache.DefaultConfig(42 * time.Minute)) if err != nil { log.Fatal(err) } defer animeListCache.Close() nutsOpt := nutsdb.DefaultOptions nutsOpt.Dir = "nuts" db, err = nutsdb.Open(nutsOpt) if err != nil { log.Fatal(err) } defer db.Close() Arbeit() LangeArbeit() go Arbeiten() go LangeArbeiten() go RunWebserv() <-sc }