TikTokLiveProto 0.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,77 @@
1
+ Metadata-Version: 2.4
2
+ Name: TikTokLiveProto
3
+ Version: 0.0.2
4
+ Summary: Clean-room betterproto Python bindings for the TikTok Webcast Protobuf schema.
5
+ Author: Isaac Kogan
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/isaackogan/TikTok-Webcast-Protobuf
8
+ Keywords: protobuf,tiktok,webcast,livestream
9
+ Classifier: Development Status :: 4 - Beta
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3 :: Only
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Libraries
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ Requires-Dist: betterproto==2.0.0b7
23
+
24
+ # TikTokLiveProto
25
+
26
+ Python `betterproto` bindings for the TikTok Webcast Protobuf schema.
27
+
28
+ ## Install
29
+
30
+ ```sh
31
+ pip install TikTokLiveProto
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ Import the version you need from the package:
37
+
38
+ ```py
39
+ from TikTokLiveProto.v1 import WebcastResponse, WebcastChatMessage
40
+ from TikTokLiveProto.v2 import WebcastPushFrame
41
+ ```
42
+
43
+ These are generated `betterproto.Message` classes, using the same codegen family
44
+ that TikTokLive uses for its Python protobufs.
45
+
46
+ `TikTokLiveProto.v1` and `TikTokLiveProto.v2` are package-level aliases to the
47
+ generated version modules, so both of these patterns work:
48
+
49
+ ```py
50
+ import TikTokLiveProto
51
+
52
+ message_cls = TikTokLiveProto.v1.WebcastResponse
53
+ ```
54
+
55
+ ## Layout
56
+
57
+ - `src/v1/**/*.proto`, `src/v2/**/*.proto` (in the repo root) — canonical schemas
58
+ - `targets/python/TikTokLiveProto/src/TikTokLiveProto/generated/{v1,v2}` —
59
+ generated by `protoc` + `python-betterproto`, committed to the repo,
60
+ regenerated by CI when any `.proto` under `src/` changes
61
+ - `targets/python/TikTokLiveProto/src/TikTokLiveProto/__init__.py` — exposes
62
+ `TikTokLiveProto.v1` and `TikTokLiveProto.v2` as aliases to the generated
63
+ version modules, without adding extra top-level package directories
64
+
65
+ That means the committed package tree stays small:
66
+
67
+ ```text
68
+ src/TikTokLiveProto/
69
+ __init__.py
70
+ generated/
71
+ v1/
72
+ __init__.py
73
+ tiktok_proto.py
74
+ v2/
75
+ __init__.py
76
+ tiktok_proto.py
77
+ ```
@@ -0,0 +1,54 @@
1
+ # TikTokLiveProto
2
+
3
+ Python `betterproto` bindings for the TikTok Webcast Protobuf schema.
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ pip install TikTokLiveProto
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ Import the version you need from the package:
14
+
15
+ ```py
16
+ from TikTokLiveProto.v1 import WebcastResponse, WebcastChatMessage
17
+ from TikTokLiveProto.v2 import WebcastPushFrame
18
+ ```
19
+
20
+ These are generated `betterproto.Message` classes, using the same codegen family
21
+ that TikTokLive uses for its Python protobufs.
22
+
23
+ `TikTokLiveProto.v1` and `TikTokLiveProto.v2` are package-level aliases to the
24
+ generated version modules, so both of these patterns work:
25
+
26
+ ```py
27
+ import TikTokLiveProto
28
+
29
+ message_cls = TikTokLiveProto.v1.WebcastResponse
30
+ ```
31
+
32
+ ## Layout
33
+
34
+ - `src/v1/**/*.proto`, `src/v2/**/*.proto` (in the repo root) — canonical schemas
35
+ - `targets/python/TikTokLiveProto/src/TikTokLiveProto/generated/{v1,v2}` —
36
+ generated by `protoc` + `python-betterproto`, committed to the repo,
37
+ regenerated by CI when any `.proto` under `src/` changes
38
+ - `targets/python/TikTokLiveProto/src/TikTokLiveProto/__init__.py` — exposes
39
+ `TikTokLiveProto.v1` and `TikTokLiveProto.v2` as aliases to the generated
40
+ version modules, without adding extra top-level package directories
41
+
42
+ That means the committed package tree stays small:
43
+
44
+ ```text
45
+ src/TikTokLiveProto/
46
+ __init__.py
47
+ generated/
48
+ v1/
49
+ __init__.py
50
+ tiktok_proto.py
51
+ v2/
52
+ __init__.py
53
+ tiktok_proto.py
54
+ ```
@@ -0,0 +1,44 @@
1
+ [build-system]
2
+ requires = ["setuptools>=80", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "TikTokLiveProto"
7
+ version = "0.0.2"
8
+ description = "Clean-room betterproto Python bindings for the TikTok Webcast Protobuf schema."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "MIT"
12
+ authors = [
13
+ { name = "Isaac Kogan" }
14
+ ]
15
+ keywords = ["protobuf", "tiktok", "webcast", "livestream"]
16
+ classifiers = [
17
+ "Development Status :: 4 - Beta",
18
+ "Intended Audience :: Developers",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3 :: Only",
21
+ "Programming Language :: Python :: 3.9",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Topic :: Software Development :: Libraries",
27
+ "Topic :: Software Development :: Libraries :: Python Modules",
28
+ ]
29
+ dependencies = [
30
+ "betterproto==2.0.0b7",
31
+ ]
32
+
33
+ [project.urls]
34
+ Repository = "https://github.com/isaackogan/TikTok-Webcast-Protobuf"
35
+
36
+ [tool.setuptools]
37
+ package-dir = { "" = "src" }
38
+ include-package-data = true
39
+
40
+ [tool.setuptools.packages.find]
41
+ where = ["src"]
42
+
43
+ [tool.setuptools.package-data]
44
+ TikTokLiveProto = ["py.typed"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,14 @@
1
+ """Python betterproto bindings for the TikTok Webcast protobuf schema."""
2
+
3
+ import sys as _sys
4
+ from importlib import import_module as _import_module
5
+
6
+ v1 = _import_module(".generated.v1", __name__)
7
+ _sys.modules[__name__ + ".v1"] = v1
8
+ v2 = _import_module(".generated.v2", __name__)
9
+ _sys.modules[__name__ + ".v2"] = v2
10
+
11
+ __all__ = [
12
+ "v1",
13
+ "v2",
14
+ ]
@@ -0,0 +1 @@
1
+ from .tiktok_proto import * # noqa: F401,F403
@@ -0,0 +1,471 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # sources: tiktok-schema-v1.proto
3
+ # plugin: python-betterproto
4
+ # This file has been @generated
5
+
6
+ from dataclasses import dataclass
7
+ from typing import (
8
+ List,
9
+ Optional,
10
+ )
11
+
12
+ import betterproto
13
+
14
+
15
+ class ControlAction(betterproto.Enum):
16
+ FALLBACK_UNKNOWN = 0
17
+ STREAM_PAUSED = 1
18
+ STREAM_UNPAUSED = 2
19
+ STREAM_ENDED = 3
20
+ STREAM_SUSPENDED = 4
21
+
22
+
23
+ class WebcastChatMessageCommentTag(betterproto.Enum):
24
+ COMMENT_TAG_NORMAL = 0
25
+ COMMENT_TAG_CANDIDATE = 1
26
+ COMMENT_TAG_OVERAGE = 2
27
+
28
+
29
+ class EmoteUploadInfoUserEmoteUploadSource(betterproto.Enum):
30
+ USER_EMOTE_UPLOAD_SOURCE_EMOTE_UPLOAD_SOURCE_ANCHOR = 0
31
+ USER_EMOTE_UPLOAD_SOURCE_EMOTE_UPLOAD_SOURCE_SUBSCRIBER = 1
32
+ USER_EMOTE_UPLOAD_SOURCE_EMOTE_UPLOAD_SOURCE_MODERATOR = 2
33
+
34
+
35
+ @dataclass(eq=False, repr=False)
36
+ class WebcastResponse(betterproto.Message):
37
+ messages: List["Message"] = betterproto.message_field(1)
38
+ cursor: str = betterproto.string_field(2)
39
+ fetch_interval: int = betterproto.int32_field(3)
40
+ server_timestamp: int = betterproto.int64_field(4)
41
+ internal_ext: str = betterproto.string_field(5)
42
+ fetch_type: int = betterproto.int32_field(6)
43
+ ws_params: List["WebsocketParam"] = betterproto.message_field(7)
44
+ heartbeat_duration: int = betterproto.int32_field(8)
45
+ need_ack: bool = betterproto.bool_field(9)
46
+ ws_url: str = betterproto.string_field(10)
47
+
48
+
49
+ @dataclass(eq=False, repr=False)
50
+ class Message(betterproto.Message):
51
+ type: str = betterproto.string_field(1)
52
+ binary: bytes = betterproto.bytes_field(2)
53
+
54
+
55
+ @dataclass(eq=False, repr=False)
56
+ class WebsocketParam(betterproto.Message):
57
+ name: str = betterproto.string_field(1)
58
+ value: str = betterproto.string_field(2)
59
+
60
+
61
+ @dataclass(eq=False, repr=False)
62
+ class WebcastControlMessage(betterproto.Message):
63
+ action: "ControlAction" = betterproto.enum_field(2)
64
+
65
+
66
+ @dataclass(eq=False, repr=False)
67
+ class WebcastRoomUserSeqMessage(betterproto.Message):
68
+ top_viewers: List["TopUser"] = betterproto.message_field(2)
69
+ viewer_count: int = betterproto.int32_field(3)
70
+
71
+
72
+ @dataclass(eq=False, repr=False)
73
+ class TopUser(betterproto.Message):
74
+ coin_count: int = betterproto.uint64_field(1)
75
+ user: "User" = betterproto.message_field(2)
76
+
77
+
78
+ @dataclass(eq=False, repr=False)
79
+ class ImageModel(betterproto.Message):
80
+ m_urls: List[str] = betterproto.string_field(1)
81
+ m_uri: str = betterproto.string_field(2)
82
+ height: int = betterproto.int32_field(3)
83
+ width: int = betterproto.int32_field(4)
84
+ avg_color: str = betterproto.string_field(5)
85
+ image_type: int = betterproto.int32_field(6)
86
+ schema: str = betterproto.string_field(7)
87
+ content: "ImageModelContent" = betterproto.message_field(8)
88
+ is_animated: bool = betterproto.bool_field(9)
89
+
90
+
91
+ @dataclass(eq=False, repr=False)
92
+ class ImageModelContent(betterproto.Message):
93
+ name: str = betterproto.string_field(1)
94
+ font_color: str = betterproto.string_field(2)
95
+ level: int = betterproto.int64_field(3)
96
+
97
+
98
+ @dataclass(eq=False, repr=False)
99
+ class WebcastChatMessage(betterproto.Message):
100
+ event: "WebcastMessageEvent" = betterproto.message_field(1)
101
+ user: "User" = betterproto.message_field(2)
102
+ comment: str = betterproto.string_field(3)
103
+ visible_to_sender: bool = betterproto.bool_field(4)
104
+ background: "ImageModel" = betterproto.message_field(5)
105
+ full_screen_text_color: str = betterproto.string_field(6)
106
+ background_image_v2: "ImageModel" = betterproto.message_field(7)
107
+ gift_image: "ImageModel" = betterproto.message_field(10)
108
+ input_type: int = betterproto.int32_field(11)
109
+ at_user: "User" = betterproto.message_field(12)
110
+ emotes: List["WebcastSubEmote"] = betterproto.message_field(13)
111
+ content_language: str = betterproto.string_field(14)
112
+ quick_chat_scene: int = betterproto.int32_field(16)
113
+ communityflagged_status: int = betterproto.int32_field(17)
114
+ comment_quality_scores: List["WebcastChatMessageCommentQualityScore"] = (
115
+ betterproto.message_field(19)
116
+ )
117
+ user_identity: "WebcastChatMessageUserIdentity" = betterproto.message_field(18)
118
+ comment_tag: List["WebcastChatMessageCommentTag"] = betterproto.enum_field(20)
119
+ screen_time: int = betterproto.int64_field(22)
120
+ signature: str = betterproto.string_field(23)
121
+ signature_version: str = betterproto.string_field(24)
122
+ ec_streamer_key: str = betterproto.string_field(25)
123
+
124
+
125
+ @dataclass(eq=False, repr=False)
126
+ class WebcastChatMessageUserIdentity(betterproto.Message):
127
+ is_gift_giver_of_anchor: bool = betterproto.bool_field(1)
128
+ is_subscriber_of_anchor: bool = betterproto.bool_field(2)
129
+ is_mutual_following_with_anchor: bool = betterproto.bool_field(3)
130
+ is_follower_of_anchor: bool = betterproto.bool_field(4)
131
+ is_moderator_of_anchor: bool = betterproto.bool_field(5)
132
+ is_anchor: bool = betterproto.bool_field(6)
133
+
134
+
135
+ @dataclass(eq=False, repr=False)
136
+ class WebcastChatMessageCommentQualityScore(betterproto.Message):
137
+ version: str = betterproto.string_field(1)
138
+ score: int = betterproto.int64_field(2)
139
+
140
+
141
+ @dataclass(eq=False, repr=False)
142
+ class EmoteUploadInfo(betterproto.Message):
143
+ user_id: int = betterproto.int64_field(1)
144
+ emote_upload_source: Optional["EmoteUploadInfoUserEmoteUploadSource"] = (
145
+ betterproto.enum_field(2, optional=True)
146
+ )
147
+ user_info: "User" = betterproto.message_field(3)
148
+ user_id_str: str = betterproto.string_field(4)
149
+
150
+
151
+ @dataclass(eq=False, repr=False)
152
+ class WebcastEmoteChatMessage(betterproto.Message):
153
+ user: "User" = betterproto.message_field(2)
154
+ emote: "EmoteDetails" = betterproto.message_field(3)
155
+
156
+
157
+ @dataclass(eq=False, repr=False)
158
+ class WebcastSubEmote(betterproto.Message):
159
+ place_in_comment: int = betterproto.int32_field(1)
160
+ emote: "EmoteDetails" = betterproto.message_field(2)
161
+
162
+
163
+ @dataclass(eq=False, repr=False)
164
+ class WebcastMemberMessage(betterproto.Message):
165
+ event: "WebcastMessageEvent" = betterproto.message_field(1)
166
+ user: "User" = betterproto.message_field(2)
167
+ action_id: int = betterproto.int32_field(10)
168
+
169
+
170
+ @dataclass(eq=False, repr=False)
171
+ class WebcastGiftMessage(betterproto.Message):
172
+ event: "WebcastMessageEvent" = betterproto.message_field(1)
173
+ gift_id: int = betterproto.int32_field(2)
174
+ repeat_count: int = betterproto.int32_field(5)
175
+ user: "User" = betterproto.message_field(7)
176
+ repeat_end: int = betterproto.int32_field(9)
177
+ group_id: int = betterproto.uint64_field(11)
178
+ gift_details: "WebcastGiftMessageGiftDetails" = betterproto.message_field(15)
179
+ monitor_extra: str = betterproto.string_field(22)
180
+ gift_extra: "WebcastGiftMessageGiftExtra" = betterproto.message_field(23)
181
+
182
+
183
+ @dataclass(eq=False, repr=False)
184
+ class WebcastGiftMessageGiftDetails(betterproto.Message):
185
+ gift_image: "WebcastGiftMessageGiftImage" = betterproto.message_field(1)
186
+ gift_name: str = betterproto.string_field(16)
187
+ describe: str = betterproto.string_field(2)
188
+ gift_type: int = betterproto.int32_field(11)
189
+ diamond_count: int = betterproto.int32_field(12)
190
+
191
+
192
+ @dataclass(eq=False, repr=False)
193
+ class WebcastGiftMessageGiftExtra(betterproto.Message):
194
+ timestamp: int = betterproto.uint64_field(6)
195
+ receiver_user_id: int = betterproto.uint64_field(8)
196
+
197
+
198
+ @dataclass(eq=False, repr=False)
199
+ class WebcastGiftMessageGiftImage(betterproto.Message):
200
+ gift_picture_url: str = betterproto.string_field(1)
201
+
202
+
203
+ @dataclass(eq=False, repr=False)
204
+ class WebcastLinkMicBattle(betterproto.Message):
205
+ battle_users: List["WebcastLinkMicBattleItems"] = betterproto.message_field(10)
206
+
207
+
208
+ @dataclass(eq=False, repr=False)
209
+ class WebcastLinkMicBattleItems(betterproto.Message):
210
+ battle_group: "WebcastLinkMicBattleGroup" = betterproto.message_field(2)
211
+
212
+
213
+ @dataclass(eq=False, repr=False)
214
+ class WebcastLinkMicBattleGroup(betterproto.Message):
215
+ user: "LinkUser" = betterproto.message_field(1)
216
+
217
+
218
+ @dataclass(eq=False, repr=False)
219
+ class WebcastLinkMicArmies(betterproto.Message):
220
+ battle_items: List["WebcastLinkMicArmiesItems"] = betterproto.message_field(3)
221
+ battle_status: int = betterproto.int32_field(7)
222
+
223
+
224
+ @dataclass(eq=False, repr=False)
225
+ class WebcastLinkMicArmiesItems(betterproto.Message):
226
+ host_user_id: int = betterproto.uint64_field(1)
227
+ battle_groups: List["WebcastLinkMicArmiesGroup"] = betterproto.message_field(2)
228
+
229
+
230
+ @dataclass(eq=False, repr=False)
231
+ class WebcastLinkMicArmiesGroup(betterproto.Message):
232
+ users: List["User"] = betterproto.message_field(1)
233
+ points: int = betterproto.int32_field(2)
234
+
235
+
236
+ @dataclass(eq=False, repr=False)
237
+ class WebcastSocialMessage(betterproto.Message):
238
+ event: "WebcastMessageEvent" = betterproto.message_field(1)
239
+ user: "User" = betterproto.message_field(2)
240
+
241
+
242
+ @dataclass(eq=False, repr=False)
243
+ class WebcastLikeMessage(betterproto.Message):
244
+ event: "WebcastMessageEvent" = betterproto.message_field(1)
245
+ user: "User" = betterproto.message_field(5)
246
+ like_count: int = betterproto.int32_field(2)
247
+ total_like_count: int = betterproto.int32_field(3)
248
+
249
+
250
+ @dataclass(eq=False, repr=False)
251
+ class WebcastQuestionNewMessage(betterproto.Message):
252
+ question_details: "QuestionDetails" = betterproto.message_field(2)
253
+
254
+
255
+ @dataclass(eq=False, repr=False)
256
+ class QuestionDetails(betterproto.Message):
257
+ question_text: str = betterproto.string_field(2)
258
+ user: "User" = betterproto.message_field(5)
259
+
260
+
261
+ @dataclass(eq=False, repr=False)
262
+ class WebcastMessageEvent(betterproto.Message):
263
+ msg_id: int = betterproto.uint64_field(2)
264
+ create_time: int = betterproto.uint64_field(4)
265
+ event_details: "WebcastMessageEventDetails" = betterproto.message_field(8)
266
+
267
+
268
+ @dataclass(eq=False, repr=False)
269
+ class WebcastMessageEventDetails(betterproto.Message):
270
+ display_type: str = betterproto.string_field(1)
271
+ label: str = betterproto.string_field(2)
272
+
273
+
274
+ @dataclass(eq=False, repr=False)
275
+ class WebcastLiveIntroMessage(betterproto.Message):
276
+ id: int = betterproto.uint64_field(2)
277
+ description: str = betterproto.string_field(4)
278
+ user: "User" = betterproto.message_field(5)
279
+
280
+
281
+ @dataclass(eq=False, repr=False)
282
+ class SystemMessage(betterproto.Message):
283
+ description: str = betterproto.string_field(2)
284
+
285
+
286
+ @dataclass(eq=False, repr=False)
287
+ class WebcastInRoomBannerMessage(betterproto.Message):
288
+ data: str = betterproto.string_field(2)
289
+
290
+
291
+ @dataclass(eq=False, repr=False)
292
+ class RankItem(betterproto.Message):
293
+ colour: str = betterproto.string_field(1)
294
+ id: int = betterproto.uint64_field(4)
295
+
296
+
297
+ @dataclass(eq=False, repr=False)
298
+ class WeeklyRanking(betterproto.Message):
299
+ type: str = betterproto.string_field(1)
300
+ label: str = betterproto.string_field(2)
301
+ rank: "RankItem" = betterproto.message_field(3)
302
+
303
+
304
+ @dataclass(eq=False, repr=False)
305
+ class RankContainer(betterproto.Message):
306
+ rankings: "WeeklyRanking" = betterproto.message_field(4)
307
+
308
+
309
+ @dataclass(eq=False, repr=False)
310
+ class WebcastHourlyRankMessage(betterproto.Message):
311
+ data: "RankContainer" = betterproto.message_field(2)
312
+
313
+
314
+ @dataclass(eq=False, repr=False)
315
+ class EmoteDetails(betterproto.Message):
316
+ emote_id: str = betterproto.string_field(1)
317
+ image: "EmoteImage" = betterproto.message_field(2)
318
+
319
+
320
+ @dataclass(eq=False, repr=False)
321
+ class EmoteImage(betterproto.Message):
322
+ image_url: str = betterproto.string_field(1)
323
+
324
+
325
+ @dataclass(eq=False, repr=False)
326
+ class WebcastEnvelopeMessage(betterproto.Message):
327
+ treasure_box_data: "TreasureBoxData" = betterproto.message_field(2)
328
+ treasure_box_user: "TreasureBoxUser" = betterproto.message_field(1)
329
+
330
+
331
+ @dataclass(eq=False, repr=False)
332
+ class TreasureBoxUser(betterproto.Message):
333
+ user2: "TreasureBoxUser2" = betterproto.message_field(8)
334
+
335
+
336
+ @dataclass(eq=False, repr=False)
337
+ class TreasureBoxUser2(betterproto.Message):
338
+ user3: List["TreasureBoxUser3"] = betterproto.message_field(4)
339
+
340
+
341
+ @dataclass(eq=False, repr=False)
342
+ class TreasureBoxUser3(betterproto.Message):
343
+ user4: "TreasureBoxUser4" = betterproto.message_field(21)
344
+
345
+
346
+ @dataclass(eq=False, repr=False)
347
+ class TreasureBoxUser4(betterproto.Message):
348
+ user: "User" = betterproto.message_field(1)
349
+
350
+
351
+ @dataclass(eq=False, repr=False)
352
+ class TreasureBoxData(betterproto.Message):
353
+ coins: int = betterproto.uint32_field(5)
354
+ can_open: int = betterproto.uint32_field(6)
355
+ timestamp: int = betterproto.uint64_field(7)
356
+
357
+
358
+ @dataclass(eq=False, repr=False)
359
+ class WebcastSubNotifyMessage(betterproto.Message):
360
+ event: "WebcastMessageEvent" = betterproto.message_field(1)
361
+ user: "User" = betterproto.message_field(2)
362
+ exhibition_type: int = betterproto.int32_field(3)
363
+ sub_month: int = betterproto.int32_field(4)
364
+ subscribe_type: int = betterproto.int32_field(5)
365
+ old_subscribe_status: int = betterproto.int32_field(6)
366
+ subscribing_status: int = betterproto.int32_field(8)
367
+
368
+
369
+ @dataclass(eq=False, repr=False)
370
+ class User(betterproto.Message):
371
+ user_id: int = betterproto.uint64_field(1)
372
+ nickname: str = betterproto.string_field(3)
373
+ profile_picture: "ProfilePicture" = betterproto.message_field(9)
374
+ unique_id: str = betterproto.string_field(38)
375
+ sec_uid: str = betterproto.string_field(46)
376
+ badges: List["UserBadgesAttributes"] = betterproto.message_field(64)
377
+ create_time: int = betterproto.uint64_field(16)
378
+ bio_description: str = betterproto.string_field(5)
379
+ follow_info: "FollowInfo" = betterproto.message_field(22)
380
+
381
+
382
+ @dataclass(eq=False, repr=False)
383
+ class FollowInfo(betterproto.Message):
384
+ following_count: int = betterproto.int32_field(1)
385
+ follower_count: int = betterproto.int32_field(2)
386
+ follow_status: int = betterproto.int32_field(3)
387
+ push_status: int = betterproto.int32_field(4)
388
+
389
+
390
+ @dataclass(eq=False, repr=False)
391
+ class LinkUser(betterproto.Message):
392
+ user_id: int = betterproto.uint64_field(1)
393
+ nickname: str = betterproto.string_field(2)
394
+ profile_picture: "ProfilePicture" = betterproto.message_field(3)
395
+ unique_id: str = betterproto.string_field(4)
396
+
397
+
398
+ @dataclass(eq=False, repr=False)
399
+ class ProfilePicture(betterproto.Message):
400
+ urls: List[str] = betterproto.string_field(1)
401
+
402
+
403
+ @dataclass(eq=False, repr=False)
404
+ class UserBadgesAttributes(betterproto.Message):
405
+ badge_scene_type: int = betterproto.int32_field(3)
406
+ image_badges: List["UserImageBadge"] = betterproto.message_field(20)
407
+ badges: List["UserBadge"] = betterproto.message_field(21)
408
+ privilege_log_extra: "PrivilegeLogExtra" = betterproto.message_field(12)
409
+
410
+
411
+ @dataclass(eq=False, repr=False)
412
+ class PrivilegeLogExtra(betterproto.Message):
413
+ privilege_id: str = betterproto.string_field(2)
414
+ level: str = betterproto.string_field(5)
415
+
416
+
417
+ @dataclass(eq=False, repr=False)
418
+ class UserBadge(betterproto.Message):
419
+ type: str = betterproto.string_field(2)
420
+ name: str = betterproto.string_field(3)
421
+
422
+
423
+ @dataclass(eq=False, repr=False)
424
+ class UserImageBadge(betterproto.Message):
425
+ display_type: int = betterproto.int32_field(1)
426
+ image: "UserImageBadgeImage" = betterproto.message_field(2)
427
+
428
+
429
+ @dataclass(eq=False, repr=False)
430
+ class UserImageBadgeImage(betterproto.Message):
431
+ url: str = betterproto.string_field(1)
432
+
433
+
434
+ @dataclass(eq=False, repr=False)
435
+ class WebcastWebsocketMessage(betterproto.Message):
436
+ id: int = betterproto.uint64_field(2)
437
+ type: str = betterproto.string_field(7)
438
+ binary: bytes = betterproto.bytes_field(8)
439
+
440
+
441
+ @dataclass(eq=False, repr=False)
442
+ class WebcastWebsocketAck(betterproto.Message):
443
+ id: int = betterproto.uint64_field(2)
444
+ type: str = betterproto.string_field(7)
445
+
446
+
447
+ @dataclass(eq=False, repr=False)
448
+ class WebcastBarrageMessage(betterproto.Message):
449
+ event: "WebcastMessageEvent" = betterproto.message_field(1)
450
+ msg_type: int = betterproto.int32_field(3)
451
+ content: "WebcastBarrageMessageText" = betterproto.message_field(5)
452
+
453
+
454
+ @dataclass(eq=False, repr=False)
455
+ class WebcastBarrageMessageText(betterproto.Message):
456
+ key: str = betterproto.string_field(1)
457
+ default_pattern: str = betterproto.string_field(2)
458
+ pieces: List["WebcastBarrageMessageTextPiece"] = betterproto.message_field(4)
459
+
460
+
461
+ @dataclass(eq=False, repr=False)
462
+ class WebcastBarrageMessageTextPiece(betterproto.Message):
463
+ type: int = betterproto.int32_field(1)
464
+ string_value: str = betterproto.string_field(11)
465
+ user_value: "WebcastBarrageMessageTextPieceUser" = betterproto.message_field(21)
466
+
467
+
468
+ @dataclass(eq=False, repr=False)
469
+ class WebcastBarrageMessageTextPieceUser(betterproto.Message):
470
+ user: "User" = betterproto.message_field(1)
471
+ with_colon: bool = betterproto.bool_field(2)
@@ -0,0 +1 @@
1
+ from .tiktok_proto import * # noqa: F401,F403