From 0fb461f7a458785ac5dc15c7b1356e0195fc67ab Mon Sep 17 00:00:00 2001 From: smail Date: Thu, 24 Sep 2026 22:30:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=A8=E6=88=B7=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=81=A2=E5=A4=8D=E5=A4=B1=E8=B4=A5=E4=BB=8D=E5=90=AF?= =?UTF-8?q?=E7=94=A8=E9=80=9A=E7=9F=A5=E6=8F=92=E4=BB=B6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/hooks/base.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/backend/hooks/base.go b/backend/hooks/base.go index 4251f53a..2cec8233 100644 --- a/backend/hooks/base.go +++ b/backend/hooks/base.go @@ -380,7 +380,11 @@ func Init(serverVersion string) { continue } } - syncTelegramUserSettings(logicalID, hook) + if syncErr := syncTelegramUserSettings(logicalID, hook); syncErr != nil { + log.WithError(syncErr).Warnf("[%s] 用户设置恢复失败,插件未启用", logicalID) + _ = process.Kill() + continue + } if healthErr := hook.Health(); healthErr != nil { log.Warnf("[%s] Plugin health check failed", logicalID) _ = process.Kill() @@ -418,20 +422,24 @@ func SyncTelegramUserSettings(userID int, settings pluginservice.TelegramUserSet } return configurer.ConfigureUserSettings(userID, payload) } -func syncTelegramUserSettings(logicalID string, hook *HookSender) { - if logicalID != "telegram_push" || hook == nil || pluginConfigService == nil { - return +func syncTelegramUserSettings(logicalID string, hook *HookSender) error { + if logicalID != "telegram_push" { + return nil + } + if hook == nil || pluginConfigService == nil { + return pluginservice.ErrPluginStoreUnavailable } entries, err := pluginConfigService.ListTelegramUserSettings() if err != nil { - log.WithError(err).Warnf("[%s] Telegram user settings sync load failed", logicalID) - return + return fmt.Errorf("读取 Telegram 用户设置失败: %w", err) } + // 完整恢复后才能注册插件,避免空设置或部分设置被误判为正常运行。 for _, entry := range entries { if syncErr := syncTelegramUserSetting(hook, entry.UserID, entry.Settings); syncErr != nil { - log.WithError(syncErr).Warnf("[%s] Telegram user settings sync failed for user %d", logicalID, entry.UserID) + return fmt.Errorf("恢复 Telegram 用户 %d 的设置失败: %w", entry.UserID, syncErr) } } + return nil } func syncTelegramUserSetting(hook *HookSender, userID int, settings pluginservice.TelegramUserSettings) error {