syntax = "proto3";
package TikTok;

option java_package = "io.github.jwdeveloper.tiktok.messages.data";
option java_multiple_files = true;

import "enums.proto";

// @Common
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;
  }
}

// @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;
    oneof textPieceType
    {
      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 {
    int32 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;
  bool isAnimated = 9;
}

// @Badge
message BadgeStruct {
  BadgeDisplayType displayType = 1; // Enum
  oneof badgeType
  {
    ImageBadge image = 20;
    TextBadge text = 21;
    StringBadge str = 22;
    CombineBadge combine = 23;
  }

  message CombineBadge {
    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 {
    Image image = 2;
  }

  message TextBadge {
    string defaultPattern = 3;
  }

  message IconConfig {
    Image icon = 1;
    CombineBadgeBackground background = 2;
  }


  message StringBadge {
    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 Position {
    POSITIONUNKNOWN = 0;
    POSITIONLEFT = 1;
    POSITIONRIGHT = 2;
  }


}

// @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;
  LinkmicStatus linkMicStats = 37;
  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;
  }

}

// @Emote
message Emote {
  string emoteId = 1;
  Image image = 2;
  AuditStatus auditStatus = 3; // Enum
  string uuid = 4;
  EmoteType emoteType = 5; // Enum
  ContentSource contentSource = 6; // Enum
  EmotePrivateType emotePrivateType = 7; // Enum
}

// @PunishEventInfo
message PunishEventInfo {
  string punishType = 1;
  string punishReason = 2;
  string punishId = 3;
  int64 violationUid = 4;
  int32 punishTypeId = 5; // Enum
  int64 duration = 6;
}

// @MsgFilter
message MsgFilter {
  bool isGifter = 1;
  bool isSubscribedToAnchor = 2;
}

// @UserIdentity
// proto.webcast.data
message UserIdentity {
  bool isGiftGiverOfAnchor = 1;
  bool isSubscriberOfAnchor = 2;
  bool isMutualFollowingWithAnchor = 3;
  bool isFollowerOfAnchor = 4;
  bool isModeratorOfAnchor = 5;
  bool isAnchor = 6;
}

// @Goal
// proto.webcast.data
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message Goal {
  int64 id = 1;
  // TextType type = 2; // Enum
  // GoalStatus status = 3; // Enum
  // repeated SubGoal subGoalsList = 4;
  string description = 5;
  int32 auditStatus = 6;
  // CycleType cycleType = 7; // Enum
  int64 startTime = 8;
  int64 expireTime = 9;
  int64 realFinishTime = 10;
  repeated GoalContributor contributorsList = 11;
  int32 contributorsLength = 12;
  string idStr = 13;
  string auditDescription = 14;
  GoalStats stats = 15;

  message GoalStats {
    int64 totalCoins = 1;
    int64 totalContributor = 2;
  }

  message GoalContributor {
    int64 userId = 1;
    Image avatar = 2;
    string displayId = 3;
    int64 score = 4;
    string userIdStr = 5;
    bool inRoom = 6;
    bool isFriend = 7;
    repeated BadgeStruct badgeList = 8;
    bool followByOwner = 9;
    bool isFistContribute = 10;
  }

}

// @Indicator
// proto.webcast.data
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message Indicator {
  string key = 1;
  int64 op = 2; // @warning Enum not found, should be Op
}


// --- HANDMANDE

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 ValueLabel {
  uint32 data = 1;
  string label = 2;
  string label2 = 3;
  string label3 = 11;
}

message MessageDetails {
  uint32 data1 = 1;
  TikTokColor color = 2;
  string category = 11;
  UserContainer user = 21;
}

message UserContainer {
  User user = 1;
  uint32 data1 = 2;
}

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

message TimeStampContainer {
  uint64 timestamp1 = 1;
  uint64 timestamp2 = 2;
  uint64 timestamp3 = 3;
}
message MemberMessageData {
  string type = 1;
  string label = 2;
  TikTokColor color = 3;
  repeated MessageDetails details = 4; // UserContainer-Data is empty
}
message LinkMicArmiesItems {
  uint64 hostUserId = 1;
  repeated LinkMicArmiesGroup battleGroups = 2;

  message LinkMicArmiesGroup {
    repeated User users = 1;
    uint32 points = 2;
  }
}

message PollStartContent {
  int64 StartTime = 1;
  int64 EndTime = 2;
  repeated PollOptionInfo OptionList = 3;
  string Title = 4;
  User Operator = 5;
}

message PollEndContent {
  int32 EndType = 1; // Possibly an Enum?
  repeated PollOptionInfo OptionList = 2;
  User Operator = 3;
}

message PollOptionInfo {
  int32 Votes = 1;
  string DisplayContent = 2;
  int32 OptionIdx = 3;
  repeated VoteUser VoteUserList = 4;
}

message VoteUser {
  int64 UserId = 1;
  string NickName = 2;
  Image AvatarThumb = 3;
}

message PollUpdateVotesContent {
  repeated PollOptionInfo OptionList = 2;
}
message UserFanTicket {
  int64 UserId = 1;
  int64 FanTicket = 2;
  int64 MatchTotalScore = 3;
  int32 MatchRank = 4;
}

message FanTicketRoomNoticeContent {
  repeated UserFanTicket UserFanTicketList = 1;
  int64 TotalLinkMicFanTicket = 2;
  int64 MatchId = 3;
  int64 EventTime = 4;
  string FanTicketIconUrl = 5;
}

message LinkerAcceptNoticeContent {
  int64 fromUserId = 1;
  int64 fromRoomId = 2;
  int64 toUserId = 3;
}

message LinkerCancelContent {
  int64 fromUserId = 1;
  int64 toUserId = 2;
  int64 cancelType = 3;
  int64 actionId = 4;
}

message ListUser {
  User user = 1;
  int64 linkmicId = 2;
  string linkmicIdStr = 3;
  int64 linkStatus = 4; // Enum
  LinkType linkType = 5; // Enum
  int32 userPosition = 6;
  int32 silenceStatus = 7; // Enum
  int64 modifyTime = 8;
  int64 linkerId = 9;
  int32 roleType = 10; // Enum

  enum LinkType {
    LINK_UNKNOWN = 0;
    AUDIO = 1;
    VIDEO = 2;
  }
}


//it is just empty
message LinkerCloseContent {

}

message LinkerCreateContent {
  int64 ownerId = 1;
  int64 ownerRoomId = 2;
  int64 linkType = 3;
}



message LinkerEnterContent {
  repeated ListUser linkedUsersList = 1;
  int32 anchorMultiLiveEnum = 2; // Enum
  LinkmicUserSettingInfo anchorSettingInfo = 3;;
}

message LinkerInviteContent {
  int64 fromUserId = 1;
  int64 fromRoomId = 2;
  string toRtcExtInfo = 3;
  bool rtcJoinChannel = 4;
  int64 vendor = 5;
  string secFromUserId = 6;
  string toLinkmicIdStr = 7;
  User fromUser = 8;
  int64 requiredMicIdx = 9;
}

message LinkerKickOutContent {
  int64 fromUserId = 1;
  KickoutReason kickoutReason = 2; // Enum
}

message LinkerLeaveContent {
  int64 userId = 1;
  string linkmicIdStr = 2;
  int64 sendLeaveUid = 3;
  int64 leaveReason = 4;
}

//Empty
message LinkerLinkedListChangeContent {

}
//Empty
message CohostListChangeContent {
}


message LinkerListChangeContent {
  repeated ListUser linkedUsersList = 1;
  repeated ListUser appliedUsersList = 2;
  repeated ListUser connectingUsersList = 3;
}

message LinkerMediaChangeContent {
  int64 op = 1; // Enum
  int64 toUserId = 2;
  int64 anchorId = 3;
  int64 roomId = 4;
  int64 changeScene = 5; // Enum
}

//Empty
message LinkerMicIdxUpdateContent {

}


message LinkerMuteContent {
  int64 userId = 1;
  int64 status = 2; // Enum
}

message LinkerRandomMatchContent {
  User user = 1;
  int64 roomId = 2;
  int64 inviteType = 3;
  string matchId = 4;
  int64 innerChannelId = 5;
}

message LinkerReplyContent {
  int64 fromUserId = 1;
  int64 fromRoomId = 2;
  LinkmicInfo fromUserLinkmicInfo = 3;
  int64 toUserId = 4;
  LinkmicInfo toUserLinkmicInfo = 5;
  int64 linkType = 6;
  int64 replyStatus = 7;
  LinkerSetting linkerSetting = 8;
  User fromUser = 9;
  User toUser = 10;

  message LinkmicInfo {
    string accessKey = 1;
    int64 linkMicId = 2;
    bool joinable = 3;
    int32 confluenceType = 4;
    string rtcExtInfo = 5;
    string rtcAppId = 6;
    string rtcAppSign = 7;
    string linkmicIdStr = 8;
    int64 vendor = 9;
  }
}

message LinkerSetting {
  int64 MaxMemberLimit = 1;
  int64 LinkType = 2;
  int64 Scene = 3;
  int64 OwnerUserId = 4;
  int64 OwnerRoomId = 5;
  int64 Vendor = 6;
}

message LinkerSysKickOutContent {
  int64 userId = 1;
  string linkmicIdStr = 2;
}

message LinkmicUserToastContent {
  int64 userId = 1;
  int64 roomId = 2;
  Text displayText = 3;
}

message LinkerUpdateUserContent {
  int64 fromUserId = 1;
  int64 toUserId = 2;
}

//Empty
message LinkerUpdateUserSettingContent {

}

//Empty
message LinkerWaitingListChangeContent {

}


message LinkmicUserSettingInfo {
  int64 userId = 1;
  int64 layout = 2; // @warning Enum not found, should be Layout
  int64 fixMicNum = 3; // @warning Enum not found, should be FixMicNum
  int64 allowRequestFromUser = 4; // @warning Enum not found, should be AllowRequestFromUser
  int64 allowRequestFromFollowerOnly = 5; // @warning Enum not found, should be AllowRequestFromFollowerOnly
  LinkmicApplierSortSetting applierSortSetting = 7; // Enum
}


message Player {
  int64 roomId = 1;
  int64 userId = 2;
}

message AllListUser {
  repeated LinkLayerListUser linkedList = 2;
  repeated LinkLayerListUser appliedList = 3;
  repeated LinkLayerListUser invitedList = 4;
  repeated LinkLayerListUser readyList = 5;
}

message LinkLayerListUser {
  User user = 1;
  int64 linkmicId = 2;
  Position pos = 3;
  int64 linkedTimeNano = 4;
  string appVersion = 5;
  int64 magicNumber1 = 7;
}

message Position {
  int32 type = 1;
  LinkPosition link = 2;
}

message LinkPosition {
  int32 position = 1;
  int32 opt = 2;
}

message GroupPlayer {
  int64 channelId = 1;
  User user = 2;
}

message DSLConfig {
  int32 sceneVersion = 1;
  string layoutId = 2;
}

message GroupChannelAllUser {
  int64 groupChannelId = 1;
  repeated GroupChannelUser userList = 2;
}

message GroupChannelUser {
  int64 channelId = 1;
  GroupStatus status = 2; // Enum
  TextType type = 3; // Enum
  AllListUser allUser = 4;
  int64 joinTime = 5;
  int64 linkedTime = 6;
  GroupPlayer ownerUser = 7;
}

message RTCExtraInfo {
  RTCEngineConfig liveRtcEngineConfig = 1;
  repeated RTCLiveVideoParam liveRtcVideoParamList = 2;
  RTCBitrateMap rtcBitrateMap = 3;
  int32 rtcFps = 4;
  string rtcBusinessId = 8;
  int32 interactClientType = 10;

  message RTCEngineConfig {
    string rtcAppId = 1;
    string rtcUserId = 2;
    string rtcToken = 3;
    int64 rtcChannelId = 4;
  }

  message RTCLiveVideoParam {
    int32 strategyId = 1;
    RTCVideoParam params = 2;
  }

  message RTCVideoParam {
    int32 width = 1;
    int32 height = 2;
    int32 fps = 3;
    int32 bitrateKbps = 4;
  }

  message RTCBitrateMap {
    int32 xx1 = 1;
    int32 xx2 = 2;
    int32 xx3 = 3;
    int32 xx4 = 4;
  }
}

message CreateChannelContent {
  Player  owner = 1;
  string ownerLinkMicId = 2;
}

message ListChangeContent {
  TextType type = 1; // Enum
  AllListUser list = 2;
}

message MultiLiveContent {
  InviteBizContent inviteBizContent = 2;
  ReplyBizContent replyBizContent = 3;
  PermitBizContent permitBizContent = 4;
  KickOutBizContent kickOutBizContent = 6;


  message InviteBizContent {
    LinkmicUserSettingInfo anchorSettingInfo = 1;
    int64 inviteSource = 2; // @warning Enum not found, should be InviteSource
    User operatorUserInfo = 3;
    int64 operatorLinkAdminType = 4; // @warning Enum not found, should be OperatorLinkAdminType
    User inviteeUserInfo = 5;
  }


  message ReplyBizContent {
    int32 linkType = 1;
    int32 isTurnOffInvitation = 2;
    User replyUserInfo = 3;
  }

  message PermitBizContent {
    LinkmicUserSettingInfo anchorSettingInfo = 1;
    int64 expireTimestamp = 2;
    User operatorUserInfo = 3;
    int64 operatorLinkAdminType = 4; // @warning Enum not found, should be OperatorLinkAdminType
  }

  message KickOutBizContent {
    User operatorUserInfo = 1;
    int64 operatorLinkAdminType = 2; // @warning Enum not found, should be OperatorLinkAdminType
    User kickPlayerUserInfo = 3;
  }

}


message InviteContent {
  Player  invitor = 1;
  RTCExtraInfo inviteeRtcExtInfo = 2;
  string invitorLinkMicId = 3;
  string inviteeLinkMicId = 4;
  bool isOwner = 5;
  Position pos = 6;
  DSLConfig dsl = 7;
  User invitee = 8;
  User operator = 9;
}


// @ApplyContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message ApplyContent {
  Player  applier = 1;
  string applierLinkMicId = 2;
}


