syntax = "proto3"; package TikTok; /** This Proto-Schema has been hand-written from the current C#-Classes in TikTokLiveSharp. These objects are reverse-engineered from the Server-Messages and are only partially understood: - Many of the values are simply called Data{X} as their value is unknown. - There are many Timestamps labeled Timestamp{X} as it's unsure which time-value they reflect. These are all UNIX-timestamps close to present time. - For each (int-)value a relevant size has been picked based on read values Some of the uint32-values could potentially be interpreted as boolean types or enums If you have any data to add or contexts/names you can fill please add an issue to the Github: https://github.com/frankvHoof93/TikTokLiveSharp */ option java_package = "io.github.jwdeveloper.tiktok.messages"; option java_multiple_files = true; /** -=-=-=-=-=-=-=-=-=-=-= GENERIC MESSAGES -=-=-=-=-=-=-=-=-=-=-= */ // Acknowledgement-Message for Websocket-Connection message WebcastWebsocketAck { uint64 id = 2; string type = 7; } // Websocket-Message as sent by TikTok-Server (outer structure) message WebcastWebsocketMessage { uint32 data1 = 1; uint64 id = 2; uint32 data2 = 3; uint32 data3 = 4; repeated MessageData connectiondata = 5; // CompressionType, ServerTime, etc WebsocketMessageDetails data4 = 6; // Unknown additional details string type = 7; // "hb" for heartbeat, "msg" for messages bytes binary = 8; // Response message MessageData { string datatype = 1; string value = 2; } message WebsocketMessageDetails { uint32 data1 = 14; } } // Response from TikTokServer. Container for Messages message WebcastResponse { repeated Message messages = 1; string cursor = 2; int32 fetchInterval = 3; uint64 serverTimestamp = 4; string ackIds = 5; int32 fetchType = 6; // 1 = websocket, 2 = long-polling repeated WebsocketRouteParam socketParams = 7; int32 heartbeatDuration = 8; bool needsAck = 9; string socketUrl = 10; // Server-Message. Binary will deserialize into specific message message Message { string type =1 ; // Message(Class)Name bytes binary = 2; // Data for Message } message WebsocketRouteParam { string name = 1; string value = 2; } } /** -=-=-=-=-=-=-=-=-=-=-= TikTok-Objects -=-=-=-=-=-=-=-=-=-=-= */ // Container for uint-Data message DataContainer { uint64 data1 = 1; uint32 data2 = 2; uint32 data3 = 3; uint32 data4 = 4; uint32 data5 = 5; uint32 data6 = 6; uint32 data7 = 7; uint32 data8 = 8; uint32 data9 = 9; } // Links 2 Ids message IdContainer { uint64 id1 = 1; uint64 id2 = 2; } // Links IDs & data message IdData { string data1 = 1; string id1 = 2; string data2 = 3; string id2 = 4; } // Container for Strings message StringData { string data1 = 1; string data2 = 2; } // Links Data & Timestamp message TimeData { uint32 data = 1; uint64 timeStamp = 2; uint64 timeStamp2 = 3; } // Container for multiple Timestamps message TimeStampContainer { uint64 timestamp1 = 1; uint64 timestamp2 = 2; uint64 timestamp3 = 3; } // Type & Value message TypeValue { string type = 1; uint32 data = 2; } message UserContainer { User user = 1; uint32 data1 = 2; } message ValueLabel { uint32 data = 1; string label = 2; string label2 = 3; string label3 = 11; } // @Text message Text { string key = 1; string defaultPattern = 2; TextFormat defaultFormat = 3; repeated TextPiece piecesList = 4; message TextPiece { int32 type = 1; TextFormat format = 2; string stringValue = 11; TextPieceUser userValue = 21; TextPieceGift giftValue = 22; TextPiecePatternRef patternRefValue = 24; } message TextFormat { string color = 1; bool bold = 2; bool italic = 3; int32 weight = 4; int32 italicAngle = 5; int32 fontSize = 6; bool useHeighLightColor = 7; bool useRemoteClor = 8; } message TextPieceGift { int64 giftId = 1; // PatternRef nameRef = 2; // ShowType showType = 3; // Enum int64 colorId = 4; } message TextPiecePatternRef { string key = 1; string defaultPattern = 2; } message TextPieceUser { User user = 1; bool withColon = 2; } } // @Image message Image { repeated string urlList = 1; string uri = 2; int64 height = 3; int64 width = 4; string avgColor = 5; int32 imageType = 6; string openWebUrl = 7; Content content = 8; bool isAnimated = 9; // @Content // proto.webcast.data.Image message Content { string name = 1; string fontColor = 2; int64 level = 3; } } // @Common (header) message Common { string method = 1; int64 msgId = 2; int64 roomId = 3; int64 createTime = 4; int32 monitor = 5; bool isShowMsg = 6; string describe = 7; Text displayText = 8; int64 foldType = 9; int64 anchorFoldType = 10; int64 priorityScore = 11; string logId = 12; string msgProcessFilterK = 13; string msgProcessFilterV = 14; string fromIdc = 15; string toIdc = 16; repeated string filterMsgTagsList = 17; LiveMessageSEI sei = 18; LiveMessageID dependRootId = 19; LiveMessageID dependId = 20; int64 anchorPriorityScore = 21; int64 roomMessageHeatLevel = 22; int64 foldTypeForWeb = 23; int64 anchorFoldTypeForWeb = 24; int64 clientSendTime = 25; IMDispatchStrategy dispatchStrategy = 26; // Enum message LiveMessageSEI { LiveMessageID uniqueId = 1; int64 timestamp = 2; } message LiveMessageID { string primaryId = 1; string messageScene = 2; } enum IMDispatchStrategy { IM_DISPATCH_STRATEGY_DEFAULT = 0; IM_DISPATCH_STRATEGY_BYPASS_DISPATCH_QUEUE = 1; } } // @Badge message BadgeStruct { BadgeDisplayType displayType = 1; // Enum BadgePriorityType priorityType = 2; // Enum BadgeSceneType sceneType = 3; // Enum Position position = 4; // Enum DisplayStatus displayStatus = 5; // Enum int64 greyedByClient = 6; ExhibitionType exhibitionType = 7; // Enum string openweburl = 10; bool display = 11; // PrivilegeLogExtra privilegeLogExtra = 12; repeated ImageBadge image = 20; repeated TextBadge text = 21; StringBadge str = 22; CombineBadge combine = 23; message CombineBadge { BadgeDisplayType displayType = 1; // Enum Image icon = 2; TextBadge text = 3; string str = 4; // repeated PaddingInfo padding = 5; // FontStyle fontStyle = 6; ProfileCardPanel profileCardPanel = 7; CombineBadgeBackground background = 11; CombineBadgeBackground backgroundDarkMode = 12; bool iconAutoMirrored = 13; bool backgroundAutoMirrored = 14; int32 publicScreenShowStyle = 15; int32 personalCardShowStyle = 16; int32 ranklistOnlineAudienceShowStyle = 17; int32 multiGuestShowStyle = 18; // repeated PaddingInfo paddingNewFont = 20; } message ProfileContent { bool useContent = 1; repeated IconConfig iconList = 2; NumberConfig numberConfig = 3; } message ProjectionConfig { bool useProjection = 1; Image icon = 2; } message NumberConfig { int64 number = 1; //FontStyle fontStyle = 2; CombineBadgeBackground background = 3; } message ProfileCardPanel { bool useNewProfileCardStyle = 1; BadgeTextPosition badgeTextPosition = 2; // Enum ProjectionConfig projectionConfig = 3; ProfileContent profileContent = 4; } message CombineBadgeBackground { Image image = 1; string backgroundColorCode = 2; string borderColorCode = 3; } message ImageBadge { BadgeDisplayType displayType = 1; // Enum Image image = 2; } message TextBadge { BadgeDisplayType displayType = 1; // Enum string key = 2; string defaultPattern = 3; repeated string piecesList = 4; } message IconConfig { Image icon = 1; CombineBadgeBackground background = 2; } message StringBadge { BadgeDisplayType displayType = 1; // Enum string str = 2; } enum DataCase { DATA_NOT_SET = 0; IMAGE = 20; TEXT = 21; STR = 22; COMBINE = 23; } enum BadgeDisplayType { BADGEDISPLAYTYPE_UNKNOWN = 0; BADGEDISPLAYTYPE_IMAGE = 1; BADGEDISPLAYTYPE_TEXT = 2; BADGEDISPLAYTYPE_STRING = 3; BADGEDISPLAYTYPE_COMBINE = 4; } enum BadgePriorityType { BADGEPRIORITYTYPE_UNKNOWN = 0; BADGEPRIORITYTYPE_STRONGRELATION = 10; BADGEPRIORITYTYPE_PLATFORM = 20; BADGEPRIORITYTYPE_RELATION = 30; BADGEPRIORITYTYPE_ACTIVITY = 40; BADGEPRIORITYTYPE_RANKLIST = 50; } enum BadgeSceneType { BADGESCENETYPE_UNKNOWN = 0; BADGESCENETYPE_ADMIN = 1; BADGESCENETYPE_FIRSTRECHARGE = 2; BADGESCENETYPE_FRIENDS = 3; BADGESCENETYPE_SUBSCRIBER = 4; BADGESCENETYPE_ACTIVITY = 5; BADGESCENETYPE_RANKLIST = 6; BADGESCENETYPE_NEWSUBSCRIBER = 7; BADGESCENETYPE_USERGRADE = 8; BADGESCENETYPE_STATECONTROLLEDMEDIA = 9; BADGESCENETYPE_FANS = 10; BADGESCENETYPE_LIVEPRO = 11; } enum DisplayStatus { DISPLAYSTATUSNORMAL = 0; DISPLAYSTATUSSHADOW = 1; } enum ExhibitionType { EXHIBITIONTYPE_DEFAULT = 0; EXHIBITIONTYPE_FOLD = 1; EXHIBITIONTYPE_PUBLICSCREEN = 2; } enum BadgeTextPosition { BADGETEXTPOSITIONUNKNOWN = 0; BADGETEXTPOSITIONRIGHT = 1; BADGETEXTPOSITIONBELOW = 2; } enum Position { POSITIONUNKNOWN = 0; POSITIONLEFT = 1; POSITIONRIGHT = 2; } } message WebcastGiftMessage { Common common = 1; int64 giftId = 2; int64 fanTicketCount = 3; int64 groupCount = 4; int64 repeatCount = 5; int64 comboCount = 6; User user = 7; User toUser = 8; int32 repeatEnd = 9; //TextEffect textEffect = 10; int64 groupId = 11; int64 incomeTaskgifts = 12; int64 roomFanTicketCount = 13; GiftIMPriority priority = 14; GiftStruct gift = 15; string logId = 16; int64 sendType = 17; PublicAreaCommon publicAreaCommon = 18; Text trayDisplayText = 19; int64 bannedDisplayEffects = 20; GiftTrayInfo trayInfo = 21; string monitorExtra = 22; GiftMonitorInfo monitorInfo = 23; int64 colorId = 24; bool isFirstSent = 25; Text displayTextForAnchor = 26; Text displayTextForAudience = 27; string orderId = 28; MsgFilter msgFilter = 30; repeated LynxGiftExtra lynxExtraList = 31; UserIdentity userIdentity = 32; // LinkmicGiftExpressionStrategy linkmicGiftExpressionStrategy = 34; // Enum // FlyingMicResources flyingMicResources = 35; bool disableGiftTracking = 36; message GiftIMPriority { repeated int64 queueSizesList = 1; int64 selfQueuePriority = 2; int64 priority = 3; } message PublicAreaCommon { Image userLabel = 1; int64 userConsumeInRoom = 2; } message GiftTrayInfo { Image trayDynamicImg = 1; bool canMirror = 2; } message GiftMonitorInfo { int64 anchorId = 1; int64 profitapiMessageDur = 2; int64 sendGiftProfitApiStartMs = 3; int64 sendGiftProfitCoreStartMs = 4; int64 sendGiftReqStartMs = 5; int64 sendGiftSendMessageSuccessMs = 6; int64 sendProfitapiDur = 7; int64 toUserId = 8; int64 sendGiftStartClientLocalMs = 9; string fromPlatform = 10; string fromVersion = 11; } message MsgFilter { bool isGifter = 1; bool isSubscribedToAnchor = 2; } message LynxGiftExtra { int64 id = 1; int64 code = 2; int64 type = 3; repeated string paramsList = 4; string extra = 5; } message UserIdentity { bool isGiftGiverOfAnchor = 1; bool isSubscriberOfAnchor = 2; bool isMutualFollowingWithAnchor = 3; bool isFollowerOfAnchor = 4; bool isModeratorOfAnchor = 5; bool isAnchor = 6; } } // @Gift message GiftStruct { Image image = 1; string describe = 2; int64 duration = 4; int64 id = 5; bool forLinkmic = 7; bool combo = 10; int32 type = 11; int32 diamondCount = 12; bool isDisplayedOnPanel = 13; int64 primaryEffectId = 14; Image giftLabelIcon = 15; string name = 16; Image icon = 21; string goldEffect = 24; Image previewImage = 47; GiftPanelBanner giftPanelBanner = 48; bool isBroadcastGift = 49; bool isEffectBefview = 50; bool isRandomGift = 51; bool isBoxGift = 52; bool canPutInGiftBox = 53; // GiftBoxInfo giftBoxInfo = 54; // @GiftPanelBanner // proto.webcast.data.GiftStruct message GiftPanelBanner { Text displayText = 1; Image leftIcon = 2; string schemaUrl = 3; repeated string bgColorValuesList = 5; string bannerLynxUrl = 6; } // @GiftRandomEffectInfo // proto.webcast.data.GiftStruct message GiftRandomEffectInfo { RandomGiftPanelBanner randomGiftPanelBanner = 1; repeated int64 effectIdsList = 2; string hostKey = 3; string audienceKey = 4; RandomGiftBubble randomGiftBubble = 5; } // @RandomGiftBubble // proto.webcast.data.GiftStruct message RandomGiftBubble { string displayText = 1; Image iconDynamicEffect = 2; } // @RandomGiftPanelBanner // proto.webcast.data.GiftStruct message RandomGiftPanelBanner { Image bgImage = 1; Image shadingImage = 2; int64 targetNum = 3; int64 collectNum = 4; string displayText = 5; Image leftIcon = 6; string schemaUrl = 7; repeated string bgColorValuesList = 8; int64 round = 9; } } // @User message User { int64 id = 1; string nickname = 3; string bioDescription = 5; Image avatarThumb = 9; Image avatarMedium = 10; Image avatarLarge = 11; bool verified = 12; int32 status = 15; int64 createTime = 16; int64 modifyTime = 17; int32 secret = 18; string shareQrcodeUri = 19; repeated Image badgeImageList = 21; FollowInfo followInfo = 22; PayGrade payGrade = 23; FansClub fansClub = 24; Border border = 25; string specialId = 26; Image avatarBorder = 27; Image medal = 28; repeated Image realTimeIconsList = 29; repeated Image newRealTimeIconsList = 30; int64 topVipNo = 31; UserAttr userAttr = 32; OwnRoom ownRoom = 33; int64 payScore = 34; int64 ticketCount = 35; int64 linkMicStats = 37; // @warning Enum not found, should be LinkMicStats string displayId = 38; bool withCommercePermission = 39; bool withFusionShopEntry = 40; AnchorLevel webcastAnchorLevel = 42; string verifiedContent = 43; AuthorStats authorStats = 44; repeated User topFansList = 45; string secUid = 46; int32 userRole = 47; ActivityInfo activityReward = 49; Image personalCard = 52; AuthenticationInfo authenticationInfo = 53; repeated Image mediaBadgeImageList = 57; repeated int64 commerceWebcastConfigIdsList = 60; repeated Border borderList = 61; ComboBadgeInfo comboBadgeInfo = 62; SubscribeInfo subscribeInfo = 63; repeated BadgeStruct badgeList = 64; repeated int64 mintTypeLabelList = 65; FansClubInfo fansClubInfo = 66; bool allowFindByContacts = 1002; bool allowOthersDownloadVideo = 1003; bool allowOthersDownloadWhenSharingVideo = 1004; bool allowShareShowProfile = 1005; bool allowShowInGossip = 1006; bool allowShowMyAction = 1007; bool allowStrangeComment = 1008; bool allowUnfollowerComment = 1009; bool allowUseLinkmic = 1010; AnchorLevel anchorLevel = 1011; Image avatarJpg = 1012; string bgImgUrl = 1013; int32 blockStatus = 1016; int32 commentRestrict = 1017; string constellation = 1018; int32 disableIchat = 1019; int64 enableIchatImg = 1020; int32 exp = 1021; int64 fanTicketCount = 1022; bool foldStrangerChat = 1023; int64 followStatus = 1024; int32 ichatRestrictType = 1027; string idStr = 1028; bool isFollower = 1029; bool isFollowing = 1030; bool needProfileGuide = 1031; int64 payScores = 1032; bool pushCommentStatus = 1033; bool pushDigg = 1034; bool pushFollow = 1035; bool pushFriendAction = 1036; bool pushIchat = 1037; bool pushStatus = 1038; bool pushVideoPost = 1039; bool pushVideoRecommend = 1040; UserStats stats = 1041; string verifiedReason = 1043; bool withCarManagementPermission = 1044; repeated LiveEventInfo upcomingEventList = 1045; string scmLabel = 1046; EcommerceEntrance ecommerceEntrance = 1047; bool isBlock = 1048; message LiveEventInfo { int64 eventId = 1; int64 startTime = 2; int64 duration = 3; string title = 4; string description = 5; bool hasSubscribed = 6; bool isPaidEvent = 7; int64 ticketAmount = 8; int64 payMethod = 9; // @warning Enum not found, should be PayMethod // @EventPayMethod // webcast.data.LiveEventInfo // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js enum EventPayMethod { EVENTPAYMETHODINVALID = 0; EVENTPAYMETHODCOINS = 1; EVENTPAYMETHODCASH = 2; } // @WalletPackage // proto.webcast.data.LiveEventInfo // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message WalletPackage { string iapId = 1; string usdPriceShow = 2; } } // @ActivityInfo // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message ActivityInfo { Image badge = 1; Image storytag = 2; } // @AnchorLevel // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message AnchorLevel { int64 level = 1; int64 experience = 2; int64 lowestExperienceThisLevel = 3; int64 highestExperienceThisLevel = 4; int64 taskStartExperience = 5; int64 taskStartTime = 6; int64 taskDecreaseExperience = 7; int64 taskTargetExperience = 8; int64 taskEndTime = 9; Image profileDialogBg = 10; Image profileDialogBgBack = 11; Image stageLevel = 12; Image smallIcon = 13; } // @AuthenticationInfo // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message AuthenticationInfo { string customVerify = 1; string enterpriseVerifyReason = 2; Image authenticationBadge = 3; } // @AuthorStats // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message AuthorStats { int64 videoTotalCount = 1; int64 videoTotalPlayCount = 2; int64 videoTotalShareCount = 3; int64 videoTotalSeriesCount = 4; int64 varietyShowPlayCount = 5; int64 videoTotalFavoriteCount = 6; } // @Border // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message Border { Image icon = 1; int64 level = 2; string source = 3; Image profileDecorationRibbon = 4; string avatarBackgroundColor = 7; string avatarBackgroundBorderColor = 8; } // @ComboBadgeInfo // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message ComboBadgeInfo { Image icon = 1; int64 comboCount = 2; } // @EcommerceEntrance // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message EcommerceEntrance { EntranceType entranceType = 1; // Enum CreatorType creatorType = 2; // Enum string schema = 3; ShopEntranceInfo shopEntranceInfo = 4; ShowcaseEntranceInfo showcaseEntranceInfo = 5; // @CreatorType // webcast.data.User.EcommerceEntrance // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js enum CreatorType { UNDEFINED = 0; OFFICIAL = 1; MARKET = 2; NORMAL = 3; } // @EntranceType // webcast.data.User.EcommerceEntrance // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js enum EntranceType { PROFILE = 0; SHOWCASE = 1; SHOP = 2; } // @ShopEntranceInfo // proto.webcast.data.User.EcommerceEntrance // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message ShopEntranceInfo { string shopId = 1; string shopName = 2; string shopRating = 3; StoreLabel storeLabel = 4; string formatSoldCount = 5; int64 soldCount = 6; int32 expRatePercentile = 7; string expRateTopDisplay = 8; int32 rateDisplayStyle = 9; bool showRateNotApplicable = 10; // @StoreLabel // proto.webcast.data.User.EcommerceEntrance.ShopEntranceInfo // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message StoreLabel { StoreOfficialLabel officialLabel = 1; bool isBytemall = 2; // @StoreBrandLabelType // webcast.data.User.EcommerceEntrance.ShopEntranceInfo.StoreLabel // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js enum StoreBrandLabelType { NONE = 0; OFFICIAL = 1; AUTHORIZED = 2; STORE_BRAND_LABEL_TYPE_BLUE_V = 3; STORE_BRAND_LABEL_TYPE_TOP_CHOICE = 4; } // @StoreOfficialLabel // proto.webcast.data.User.EcommerceEntrance.ShopEntranceInfo.StoreLabel // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message StoreOfficialLabel { ShopLabelImage labelImageLight = 1; ShopLabelImage labelImageDark = 2; int64 labelType = 3; // @warning Enum not found, should be LabelType string labelTypeStr = 4; // @ShopLabelImage // proto.webcast.data.User.EcommerceEntrance.ShopEntranceInfo.StoreLabel.StoreOfficialLabel // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message ShopLabelImage { int32 height = 1; int32 width = 2; string minetype = 3; string thumbUri = 4; repeated string thumbUriList = 5; string uri = 6; repeated string urlList = 7; string color = 8; } } } } // @ShowcaseEntranceInfo // proto.webcast.data.User.EcommerceEntrance // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message ShowcaseEntranceInfo { string formatSoldCount = 1; int64 soldCount = 2; } } // @FansClub // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message FansClub { FansClubData data = 1; // @FansClubData // proto.webcast.data.User.FansClub // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message FansClubData { string clubName = 1; int32 level = 2; UserFansClubStatus userFansClubStatus = 3; // Enum repeated int64 availableGiftIdsList = 5; int64 anchorId = 6; // @BadgeIcon // webcast.data.User.FansClub.FansClubData // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js enum BadgeIcon { UNKNOWN = 0; ICON = 1; SMALLICON = 2; } // @UserFansClubStatus // webcast.data.User.FansClub.FansClubData // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js enum UserFansClubStatus { NOTJOINED = 0; ACTIVE = 1; INACTIVE = 2; } } // @PreferntialType // webcast.data.User.FansClub // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js enum PreferntialType { PRESONALPROFILE = 0; OTHERROOM = 1; } } // @FansClubInfo // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message FansClubInfo { bool isSleeping = 1; int64 fansLevel = 2; int64 fansScore = 3; Image badge = 4; int64 fansCount = 5; } // @FollowInfo // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message FollowInfo { int64 followingCount = 1; int64 followerCount = 2; int64 followStatus = 3; int64 pushStatus = 4; } // @OwnRoom // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message OwnRoom { repeated int64 roomIdsList = 1; repeated string roomIdsStrList = 2; } // @PayGrade // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message PayGrade { Image diamondIcon = 2; string name = 3; Image icon = 4; string nextName = 5; int64 level = 6; Image nextIcon = 7; string gradeDescribe = 13; repeated GradeIcon gradeIconList = 14; int64 screenChatType = 15; Image imIcon = 16; Image imIconWithLevel = 17; Image liveIcon = 18; Image newImIconWithLevel = 19; Image newLiveIcon = 20; int64 upgradeNeedConsume = 21; string nextPrivileges = 22; Image background = 23; Image backgroundBack = 24; int64 score = 25; string gradeBanner = 1001; Image profileDialogBg = 1002; Image profileDialogBgBack = 1003; // @GradeIcon // proto.webcast.data.User.PayGrade // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message GradeIcon { Image icon = 1; int64 iconDiamond = 2; int64 level = 3; string levelStr = 4; } } // @SubscribeBadge // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message SubscribeBadge { Image originImg = 3; Image previewImg = 4; } // @SubscribeInfo // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message SubscribeInfo { bool qualification = 1; bool isSubscribe = 2; SubscribeBadge badge = 3; bool enableSubscription = 4; int64 subscriberCount = 5; bool isInGracePeriod = 6; bool isSubscribedToAnchor = 7; bool userGiftSubAuth = 9; bool anchorGiftSubAuth = 10; } // @UserAttr // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message UserAttr { bool isMuted = 1; bool isAdmin = 2; bool isSuperAdmin = 3; int64 muteDuration = 4; } // @UserStats // proto.webcast.data.User // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js message UserStats { int64 id = 1; string idStr = 2; int64 followingCount = 3; int64 followerCount = 4; int64 recordCount = 5; int64 totalDuration = 6; int64 dailyFanTicketCount = 7; int64 dailyIncome = 8; int64 itemCount = 9; int64 favoriteItemCount = 10; int64 diamondConsumedCount = 12; int64 tuwenItemCount = 13; } } // Receipt for sending a Gift. Names are mostly taken from JSON message GiftReceipt { uint64 anchorId = 1; uint64 profitApiStartTimeStamp = 3; // send_gift_profit_api_start_ms uint64 profitCoreStartTimeStamp = 4; // send_gift_profit_core_start_ms uint64 sendGiftRequestTimeStamp = 5; // send_gift_req_start_ms uint64 timeStamp = 6; // send_gift_send_message_success_ms uint64 profitApiDuration = 7; // send_profitapi_dur uint64 receiverUserId = 8; // UserId for receiver uint64 timeStamp1 = 9; // Unknown timestamp. Earliest in message (Possibly Request-Start?) string operatingSystem = 10; string data1 = 11; // 270504 (Id?) } message GoalUpdateData { uint64 id = 1; uint32 data1 = 2; uint32 data2 = 3; GoalUpdateDetails details = 4; string label = 5; uint32 data3 = 6; uint32 data4 = 7; uint64 timeStamp2 = 8; uint64 timeStamp3 = 9; repeated GoalUpdateUser users = 11; uint32 data5 = 12; string idString = 13; string label2 = 14; // same as label? } message GoalUpdateDetails { uint32 data1 = 1; uint32 data2 = 2; uint32 data3 = 3; uint32 data4 = 4; GoalUpdateGiftData data5 = 5; string data6 = 6; message GoalUpdateGiftData { string name = 1; Image Image = 2; uint32 data1 = 3; uint32 data2 = 4; } } message GoalUpdateUser { uint64 id = 1; Image profileImage = 2; string nickname = 3; uint64 timeStamp = 4; string idString = 5; uint32 data1 = 6; uint32 data2 = 7; GoalUpdateUserDetails details = 10; message GoalUpdateUserDetails { uint32 data1 = 1; uint32 data2 = 2; uint32 data3 = 3; GoalUserImageContainer links = 10; message GoalUserImageContainer { uint32 data1 = 1; Image links = 2; } } } message LikeData { string type = 1; string label = 2; TikTokColor color = 3; LikeUserContainer user = 4; message LikeUserContainer { uint64 data1 = 1; UserContainer user = 21; } } message LinkMicArmiesItems { uint64 hostUserId = 1; repeated LinkMicArmiesGroup battleGroups = 2; message LinkMicArmiesGroup { repeated User users = 1; uint32 points = 2; } } message MessageDetails { uint32 data1 = 1; TikTokColor color = 2; string category = 11; UserContainer user = 21; } message MemberMessageData { string type = 1; string label = 2; TikTokColor color = 3; repeated MessageDetails details = 4; // UserContainer-Data is empty } message SocialMessageData { string type = 1; string label = 2; TikTokColor color = 3; repeated MessageDetails details = 4; // UserContainer-Data is sometimes empty } message RankTextMessage { string type = 1; string label = 2; TikTokColor color = 3; repeated MessageDetails details = 4; } message Ranking { string type = 1; string label = 2; TikTokColor color = 3; repeated ValueLabel details = 4; } message TikTokColor { string color = 1; uint64 id = 4; uint32 data1 = 6; } message TopViewer { uint32 coinsGiven = 1; // Coins given to Room User user = 2; // uint32 rank = 3; // Index in list } // Is part of WebcastGiftBroadcastMessage. Thus far not seen sent seperately message WebcastRoomNotifyMessage { string type = 1; uint64 id1 = 2; uint64 id2 = 3; uint64 timeStamp = 4; uint32 data1 = 6; NotifyData data = 8; message NotifyData { string type = 1; string label = 2; TikTokColor color = 3; repeated GiftDetailsData data = 4; } message GiftDetailsData { uint32 data1 = 1; TikTokColor color = 2; string data2 = 11; UserContainer user = 21; GiftDataDetailed details = 22; } message GiftDataDetailed { uint32 data1 = 1; StringData strings = 2; uint32 data2 = 3; int32 data3 = 4; } } /** -=-=-=-=-=-=-=-=-=-=-= Server-Messages -=-=-=-=-=-=-=-=-=-=-= */ // Separate from WebcastLinkMicMethod. This contains RTC-Data message LinkMicMethod { MessageHeader header = 1; uint32 data1 = 2; uint64 rtcChannelId = 8; uint32 data2 = 9; // Either data2 or data3 is probably RTC_Vendor uint32 data3 = 10; uint32 data4 = 11; uint64 data5 = 13; uint64 id1 = 24; uint64 data6 = 28; uint64 data7 = 29; // Either data7 or data9 is probably RTC_MixType string data8 = 31; string json = 32; // RTC-Data in JSON-Format string rtcUserId = 37; uint32 data9 = 43; uint32 data10 = 51; } message RoomMessage { MessageHeader header = 1; string message = 2; uint32 data1 = 7; } message SystemMessage { MessageHeader header = 1; string message = 2; } message WebcastBarrageMessage { MessageHeader header = 1; uint32 data1 = 3; Image image = 4; BarrageMessage message = 5; uint32 data3 = 6; Image image2 = 7; Image image3 = 8; BarrageUser userData = 100; message BarrageMessage { string eventType = 1; string label = 2; TikTokColor color = 3; repeated BarrageData data1 = 4; message BarrageData { uint64 data1 = 1; string data2 = 11; UserContainer user = 21; } } message BarrageUser { uint32 data1 = 1; uint32 data2 = 2; string userId = 3; User user = 4; } } // Closed Captioning for Video message WebcastCaptionMessage { MessageHeader header = 1; uint64 timeStamp = 2; uint32 data1 = 3; CaptionData captionData = 4; message CaptionData { string ISOLanguage = 1; string Text = 2; } } // Variety of Meta-Data about a (Chat-)Message message ModerationData { string type = 1; uint64 value = 2; } // Comment sent by User message WebcastChatMessage { MessageHeader header = 1; User sender = 2; // User who sent message string comment = 3; // Text for Chat-Message uint64 data1 = 11; repeated User mentionedUsers = 12; // Users mentioned in comment repeated ChatImage images = 13; string language = 14; // Language for sender DataContainer chatData = 18; repeated ModerationData moderationData = 19; message ChatImage { uint64 data1 = 1; Image Image = 2; } } // System-Control Message from Room (e.g. Host ended Stream) message WebcastControlMessage { enum ControlAction { UNKNOWN = 0; STREAM_PAUSED = 1; // Stream Paused by Host STREAM_ENDED = 3; // Stream Ended by Host } MessageHeader header = 1; ControlAction action = 2; ControlDetails details = 4; message ControlDetails { string type = 8; } } // Emote sent by user message WebcastEmoteChatMessage { MessageHeader header = 1; User sender = 2; EmoteDetails details = 3; message EmoteDetails { string id = 1; EmoteImage image = 2; message EmoteImage { string url = 1; } } } // Envelope message WebcastEnvelopeMessage { MessageHeader header = 1; EnvelopeUser user = 2; uint32 data1 = 3; message EnvelopeUser { string id = 1; uint32 data1 = 2; string username = 3; string id2 = 4; uint32 data2 = 5; uint32 data3 = 6; uint64 timestamp1 = 7; string id1string = 8; Image Image = 9; string timestamp2string = 10; string id2string = 11; uint32 data4 = 12; } } // Gift Broadcast (Unsure of exact event) message WebcastGiftBroadcastMessage { GiftMessageHeader header = 1; uint64 data1 = 2; Image Image = 3; GiftBroadcastData data = 4; message GiftBroadcastData { WebcastRoomNotifyMessage roomNotifyMessage = 1; string uri = 2; uint32 data1 = 3; GiftBroadCastImageDataContainer imageData = 6; string notifyType = 9; uint64 data2 = 10; StringData data3 = 11; message GiftBroadCastImageDataContainer { uint32 data1 = 1; GiftBroadcastImageData image = 2; message GiftBroadcastImageData { uint32 data1 = 1; uint32 data2 = 2; repeated string urls = 3; string uri = 4; } } } } message WebcastGoalUpdateMessage { MessageHeader header = 1; TypeValue data = 2; GoalUpdateData updateData = 3; uint64 id = 4; Image Image = 5; string userId = 6; GoalUpdateDetails details = 7; uint32 data2 = 9; uint32 data3 = 10; uint32 data4 = 11; string idString = 12; TimeData timeData = 15; } message WebcastHourlyRankMessage { MessageHeader header = 1; RankContainer data = 2; uint32 data2 = 3; message RankContainer { uint32 data1 = 1; RankingData rankingdata = 2; uint32 data2 = 3; Ranking rankings = 4; RankingData2 rankingdata2 = 5; uint32 data3 = 6; uint32 data4 = 7; message RankingData { uint32 data1 = 1; Ranking rankdata = 2; string data2 = 3; } message RankingData2 { uint32 data1 = 1; uint32 data2 = 2; Ranking rankdata = 3; string data3 = 4; uint32 data4 = 5; uint32 data5 = 6; } } } // Message related to Chat-moderation? message WebcastImDeleteMessage { MessageHeader header = 1; bytes data = 3; } message WebcastInRoomBannerMessage { MessageHeader header = 1; string json = 2; // Json-Data for BannerMessage } // User sent one or multiple likes to Stream. Maxes at 15 likes per message message WebcastLikeMessage { LikeMessageHeader header = 1; uint32 count = 2; // Number of Likes for this message. Maxes at 15 uint64 totalLikes = 3; User sender = 5; // Sender of Like(s) LikeDataContainer likeData = 8; // Not always filled. The one in Header IS filled. uint32 data1 = 9; message LikeDataContainer { uint64 data1 = 1; LikeData likeData = 2; } } message WebcastLinkLayerMessage { MessageHeader header = 1; uint32 data1 = 2; uint64 id = 3; uint32 data2 = 4; LinkLayerDetails details = 100; LinkLayerData dataContainer = 102; LinkLayerIdContainer idContainer1 = 110; LinkLayerIdContainer idContainer2 = 111; message LinkLayerDetails { IdContainer ids = 1; string idString = 2; StringData data = 3; // Only data2 is filled uint64 id2 = 4; string data2 = 5; } message LinkLayerData { uint32 data1 = 1; LinkLayerDetailsContainer details = 2; message LinkLayerDetailsContainer { LinkLayerDetails data1 = 2; repeated LinkLayerDetails data2 = 3; } } message LinkLayerIdContainer { IdContainer ids = 1; uint32 data1 = 2; } } message WebcastLinkMessage { MessageHeader header = 1; uint32 data1 = 2; uint64 data2 = 3; uint32 data3 = 4; LinkMessageData data = 18; LinkMessageUserContainer user = 20; string token = 200; message LinkMessageData { DataContainer data = 1; // index 1 is an Id } message LinkMessageUserContainer { LinkMessageUser user = 1; repeated LinkMessageUser otherUsers = 2; message LinkMessageUser { User user = 1; uint64 timeStamp = 2; uint32 data1 = 4; string idString = 5; uint32 data2 = 7; } } } message WebcastLinkMicArmies { MessageHeader header = 1; uint64 id = 2; repeated LinkMicArmiesItems battleItems = 3; uint64 id2 = 4; uint64 timeStamp1 = 5; uint64 timeStamp2 = 6; int32 battleStatus = 7; // SHOULD BE AN ENUM uint64 data1 = 8; uint64 data2 = 9; uint32 data3 = 10; Image Image = 11; uint32 data4 = 12; uint32 data5 = 13; } // Battle Start? message WebcastLinkMicBattle { MessageHeader header = 1; uint64 id = 2; LinkMicBattleConfig battleConfig = 3; uint32 data2 = 4; repeated LinkMicBattleDetails details = 5; repeated LinkMicBattleTeam teams1 = 9; repeated LinkMicBattleTeam teams2 = 10; repeated LinkMicBattleTeamData teamData = 13; message LinkMicBattleConfig { uint64 id1 = 1; uint64 timestamp = 2; uint32 data1 = 3; uint64 id2 = 4; uint32 data2 = 5; } message LinkMicBattleData { uint64 id = 1; uint32 data1 = 2; uint32 data2 = 3; uint32 data3 = 5; string url = 6; } message LinkMicBattleDetails { uint64 id = 1; LinkMicBattleData details = 2; } message LinkMicBattleTeam { uint64 id = 1; repeated User users = 2; } message LinkMicBattleTeamData { uint64 teamId = 1; LinkMicBattleData data = 2; } } message WebcastLinkMicFanTicketMethod { MessageHeader header = 1; FanTicketDataContainer data = 2; message FanTicketDataContainer { FanTicketData details = 1; uint32 data1 = 2; string icon = 5; message FanTicketData { uint64 id = 1; uint32 data = 2; } } } message WebcastLinkMicMethod { MessageHeader header = 1; uint64 data1 = 2; uint64 id1 = 5; uint32 data2 = 6; uint32 data3 = 7; uint64 id2 = 8; uint32 data4 = 9; uint64 data5 = 10; uint64 id3 = 38; uint32 data6 = 39; string data7 = 40; // Combines data6 & id uint32 data8 = 43; } message WebcastLiveIntroMessage { MessageHeader header = 1; uint64 roomId = 2; uint64 data1 = 3; string description = 4; User host = 5; uint32 data2 = 6; IntroData messageData = 7; string language = 8; // ISO-language of Host message IntroData { uint32 data1 = 1; ValueLabel details = 21; } } // Sent for a variety of events, including Join & Subscribe message WebcastMemberMessage { enum MemberMessageAction { UNKNOWN = 0; JOINED = 1; // User Joined the Stream SUBSCRIBED = 3; // User Subscribed to the Host //?? = 26 //?? = 27 //?? = 50 (share?) } MemberMessageHeader header = 1; User user = 2; uint64 totalViewers = 3; // Available in Join-Message User user2 = 4; MemberMessageAction action = 10; MemberMessageData eventDetails = 18; // Identical to details in Header string data1 = 19; // "unknown"/"homepage_hot-live_cell" string data2 = 20; // "click" string data3 = 21; // "rec" string data4 = 23; // "other" uint32 data5 = 24; } message WebcastMsgDetectMessage { MessageHeader header = 1; uint32 data1 = 2; DataContainer data2 = 3; // Only uses index 1, 2 & 4 TimeStampContainer timestamps = 4; string language = 6; } message WebcastOecLiveShoppingMessage { MessageHeader header = 1; uint32 data1 = 2; LiveShoppingData shopData = 4; TimeStampContainer shopTimings = 5; // Uses index 1, 2 & 3 LiveShoppingDetails details = 9; message LiveShoppingData { string title = 1; string priceString = 2; // $55.99 string imageUrl = 3; string shopUrl = 4; uint64 data1 = 6; string shopName = 7; // "Shopify" uint64 data2 = 8; string shopUrl2 = 9; uint64 data3 = 10; uint64 data4 = 11; } message LiveShoppingDetails { string id1 = 1; string data1 = 3; uint32 data2 = 4; uint64 timestamp = 5; ValueLabel data = 6; } } message WebcastPollMessage { MessageHeader header = 1; uint32 data1 = 2; uint64 id = 3; PollMessageData pollData = 4; PollMessageOptionsContainer options1 = 5; PollMessageOptionsContainer options2 = 6; message PollMessageOptionsContainer { repeated PollMessageOption Options = 2; User user = 3; } message PollMessageOption { uint32 currentTotal = 1; string label = 2; uint32 data1 = 3; } message PollMessageData { uint64 timeStamp1 = 1; uint64 timeStamp2 = 2; repeated PollMessageOption options = 3; User user = 5; } } message WebcastQuestionNewMessage { MessageHeader header = 1; QuestionDetails details = 2; message QuestionDetails { uint64 id = 1; string text = 2; uint64 timeStamp = 4; User user = 5; uint32 data1 = 20; } } message WebcastRankTextMessage { //WebcastRankTextMessageHeader header = 1; uint32 data1 = 2; uint32 data2 = 3; uint32 data3 = 4; RankTextMessageSummary detailsSmall = 5; RankTextMessage details = 6; uint64 id1 = 7; message RankTextMessageSummary { string type = 1; string label = 2; TikTokColor color = 3; ValueLabel details = 4; } } message WebcastRankUpdateMessage { MessageHeader header = 1; RankUpdateData data = 2; uint32 data1 = 3; uint32 data2 = 5; message RankUpdateData { uint32 data1 = 1; uint32 data2 = 2; Ranking rankData = 3; RankColor color = 4; uint64 data3 = 6; string data4 = 7; uint32 data5 = 8; uint32 data6 = 9; uint64 data7 = 10; message RankColor { string color = 4; } message RankColor2 { uint32 data1 = 1; string color = 2; uint32 data2 = 4; } } } // Basic Text Message from Room message WebcastRoomMessage { MessageHeader header = 1; string data = 2; Image Image = 5; string data2 = 6; } // Host Pins comment to stream message WebcastRoomPinMessage { MessageHeader header = 1; RoomPinMessageData pinData1 = 2; string originalMsgType = 30; uint64 timestamp = 31; RoomPinMessageData2 pinData2 = 32; uint32 data1 = 33; int32 data2 = 34; uint64 data3 = 35; message RoomPinMessageData { RoomPinMessageDataDetails details = 1; User sender = 2; string comment = 3; repeated User mentionedUsers = 12; string language = 14; DataContainer chatData = 18; repeated ModerationData moderationData = 19; // Basically a RoomPinMessageHeader message RoomPinMessageDataDetails { string messageType = 1; uint64 messageId = 2; uint64 roomId = 3; uint64 serverTime = 4; uint64 data1 = 6; PinMessageStringContainer data2 = 8; uint64 data3 = 9; uint64 data4 = 10; uint64 data5 = 11; string serverDescription = 15; uint64 data6 = 21; uint64 data7 = 22; uint64 data8 = 23; uint64 data9 = 24; uint64 data10 = 25; message PinMessageStringContainer { string data = 3; } } } message RoomPinMessageData2 { uint64 id = 1; RoomPinMessageData2Details details = 32; message RoomPinMessageData2Details { uint32 data = 2; } } } // Status of Room (ViewerCount + Top Viewers) message WebcastRoomUserSeqMessage { MessageHeader header = 1; repeated TopViewer topViewers = 2; // Top 4 or less uint32 viewerCount = 3; // Number of Viewers in Room uint64 data1 = 7; uint32 data2 = 8; } // Sent for a variety of events, including Follow & Share message WebcastSocialMessage { SocialMessageHeader header = 1; User sender = 2; // CAN BE NULL uint64 data1 = 3; // Exists on Share-Message uint64 data2 = 4; string data3 = 5; uint64 totalFollowers = 6; // Exists on Follow-Message uint64 data4 = 8; // Exists on Share-Message } message WebcastSubNotifyMessage { SocialMessageHeader header = 1; User sender = 2; uint32 data1 = 4; uint32 data2 = 5; uint32 data3 = 6; uint32 data4 = 8; } // Related to someone getting banned? message WebcastUnauthorizedMemberMessage { MessageHeader header = 1; uint32 data1 = 2; MemberMessageData details1 = 3; string data2 = 4; MemberMessageData details2 = 5; } /** -=-=-=-=-=-=-=-=-=-=-= Message-Headers -=-=-=-=-=-=-=-=-=-=-= Most Headers here only different from the base MessageHeader in index 8 (HeaderData) This field usually holds a summary of the outer message */ message HeaderData { string messageType = 1; string details = 2; TikTokColor color = 3; HeaderDataDetails additionalData = 4; message HeaderDataDetails { uint32 data1 = 1; string data2 = 11; repeated UserContainer users = 21; } } message ControlData { StringData data = 1; uint64 serverTime = 2; } // Header for Messages. Usually stored in Index1 in the Message message MessageHeader { string messageType = 1; uint64 messageId = 2; uint64 roomId = 3; uint64 serverTime = 4; uint32 data1 = 5; uint64 data2 = 6; HeaderData headerData = 8; uint64 data3 = 9; uint64 data4 = 10; uint64 data5 = 11; string details = 15; ControlData controlData = 18; uint64 data6 = 21; uint64 data7 = 22; uint64 data8 = 23; uint64 data9 = 24; uint64 timeStamp1 = 25; } message GiftMessageHeader { string messageType = 1; uint64 messageId = 2; uint64 roomId = 3; // Does not always match RoomID? uint64 serverTime = 4; uint32 data1 = 5; uint64 data2 = 6; string description = 7; // "{0}: gifted the host {amount} {giftName}" GiftHeaderData headerData = 8; uint64 data3 = 9; uint64 data4 = 10; uint64 data5 = 11; string details = 15; string description2 = 17 ;// "gift_expensive" found in WebcastGiftBroadcastMessage ControlData controlData = 18; uint64 data6 = 21; uint64 data7 = 22; uint64 data8 = 23; uint64 data9 = 24; uint64 timeStamp1 = 25; message GiftHeaderData { string messageType = 1; string details = 2; TikTokColor color = 3; repeated GiftHeaderGiftData giftData = 4; message GiftHeaderGiftData { uint32 data1 = 1; TikTokColor color = 2; string details = 11; UserContainer user = 21; GiftHeaderGiftDataDetails data2 = 22; message GiftHeaderGiftDataDetails { uint64 data1 = 1; StringData details = 2; // 1 = DataType, 2 = GiftName uint64 data2 = 4; } } } } message LikeMessageHeader { string messageType = 1; uint64 messageId = 2; uint64 roomId = 3; uint64 serverTime = 4; uint32 data1 = 5; uint64 data2 = 6; string description = 7; LikeData likeData = 8; uint64 data3 = 9; uint64 data4 = 10; uint64 data5 = 11; string details = 15; ControlData controlData = 18; uint64 data6 = 21; uint64 data7 = 22; uint64 data8 = 23; uint64 data9 = 24; uint64 timeStamp1 = 25; } message MemberMessageHeader { string messageType = 1; uint64 messageId = 2; uint64 roomId = 3; uint64 serverTime = 4; uint32 data1 = 5; uint64 data2 = 6; string description = 7; MemberMessageData messageData = 8; uint64 data3 = 9; uint64 data4 = 10; uint64 data5 = 11; string details = 15; ControlData controlData = 18; uint64 data6 = 21; uint64 data7 = 22; uint64 data8 = 23; uint64 data9 = 24; uint64 timeStamp1 = 25; } message SocialMessageHeader { string messageType = 1; uint64 messageId = 2; uint64 roomId = 3; uint64 serverTime = 4; uint32 data1 = 5; uint64 data2 = 6; string description = 7; SocialMessageData socialData = 8; uint64 data3 = 9; uint64 data4 = 10; uint64 data5 = 11; string details = 15; ControlData controlData = 18; uint64 data6 = 21; uint64 data7 = 22; uint64 data8 = 23; uint64 data9 = 24; uint64 timeStamp1 = 25; }