123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 |
- package dao
- import (
- "context"
- "strconv"
- "sync"
- fansMedalService "go-common/app/service/live/fans_medal/api/liverpc/v2"
- "go-common/app/service/live/live-dm/conf"
- liveUserService "go-common/app/service/live/live_user/api/liverpc/v1"
- roomService "go-common/app/service/live/room/api/liverpc/v2"
- userService "go-common/app/service/live/user/api/liverpc/v3"
- userextService "go-common/app/service/live/userext/api/liverpc/v1"
- xuserService "go-common/app/service/live/xuser/api/grpc/v1"
- acctountService "go-common/app/service/main/account/api"
- filterService "go-common/app/service/main/filter/api/grpc/v1"
- spyService "go-common/app/service/main/spy/api"
- "go-common/library/log"
- "github.com/pkg/errors"
- )
- //UserInfo 用户等级,经验等信息
- type UserInfo struct {
- Vip int
- Svip int
- UserLever int64
- UserScore int64
- ULevelRank int64
- ULevelColor int64
- UnameColor string
- RoomAdmin bool
- PrivilegeType int
- Bubble int64
- MedalInfo *FansMedalInfo
- lock sync.Mutex
- }
- //UserScore 用户真实分已经弹幕ai分
- type UserScore struct {
- UserScore int64
- MsgAI int64
- MsgLevel int64
- lock sync.Mutex
- }
- //DMConf 弹幕配置
- type DMConf struct {
- Mode int64
- Color int64
- Length int64
- }
- //FansMedalInfo 粉丝勋章信息
- type FansMedalInfo struct {
- MedalID int64
- RUID int64
- RUName string
- MedalLevel int64
- MedalName string
- AnchorName string
- RoomID int64
- MColor int64
- SpecialMedal string
- lock sync.Mutex
- }
- //RoomConf 播主房间配置信息
- type RoomConf struct {
- UID int64
- RoomShield int64
- RoomID int64
- Anchor string
- }
- //UserBindInfo 用户手机,实名等信息
- type UserBindInfo struct {
- Identification int32
- MobileVerify int32
- Uname string
- URank int32
- // MobileVirtual int64 无虚拟号段信息
- }
- //Get 获取用户的弹幕配置信息
- func (d *DMConf) Get(ctx context.Context, uid int64, roomid int64, c *conf.Config) error {
- req := &userextService.DanmuConfGetAllReq{
- Uid: uid,
- Roomid: roomid,
- }
- resp, err := UserExtServiceClient.V1DanmuConf.GetAll(ctx, req)
- if err != nil {
- if errors.Cause(err) != context.Canceled {
- log.Error("DM: userextService GetAll err: %v", err)
- }
- d.Color = 16777215
- d.Mode = 1
- d.Length = 20
- return nil
- }
- if resp.Code != 0 {
- log.Error("DM: userextService GetAll err code: %d", resp.Code)
- d.Color = 16777215
- d.Mode = 1
- d.Length = 20
- return nil
- }
- d.Color = resp.Data.Color
- d.Mode = resp.Data.Mode
- d.Length = resp.Data.Length
- su := strconv.FormatInt(uid, 10)
- if c.DmRules.Nixiang[su] {
- d.Mode = 6
- }
- if c.DmRules.Color[su] != 0 {
- d.Color = c.DmRules.Color[su]
- }
- return nil
- }
- // Get 获取用户等级,经验等信息
- func (u *UserInfo) Get(ctx context.Context, uid int64) error {
- req := &userService.UserGetUserLevelInfoReq{
- Uid: uid,
- }
- resp, err := userClient.V3User.GetUserLevelInfo(ctx, req)
- if err != nil {
- if errors.Cause(err) != context.Canceled {
- log.Error("DM: user err: %v", err)
- }
- u.lock.Lock()
- u.UserLever = 0
- u.UserScore = 0
- u.ULevelColor = 16752445
- u.lock.Unlock()
- return nil
- }
- if resp.Code != 0 {
- log.Error("DM: user GetUserLevelInfo err code: %d", resp.Code)
- u.lock.Lock()
- u.UserLever = 0
- u.UserScore = 0
- u.ULevelColor = 16752445
- u.lock.Unlock()
- return nil
- }
- u.lock.Lock()
- u.UserLever = resp.Data.Level
- u.UserScore = resp.Data.Exp
- u.ULevelColor = resp.Data.Color
- u.lock.Unlock()
- return nil
- }
- //GetVipInfo 获取用户的老爷等级
- func (u *UserInfo) GetVipInfo(ctx context.Context, uid int64) error {
- req := &xuserService.UidReq{
- Uid: uid,
- }
- resp, err := vipCli.Info(ctx, req)
- if err != nil {
- if errors.Cause(err) != context.Canceled {
- log.Error("DM: xuserService get vip Info err: %v", err)
- }
- u.lock.Lock()
- u.Vip = 0
- u.Svip = 0
- u.lock.Unlock()
- return nil
- }
- u.lock.Lock()
- u.Vip = resp.Info.Vip
- u.Svip = resp.Info.Svip
- u.lock.Unlock()
- return nil
- }
- //GetPrivilegeType 获取大航海信息
- func (u *UserInfo) GetPrivilegeType(ctx context.Context, uid int64, ruid int64) error {
- req := &liveUserService.GuardGetByUidTargetIdReq{
- Uid: uid,
- TargetId: ruid,
- IsLimitOne: 0,
- }
- resp, err := LiveUserServiceClient.V1Guard.GetByUidTargetId(ctx, req)
- if err != nil {
- if errors.Cause(err) != context.Canceled {
- log.Error("DM: liveUserService GetByUidTargetId err: %v", err)
- }
- u.lock.Lock()
- u.PrivilegeType = 0
- u.lock.Unlock()
- return nil
- }
- if resp.Code != 0 {
- log.Error("DM: liveUserService GetByUidTargetId err code: %d", resp.Code)
- u.lock.Lock()
- u.PrivilegeType = 0
- u.lock.Unlock()
- return nil
- }
- var PrivilegeType int64
- for _, val := range resp.Data {
- i := val.PrivilegeType
- if PrivilegeType == 0 {
- PrivilegeType = i
- }
- if PrivilegeType != 0 && PrivilegeType > i {
- PrivilegeType = i
- }
- }
- u.lock.Lock()
- u.PrivilegeType = int(PrivilegeType)
- u.lock.Unlock()
- return nil
- }
- //IsRoomAdmin 判断用户是否是房管
- func (u *UserInfo) IsRoomAdmin(ctx context.Context, uid int64, roomid int64) error {
- defer u.lock.Unlock()
- if roomid == 59125 || roomid == 5440 {
- u.lock.Lock()
- u.RoomAdmin = false
- return nil
- }
- req := &xuserService.RoomAdminIsAdminShortReq{
- Uid: uid,
- Roomid: roomid,
- }
- resp, err := isAdmin.IsAdminShort(ctx, req)
- if err != nil {
- log.Error("DM: xuser IsAdminShort err: %+v", err)
- u.lock.Lock()
- u.RoomAdmin = false
- return nil
- }
- if resp.Result == 1 {
- u.lock.Lock()
- u.RoomAdmin = true
- return nil
- }
- u.lock.Lock()
- u.RoomAdmin = false
- return nil
- }
- //GetFansMedal 获取主播的粉丝勋章信息
- func (f *FansMedalInfo) GetFansMedal(ctx context.Context, uid int64) error {
- req := &fansMedalService.HighQpsLiveWearedReq{
- Uid: uid,
- }
- resq, err := FansMedalServiceClient.V2HighQps.LiveWeared(ctx, req)
- if err != nil {
- if errors.Cause(err) != context.Canceled {
- log.Error("DM: fansMedalService LiveWeared err: %v", err)
- }
- f.RUID = 0
- f.MedalLevel = 1
- f.MedalName = ""
- f.MColor = 0
- return nil
- }
- if resq.Code != 0 {
- log.Error("DM: fansMedalService LiveWeared err code: %d", resq.Code)
- f.RUID = 0
- f.MedalLevel = 1
- f.MedalName = ""
- f.MColor = 0
- return nil
- }
- f.RUID = resq.Data.TargetId
- f.MedalLevel = resq.Data.Level
- f.MedalName = resq.Data.MedalName
- f.MColor = resq.Data.MedalColor
- return nil
- }
- //Get 获取主播房间配置信息s
- func (r *RoomConf) Get(ctx context.Context, roomID int64) error {
- req := &roomService.RoomGetByIdsReq{
- Ids: []int64{roomID},
- }
- resp, err := RoomServiceClient.V2Room.GetByIds(ctx, req)
- if err != nil {
- if errors.Cause(err) != context.Canceled {
- log.Error("DM: roomService GetByIds err: %v", err)
- }
- r.RoomID = roomID
- r.UID = 0
- r.RoomShield = 0
- r.Anchor = ""
- return nil
- }
- if resp.Code != 0 {
- log.Error("DM: roomService GetByIds err code: %d", resp.Code)
- r.RoomID = roomID
- r.UID = 0
- r.RoomShield = 0
- r.Anchor = ""
- return nil
- }
- if _, ok := resp.Data[roomID]; !ok {
- log.Error("DM: roomService GetByIds error roomid:%d", roomID)
- r.RoomID = roomID
- r.UID = 0
- r.RoomShield = 0
- r.Anchor = ""
- return nil
- }
- r.RoomID = resp.Data[roomID].Roomid
- r.UID = resp.Data[roomID].Uid
- r.RoomShield = resp.Data[roomID].RoomShield
- r.Anchor = resp.Data[roomID].Uname
- return nil
- }
- //Get 获取用户绑定信息,实名认知,绑定手机等信息
- func (u *UserBindInfo) Get(ctx context.Context, uid int64) error {
- req := &acctountService.MidReq{
- Mid: uid,
- }
- resp, err := ac.Profile3(ctx, req)
- if err != nil {
- log.Error("DM: acctountService Profile3 err: %v", err)
- u.Identification = 0
- u.MobileVerify = 0
- u.Uname = ""
- u.URank = 0
- return nil
- }
- u.Identification = resp.Profile.Identification
- u.MobileVerify = resp.Profile.TelStatus
- u.Uname = resp.Profile.Name
- u.URank = resp.Profile.Rank
- return nil
- }
- //GetUserScore 用户真实分
- func (u *UserScore) GetUserScore(ctx context.Context, uid int64) error {
- req := &spyService.InfoReq{
- Mid: uid,
- }
- resp, err := SpyClient.Info(ctx, req)
- if err != nil {
- log.Error("DM: 获取用户真实分错误 err: %v", err)
- u.lock.Lock()
- u.UserScore = 0
- u.lock.Unlock()
- return nil
- }
- u.lock.Lock()
- u.UserScore = int64(resp.Ui.Score)
- u.lock.Unlock()
- return nil
- }
- //GetMsgScore 获取弹幕AI分
- func (u *UserScore) GetMsgScore(ctx context.Context, msg string) error {
- req := &filterService.FilterReq{
- Area: "live_danmu",
- Message: msg,
- }
- resp, err := FilterClient.Filter(ctx, req)
- if err != nil {
- log.Error("DM: main filter err: %v", err)
- u.lock.Lock()
- u.MsgLevel = 0
- u.MsgAI = 0
- u.lock.Unlock()
- return nil
- }
- u.lock.Lock()
- u.MsgLevel = int64(resp.Level)
- if resp.Ai == nil {
- log.Error("DM: main filter err: miss ai scores")
- u.MsgAI = 0
- u.lock.Unlock()
- return nil
- }
- if len(resp.Ai.Scores) == 0 {
- u.MsgAI = 0
- u.lock.Unlock()
- return nil
- }
- u.MsgAI = int64(resp.Ai.Scores[0] * 10)
- u.lock.Unlock()
- return nil
- }
|