Version Inicial

This commit is contained in:
2026-04-13 21:42:04 +02:00
commit f5dc96eee5
24 changed files with 2630 additions and 0 deletions

104
middelwares.go Normal file
View File

@@ -0,0 +1,104 @@
package main
import (
"context"
"github.com/go-telegram/bot"
"github.com/go-telegram/bot/models"
)
func (appCtx *App) LoggingMiddleware() bot.Middleware {
return func(next bot.HandlerFunc) bot.HandlerFunc {
return func(ctx context.Context, b *bot.Bot, update *models.Update) {
var chatID int64
var text string
if update.Message != nil {
chatID = update.Message.Chat.ID
text = update.Message.Text
} else {
chatID = 0
text = "<no message>"
}
appCtx.logger.Debug(
"Update received",
"module", "Bot",
"chat_id", chatID,
"text", text,
)
next(ctx, b, update)
appCtx.logger.Debug(
"Update processed",
"module", "Bot",
)
}
}
}
func (appCtx *App) RecoveryMiddleware() bot.Middleware {
return func(next bot.HandlerFunc) bot.HandlerFunc {
return func(ctx context.Context, b *bot.Bot, update *models.Update) {
defer func() {
if r := recover(); r != nil {
appCtx.logger.Error(
"Recovered from panic",
"module", "Bot",
"panic", r,
)
}
}()
next(ctx, b, update)
}
}
}
func (appCtx *App) AuthMiddleware() bot.Middleware {
return func(next bot.HandlerFunc) bot.HandlerFunc {
return func(ctx context.Context, b *bot.Bot, update *models.Update) {
var user *models.User
var chatID int64
if update.Message != nil && update.Message.From != nil {
user = update.Message.From
chatID = update.Message.Chat.ID
} else if update.CallbackQuery != nil {
if update.CallbackQuery.Message.Message == nil {
return
}
user = &update.CallbackQuery.From
chatID = update.CallbackQuery.Message.Message.Chat.ID
} else {
return
}
// Bootstrap primer usuario
if appCtx.store.IsEmpty() {
if err := appCtx.store.FirstUser(user.ID); err != nil {
appCtx.logger.Error("Failed to save first user", "error", err)
} else {
appCtx.logger.Info("First user registered", "user_id", user.ID)
}
next(ctx, b, update)
return
}
// Autorización
if !appCtx.store.IsAllowed(user.ID) {
appCtx.logger.Warn("Unauthorized access", "user_id", user.ID, "chat_id", chatID)
appCtx.sendMessage(ctx, b, chatID, appCtx.T("i.auth.unauthorized"), true, nil)
return
}
next(ctx, b, update)
}
}
}