mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-03-30 05:41:37 +00:00
126 lines
3.1 KiB
Go
126 lines
3.1 KiB
Go
package ratio_setting
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"github.com/QuantumNous/new-api/common"
|
|
"github.com/QuantumNous/new-api/setting/config"
|
|
"github.com/QuantumNous/new-api/types"
|
|
)
|
|
|
|
var defaultGroupRatio = map[string]float64{
|
|
"default": 1,
|
|
"vip": 1,
|
|
"svip": 1,
|
|
}
|
|
|
|
var groupRatioMap = types.NewRWMap[string, float64]()
|
|
|
|
var defaultGroupGroupRatio = map[string]map[string]float64{
|
|
"vip": {
|
|
"edit_this": 0.9,
|
|
},
|
|
}
|
|
|
|
var groupGroupRatioMap = types.NewRWMap[string, map[string]float64]()
|
|
|
|
var defaultGroupSpecialUsableGroup = map[string]map[string]string{
|
|
"vip": {
|
|
"append_1": "vip_special_group_1",
|
|
"-:remove_1": "vip_removed_group_1",
|
|
},
|
|
}
|
|
|
|
type GroupRatioSetting struct {
|
|
GroupRatio *types.RWMap[string, float64] `json:"group_ratio"`
|
|
GroupGroupRatio *types.RWMap[string, map[string]float64] `json:"group_group_ratio"`
|
|
GroupSpecialUsableGroup *types.RWMap[string, map[string]string] `json:"group_special_usable_group"`
|
|
}
|
|
|
|
var groupRatioSetting GroupRatioSetting
|
|
|
|
func init() {
|
|
groupSpecialUsableGroup := types.NewRWMap[string, map[string]string]()
|
|
groupSpecialUsableGroup.AddAll(defaultGroupSpecialUsableGroup)
|
|
|
|
groupRatioMap.AddAll(defaultGroupRatio)
|
|
groupGroupRatioMap.AddAll(defaultGroupGroupRatio)
|
|
|
|
groupRatioSetting = GroupRatioSetting{
|
|
GroupSpecialUsableGroup: groupSpecialUsableGroup,
|
|
GroupRatio: groupRatioMap,
|
|
GroupGroupRatio: groupGroupRatioMap,
|
|
}
|
|
|
|
config.GlobalConfig.Register("group_ratio_setting", &groupRatioSetting)
|
|
}
|
|
|
|
func GetGroupRatioSetting() *GroupRatioSetting {
|
|
if groupRatioSetting.GroupSpecialUsableGroup == nil {
|
|
groupRatioSetting.GroupSpecialUsableGroup = types.NewRWMap[string, map[string]string]()
|
|
groupRatioSetting.GroupSpecialUsableGroup.AddAll(defaultGroupSpecialUsableGroup)
|
|
}
|
|
return &groupRatioSetting
|
|
}
|
|
|
|
func GetGroupRatioCopy() map[string]float64 {
|
|
return groupRatioMap.ReadAll()
|
|
}
|
|
|
|
func ContainsGroupRatio(name string) bool {
|
|
_, ok := groupRatioMap.Get(name)
|
|
return ok
|
|
}
|
|
|
|
func GroupRatio2JSONString() string {
|
|
return groupRatioMap.MarshalJSONString()
|
|
}
|
|
|
|
func UpdateGroupRatioByJSONString(jsonStr string) error {
|
|
return types.LoadFromJsonString(groupRatioMap, jsonStr)
|
|
}
|
|
|
|
func GetGroupRatio(name string) float64 {
|
|
ratio, ok := groupRatioMap.Get(name)
|
|
if !ok {
|
|
common.SysLog("group ratio not found: " + name)
|
|
return 1
|
|
}
|
|
return ratio
|
|
}
|
|
|
|
func GetGroupGroupRatio(userGroup, usingGroup string) (float64, bool) {
|
|
gp, ok := groupGroupRatioMap.Get(userGroup)
|
|
if !ok {
|
|
return -1, false
|
|
}
|
|
ratio, ok := gp[usingGroup]
|
|
if !ok {
|
|
return -1, false
|
|
}
|
|
return ratio, true
|
|
}
|
|
|
|
func GroupGroupRatio2JSONString() string {
|
|
return groupGroupRatioMap.MarshalJSONString()
|
|
}
|
|
|
|
func UpdateGroupGroupRatioByJSONString(jsonStr string) error {
|
|
return types.LoadFromJsonString(groupGroupRatioMap, jsonStr)
|
|
}
|
|
|
|
func CheckGroupRatio(jsonStr string) error {
|
|
checkGroupRatio := make(map[string]float64)
|
|
err := json.Unmarshal([]byte(jsonStr), &checkGroupRatio)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for name, ratio := range checkGroupRatio {
|
|
if ratio < 0 {
|
|
return errors.New("group ratio must be not less than 0: " + name)
|
|
}
|
|
}
|
|
return nil
|
|
}
|