// @PermitApplyContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message PermitApplyContent {
  Player  permiter = 1;
  string permiterLinkMicId = 2;
  Position applierPos = 3;
  ReplyStatus replyStatus = 4; // Enum
  DSLConfig dsl = 5;
  User applier = 6;
  User operator = 7;
  string applierLinkMicId = 8;
}


// @ReplyInviteContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message ReplyInviteContent {
  Player  invitee = 1;
  ReplyStatus replyStatus = 2; // Enum
  string inviteeLinkMicId = 3;
  Position inviteePos = 4;
  Player  inviteOperatorUser = 5;
}


// @KickOutContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message KickOutContent {
  Player  offliner = 1;
  KickoutReason kickoutReason = 2; // Enum
}


// @CancelApplyContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message CancelApplyContent {
  Player  applier = 1;
  string applierLinkMicId = 2;
}


// @CancelInviteContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message CancelInviteContent {
  Player  invitor = 1;
  string invitorLinkMicId = 2;
  string inviteeLinkMicId = 3;
  int64 inviteSeqId = 4;
  Player  invitee = 5;
}


// @LeaveContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message LeaveContent {
  Player  leaver = 1;
  int64 leaveReason = 2;
}


// @FinishChannelContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message FinishChannelContent {
  Player  owner = 1;
  int64 finishReason = 2;
}


