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.
- tiktokliveproto-0.0.2/PKG-INFO +77 -0
- tiktokliveproto-0.0.2/README.md +54 -0
- tiktokliveproto-0.0.2/pyproject.toml +44 -0
- tiktokliveproto-0.0.2/setup.cfg +4 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto/__init__.py +14 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto/generated/v1/__init__.py +1 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto/generated/v1/tiktok_proto.py +471 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto/generated/v2/__init__.py +1 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto/generated/v2/tiktok_proto.py +5051 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto/py.typed +0 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto.egg-info/PKG-INFO +77 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto.egg-info/SOURCES.txt +13 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto.egg-info/dependency_links.txt +1 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto.egg-info/requires.txt +1 -0
- tiktokliveproto-0.0.2/src/TikTokLiveProto.egg-info/top_level.txt +1 -0
|
@@ -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,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
|