Spaces:
Build error
Build error
| package model | |
| import ( | |
| "one-api/common" | |
| "one-api/setting" | |
| "one-api/setting/config" | |
| "one-api/setting/operation_setting" | |
| "one-api/setting/ratio_setting" | |
| "one-api/setting/system_setting" | |
| "strconv" | |
| "strings" | |
| "time" | |
| ) | |
| type Option struct { | |
| Key string `json:"key" gorm:"primaryKey"` | |
| Value string `json:"value"` | |
| } | |
| func AllOption() ([]*Option, error) { | |
| var options []*Option | |
| var err error | |
| err = DB.Find(&options).Error | |
| return options, err | |
| } | |
| func InitOptionMap() { | |
| common.OptionMapRWMutex.Lock() | |
| common.OptionMap = make(map[string]string) | |
| // 添加原有的系统配置 | |
| common.OptionMap["FileUploadPermission"] = strconv.Itoa(common.FileUploadPermission) | |
| common.OptionMap["FileDownloadPermission"] = strconv.Itoa(common.FileDownloadPermission) | |
| common.OptionMap["ImageUploadPermission"] = strconv.Itoa(common.ImageUploadPermission) | |
| common.OptionMap["ImageDownloadPermission"] = strconv.Itoa(common.ImageDownloadPermission) | |
| common.OptionMap["PasswordLoginEnabled"] = strconv.FormatBool(common.PasswordLoginEnabled) | |
| common.OptionMap["PasswordRegisterEnabled"] = strconv.FormatBool(common.PasswordRegisterEnabled) | |
| common.OptionMap["EmailVerificationEnabled"] = strconv.FormatBool(common.EmailVerificationEnabled) | |
| common.OptionMap["GitHubOAuthEnabled"] = strconv.FormatBool(common.GitHubOAuthEnabled) | |
| common.OptionMap["LinuxDOOAuthEnabled"] = strconv.FormatBool(common.LinuxDOOAuthEnabled) | |
| common.OptionMap["TelegramOAuthEnabled"] = strconv.FormatBool(common.TelegramOAuthEnabled) | |
| common.OptionMap["WeChatAuthEnabled"] = strconv.FormatBool(common.WeChatAuthEnabled) | |
| common.OptionMap["TurnstileCheckEnabled"] = strconv.FormatBool(common.TurnstileCheckEnabled) | |
| common.OptionMap["RegisterEnabled"] = strconv.FormatBool(common.RegisterEnabled) | |
| common.OptionMap["AutomaticDisableChannelEnabled"] = strconv.FormatBool(common.AutomaticDisableChannelEnabled) | |
| common.OptionMap["AutomaticEnableChannelEnabled"] = strconv.FormatBool(common.AutomaticEnableChannelEnabled) | |
| common.OptionMap["LogConsumeEnabled"] = strconv.FormatBool(common.LogConsumeEnabled) | |
| common.OptionMap["DisplayInCurrencyEnabled"] = strconv.FormatBool(common.DisplayInCurrencyEnabled) | |
| common.OptionMap["DisplayTokenStatEnabled"] = strconv.FormatBool(common.DisplayTokenStatEnabled) | |
| common.OptionMap["DrawingEnabled"] = strconv.FormatBool(common.DrawingEnabled) | |
| common.OptionMap["TaskEnabled"] = strconv.FormatBool(common.TaskEnabled) | |
| common.OptionMap["DataExportEnabled"] = strconv.FormatBool(common.DataExportEnabled) | |
| common.OptionMap["ChannelDisableThreshold"] = strconv.FormatFloat(common.ChannelDisableThreshold, 'f', -1, 64) | |
| common.OptionMap["EmailDomainRestrictionEnabled"] = strconv.FormatBool(common.EmailDomainRestrictionEnabled) | |
| common.OptionMap["EmailAliasRestrictionEnabled"] = strconv.FormatBool(common.EmailAliasRestrictionEnabled) | |
| common.OptionMap["EmailDomainWhitelist"] = strings.Join(common.EmailDomainWhitelist, ",") | |
| common.OptionMap["SMTPServer"] = "" | |
| common.OptionMap["SMTPFrom"] = "" | |
| common.OptionMap["SMTPPort"] = strconv.Itoa(common.SMTPPort) | |
| common.OptionMap["SMTPAccount"] = "" | |
| common.OptionMap["SMTPToken"] = "" | |
| common.OptionMap["SMTPSSLEnabled"] = strconv.FormatBool(common.SMTPSSLEnabled) | |
| common.OptionMap["Notice"] = "" | |
| common.OptionMap["About"] = "" | |
| common.OptionMap["HomePageContent"] = "" | |
| common.OptionMap["Footer"] = common.Footer | |
| common.OptionMap["SystemName"] = common.SystemName | |
| common.OptionMap["Logo"] = common.Logo | |
| common.OptionMap["ServerAddress"] = "" | |
| common.OptionMap["WorkerUrl"] = system_setting.WorkerUrl | |
| common.OptionMap["WorkerValidKey"] = system_setting.WorkerValidKey | |
| common.OptionMap["WorkerAllowHttpImageRequestEnabled"] = strconv.FormatBool(system_setting.WorkerAllowHttpImageRequestEnabled) | |
| common.OptionMap["PayAddress"] = "" | |
| common.OptionMap["CustomCallbackAddress"] = "" | |
| common.OptionMap["EpayId"] = "" | |
| common.OptionMap["EpayKey"] = "" | |
| common.OptionMap["Price"] = strconv.FormatFloat(operation_setting.Price, 'f', -1, 64) | |
| common.OptionMap["USDExchangeRate"] = strconv.FormatFloat(operation_setting.USDExchangeRate, 'f', -1, 64) | |
| common.OptionMap["MinTopUp"] = strconv.Itoa(operation_setting.MinTopUp) | |
| common.OptionMap["StripeMinTopUp"] = strconv.Itoa(setting.StripeMinTopUp) | |
| common.OptionMap["StripeApiSecret"] = setting.StripeApiSecret | |
| common.OptionMap["StripeWebhookSecret"] = setting.StripeWebhookSecret | |
| common.OptionMap["StripePriceId"] = setting.StripePriceId | |
| common.OptionMap["StripeUnitPrice"] = strconv.FormatFloat(setting.StripeUnitPrice, 'f', -1, 64) | |
| common.OptionMap["StripePromotionCodesEnabled"] = strconv.FormatBool(setting.StripePromotionCodesEnabled) | |
| common.OptionMap["TopupGroupRatio"] = common.TopupGroupRatio2JSONString() | |
| common.OptionMap["Chats"] = setting.Chats2JsonString() | |
| common.OptionMap["AutoGroups"] = setting.AutoGroups2JsonString() | |
| common.OptionMap["DefaultUseAutoGroup"] = strconv.FormatBool(setting.DefaultUseAutoGroup) | |
| common.OptionMap["PayMethods"] = operation_setting.PayMethods2JsonString() | |
| common.OptionMap["GitHubClientId"] = "" | |
| common.OptionMap["GitHubClientSecret"] = "" | |
| common.OptionMap["TelegramBotToken"] = "" | |
| common.OptionMap["TelegramBotName"] = "" | |
| common.OptionMap["WeChatServerAddress"] = "" | |
| common.OptionMap["WeChatServerToken"] = "" | |
| common.OptionMap["WeChatAccountQRCodeImageURL"] = "" | |
| common.OptionMap["TurnstileSiteKey"] = "" | |
| common.OptionMap["TurnstileSecretKey"] = "" | |
| common.OptionMap["QuotaForNewUser"] = strconv.Itoa(common.QuotaForNewUser) | |
| common.OptionMap["QuotaForInviter"] = strconv.Itoa(common.QuotaForInviter) | |
| common.OptionMap["QuotaForInvitee"] = strconv.Itoa(common.QuotaForInvitee) | |
| common.OptionMap["QuotaRemindThreshold"] = strconv.Itoa(common.QuotaRemindThreshold) | |
| common.OptionMap["PreConsumedQuota"] = strconv.Itoa(common.PreConsumedQuota) | |
| common.OptionMap["ModelRequestRateLimitCount"] = strconv.Itoa(setting.ModelRequestRateLimitCount) | |
| common.OptionMap["ModelRequestRateLimitDurationMinutes"] = strconv.Itoa(setting.ModelRequestRateLimitDurationMinutes) | |
| common.OptionMap["ModelRequestRateLimitSuccessCount"] = strconv.Itoa(setting.ModelRequestRateLimitSuccessCount) | |
| common.OptionMap["ModelRequestRateLimitGroup"] = setting.ModelRequestRateLimitGroup2JSONString() | |
| common.OptionMap["ModelRatio"] = ratio_setting.ModelRatio2JSONString() | |
| common.OptionMap["ModelPrice"] = ratio_setting.ModelPrice2JSONString() | |
| common.OptionMap["CacheRatio"] = ratio_setting.CacheRatio2JSONString() | |
| common.OptionMap["GroupRatio"] = ratio_setting.GroupRatio2JSONString() | |
| common.OptionMap["GroupGroupRatio"] = ratio_setting.GroupGroupRatio2JSONString() | |
| common.OptionMap["UserUsableGroups"] = setting.UserUsableGroups2JSONString() | |
| common.OptionMap["CompletionRatio"] = ratio_setting.CompletionRatio2JSONString() | |
| common.OptionMap["ImageRatio"] = ratio_setting.ImageRatio2JSONString() | |
| common.OptionMap["AudioRatio"] = ratio_setting.AudioRatio2JSONString() | |
| common.OptionMap["AudioCompletionRatio"] = ratio_setting.AudioCompletionRatio2JSONString() | |
| common.OptionMap["TopUpLink"] = common.TopUpLink | |
| //common.OptionMap["ChatLink"] = common.ChatLink | |
| //common.OptionMap["ChatLink2"] = common.ChatLink2 | |
| common.OptionMap["QuotaPerUnit"] = strconv.FormatFloat(common.QuotaPerUnit, 'f', -1, 64) | |
| common.OptionMap["RetryTimes"] = strconv.Itoa(common.RetryTimes) | |
| common.OptionMap["DataExportInterval"] = strconv.Itoa(common.DataExportInterval) | |
| common.OptionMap["DataExportDefaultTime"] = common.DataExportDefaultTime | |
| common.OptionMap["DefaultCollapseSidebar"] = strconv.FormatBool(common.DefaultCollapseSidebar) | |
| common.OptionMap["MjNotifyEnabled"] = strconv.FormatBool(setting.MjNotifyEnabled) | |
| common.OptionMap["MjAccountFilterEnabled"] = strconv.FormatBool(setting.MjAccountFilterEnabled) | |
| common.OptionMap["MjModeClearEnabled"] = strconv.FormatBool(setting.MjModeClearEnabled) | |
| common.OptionMap["MjForwardUrlEnabled"] = strconv.FormatBool(setting.MjForwardUrlEnabled) | |
| common.OptionMap["MjActionCheckSuccessEnabled"] = strconv.FormatBool(setting.MjActionCheckSuccessEnabled) | |
| common.OptionMap["CheckSensitiveEnabled"] = strconv.FormatBool(setting.CheckSensitiveEnabled) | |
| common.OptionMap["DemoSiteEnabled"] = strconv.FormatBool(operation_setting.DemoSiteEnabled) | |
| common.OptionMap["SelfUseModeEnabled"] = strconv.FormatBool(operation_setting.SelfUseModeEnabled) | |
| common.OptionMap["ModelRequestRateLimitEnabled"] = strconv.FormatBool(setting.ModelRequestRateLimitEnabled) | |
| common.OptionMap["CheckSensitiveOnPromptEnabled"] = strconv.FormatBool(setting.CheckSensitiveOnPromptEnabled) | |
| common.OptionMap["StopOnSensitiveEnabled"] = strconv.FormatBool(setting.StopOnSensitiveEnabled) | |
| common.OptionMap["SensitiveWords"] = setting.SensitiveWordsToString() | |
| common.OptionMap["StreamCacheQueueLength"] = strconv.Itoa(setting.StreamCacheQueueLength) | |
| common.OptionMap["AutomaticDisableKeywords"] = operation_setting.AutomaticDisableKeywordsToString() | |
| common.OptionMap["ExposeRatioEnabled"] = strconv.FormatBool(ratio_setting.IsExposeRatioEnabled()) | |
| // 自动添加所有注册的模型配置 | |
| modelConfigs := config.GlobalConfig.ExportAllConfigs() | |
| for k, v := range modelConfigs { | |
| common.OptionMap[k] = v | |
| } | |
| common.OptionMapRWMutex.Unlock() | |
| loadOptionsFromDatabase() | |
| } | |
| func loadOptionsFromDatabase() { | |
| options, _ := AllOption() | |
| for _, option := range options { | |
| err := updateOptionMap(option.Key, option.Value) | |
| if err != nil { | |
| common.SysLog("failed to update option map: " + err.Error()) | |
| } | |
| } | |
| } | |
| func SyncOptions(frequency int) { | |
| for { | |
| time.Sleep(time.Duration(frequency) * time.Second) | |
| common.SysLog("syncing options from database") | |
| loadOptionsFromDatabase() | |
| } | |
| } | |
| func UpdateOption(key string, value string) error { | |
| // Save to database first | |
| option := Option{ | |
| Key: key, | |
| } | |
| // https://gorm.io/docs/update.html#Save-All-Fields | |
| DB.FirstOrCreate(&option, Option{Key: key}) | |
| option.Value = value | |
| // Save is a combination function. | |
| // If save value does not contain primary key, it will execute Create, | |
| // otherwise it will execute Update (with all fields). | |
| DB.Save(&option) | |
| // Update OptionMap | |
| return updateOptionMap(key, value) | |
| } | |
| func updateOptionMap(key string, value string) (err error) { | |
| common.OptionMapRWMutex.Lock() | |
| defer common.OptionMapRWMutex.Unlock() | |
| common.OptionMap[key] = value | |
| // 检查是否是模型配置 - 使用更规范的方式处理 | |
| if handleConfigUpdate(key, value) { | |
| return nil // 已由配置系统处理 | |
| } | |
| // 处理传统配置项... | |
| if strings.HasSuffix(key, "Permission") { | |
| intValue, _ := strconv.Atoi(value) | |
| switch key { | |
| case "FileUploadPermission": | |
| common.FileUploadPermission = intValue | |
| case "FileDownloadPermission": | |
| common.FileDownloadPermission = intValue | |
| case "ImageUploadPermission": | |
| common.ImageUploadPermission = intValue | |
| case "ImageDownloadPermission": | |
| common.ImageDownloadPermission = intValue | |
| } | |
| } | |
| if strings.HasSuffix(key, "Enabled") || key == "DefaultCollapseSidebar" || key == "DefaultUseAutoGroup" { | |
| boolValue := value == "true" | |
| switch key { | |
| case "PasswordRegisterEnabled": | |
| common.PasswordRegisterEnabled = boolValue | |
| case "PasswordLoginEnabled": | |
| common.PasswordLoginEnabled = boolValue | |
| case "EmailVerificationEnabled": | |
| common.EmailVerificationEnabled = boolValue | |
| case "GitHubOAuthEnabled": | |
| common.GitHubOAuthEnabled = boolValue | |
| case "LinuxDOOAuthEnabled": | |
| common.LinuxDOOAuthEnabled = boolValue | |
| case "WeChatAuthEnabled": | |
| common.WeChatAuthEnabled = boolValue | |
| case "TelegramOAuthEnabled": | |
| common.TelegramOAuthEnabled = boolValue | |
| case "TurnstileCheckEnabled": | |
| common.TurnstileCheckEnabled = boolValue | |
| case "RegisterEnabled": | |
| common.RegisterEnabled = boolValue | |
| case "EmailDomainRestrictionEnabled": | |
| common.EmailDomainRestrictionEnabled = boolValue | |
| case "EmailAliasRestrictionEnabled": | |
| common.EmailAliasRestrictionEnabled = boolValue | |
| case "AutomaticDisableChannelEnabled": | |
| common.AutomaticDisableChannelEnabled = boolValue | |
| case "AutomaticEnableChannelEnabled": | |
| common.AutomaticEnableChannelEnabled = boolValue | |
| case "LogConsumeEnabled": | |
| common.LogConsumeEnabled = boolValue | |
| case "DisplayInCurrencyEnabled": | |
| common.DisplayInCurrencyEnabled = boolValue | |
| case "DisplayTokenStatEnabled": | |
| common.DisplayTokenStatEnabled = boolValue | |
| case "DrawingEnabled": | |
| common.DrawingEnabled = boolValue | |
| case "TaskEnabled": | |
| common.TaskEnabled = boolValue | |
| case "DataExportEnabled": | |
| common.DataExportEnabled = boolValue | |
| case "DefaultCollapseSidebar": | |
| common.DefaultCollapseSidebar = boolValue | |
| case "MjNotifyEnabled": | |
| setting.MjNotifyEnabled = boolValue | |
| case "MjAccountFilterEnabled": | |
| setting.MjAccountFilterEnabled = boolValue | |
| case "MjModeClearEnabled": | |
| setting.MjModeClearEnabled = boolValue | |
| case "MjForwardUrlEnabled": | |
| setting.MjForwardUrlEnabled = boolValue | |
| case "MjActionCheckSuccessEnabled": | |
| setting.MjActionCheckSuccessEnabled = boolValue | |
| case "CheckSensitiveEnabled": | |
| setting.CheckSensitiveEnabled = boolValue | |
| case "DemoSiteEnabled": | |
| operation_setting.DemoSiteEnabled = boolValue | |
| case "SelfUseModeEnabled": | |
| operation_setting.SelfUseModeEnabled = boolValue | |
| case "CheckSensitiveOnPromptEnabled": | |
| setting.CheckSensitiveOnPromptEnabled = boolValue | |
| case "ModelRequestRateLimitEnabled": | |
| setting.ModelRequestRateLimitEnabled = boolValue | |
| case "StopOnSensitiveEnabled": | |
| setting.StopOnSensitiveEnabled = boolValue | |
| case "SMTPSSLEnabled": | |
| common.SMTPSSLEnabled = boolValue | |
| case "WorkerAllowHttpImageRequestEnabled": | |
| system_setting.WorkerAllowHttpImageRequestEnabled = boolValue | |
| case "DefaultUseAutoGroup": | |
| setting.DefaultUseAutoGroup = boolValue | |
| case "ExposeRatioEnabled": | |
| ratio_setting.SetExposeRatioEnabled(boolValue) | |
| } | |
| } | |
| switch key { | |
| case "EmailDomainWhitelist": | |
| common.EmailDomainWhitelist = strings.Split(value, ",") | |
| case "SMTPServer": | |
| common.SMTPServer = value | |
| case "SMTPPort": | |
| intValue, _ := strconv.Atoi(value) | |
| common.SMTPPort = intValue | |
| case "SMTPAccount": | |
| common.SMTPAccount = value | |
| case "SMTPFrom": | |
| common.SMTPFrom = value | |
| case "SMTPToken": | |
| common.SMTPToken = value | |
| case "ServerAddress": | |
| system_setting.ServerAddress = value | |
| case "WorkerUrl": | |
| system_setting.WorkerUrl = value | |
| case "WorkerValidKey": | |
| system_setting.WorkerValidKey = value | |
| case "PayAddress": | |
| operation_setting.PayAddress = value | |
| case "Chats": | |
| err = setting.UpdateChatsByJsonString(value) | |
| case "AutoGroups": | |
| err = setting.UpdateAutoGroupsByJsonString(value) | |
| case "CustomCallbackAddress": | |
| operation_setting.CustomCallbackAddress = value | |
| case "EpayId": | |
| operation_setting.EpayId = value | |
| case "EpayKey": | |
| operation_setting.EpayKey = value | |
| case "Price": | |
| operation_setting.Price, _ = strconv.ParseFloat(value, 64) | |
| case "USDExchangeRate": | |
| operation_setting.USDExchangeRate, _ = strconv.ParseFloat(value, 64) | |
| case "MinTopUp": | |
| operation_setting.MinTopUp, _ = strconv.Atoi(value) | |
| case "StripeApiSecret": | |
| setting.StripeApiSecret = value | |
| case "StripeWebhookSecret": | |
| setting.StripeWebhookSecret = value | |
| case "StripePriceId": | |
| setting.StripePriceId = value | |
| case "StripeUnitPrice": | |
| setting.StripeUnitPrice, _ = strconv.ParseFloat(value, 64) | |
| case "StripeMinTopUp": | |
| setting.StripeMinTopUp, _ = strconv.Atoi(value) | |
| case "StripePromotionCodesEnabled": | |
| setting.StripePromotionCodesEnabled = value == "true" | |
| case "TopupGroupRatio": | |
| err = common.UpdateTopupGroupRatioByJSONString(value) | |
| case "GitHubClientId": | |
| common.GitHubClientId = value | |
| case "GitHubClientSecret": | |
| common.GitHubClientSecret = value | |
| case "LinuxDOClientId": | |
| common.LinuxDOClientId = value | |
| case "LinuxDOClientSecret": | |
| common.LinuxDOClientSecret = value | |
| case "LinuxDOMinimumTrustLevel": | |
| common.LinuxDOMinimumTrustLevel, _ = strconv.Atoi(value) | |
| case "Footer": | |
| common.Footer = value | |
| case "SystemName": | |
| common.SystemName = value | |
| case "Logo": | |
| common.Logo = value | |
| case "WeChatServerAddress": | |
| common.WeChatServerAddress = value | |
| case "WeChatServerToken": | |
| common.WeChatServerToken = value | |
| case "WeChatAccountQRCodeImageURL": | |
| common.WeChatAccountQRCodeImageURL = value | |
| case "TelegramBotToken": | |
| common.TelegramBotToken = value | |
| case "TelegramBotName": | |
| common.TelegramBotName = value | |
| case "TurnstileSiteKey": | |
| common.TurnstileSiteKey = value | |
| case "TurnstileSecretKey": | |
| common.TurnstileSecretKey = value | |
| case "QuotaForNewUser": | |
| common.QuotaForNewUser, _ = strconv.Atoi(value) | |
| case "QuotaForInviter": | |
| common.QuotaForInviter, _ = strconv.Atoi(value) | |
| case "QuotaForInvitee": | |
| common.QuotaForInvitee, _ = strconv.Atoi(value) | |
| case "QuotaRemindThreshold": | |
| common.QuotaRemindThreshold, _ = strconv.Atoi(value) | |
| case "PreConsumedQuota": | |
| common.PreConsumedQuota, _ = strconv.Atoi(value) | |
| case "ModelRequestRateLimitCount": | |
| setting.ModelRequestRateLimitCount, _ = strconv.Atoi(value) | |
| case "ModelRequestRateLimitDurationMinutes": | |
| setting.ModelRequestRateLimitDurationMinutes, _ = strconv.Atoi(value) | |
| case "ModelRequestRateLimitSuccessCount": | |
| setting.ModelRequestRateLimitSuccessCount, _ = strconv.Atoi(value) | |
| case "ModelRequestRateLimitGroup": | |
| err = setting.UpdateModelRequestRateLimitGroupByJSONString(value) | |
| case "RetryTimes": | |
| common.RetryTimes, _ = strconv.Atoi(value) | |
| case "DataExportInterval": | |
| common.DataExportInterval, _ = strconv.Atoi(value) | |
| case "DataExportDefaultTime": | |
| common.DataExportDefaultTime = value | |
| case "ModelRatio": | |
| err = ratio_setting.UpdateModelRatioByJSONString(value) | |
| case "GroupRatio": | |
| err = ratio_setting.UpdateGroupRatioByJSONString(value) | |
| case "GroupGroupRatio": | |
| err = ratio_setting.UpdateGroupGroupRatioByJSONString(value) | |
| case "UserUsableGroups": | |
| err = setting.UpdateUserUsableGroupsByJSONString(value) | |
| case "CompletionRatio": | |
| err = ratio_setting.UpdateCompletionRatioByJSONString(value) | |
| case "ModelPrice": | |
| err = ratio_setting.UpdateModelPriceByJSONString(value) | |
| case "CacheRatio": | |
| err = ratio_setting.UpdateCacheRatioByJSONString(value) | |
| case "ImageRatio": | |
| err = ratio_setting.UpdateImageRatioByJSONString(value) | |
| case "AudioRatio": | |
| err = ratio_setting.UpdateAudioRatioByJSONString(value) | |
| case "AudioCompletionRatio": | |
| err = ratio_setting.UpdateAudioCompletionRatioByJSONString(value) | |
| case "TopUpLink": | |
| common.TopUpLink = value | |
| //case "ChatLink": | |
| // common.ChatLink = value | |
| //case "ChatLink2": | |
| // common.ChatLink2 = value | |
| case "ChannelDisableThreshold": | |
| common.ChannelDisableThreshold, _ = strconv.ParseFloat(value, 64) | |
| case "QuotaPerUnit": | |
| common.QuotaPerUnit, _ = strconv.ParseFloat(value, 64) | |
| case "SensitiveWords": | |
| setting.SensitiveWordsFromString(value) | |
| case "AutomaticDisableKeywords": | |
| operation_setting.AutomaticDisableKeywordsFromString(value) | |
| case "StreamCacheQueueLength": | |
| setting.StreamCacheQueueLength, _ = strconv.Atoi(value) | |
| case "PayMethods": | |
| err = operation_setting.UpdatePayMethodsByJsonString(value) | |
| } | |
| return err | |
| } | |
| // handleConfigUpdate 处理分层配置更新,返回是否已处理 | |
| func handleConfigUpdate(key, value string) bool { | |
| parts := strings.SplitN(key, ".", 2) | |
| if len(parts) != 2 { | |
| return false // 不是分层配置 | |
| } | |
| configName := parts[0] | |
| configKey := parts[1] | |
| // 获取配置对象 | |
| cfg := config.GlobalConfig.Get(configName) | |
| if cfg == nil { | |
| return false // 未注册的配置 | |
| } | |
| // 更新配置 | |
| configMap := map[string]string{ | |
| configKey: value, | |
| } | |
| config.UpdateConfigFromMap(cfg, configMap) | |
| return true // 已处理 | |
| } | |