package service import ( "strings" "github.com/QuantumNous/new-api/setting" "github.com/QuantumNous/new-api/setting/ratio_setting" ) func GetUserUsableGroups(userGroup string) map[string]string { groupsCopy := setting.GetUserUsableGroupsCopy() if userGroup != "" { specialSettings, b := ratio_setting.GetGroupRatioSetting().GroupSpecialUsableGroup.Get(userGroup) if b { // 处理特殊可用分组 for specialGroup, desc := range specialSettings { if strings.HasPrefix(specialGroup, "-:") { // 移除分组 groupToRemove := strings.TrimPrefix(specialGroup, "-:") delete(groupsCopy, groupToRemove) } else if strings.HasPrefix(specialGroup, "+:") { // 添加分组 groupToAdd := strings.TrimPrefix(specialGroup, "+:") groupsCopy[groupToAdd] = desc } else { // 直接添加分组 groupsCopy[specialGroup] = desc } } } // 如果userGroup不在UserUsableGroups中,返回UserUsableGroups + userGroup if _, ok := groupsCopy[userGroup]; !ok { groupsCopy[userGroup] = "用户分组" } } return groupsCopy } func GroupInUserUsableGroups(userGroup, groupName string) bool { _, ok := GetUserUsableGroups(userGroup)[groupName] return ok } // GetUserAutoGroup 根据用户分组获取自动分组设置 func GetUserAutoGroup(userGroup string) []string { groups := GetUserUsableGroups(userGroup) autoGroups := make([]string, 0) for _, group := range setting.GetAutoGroups() { if _, ok := groups[group]; ok { autoGroups = append(autoGroups, group) } } return autoGroups } // GetAutoSubGroups 返回某个 auto 型分组(顶层 "auto" 或二级 auto)的可用子分组列表。 // - 顶层 "auto":沿用 GetUserAutoGroup,与用户可用分组求交(保持现状)。 // - 二级 auto:直接返回其配置的子分组(不与 UserUsableGroups 求交), // 从而让高/低价子分组无需对用户可见即可生效,实现对用户隐藏。 func GetAutoSubGroups(autoName, userGroup string) []string { if autoName == "auto" { return GetUserAutoGroup(userGroup) } return setting.GetAutoGroupSubGroups(autoName) } // GetUserGroupRatio 获取用户使用某个分组的倍率 // userGroup 用户分组 // group 需要获取倍率的分组 func GetUserGroupRatio(userGroup, group string) float64 { ratio, ok := ratio_setting.GetGroupGroupRatio(userGroup, group) if ok { return ratio } return ratio_setting.GetGroupRatio(group) }