Files
TikTokLiveJava/API/src/main/proto/tiktokSchema.proto
JW 4a157143ec Changes:
`TikTokEventListener` new method of listening events
   see it at TestApplication/ListenerExample.java

Bugs:
 - Fixed bug: Websocket was sending ping after it was closed
2023-09-07 03:19:25 +02:00

2094 lines
48 KiB
Protocol Buffer

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;
}