0.8.0 beta 4

This commit is contained in:
2026-02-26 14:31:03 +03:00
parent da122a3be4
commit 28ec2b7ca9
7 changed files with 248 additions and 31 deletions

61
bot.go
View File

@@ -4,38 +4,58 @@ import (
"fmt"
"os"
"sort"
"strconv"
"strings"
"time"
"git.nix13.pw/scuroneko/extypes"
"git.nix13.pw/scuroneko/laniakea/tgapi"
"git.nix13.pw/scuroneko/slog"
"golang.org/x/time/rate"
)
type BotOpts struct {
Token string
Debug bool
ErrorTemplate string
Prefixes []string
UpdateTypes []string
Token string
UpdateTypes []string
Debug bool
ErrorTemplate string
Prefixes []string
LoggerBasePath string
UseRequestLogger bool
WriteToFile bool
UseTestServer bool
APIUrl string
UseTestServer bool
APIUrl string
RateLimit int
DropRLOverflow bool
}
func NewOpts() *BotOpts { return new(BotOpts) }
func LoadOptsFromEnv() *BotOpts {
rateLimit := 30
if rl := os.Getenv("RATE_LIMIT"); rl != "" {
rateLimit, _ = strconv.Atoi(rl)
}
return &BotOpts{
Token: os.Getenv("TG_TOKEN"),
Debug: os.Getenv("DEBUG") == "true",
ErrorTemplate: os.Getenv("ERROR_TEMPLATE"),
Prefixes: LoadPrefixesFromEnv(),
UpdateTypes: strings.Split(os.Getenv("UPDATE_TYPES"), ";"),
Token: os.Getenv("TG_TOKEN"),
UpdateTypes: strings.Split(os.Getenv("UPDATE_TYPES"), ";"),
Debug: os.Getenv("DEBUG") == "true",
ErrorTemplate: os.Getenv("ERROR_TEMPLATE"),
Prefixes: LoadPrefixesFromEnv(),
UseRequestLogger: os.Getenv("USE_REQ_LOG") == "true",
WriteToFile: os.Getenv("WRITE_TO_FILE") == "true",
UseTestServer: os.Getenv("USE_TEST_SERVER") == "true",
APIUrl: os.Getenv("API_URL"),
UseTestServer: os.Getenv("USE_TEST_SERVER") == "true",
APIUrl: os.Getenv("API_URL"),
RateLimit: rateLimit,
DropRLOverflow: os.Getenv("DROP_RL_OVERFLOW") == "true",
}
}
func LoadPrefixesFromEnv() []string {
@@ -55,6 +75,7 @@ type Bot[T DbContext] struct {
logger *slog.Logger
RequestLogger *slog.Logger
extraLoggers extypes.Slice[*slog.Logger]
plugins []Plugin[T]
middlewares []Middleware[T]
@@ -66,8 +87,6 @@ type Bot[T DbContext] struct {
dbContext *T
l10n *L10n
extraLoggers extypes.Slice[*slog.Logger]
updateOffset int
updateTypes []tgapi.UpdateType
updateQueue *extypes.Queue[*tgapi.Update]
@@ -76,7 +95,12 @@ type Bot[T DbContext] struct {
func NewBot[T any](opts *BotOpts) *Bot[T] {
updateQueue := extypes.CreateQueue[*tgapi.Update](512)
apiOpts := tgapi.NewAPIOpts(opts.Token).SetAPIUrl(opts.APIUrl).UseTestServer(opts.UseTestServer)
var limiter *rate.Limiter
if opts.RateLimit > 0 {
limiter = rate.NewLimiter(rate.Limit(opts.RateLimit), opts.RateLimit)
}
apiOpts := tgapi.NewAPIOpts(opts.Token).SetAPIUrl(opts.APIUrl).UseTestServer(opts.UseTestServer).SetLimiter(limiter)
api := tgapi.NewAPI(apiOpts)
uploader := tgapi.NewUploader(api)
@@ -108,8 +132,7 @@ func NewBot[T any](opts *BotOpts) *Bot[T] {
u, err := api.GetMe()
if err != nil {
_ = api.CloseApi()
_ = uploader.Close()
_ = bot.Close()
bot.logger.Fatal(err)
}
bot.logger.Infof("Authorized as %s\n", u.FirstName)