diff --git a/client/bot/bot.go b/client/bot/bot.go index 4f41727..2c1bc04 100644 --- a/client/bot/bot.go +++ b/client/bot/bot.go @@ -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 diff --git a/client/bot/handlers/register.go b/client/bot/handlers/register.go index 78b9a5f..775b8d9 100644 --- a/client/bot/handlers/register.go +++ b/client/bot/handlers/register.go @@ -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()) } } diff --git a/client/bot/handlers/utils/shortcut/message.go b/client/bot/handlers/utils/shortcut/message.go index 5542879..861920e 100644 --- a/client/bot/handlers/utils/shortcut/message.go +++ b/client/bot/handlers/utils/shortcut/message.go @@ -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 { diff --git a/client/bot/handlers/watch.go b/client/bot/handlers/watch.go index 3cc9bf1..781b3ec 100644 --- a/client/bot/handlers/watch.go +++ b/client/bot/handlers/watch.go @@ -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()) diff --git a/client/user/userclient.go b/client/user/userclient.go index 0556707..cbc759f 100644 --- a/client/user/userclient.go +++ b/client/user/userclient.go @@ -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 {