package msg_handler import ( "encoding/json" "git.noahlan.cn/northlan/ntools-go/kafka" "live-gateway/config" "live-gateway/pb/mq" pbVars "live-gateway/pb/vars" kfk "live-gateway/pkg/kafka" "strconv" ) type ( SendGift struct { Action string `json:"action"` // 动作,投喂等 BatchComboId string `json:"batch_combo_id"` // 礼物连击ID BatchComboSend interface{} `json:"batch_combo_send"` // ??? BeatId string `json:"beatId"` // ??? BizSource string `json:"biz_source"` // ?? :live BlindGift *BlindGift `json:"blind_gift"` // ?? BroadcastId int `json:"broadcast_id"` // 广播ID ?? CoinType string `json:"coin_type"` // 瓜子类型, gold金瓜子 silver银瓜子(免费礼物) ComboResourcesId int `json:"combo_resources_id"` // ??? ComboSend interface{} `json:"combo_send"` // ??? ComboStayTime int `json:"combo_stay_time"` // 连击停留时间??? 秒? ComboTotalCoin int `json:"combo_total_coin"` // 连击总币数??? CritProb int `json:"crit_prob"` // ??? Demarcation int `json:"demarcation"` // ???: 1 DiscountPrice int `json:"discount_price"` // 折扣价??? DMScore int `json:"dmscore"` // 活动积分,普通道具为0 Draw int `json:"draw"` // ??? Effect int `json:"effect"` // ??? EffectBlock int `json:"effect_block"` // ??? Face string `json:"face"` // 头像? GiftId int64 `json:"giftId"` // 礼物ID GiftName string `json:"giftName"` // 礼物名称 GiftType int `json:"giftType"` // 礼物类型 普通,弹幕,活动 Gold int `json:"gold"` // 用户剩余金瓜子 GuardLevel int `json:"guard_level"` // 舰队等级 IsFirst bool `json:"is_first"` // 是否首次投喂? IsSpecialBatch int `json:"is_special_batch"` // ??? Magnification int `json:"magnification"` // 是否放大??? MedalInfo FansMedal `json:"medal_info"` // 佩戴勋章的主播信息 NameColor string `json:"name_color"` // 名 颜色 Num int64 `json:"num"` // 数量 OriginalGiftName string `json:"original_gift_name"` // 原始礼物名称??? Price int64 `json:"price"` // 价格? 但不是电池 RCost int `json:"rcost"` // ??? Remain int `json:"remain"` // 用户道具包裹剩余数量 Rnd string `json:"rnd"` // 随机数? SendMaster interface{} `json:"send_master"` // ??? Silver int `json:"silver"` // 用户剩余银瓜子 Super int `json:"super"` // ??? SuperBatchGiftNum int `json:"super_batch_gift_num"` // ??? SuperGiftNum int `json:"super_gift_num"` // ??? SvgaBlock int `json:"svga_block"` // ??? TagImage string `json:"tag_image"` // ??? Timestamp int64 `json:"timestamp"` // 赠送时间 TopList interface{} `json:"top_list"` // ??? TotalCoin int `json:"total_coin"` // 总值 瓜子数 Uid int64 `json:"uid"` // 用户ID Uname string `json:"uname"` // 用户名 } // BlindGift 宝箱类礼物 BlindGift struct { BlindGiftConfigId int64 `json:"blind_gift_config_id"` // id From int64 `json:"from"` // ?? GiftAction string `json:"gift_action"` // 爆出/投喂 OriginalGiftId int64 `json:"original_gift_id"` // 原始礼物ID OriginalGiftName string `json:"original_gift_name"` // 原始礼物名 } ) type SendGiftHandler struct { producer *kafka.Producer liveRoomId int64 } func NewSendGiftHandler(liveRoomId int64) *SendGiftHandler { cfg := config.Config.Kafka.Gift return &SendGiftHandler{ producer: kafka.NewKafkaProducer(kfk.DefaultProducerConfig, cfg.Addr, cfg.Topic), liveRoomId: liveRoomId, } } func (h *SendGiftHandler) CMD() string { return "SEND_GIFT" } func (h *SendGiftHandler) HandlerMessage(data []byte) { var baseMsg struct { CMD string `json:"cmd"` Data *SendGift `json:"data"` } if err := json.Unmarshal(data, &baseMsg); err != nil { return } //logger.SLog.Infof("%s %s礼物 %s x%d", baseMsg.Data.Uname, baseMsg.Data.Action, baseMsg.Data.GiftName, baseMsg.Data.Num) dmMsg := &pbMq.MqGift{ Platform: pbVars.Platform_name[int32(pbVars.Platform_Bilibili)], LiveRoomId: h.liveRoomId, MsgId: "", Timestamp: baseMsg.Data.Timestamp, Uid: baseMsg.Data.Uid, Uname: baseMsg.Data.Uname, Avatar: baseMsg.Data.Face, NobilityLevel: int64(baseMsg.Data.GuardLevel), GiftId: baseMsg.Data.GiftId, GiftName: baseMsg.Data.GiftName, GiftNum: baseMsg.Data.Num, Price: baseMsg.Data.Price, IsPaid: IsPaidGift(baseMsg.Data.CoinType), Type: pbMq.MqGift_NORMAL, PackGift: nil, FansMedalWearingStatus: baseMsg.Data.MedalInfo.AnchorRoomId == h.liveRoomId, FansMedalName: baseMsg.Data.MedalInfo.MedalName, FansMedalLevel: baseMsg.Data.MedalInfo.MedalLevel, } // type - pack if baseMsg.Data.BlindGift != nil { dmMsg.Type = pbMq.MqGift_PACK dmMsg.PackGift = &pbMq.MqGift_PackGift{ GiftId: baseMsg.Data.BlindGift.OriginalGiftId, GiftName: baseMsg.Data.BlindGift.OriginalGiftName, } } _ = h.producer.SendMessageAsync(dmMsg, strconv.FormatInt(dmMsg.Uid, 10)) }