// @JoinDirectContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message JoinDirectContent {
  LinkLayerListUser joiner = 1;
  AllListUser allUsers = 2;
}


// @LeaveJoinGroupContent
// proto.webcast.im
// C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
message LeaveJoinGroupContent {
  GroupPlayer operator = 1;
  int64 groupChannelId = 2;
  string leaveSource = 3;
}


// @PermitJoinGroupContent
// proto.webcast.im
message PermitJoinGroupContent {
  GroupPlayer approver = 1;
  AgreeStatus agreeStatus = 2; // Enum
  TextType type = 3; // Enum
  repeated RTCExtraInfo groupExtInfoList = 4;
  GroupChannelAllUser groupUser = 5;
}


// @CancelJoinGroupContent
// proto.webcast.im
message CancelJoinGroupContent {
  repeated GroupPlayer leaverList = 1;
  GroupPlayer operator = 2;
  TextType type = 3; // Enum
}



message P2PGroupChangeContent {
  repeated RTCExtraInfo groupExtInfoList = 1;
  GroupChannelAllUser groupUser = 2;
}


message BusinessContent {
  int64 overLength = 1;
  MultiLiveContent multiLiveContent = 100;
  CohostContent cohostContent = 200;

  message CohostContent {
    JoinGroupBizContent joinGroupBizContent = 1;

  }

  message JoinGroupBizContent {
    int32 fromRoomAgeRestricted = 1;
    Tag fromTag = 2;
    PerceptionDialogInfo dialog = 3;
    PunishEventInfo punishInfo = 4;
    JoinGroupMessageExtra joinGroupMsgExtra = 101;
  }

  message Tag {
    int32 tagType = 1;
    string tagValue = 2;
    string tagText = 3;
  }

  message PerceptionDialogInfo {
    int64 iconType = 1; // @warning Enum not found, should be IconType
    Text title = 2;
    Text subTitle = 3;
    Text adviceActionText = 4;
    Text defaultActionText = 5;
    string violationDetailUrl = 6;
    int32 scene = 7;
    int64 targetUserId = 8;
    int64 targetRoomId = 9;
    int64 countDownTime = 10;
    bool showFeedback = 11;
    repeated PerceptionFeedbackOption feedbackOptionsList = 12;
    int64 policyTip = 13;
  }

  message PerceptionFeedbackOption {
    int64 id = 1;
    string contentKey = 2;
  }

  message JoinGroupMessageExtra {
    int64 sourceType = 1;
    RivalExtra extra = 2;
    repeated RivalExtra otherUsersList = 3;


    // @RivalExtra
    // proto.webcast.im.JoinGroupMessageExtra
    // C:\Users\ja\RiderProjects\TikTokProBufferGenerator\Application\output\sources\test.js
    message RivalExtra {
      int64 userCount = 4;
      Image avatarThumb = 5;
      string displayId = 6;
      AuthenticationInfo authenticationInfo = 7;
      string nickname = 8;
      int64 followStatus = 9;
      Hashtag hashtag = 10;
      TopHostInfo topHostInfo = 11;
      int64 userId = 12;
      bool isBestTeammate = 13;

      message AuthenticationInfo {
        string customVerify = 1;
        string enterpriseVerifyReason = 2;
        Image authenticationBadge = 3;
      }
    }
  }
  message Hashtag {
    int64 id = 1;
    string title = 2;
    Image image = 3;
    HashtagNamespace namespace = 4; // Enum
  }

  message TopHostInfo {
    string rankType = 1;
    int64 topIndex = 2;
  }
}

message JoinGroupContent {
  GroupChannelAllUser groupUser = 1;
  GroupPlayer joinUser = 2;
  TextType type = 3; // Enum
}