refactor(telegram): 优化 Telegram 初始化逻辑,优先使用数据库配置
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 5m53s
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 5m53s
重构 Telegram 初始化流程,优先从数据库获取配置并添加回退逻辑 移除未使用的 config.Telegram 依赖 添加 webhook 删除操作以避免长轮询冲突
This commit is contained in:
parent
74f4a12422
commit
e42a5b80bf
@ -7,7 +7,6 @@ import (
|
||||
"github.com/perfect-panel/server/pkg/logger"
|
||||
|
||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5"
|
||||
"github.com/perfect-panel/server/internal/config"
|
||||
"github.com/perfect-panel/server/internal/logic/telegram"
|
||||
"github.com/perfect-panel/server/internal/model/auth"
|
||||
"github.com/perfect-panel/server/internal/svc"
|
||||
@ -16,27 +15,31 @@ import (
|
||||
|
||||
func Telegram(svc *svc.ServiceContext) {
|
||||
|
||||
// Prefer BotToken from DB auth method, fallback to config file
|
||||
var usedToken string
|
||||
var webHookDomain string
|
||||
method, err := svc.AuthModel.FindOneByMethod(context.Background(), "telegram")
|
||||
if err != nil {
|
||||
logger.Errorf("[Init Telegram Config] Get Telegram Config Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
var tg config.Telegram
|
||||
|
||||
if err == nil {
|
||||
tgConfig := new(auth.TelegramAuthConfig)
|
||||
if err = tgConfig.Unmarshal(method.Config); err != nil {
|
||||
if err = tgConfig.Unmarshal(method.Config); err == nil {
|
||||
usedToken = tgConfig.BotToken
|
||||
webHookDomain = tgConfig.WebHookDomain
|
||||
} else {
|
||||
logger.Errorf("[Init Telegram Config] Unmarshal Telegram Config Error: %s", err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
usedToken := tgConfig.BotToken
|
||||
} else {
|
||||
logger.Debugf("[Init Telegram Config] No Telegram method in DB, fallback to file config: %s", err.Error())
|
||||
}
|
||||
if usedToken == "" {
|
||||
usedToken = svc.Config.Telegram.BotToken
|
||||
}
|
||||
if webHookDomain == "" {
|
||||
webHookDomain = svc.Config.Telegram.WebHookDomain
|
||||
}
|
||||
if usedToken == "" {
|
||||
logger.Debug("[Init Telegram Config] Telegram Token is empty")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
bot, err := tgbotapi.NewBotAPI(usedToken)
|
||||
if err != nil {
|
||||
@ -44,8 +47,12 @@ func Telegram(svc *svc.ServiceContext) {
|
||||
return
|
||||
}
|
||||
|
||||
if tgConfig.WebHookDomain == "" || svc.Config.Debug {
|
||||
// set Long Polling mode
|
||||
if webHookDomain == "" || svc.Config.Debug {
|
||||
// Ensure webhook is removed to avoid long polling conflict
|
||||
if _, derr := bot.MakeRequest("deleteWebhook", tgbotapi.Params{}); derr != nil {
|
||||
logger.Errorf("[Init Telegram Config] Delete webhook failed: %s", derr.Error())
|
||||
}
|
||||
// Long Polling mode
|
||||
updateConfig := tgbotapi.NewUpdate(0)
|
||||
updateConfig.Timeout = 60
|
||||
updates := bot.GetUpdatesChan(updateConfig)
|
||||
@ -59,7 +66,7 @@ func Telegram(svc *svc.ServiceContext) {
|
||||
}
|
||||
}()
|
||||
} else {
|
||||
wh, err := tgbotapi.NewWebhook(fmt.Sprintf("%s/v1/telegram/webhook?secret=%s", tgConfig.WebHookDomain, tool.Md5Encode(usedToken, false)))
|
||||
wh, err := tgbotapi.NewWebhook(fmt.Sprintf("%s/v1/telegram/webhook?secret=%s", webHookDomain, tool.Md5Encode(usedToken, false)))
|
||||
if err != nil {
|
||||
logger.Errorf("[Init Telegram Config] New Webhook Error: %s", err.Error())
|
||||
return
|
||||
@ -79,9 +86,12 @@ func Telegram(svc *svc.ServiceContext) {
|
||||
svc.Config.Telegram.BotID = user.ID
|
||||
svc.Config.Telegram.BotName = user.UserName
|
||||
svc.Config.Telegram.BotToken = usedToken
|
||||
svc.Config.Telegram.EnableNotify = tg.EnableNotify
|
||||
svc.Config.Telegram.WebHookDomain = tg.WebHookDomain
|
||||
svc.Config.Telegram.WebHookDomain = webHookDomain
|
||||
svc.TelegramBot = bot
|
||||
|
||||
if webHookDomain == "" || svc.Config.Debug {
|
||||
logger.Info("[Init Telegram Config] Long polling mode initialized")
|
||||
} else {
|
||||
logger.Info("[Init Telegram Config] Webhook set success")
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user