package config import "github.com/pkg/errors" type ( Elite struct { LiveDict map[int32]int64 // 直播间序号对应ID DefaultId int64 // 默认单位ID Items []EliteItem } // EliteItem 精英单位 EliteItem struct { Id int64 // 单位ID Sort int32 // 排序号 PriceDay int64 // 每天价格(弹币) PriceForever int64 // 永久价格 } Title struct { LiveDict map[int32]int64 // 直播间序号对应ID Items []TitleItem } // TitleItem 称号 TitleItem struct { Id int64 // 称号ID Name string // 称号名 Type string // 称号类型 RankType int32 // 作用的排行榜类型 PriceDay int64 // 每天价格(弹币) PriceForever int64 // 永久价格(弹币) } GiftPack struct { PackType string // 礼包类型 PackName string // 礼包名称 // Condition 领取条件 Condition struct { UserLimit int32 // 单人可领取数量 UserResetType string // 用户礼包重置类型: 不重置(unset)|每天(daily)|每周(weekly)|每月(monthly) StartTime string // 可领取时间(开始) 两个时间相等则不限期领取 EndTime string // 可领取时间(结束) } // Content 礼包内容 Content struct { Coin int64 // 积分数 Coins []int64 // 积分数(多次领取,每次不同) // Title 奖励称号列表 Title []struct { Id int64 // 称号ID Duration int64 // 持续时长,单位: 秒 -1无限 } } } // RankSubmit 排行榜结算配置 RankSubmit struct { TitleId int64 // 称号奖励 Best []float64 // 弹币奖励(前n) 单位: 元 Consolation float64 // 安慰奖(后max-n) 单位: 元 } GameConfig struct { UserRetriever struct { Enabled bool // 是否开启 UpdateDuration int64 // 用户信息更新最短间隔 单位 h NobilityPlatforms []string // 需要获取贵族的平台 Cron struct { PlatformUser string Nobility string } Bilibili struct { RoomId int64 // 直播房间号 Mid int64 // 主播UID 不输入就通过API获取 RoomShortInfoApi string // 房间简短信息API TopListApi string } } Rank struct { Enabled bool // 是否开启 Cron struct { Update string // 更新榜单 Persistence string // 持久化 } Submit map[int32]RankSubmit // 排行榜结算 } GiftCollector struct { Enabled bool // 是否开启 Platforms []string // 需搜集的平台 Cron struct { CollectGift string } } // 弹币 Coin struct { // CheckIn 签到 CheckIn struct { Points []int64 // 签到积分 次数分数 Critical float32 // 暴击率(百分比) CriticalRadio []float32 // 暴击倍数 } RMBToCoin float64 // RMB到弹币的转换 GiftToRMB map[string]float64 // 平台礼物到RMB的转换 FreeToCoin map[string]float64 // 平台免费礼物到弹币的转换 } // 精英单位 Elite Elite // 称号 Title Title // GiftPack 礼包配置 GiftPackMap []GiftPack } ) func (c *Title) FindTitleCfg(id int64) (*TitleItem, error) { for _, item := range c.Items { if id == item.Id { return &item, nil } } return nil, errors.New("未找到ID对应的称号配置") } func (c *Title) FindTitleCfgByLive(sort int32) (*TitleItem, error) { if id, ok := c.LiveDict[sort]; ok { return c.FindTitleCfg(id) } return nil, errors.New("未找到sort对应的称号配置") } func (c *Elite) FindEliteCfg(id int64) (*EliteItem, error) { for _, item := range c.Items { if id == item.Id { return &item, nil } } return nil, errors.New("未找到ID对应的精英单位配置") } func (c *Elite) FindEliteCfgByLive(sort int32) (*EliteItem, error) { if id, ok := c.LiveDict[sort]; ok { return c.FindEliteCfg(id) } return nil, errors.New("未找到sort对应的精英单位配置") }