group.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package service
  2. import (
  3. "strings"
  4. "github.com/QuantumNous/new-api/setting"
  5. "github.com/QuantumNous/new-api/setting/ratio_setting"
  6. )
  7. func GetUserUsableGroups(userGroup string) map[string]string {
  8. groupsCopy := setting.GetUserUsableGroupsCopy()
  9. if userGroup != "" {
  10. specialSettings, b := ratio_setting.GetGroupRatioSetting().GroupSpecialUsableGroup.Get(userGroup)
  11. if b {
  12. // 处理特殊可用分组
  13. for specialGroup, desc := range specialSettings {
  14. if strings.HasPrefix(specialGroup, "-:") {
  15. // 移除分组
  16. groupToRemove := strings.TrimPrefix(specialGroup, "-:")
  17. delete(groupsCopy, groupToRemove)
  18. } else if strings.HasPrefix(specialGroup, "+:") {
  19. // 添加分组
  20. groupToAdd := strings.TrimPrefix(specialGroup, "+:")
  21. groupsCopy[groupToAdd] = desc
  22. } else {
  23. // 直接添加分组
  24. groupsCopy[specialGroup] = desc
  25. }
  26. }
  27. }
  28. // 如果userGroup不在UserUsableGroups中,返回UserUsableGroups + userGroup
  29. if _, ok := groupsCopy[userGroup]; !ok {
  30. groupsCopy[userGroup] = "用户分组"
  31. }
  32. }
  33. return groupsCopy
  34. }
  35. func GroupInUserUsableGroups(userGroup, groupName string) bool {
  36. _, ok := GetUserUsableGroups(userGroup)[groupName]
  37. return ok
  38. }
  39. // GetUserAutoGroup 根据用户分组获取自动分组设置
  40. func GetUserAutoGroup(userGroup string) []string {
  41. groups := GetUserUsableGroups(userGroup)
  42. autoGroups := make([]string, 0)
  43. for _, group := range setting.GetAutoGroups() {
  44. if _, ok := groups[group]; ok {
  45. autoGroups = append(autoGroups, group)
  46. }
  47. }
  48. return autoGroups
  49. }
  50. // GetUserGroupRatio 获取用户使用某个分组的倍率
  51. // userGroup 用户分组
  52. // group 需要获取倍率的分组
  53. func GetUserGroupRatio(userGroup, group string) float64 {
  54. ratio, ok := ratio_setting.GetGroupGroupRatio(userGroup, group)
  55. if ok {
  56. return ratio
  57. }
  58. return ratio_setting.GetGroupRatio(group)
  59. }