fix mobile task rules and feature availability

This commit is contained in:
richjohnrambo
2026-10-18 20:53:33 +08:00
parent b79b781f15
commit 5a0fe67027
11 changed files with 144 additions and 130 deletions
+25 -15
View File
@@ -328,30 +328,40 @@ func maskedUsername(value string) string {
func parseFeatures(raw json.RawMessage) Features {
var config map[string]any
if json.Unmarshal(raw, &config) != nil {
return Features{}
config = map[string]any{}
}
return Features{
TaskEnabled: findBool(config, "task_enabled", "taskEnabled", "TASK"),
RechargeEnabled: findBool(config, "recharge_enabled", "rechargeEnabled", "RECHARGE"),
WithdrawalEnabled: findBool(config, "withdrawal_enabled", "withdrawalEnabled", "WITHDRAWAL"),
ManualMallEnabled: findBool(config, "manual_mall_enabled", "manualMallEnabled", "SHOP_STATUS"),
TaskEnabled: findBoolDefault(config, true, "task_enabled", "taskEnabled", "TASK"),
RechargeEnabled: findBoolDefault(config, true, "recharge_enabled", "rechargeEnabled", "RECHARGE"),
WithdrawalEnabled: findBoolDefault(config, true, "withdrawal_enabled", "withdrawalEnabled", "WITHDRAWAL"),
ManualMallEnabled: findBoolDefault(config, true, "manual_mall_enabled", "manualMallEnabled", "SHOP_STATUS"),
}
}
func findBool(config map[string]any, keys ...string) bool {
for _, key := range keys {
if value, ok := config[key]; ok {
return boolValue(value)
}
func findBoolDefault(config map[string]any, defaultValue bool, keys ...string) bool {
value, found := findBoolValue(config, keys...)
if !found {
return defaultValue
}
if nested, ok := config["features"].(map[string]any); ok {
for _, key := range keys {
if value, found := nested[key]; found {
return boolValue(value)
return value
}
func findBoolValue(config map[string]any, keys ...string) (bool, bool) {
for _, key := range keys {
for candidate, value := range config {
if strings.EqualFold(candidate, key) {
return boolValue(value), true
}
}
}
return false
for _, value := range config {
if nested, ok := value.(map[string]any); ok {
if result, found := findBoolValue(nested, keys...); found {
return result, true
}
}
}
return false, false
}
func boolValue(value any) bool {