go-common/app/service/live/live-dm/dao/getCheckInfo.go

392 lines
8.8 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
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
}