feat: enhance user client context management and improve error handling

This commit is contained in:
krau
2025-12-19 13:48:55 +08:00
parent 018ed47949
commit d3cc56c8e6
5 changed files with 17 additions and 12 deletions

View File

@@ -17,6 +17,12 @@ import (
"github.com/krau/SaveAny-Bot/database"
)
var ectx *ext.Context
func ExtContext() *ext.Context {
return ectx
}
func Init(ctx context.Context) <-chan struct{} {
log.FromContext(ctx).Info("初始化 Bot...")
resultChan := make(chan struct {
@@ -88,6 +94,7 @@ func Init(ctx context.Context) <-chan struct{} {
log.FromContext(ctx).Fatalf("初始化 Bot 失败: %s", result.err)
}
handlers.Register(result.client.Dispatcher)
ectx = result.client.CreateContext()
log.FromContext(ctx).Info("Bot 初始化完成")
}
return shouldRestart

View File

@@ -61,7 +61,7 @@ func Register(disp dispatcher.Dispatcher) {
disp.AddHandler(handlers.NewMessage(filters.Message.Media, handleSilentMode(handleMediaMessage, handleSilentSaveMedia)))
disp.AddHandler(handlers.NewMessage(filters.Message.Text, handleSilentMode(handleTextMessage, handleSilentSaveText)))
if config.C().Telegram.Userbot.Enable {
if config.C().Telegram.Userbot.Enable {
go listenMediaMessageEvent(userclient.GetMediaMessageCh())
}
}

View File

@@ -110,7 +110,9 @@ func GetFilesFromUpdateLinkMessageWithReplyEdit(ctx *ext.Context, update *ext.Up
tctx := ctx
if config.C().Telegram.Userbot.Enable {
tctx = uc.GetCtx()
if uc.GetCtx() != nil {
tctx = uc.GetCtx()
}
}
for _, link := range msgLinks {

View File

@@ -152,6 +152,9 @@ func handleUnwatchCmd(ctx *ext.Context, update *ext.Update) error {
}
func listenMediaMessageEvent(ch chan userclient.MediaMessageEvent) {
if userclient.GetCtx() == nil {
return
}
logger := log.FromContext(userclient.GetCtx())
for event := range ch {
logger.Debug("Received media message event", "chat_id", event.ChatID, "file_name", event.File.Name())

View File

@@ -23,23 +23,16 @@ var uc *gotgproto.Client
var ectx *ext.Context
func GetCtx() *ext.Context {
if uc == nil {
panic("User client is not initialized, please call Login first")
}
if ectx != nil {
return ectx
}
if uc == nil {
return nil
}
ectx = uc.CreateContext()
return ectx
}
func GetClient() *gotgproto.Client {
if uc == nil {
panic("User client is not initialized, please call Login first")
}
return uc
}
func Login(ctx context.Context) (*gotgproto.Client, error) {
log.FromContext(ctx).Debug("Logging in user client")
if uc != nil {