From 74a15849abd6e985eae8b229f8ba793316bc1007 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 3 Jun 2022 23:08:43 +0800 Subject: [PATCH 01/36] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=A4=A7=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E8=AF=BB=E6=80=A7=E6=9C=89=E7=82=B9=E5=B7=AE?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=EF=BC=8C=E5=9F=BA=E6=9C=AC=E5=81=9A?= =?UTF-8?q?=E5=88=B0=E8=83=BD=E5=AE=9E=E6=97=B6=E5=A4=84=E7=90=86=E5=BC=B9?= =?UTF-8?q?=E5=B9=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/settings.yml | 22 ++++++---- {store => handler}/__init__.py | 0 handler/common.py | 3 ++ handler/http_server.py | 15 +++++++ {messages => handler}/utils.py | 77 +++++++++++++--------------------- main.py | 19 ++++++--- messages/base.py | 47 +-------------------- output/DebugWriter.py | 6 +++ output/IOutput.py | 36 ++++++++++++++++ output/README.md | 3 ++ output/__init__.py | 6 +++ output/print.py | 33 +++++++++++++++ scripts/mitmproxy.py | 23 ++++++---- scripts/watcher.py | 43 ------------------- scripts/webdriver.py | 26 +++--------- store/mongo.py | 26 ------------ 16 files changed, 181 insertions(+), 204 deletions(-) rename {store => handler}/__init__.py (100%) create mode 100644 handler/common.py create mode 100644 handler/http_server.py rename {messages => handler}/utils.py (57%) create mode 100644 output/DebugWriter.py create mode 100644 output/IOutput.py create mode 100644 output/README.md create mode 100644 output/__init__.py create mode 100644 output/print.py delete mode 100644 scripts/watcher.py delete mode 100644 store/mongo.py diff --git a/config/settings.yml b/config/settings.yml index abc9090..c9b90ac 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -1,14 +1,18 @@ -watchdog: - dir: '/Users/geng/douyin_live/' +mitm: + bin: 'C:\Program Files (x86)\mitmproxy\bin\mitmdump.exe' + host: 127.0.0.1 + port: 8080 webdriver: - bin: '/usr/local/bin/chromedriver' - proxy: '127.0.0.1:8080' - -mongo: - uri : 'mongodb://localhost:27017/' - dbname: 'tiktok' - enabled: 'on' + bin: 'msedgedriver.exe' + +rooms: + - 19829678666 + - https://live.douyin.com/579197336883 + +http: + host: 127.0.0.1 + port: 5000 api: userinfo: 'https://live.douyin.com/webcast/user/?aid=6383&target_uid=' \ No newline at end of file diff --git a/store/__init__.py b/handler/__init__.py similarity index 100% rename from store/__init__.py rename to handler/__init__.py diff --git a/handler/common.py b/handler/common.py new file mode 100644 index 0000000..e946253 --- /dev/null +++ b/handler/common.py @@ -0,0 +1,3 @@ +from queue import SimpleQueue + +MESSAGE_QUEUE = SimpleQueue() diff --git a/handler/http_server.py b/handler/http_server.py new file mode 100644 index 0000000..9dc42e1 --- /dev/null +++ b/handler/http_server.py @@ -0,0 +1,15 @@ +from flask import Flask, request, Response +from handler.common import MESSAGE_QUEUE +import logging +log = logging.getLogger('werkzeug') +log.setLevel(logging.ERROR) + +app = Flask(__name__) +app.config['JSON_AS_ASCII'] = False + + +@app.post("/message") +def message_from_mitmproxy(): + payload = request.data + MESSAGE_QUEUE.put(payload) + return Response(status=204) \ No newline at end of file diff --git a/messages/utils.py b/handler/utils.py similarity index 57% rename from messages/utils.py rename to handler/utils.py index 386fe52..2f2ad36 100644 --- a/messages/utils.py +++ b/handler/utils.py @@ -1,4 +1,6 @@ import os + +from handler.common import MESSAGE_QUEUE from protobuf import message_pb2 from protobuf import wss_pb2 import gzip @@ -8,34 +10,23 @@ from messages.roomuserseq import RoomUserSeqMessage from messages.gift import GiftMessage from messages.social import SocialMessage from messages.chat import ChatMessage +from output import OUTPUTER -from colorama import init, Fore -# define colors -RED = Fore.RED -GREEN = Fore.GREEN -BLUE = Fore.BLUE -CYAN = Fore.CYAN -MAGENTA = Fore.MAGENTA -YELLOW = Fore.YELLOW -WHITE = Fore.WHITE -RESET = Fore.RESET -init() - -def unpackMsgBin(filepath): - response = message_pb2.Response() - wss = wss_pb2.WssResponse() - try: - with open(filepath, 'rb') as f: - path_content = f.read() - wss.ParseFromString( path_content ) +def loop_queue(): + while True: + message = MESSAGE_QUEUE.get() + if type(message) == str: + message = message.encode("UTF-8") + try: + response = message_pb2.Response() + wss = wss_pb2.WssResponse() + wss.ParseFromString(message) decompressed = gzip.decompress(wss.data) response.ParseFromString(decompressed) decodeMsg(response.messages) - except Exception as e: - os.remove(filepath) - pass - finally: - os.remove(filepath) + except Exception as e: + # 发出去的信息无法解析 + pass def decodeMsg(messages): for message in messages: @@ -43,44 +34,34 @@ def decodeMsg(messages): if message.method == 'WebcastMemberMessage': member_message = MemberMessage() member_message.set_payload(message.payload) - member_message.persists() - - print(f"\n{RED}[+] {member_message} {RESET}") - + for output in OUTPUTER: + output.member_output(member_message) elif message.method == 'WebcastSocialMessage': social_message = SocialMessage() social_message.set_payload(message.payload) - social_message.persists() - - print(f"\n{GREEN}[+] {social_message} {RESET}") - + for output in OUTPUTER: + output.social_output(social_message) elif message.method == 'WebcastChatMessage': chat_message = ChatMessage() chat_message.set_payload(message.payload) - chat_message.persists() - - print(f"\n{BLUE}[+] {chat_message} {RESET}") - + for output in OUTPUTER: + output.chat_output(chat_message) elif message.method == 'WebcastLikeMessage': like_message = LikeMessage() like_message.set_payload(message.payload) - like_message.persists() - - print(f"\n{CYAN}[+] {like_message} {RESET}") - + for output in OUTPUTER: + output.like_output(like_message) elif message.method == 'WebcastGiftMessage': gift_message = GiftMessage() gift_message.set_payload(message.payload) - gift_message.persists() - - print(f"\n{MAGENTA}[+] {gift_message} {RESET}") - + for output in OUTPUTER: + output.gift_output(gift_message) elif message.method == 'WebcastRoomUserSeqMessage': room_user_seq_message = RoomUserSeqMessage() room_user_seq_message.set_payload(message.payload) - room_user_seq_message.persists() - - print(f"\n{YELLOW}[+] {room_user_seq_message} {RESET}") - + for output in OUTPUTER: + output.userseq_output(room_user_seq_message) + else: + ... except Exception as e: print(e) diff --git a/main.py b/main.py index a88ee28..74db8d9 100644 --- a/main.py +++ b/main.py @@ -1,18 +1,27 @@ import sys import threading +import subprocess from urllib.parse import urlparse -from scripts import watcher, webdriver from config.helper import config +from handler.http_server import app +from handler.utils import loop_queue +from scripts import webdriver if __name__ == '__main__': if len(sys.argv) == 1 or not urlparse(sys.argv[1]).scheme: print('Invalid url provided, please check...') sys.exit(1) - - t = threading.Thread(target=webdriver.go, args=(sys.argv[1],)) + api_thread = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],)) + api_thread.start() + mitmproxy_process = subprocess.Popen([ + config()["mitm"]["bin"], "-s", "./scripts/mitmproxy.py", "-q", + "--listen-host", config()["mitm"]["host"], "--listen-port", str(config()["mitm"]["port"]) + ]) + t = threading.Thread(target=webdriver.go) t.start() + queue_thread = threading.Thread(target=loop_queue) + queue_thread.start() + queue_thread.join() - w = watcher.Watcher(directory=config()['watchdog']['dir']) - w.run() diff --git a/messages/base.py b/messages/base.py index f881283..f990078 100644 --- a/messages/base.py +++ b/messages/base.py @@ -1,6 +1,5 @@ import traceback from datetime import datetime -from store.mongo import MongoStore from config.helper import config @@ -13,55 +12,13 @@ class Base: def extra_info(self): return dict() - + def user(self): if(hasattr(self.instance, 'user')): return self.instance.user - + return None - def persists(self): - if config()['mongo']['enabled'] != 'on': - return - - try: - store = MongoStore() - - user = self.user() - if user is not None: - store.set_collection('user') - - if not store.exists({'id': user.id}): - store.insert_one({ - 'id': user.id, - 'shortId': user.shortId, - 'nickname': user.nickname, - 'gender': user.gender - }) - - store.set_collection(self.instance.common.method) - msg = { - "msgId": self.instance.common.msgId, - "roomId": self.instance.common.roomId, - 'content': self.format_content(), - 'created_at': datetime.today().replace(microsecond=0) - } - - if user is not None: - msg.update({ - 'userId': user.id - }) - - if len(self.extra_info()): - msg.update(self.extra_info()) - - store.insert_one(msg) - except Exception as e: - print(self.instance.common.method + ' persists error') - print(traceback.format_exc()) - finally: - store.close() - def __str__(self): pass diff --git a/output/DebugWriter.py b/output/DebugWriter.py new file mode 100644 index 0000000..11ff3c4 --- /dev/null +++ b/output/DebugWriter.py @@ -0,0 +1,6 @@ +from output import IOutput + + +class DebugWriter(IOutput): + def other_output(self, message_type: str, message_raw: bytes): + print(message_type) diff --git a/output/IOutput.py b/output/IOutput.py new file mode 100644 index 0000000..1491288 --- /dev/null +++ b/output/IOutput.py @@ -0,0 +1,36 @@ +from messages.base import Base +from messages.chat import ChatMessage +from messages.gift import GiftMessage +from messages.like import LikeMessage +from messages.member import MemberMessage +from messages.roomuserseq import RoomUserSeqMessage +from messages.social import SocialMessage + + +class IOutput(): + def output(self, message_type: str, message_obj: Base): + ... + + def chat_output(self, message: ChatMessage): + ... + + def like_output(self, message: LikeMessage): + ... + + def member_output(self, message: MemberMessage): + ... + + def social_output(self, message: SocialMessage): + ... + + def gift_output(self, message: GiftMessage): + ... + + def userseq_output(self, message: RoomUserSeqMessage): + ... + + def other_output(self, message_type: str, message_raw: bytes): + ... + + def error_output(self, exception: Exception): + ... \ No newline at end of file diff --git a/output/README.md b/output/README.md new file mode 100644 index 0000000..1230bd5 --- /dev/null +++ b/output/README.md @@ -0,0 +1,3 @@ +# 输出模块 + +主要放置输出模块,建议继承IOutput,解析模块中所有解析的内容均基于IOutput进行适配 \ No newline at end of file diff --git a/output/__init__.py b/output/__init__.py new file mode 100644 index 0000000..468ecb6 --- /dev/null +++ b/output/__init__.py @@ -0,0 +1,6 @@ +from output.IOutput import IOutput +from output.print import Print + +OUTPUTER = [ + Print() +] \ No newline at end of file diff --git a/output/print.py b/output/print.py new file mode 100644 index 0000000..23fcf55 --- /dev/null +++ b/output/print.py @@ -0,0 +1,33 @@ +from colorama import init, Fore + +from output import IOutput + +RED = Fore.RED +GREEN = Fore.GREEN +BLUE = Fore.BLUE +CYAN = Fore.CYAN +MAGENTA = Fore.MAGENTA +YELLOW = Fore.YELLOW +WHITE = Fore.WHITE +RESET = Fore.RESET +init() + + +class Print(IOutput): + def chat_output(self, msg): + print(f"\n{BLUE}[+] {msg} {RESET}") + + def like_output(self, msg): + print(f"\n{CYAN}[+] {msg} {RESET}") + + def member_output(self, msg): + print(f"\n{RED}[+] {msg} {RESET}") + + def social_output(self, msg): + print(f"\n{GREEN}[+] {msg} {RESET}") + + def gift_output(self, msg): + print(f"\n{MAGENTA}[+] {msg} {RESET}") + + def userseq_output(self, msg): + print(f"\n{YELLOW}[+] {msg} {RESET}") diff --git a/scripts/mitmproxy.py b/scripts/mitmproxy.py index ae87cf7..e11b25c 100644 --- a/scripts/mitmproxy.py +++ b/scripts/mitmproxy.py @@ -1,16 +1,23 @@ # ! IMPORT ! make sure you ran mitmproxy with this script, # eg: `/path/to/mitmproxy -s mitmproxy.py` - -import uuid +import time from mitmproxy import http import re +import requests +import base64 + +session = requests.session() + class Writer: - def websocket_message(self, flow: http.HTTPFlow) : - re_c = re.search('webcast3-ws-web-.*\.douyin\.com', flow.request.host) - if re_c : - with open('/Users/geng/douyin_live/' + uuid.uuid4().hex, 'wb') as f: - mess = flow.websocket.messages[-1].content - f.write(bytes(mess)) + def websocket_message(self, flow: http.HTTPFlow): + re_c = re.search('webcast\d-ws-web-.*\.douyin\.com', flow.request.host) + if re_c: + message = flow.websocket.messages[-1].content + session.post("http://127.0.0.1:5000/message", data=message, headers={ + "X-MITM_TS": str(time.time()), + "X_REFERER": flow.request.host + }, timeout=(1, 1)) + addons = [Writer()] diff --git a/scripts/watcher.py b/scripts/watcher.py deleted file mode 100644 index e4a1c8e..0000000 --- a/scripts/watcher.py +++ /dev/null @@ -1,43 +0,0 @@ -import concurrent.futures -import queue -import time -from watchdog.observers import Observer -from watchdog.events import FileSystemEventHandler - -from messages.utils import unpackMsgBin - -q = queue.Queue() - -class Watcher: - DIRECTORY_TO_WATCH = "" - - def __init__(self, directory): - self.observer = Observer() - self.DIRECTORY_TO_WATCH = directory - - def run(self): - event_handler = Handler() - self.observer.schedule(event_handler, self.DIRECTORY_TO_WATCH, recursive=True) - self.observer.start() - - try: - while True: - with concurrent.futures.ThreadPoolExecutor() as executor: - time.sleep(0.2) - executor.submit(unpackMsgBin, q.get()) - except: - self.observer.stop() - - self.observer.join() - - -class Handler(FileSystemEventHandler): - - @staticmethod - def on_any_event(event): - if event.is_directory: - return None - - elif event.event_type == 'created': - q.put(event.src_path) - diff --git a/scripts/webdriver.py b/scripts/webdriver.py index 01e0f73..3db669a 100644 --- a/scripts/webdriver.py +++ b/scripts/webdriver.py @@ -2,7 +2,7 @@ import requests import json from selenium import webdriver -from selenium.webdriver.chrome.options import Options +from selenium.webdriver.edge.options import Options from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver.common.proxy import Proxy, ProxyType from selenium.webdriver.common.by import By @@ -10,12 +10,10 @@ from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support.expected_conditions import presence_of_element_located from config.helper import config -from store.mongo import MongoStore def go(url): chrome_options = Options() - chrome_options.add_argument('--proxy-server=%s' % config()['webdriver']['proxy']) - chrome_options.add_argument('--headless') + chrome_options.add_argument('--proxy-server=%s:%s' % (config()['mitm']['host'], config()['mitm']['port'])) # 2022-04-09 添加一个忽略证书 chrome_options.add_argument('-ignore-certificate-errors') @@ -24,10 +22,10 @@ def go(url): proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL - proxy.http_proxy = config()['webdriver']['proxy'] - proxy.ssl_proxy = config()['webdriver']['proxy'] + proxy.http_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) + proxy.ssl_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) - capabilities = DesiredCapabilities.CHROME + capabilities = DesiredCapabilities.EDGE proxy.add_to_capabilities(capabilities) with webdriver.Chrome(options=chrome_options, @@ -45,19 +43,7 @@ def go(url): json_obj = json.loads(json_str) roomInfo = json_obj['initialState']['roomStore']['roomInfo'] - - store = MongoStore() - store.set_collection('room') - store.insert_one({ - 'roomId': roomInfo['roomId'], - 'web_rid': roomInfo['web_rid'], - 'title': roomInfo['room']['title'], - 'user_count_str': roomInfo['room']['user_count_str'], - 'cover': roomInfo['room']['cover']['url_list'][0], - 'admin_user_ids': roomInfo['room']['admin_user_ids'], - 'owner': roomInfo['room']['owner'] - }) - store.close() + print(roomInfo) wait.until(presence_of_element_located((By.CLASS_NAME, "oSu9Aw19"))) \ No newline at end of file diff --git a/store/mongo.py b/store/mongo.py deleted file mode 100644 index 52116ed..0000000 --- a/store/mongo.py +++ /dev/null @@ -1,26 +0,0 @@ -import pymongo - -from config.helper import config - -class MongoStore: - def __init__(self): - self.client = pymongo.MongoClient(config()['mongo']['uri']) - self.db = self.client[config()['mongo']['dbname']] - - def close(self): - self.client.close() - - def set_collection(self, collection): - self.collection = self.db[collection] - - def replace_one(self, condition, data, upsert=True): - return self.collection.replace_one(condition, data, upsert=upsert) - - def insert_one(self, data): - return self.collection.insert_one(data) - - def insert_many(self, data): - return self.collection.insert_many(data) - - def exists(self, condition): - return self.collection.count_documents(condition, limit = 1) != 0 From 09da646b998ad91eb64f7e08f9d0bcc7938ce9f4 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 3 Jun 2022 23:33:40 +0800 Subject: [PATCH 02/36] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8requi?= =?UTF-8?q?rements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/requirements.txt b/requirements.txt index 10be31f..ee9e40c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,26 +1,9 @@ -async-generator==1.10 -attrs==21.2.0 -certifi==2021.10.8 -cffi==1.15.0 colorama==0.4.4 -cryptography==36.0.0 -h11==0.12.0 -idna==3.3 -outcome==1.1.0 protobuf==3.19.1 -pycparser==2.21 -pymongo==3.12.1 -pyOpenSSL==21.0.0 PyYAML==6.0 selenium==4.1.0 -six==1.16.0 -sniffio==1.2.0 -sortedcontainers==2.4.0 -trio==0.19.0 -trio-websocket==0.9.2 -urllib3==1.26.7 -watchdog==2.1.6 -wsproto==1.0.0 requests==2.27.1 scripts==2.0 + +Flask~=2.1.2 \ No newline at end of file From 1cd43be0c5edacc0cd0b50bc6561245cbedf4cf1 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 3 Jun 2022 23:56:33 +0800 Subject: [PATCH 03/36] =?UTF-8?q?=E8=87=AA=E5=B7=B1=E5=8F=91=E5=87=BA?= =?UTF-8?q?=E7=9A=84websocket=E4=BF=A1=E6=81=AF=E4=B8=8D=E5=86=8D=E5=8F=91?= =?UTF-8?q?=E9=80=81=E8=AF=B7=E6=B1=82=E4=BA=86=EF=BC=88=E5=9B=A0=E4=B8=BA?= =?UTF-8?q?=E4=BC=9A=E9=80=A0=E6=88=90=E6=8A=A5=E9=94=99=EF=BC=89=EF=BC=8C?= =?UTF-8?q?=E7=8E=B0=E5=A4=84=E7=90=86=E5=B3=B0=E5=80=BC=E4=B8=BA1w/min?= =?UTF-8?q?=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/mitmproxy.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/mitmproxy.py b/scripts/mitmproxy.py index e11b25c..8169ec3 100644 --- a/scripts/mitmproxy.py +++ b/scripts/mitmproxy.py @@ -4,7 +4,6 @@ import time from mitmproxy import http import re import requests -import base64 session = requests.session() @@ -13,9 +12,12 @@ class Writer: def websocket_message(self, flow: http.HTTPFlow): re_c = re.search('webcast\d-ws-web-.*\.douyin\.com', flow.request.host) if re_c: - message = flow.websocket.messages[-1].content - session.post("http://127.0.0.1:5000/message", data=message, headers={ - "X-MITM_TS": str(time.time()), + message = flow.websocket.messages[-1] + if message.from_client: + return + content = message.content + session.post("http://127.0.0.1:5000/message", data=content, headers={ + "X-MITM-TS": str(time.time()), "X_REFERER": flow.request.host }, timeout=(1, 1)) From 138755a9e45e01fcba12a4d672d1c32843c7e5d4 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 3 Jun 2022 23:56:52 +0800 Subject: [PATCH 04/36] =?UTF-8?q?=E6=8A=8A=E6=BC=8F=E6=8E=89=E7=9A=84url?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=B8=A6=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 74db8d9..dff7865 100644 --- a/main.py +++ b/main.py @@ -18,7 +18,7 @@ if __name__ == '__main__': config()["mitm"]["bin"], "-s", "./scripts/mitmproxy.py", "-q", "--listen-host", config()["mitm"]["host"], "--listen-port", str(config()["mitm"]["port"]) ]) - t = threading.Thread(target=webdriver.go) + t = threading.Thread(target=webdriver.go, args=(sys.argv[1],)) t.start() queue_thread = threading.Thread(target=loop_queue) queue_thread.start() From 62cff74064a2e930d69b6bf70fecae203a88a01f Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sat, 4 Jun 2022 18:15:35 +0800 Subject: [PATCH 05/36] =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E6=8A=BD=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/IDriver.py | 2 ++ browser/__init__.py | 3 +++ browser/chrome.py | 59 ++++++++++++++++++++++++++++++++++++++++++++ browser/edge.py | 59 ++++++++++++++++++++++++++++++++++++++++++++ scripts/webdriver.py | 49 ------------------------------------ 5 files changed, 123 insertions(+), 49 deletions(-) create mode 100644 browser/IDriver.py create mode 100644 browser/__init__.py create mode 100644 browser/chrome.py create mode 100644 browser/edge.py delete mode 100644 scripts/webdriver.py diff --git a/browser/IDriver.py b/browser/IDriver.py new file mode 100644 index 0000000..e18d6ed --- /dev/null +++ b/browser/IDriver.py @@ -0,0 +1,2 @@ +class IDriver(): + ... \ No newline at end of file diff --git a/browser/__init__.py b/browser/__init__.py new file mode 100644 index 0000000..b8e985e --- /dev/null +++ b/browser/__init__.py @@ -0,0 +1,3 @@ +from browser.edge import EdgeDriver + +driver = EdgeDriver() \ No newline at end of file diff --git a/browser/chrome.py b/browser/chrome.py new file mode 100644 index 0000000..5dda8d2 --- /dev/null +++ b/browser/chrome.py @@ -0,0 +1,59 @@ +from selenium import webdriver +from selenium.webdriver import Proxy, DesiredCapabilities +from selenium.webdriver.common.proxy import ProxyType + +from config.helper import config +from browser.IDriver import IDriver +from selenium.webdriver.chrome.options import Options + + +class ChromeDriver(IDriver): + def __init__(self): + super(ChromeDriver, self).__init__() + options = Options() + if config()['webdriver']['headless']: + options.add_argument("--headless") + options.add_argument('--proxy-server=%s:%s' % (config()['mitm']['host'], config()['mitm']['port'])) + options.add_argument('-ignore-certificate-errors') + options.add_argument('-ignore -ssl-errors') + options.add_argument('--incognito') + proxy = Proxy() + proxy.proxy_type = ProxyType.MANUAL + proxy.http_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) + proxy.ssl_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) + capabilities = DesiredCapabilities.EDGE + proxy.add_to_capabilities(capabilities) + + self.browser = webdriver.Chrome(options=options, + desired_capabilities=capabilities, + executable_path=config()['webdriver']['chrome']['bin'] + ) + + def new_tab(self) -> str: + current_window_handles = self.browser.window_handles + self.browser.execute_script("window.open('')") + new_window_handles = self.browser.window_handles + for _handle in new_window_handles: + if _handle not in current_window_handles: + return _handle + return "" + + def change_tab(self, tab_handler: str): + if tab_handler not in self.browser.window_handles: + return + if tab_handler == self.browser.current_window_handle: + return + self.browser.switch_to_window(tab_handler) + + def open_url(self, url: str, tab_handler: str = ""): + if tab_handler != "": + self.change_tab(tab_handler) + self.browser.get(url) + + def screenshot(self, tab_handler: str = "") -> str: + cur_handle = self.browser.current_window_handle + if tab_handler != "": + self.change_tab(tab_handler) + b64 = self.browser.get_screenshot_as_base64() + self.change_tab(cur_handle) + return b64 diff --git a/browser/edge.py b/browser/edge.py new file mode 100644 index 0000000..1011839 --- /dev/null +++ b/browser/edge.py @@ -0,0 +1,59 @@ +from selenium import webdriver +from selenium.webdriver import Proxy, DesiredCapabilities +from selenium.webdriver.common.proxy import ProxyType + +from config.helper import config +from browser.IDriver import IDriver +from selenium.webdriver.edge.options import Options + + +class EdgeDriver(IDriver): + def __init__(self): + super(EdgeDriver, self).__init__() + options = Options() + if config()['webdriver']['headless']: + options.add_argument("--headless") + options.add_argument('--proxy-server=%s:%s' % (config()['mitm']['host'], config()['mitm']['port'])) + options.add_argument('-ignore-certificate-errors') + options.add_argument('-ignore -ssl-errors') + options.add_argument('--incognito') + proxy = Proxy() + proxy.proxy_type = ProxyType.MANUAL + proxy.http_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) + proxy.ssl_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) + capabilities = DesiredCapabilities.EDGE + proxy.add_to_capabilities(capabilities) + + self.browser = webdriver.Chrome(options=options, + desired_capabilities=capabilities, + executable_path=config()['webdriver']['edge']['bin'] + ) + + def new_tab(self) -> str: + current_window_handles = self.browser.window_handles + self.browser.execute_script("window.open('')") + new_window_handles = self.browser.window_handles + for _handle in new_window_handles: + if _handle not in current_window_handles: + return _handle + return "" + + def change_tab(self, tab_handler: str): + if tab_handler not in self.browser.window_handles: + return + if tab_handler == self.browser.current_window_handle: + return + self.browser.switch_to_window(tab_handler) + + def open_url(self, url: str, tab_handler: str = ""): + if tab_handler != "": + self.change_tab(tab_handler) + self.browser.get(url) + + def screenshot(self, tab_handler: str = "") -> str: + cur_handle = self.browser.current_window_handle + if tab_handler != "": + self.change_tab(tab_handler) + b64 = self.browser.get_screenshot_as_base64() + self.change_tab(cur_handle) + return b64 diff --git a/scripts/webdriver.py b/scripts/webdriver.py deleted file mode 100644 index 3db669a..0000000 --- a/scripts/webdriver.py +++ /dev/null @@ -1,49 +0,0 @@ -import requests -import json - -from selenium import webdriver -from selenium.webdriver.edge.options import Options -from selenium.webdriver.common.desired_capabilities import DesiredCapabilities -from selenium.webdriver.common.proxy import Proxy, ProxyType -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support.expected_conditions import presence_of_element_located - -from config.helper import config - -def go(url): - chrome_options = Options() - chrome_options.add_argument('--proxy-server=%s:%s' % (config()['mitm']['host'], config()['mitm']['port'])) - - # 2022-04-09 添加一个忽略证书 - chrome_options.add_argument('-ignore-certificate-errors') - chrome_options.add_argument('-ignore -ssl-errors') - chrome_options.add_argument('--incognito') - - proxy = Proxy() - proxy.proxy_type = ProxyType.MANUAL - proxy.http_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) - proxy.ssl_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) - - capabilities = DesiredCapabilities.EDGE - proxy.add_to_capabilities(capabilities) - - with webdriver.Chrome(options=chrome_options, - desired_capabilities=capabilities, - executable_path=config()['webdriver']['bin'] - ) as driver: - wait = WebDriverWait(driver, 10) - - driver.implicitly_wait(24 * 60 * 60) - - driver.get(url) - - first_result = wait.until(presence_of_element_located((By.ID, "RENDER_DATA"))) - json_str = requests.utils.unquote(first_result.get_attribute("textContent")) - json_obj = json.loads(json_str) - - roomInfo = json_obj['initialState']['roomStore']['roomInfo'] - print(roomInfo) - - wait.until(presence_of_element_located((By.CLASS_NAME, "oSu9Aw19"))) - \ No newline at end of file From 00b4a0279284241371dea300d66900f957074489 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sat, 4 Jun 2022 20:07:02 +0800 Subject: [PATCH 06/36] =?UTF-8?q?=E6=B7=BB=E5=8A=A0webcast=20control=20mes?= =?UTF-8?q?sage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protobuf/message.proto | 5 + protobuf/message_pb2.py | 1942 +++++++++++++++++++-------------------- 2 files changed, 970 insertions(+), 977 deletions(-) diff --git a/protobuf/message.proto b/protobuf/message.proto index 467417e..bb5c07b 100644 --- a/protobuf/message.proto +++ b/protobuf/message.proto @@ -163,6 +163,11 @@ message MemberMessage{ } } +message ControlMessage { + Common common = 1; + int32 status = 2; +} + message Common{ string method = 1; int64 msgId = 2; diff --git a/protobuf/message_pb2.py b/protobuf/message_pb2.py index 79bf420..6dc5287 100644 --- a/protobuf/message_pb2.py +++ b/protobuf/message_pb2.py @@ -1,7 +1,8 @@ -# -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! # source: message.proto -"""Generated protocol buffer code.""" + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -18,8 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor( package='', syntax='proto3', serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\rmessage.proto\"\xa7\x02\n\x08Response\x12\x1a\n\x08messages\x18\x01 \x03(\x0b\x32\x08.Message\x12\x0e\n\x06\x63ursor\x18\x02 \x01(\t\x12\x15\n\rfetchInterval\x18\x03 \x01(\x03\x12\x0b\n\x03now\x18\x04 \x01(\x03\x12\x13\n\x0binternalExt\x18\x05 \x01(\t\x12\x11\n\tfetchType\x18\x06 \x01(\x05\x12/\n\x0brouteParams\x18\x07 \x03(\x0b\x32\x1a.Response.RouteParamsEntry\x12\x19\n\x11heartbeatDuration\x18\x08 \x01(\x03\x12\x0f\n\x07needAck\x18\t \x01(\x08\x12\x12\n\npushServer\x18\n \x01(\t\x1a\x32\n\x10RouteParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"Z\n\x07Message\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\r\n\x05msgId\x18\x03 \x01(\x03\x12\x0f\n\x07msgType\x18\x04 \x01(\x05\x12\x0e\n\x06offset\x18\x05 \x01(\x03\"\xc5\x03\n\x12RoomUserSeqMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12.\n\x05ranks\x18\x02 \x03(\x0b\x32\x1f.RoomUserSeqMessage.Contributor\x12\r\n\x05total\x18\x03 \x01(\x03\x12\x0e\n\x06popStr\x18\x04 \x01(\t\x12.\n\x05seats\x18\x05 \x03(\x0b\x32\x1f.RoomUserSeqMessage.Contributor\x12\x12\n\npopularity\x18\x06 \x01(\x03\x12\x11\n\ttotalUser\x18\x07 \x01(\x03\x12\x14\n\x0ctotalUserStr\x18\x08 \x01(\t\x12\x10\n\x08totalStr\x18\t \x01(\t\x12\x1b\n\x13onlineUserForAnchor\x18\n \x01(\t\x12\x18\n\x10totalPvForAnchor\x18\x0b \x01(\t\x1a\x90\x01\n\x0b\x43ontributor\x12\r\n\x05score\x18\x01 \x01(\x03\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x0c\n\x04rank\x18\x03 \x01(\x03\x12\r\n\x05\x64\x65lta\x18\x04 \x01(\x03\x12\x10\n\x08isHidden\x18\x05 \x01(\x08\x12\x18\n\x10scoreDescription\x18\x06 \x01(\t\x12\x14\n\x0c\x65xactlyScore\x18\x07 \x01(\t\"\xee\x07\n\x0bGiftMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x0e\n\x06giftId\x18\x02 \x01(\x03\x12\x16\n\x0e\x66\x61nTicketCount\x18\x03 \x01(\x03\x12\x12\n\ngroupCount\x18\x04 \x01(\x03\x12\x13\n\x0brepeatCount\x18\x05 \x01(\x03\x12\x12\n\ncomboCount\x18\x06 \x01(\x03\x12\x13\n\x04user\x18\x07 \x01(\x0b\x32\x05.User\x12\x15\n\x06toUser\x18\x08 \x01(\x0b\x32\x05.User\x12\x11\n\trepeatEnd\x18\t \x01(\x05\x12+\n\ntextEffect\x18\n \x01(\x0b\x32\x17.GiftMessage.TextEffect\x12\x0f\n\x07groupId\x18\x0b \x01(\x03\x12\x17\n\x0fincomeTaskgifts\x18\x0c \x01(\x03\x12\x1a\n\x12roomFanTicketCount\x18\r \x01(\x03\x12!\n\x08priority\x18\x0e \x01(\x0b\x32\x0f.GiftIMPriority\x12\x19\n\x04gift\x18\x0f \x01(\x0b\x32\x0b.GiftStruct\x12\r\n\x05logId\x18\x10 \x01(\t\x12\x10\n\x08sendType\x18\x11 \x01(\x03\x12+\n\x10publicAreaCommon\x18\x12 \x01(\x0b\x32\x11.PublicAreaCommon\x12\x1e\n\x0ftrayDisplayText\x18\x13 \x01(\x0b\x32\x05.Text\x12\x1c\n\x14\x62\x61nnedDisplayEffects\x18\x14 \x01(\x03\x12\x1f\n\x08trayInfo\x18\x15 \x01(\x0b\x32\r.GiftTrayInfo\x12/\n\x12\x61ssetEffectMixInfo\x18\x18 \x01(\x0b\x32\x13.AssetEffectMixInfo\x1a\x92\x03\n\nTextEffect\x12\x30\n\x08portrait\x18\x01 \x01(\x0b\x32\x1e.GiftMessage.TextEffect.Detail\x12\x31\n\tlandscape\x18\x02 \x01(\x0b\x32\x1e.GiftMessage.TextEffect.Detail\x1a\x9e\x02\n\x06\x44\x65tail\x12\x13\n\x04text\x18\x01 \x01(\x0b\x32\x05.Text\x12\x14\n\x0ctextFontSize\x18\x02 \x01(\x05\x12\x1a\n\nbackground\x18\x03 \x01(\x0b\x32\x06.Image\x12\r\n\x05start\x18\x04 \x01(\x05\x12\x10\n\x08\x64uration\x18\x05 \x01(\x05\x12\t\n\x01x\x18\x06 \x01(\x05\x12\t\n\x01y\x18\x07 \x01(\x05\x12\r\n\x05width\x18\x08 \x01(\x05\x12\x0e\n\x06height\x18\t \x01(\x05\x12\x10\n\x08shadowDx\x18\n \x01(\x05\x12\x10\n\x08shadowDy\x18\x0b \x01(\x05\x12\x14\n\x0cshadowRadius\x18\x0c \x01(\x05\x12\x13\n\x0bshadowColor\x18\r \x01(\t\x12\x13\n\x0bstrokeColor\x18\x0e \x01(\t\x12\x13\n\x0bstrokeWidth\x18\x0f \x01(\x05\"v\n\x0bLikeMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\r\n\x05total\x18\x03 \x01(\x03\x12\r\n\x05\x63olor\x18\x04 \x01(\x03\x12\x13\n\x04user\x18\x05 \x01(\x0b\x32\x05.User\x12\x0c\n\x04icon\x18\x06 \x01(\t\"\x8e\x02\n\x0b\x43hatMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\t\x12\x17\n\x0fvisibleToSender\x18\x04 \x01(\x08\x12\x1f\n\x0f\x62\x61\x63kgroundImage\x18\x05 \x01(\x0b\x32\x06.Image\x12\x1b\n\x13\x66ullScreenTextColor\x18\x06 \x01(\t\x12!\n\x11\x62\x61\x63kgroundImageV2\x18\x07 \x01(\x0b\x32\x06.Image\x12+\n\x10publicAreaCommon\x18\t \x01(\x0b\x32\x11.PublicAreaCommon\x12\x19\n\tgiftImage\x18\n \x01(\x0b\x32\x06.Image\"\xb7\x01\n\rSocialMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x11\n\tshareType\x18\x03 \x01(\x03\x12\x0e\n\x06\x61\x63tion\x18\x04 \x01(\x03\x12\x13\n\x0bshareTarget\x18\x05 \x01(\t\x12\x13\n\x0b\x66ollowCount\x18\x06 \x01(\x03\x12+\n\x10publicAreaCommon\x18\x07 \x01(\x0b\x32\x11.PublicAreaCommon\"\xf5\x06\n\rMemberMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x13\n\x0bmemberCount\x18\x03 \x01(\x03\x12\x17\n\x08operator\x18\x04 \x01(\x0b\x32\x05.User\x12\x14\n\x0cisSetToAdmin\x18\x05 \x01(\x08\x12\x11\n\tisTopUser\x18\x06 \x01(\x08\x12\x11\n\trankScore\x18\x07 \x01(\x03\x12\x11\n\ttopUserNo\x18\x08 \x01(\x03\x12\x11\n\tenterType\x18\t \x01(\x03\x12\x0e\n\x06\x61\x63tion\x18\n \x01(\x03\x12\x19\n\x11\x61\x63tionDescription\x18\x0b \x01(\t\x12\x0e\n\x06userId\x18\x0c \x01(\x03\x12\x31\n\x0c\x65\x66\x66\x65\x63tConfig\x18\r \x01(\x0b\x32\x1b.MemberMessage.EffectConfig\x12\x0e\n\x06popStr\x18\x0e \x01(\t\x12\x36\n\x11\x65nterEffectConfig\x18\x0f \x01(\x0b\x32\x1b.MemberMessage.EffectConfig\x12\x1f\n\x0f\x62\x61\x63kgroundImage\x18\x10 \x01(\x0b\x32\x06.Image\x12!\n\x11\x62\x61\x63kgroundImageV2\x18\x11 \x01(\x0b\x32\x06.Image\x12 \n\x11\x61nchorDisplayText\x18\x12 \x01(\x0b\x32\x05.Text\x12+\n\x10publicAreaCommon\x18\x13 \x01(\x0b\x32\x11.PublicAreaCommon\x1a\xdc\x02\n\x0c\x45\x66\x66\x65\x63tConfig\x12\x0c\n\x04type\x18\x01 \x01(\x03\x12\x14\n\x04icon\x18\x02 \x01(\x0b\x32\x06.Image\x12\x11\n\tavatarPos\x18\x03 \x01(\x03\x12\x13\n\x04text\x18\x04 \x01(\x0b\x32\x05.Text\x12\x18\n\x08textIcon\x18\x05 \x01(\x0b\x32\x06.Image\x12\x10\n\x08stayTime\x18\x06 \x01(\x05\x12\x13\n\x0b\x61nimAssetId\x18\x07 \x01(\x03\x12\x15\n\x05\x62\x61\x64ge\x18\x08 \x01(\x0b\x32\x06.Image\x12\x18\n\x10\x66lexSettingArray\x18\t \x03(\x03\x12\x1f\n\x0ftextIconOverlay\x18\n \x01(\x0b\x32\x06.Image\x12\x1d\n\ranimatedBadge\x18\x0b \x01(\x0b\x32\x06.Image\x12\x15\n\rhasSweepLight\x18\x0c \x01(\x08\x12\x1c\n\x14textFlexSettingArray\x18\r \x03(\x03\x12\x19\n\x11\x63\x65nterAnimAssetId\x18\x0e \x01(\x03\"\x83\x03\n\x06\x43ommon\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05msgId\x18\x02 \x01(\x03\x12\x0e\n\x06roomId\x18\x03 \x01(\x03\x12\x12\n\ncreateTime\x18\x04 \x01(\x03\x12\x0f\n\x07monitor\x18\x05 \x01(\x05\x12\x11\n\tisShowMsg\x18\x06 \x01(\x08\x12\x10\n\x08\x64\x65scribe\x18\x07 \x01(\t\x12\x1a\n\x0b\x64isplayText\x18\x08 \x01(\x0b\x32\x05.Text\x12\x10\n\x08\x66oldType\x18\t \x01(\x03\x12\x16\n\x0e\x61nchorFoldType\x18\n \x01(\x03\x12\x15\n\rpriorityScore\x18\x0b \x01(\x03\x12\r\n\x05logId\x18\x0c \x01(\t\x12\x19\n\x11msgProcessFilterK\x18\r \x01(\t\x12\x19\n\x11msgProcessFilterV\x18\x0e \x01(\t\x12\x13\n\x04user\x18\x0f \x01(\x0b\x32\x05.User\x12\x13\n\x04room\x18\x10 \x01(\x0b\x32\x05.Room\x12\x18\n\x10\x61nchorFoldTypeV2\x18\x11 \x01(\x03\x12\x1a\n\x12processAtSeiTimeMs\x18\x12 \x01(\x03\"k\n\x04Text\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x16\n\x0e\x64\x65\x66\x61ultPattern\x18\x02 \x01(\t\x12\"\n\rdefaultFormat\x18\x03 \x01(\x0b\x32\x0b.TextFormat\x12\x1a\n\x06pieces\x18\x04 \x03(\x0b\x32\n.TextPiece\"\x92\t\n\x04Room\x12\n\n\x02id\x18\x01 \x01(\x03\x12\r\n\x05idStr\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\x03\x12\x13\n\x0bownerUserId\x18\x04 \x01(\x03\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\tuserCount\x18\x06 \x01(\x03\x12\x12\n\ncreateTime\x18\x07 \x01(\x03\x12\x15\n\rlinkmicLayout\x18\x08 \x01(\x03\x12\x12\n\nfinishTime\x18\t \x01(\x03\x12\x19\n\x05\x65xtra\x18\n \x01(\x0b\x32\n.RoomExtra\x12\x17\n\x0f\x64ynamicCoverUri\x18\x0b \x01(\t\x12\x35\n\x10\x64ynamicCoverDict\x18\x0c \x03(\x0b\x32\x1b.Room.DynamicCoverDictEntry\x12\x14\n\x0clastPingTime\x18\r \x01(\x03\x12\x0e\n\x06liveId\x18\x0e \x01(\x03\x12\x16\n\x0estreamProvider\x18\x0f \x01(\x03\x12\x0e\n\x06osType\x18\x10 \x01(\x03\x12\x15\n\rclientVersion\x18\x11 \x01(\x03\x12\x13\n\x0bwithLinkmic\x18\x12 \x01(\x08\x12\x1d\n\x15\x65nableRoomPerspective\x18\x13 \x01(\x08\x12\x15\n\x05\x63over\x18\x14 \x01(\x0b\x32\x06.Image\x12\x1c\n\x0c\x64ynamicCover\x18\x15 \x01(\x0b\x32\x06.Image\x12\x1f\n\x0f\x64ynamicCoverLow\x18\x16 \x01(\x0b\x32\x06.Image\x12\x10\n\x08shareUrl\x18\x17 \x01(\t\x12\x17\n\x0f\x61nchorShareText\x18\x18 \x01(\t\x12\x15\n\ruserShareText\x18\x19 \x01(\t\x12\x10\n\x08streamId\x18\x1a \x01(\x03\x12\x13\n\x0bstreamIdStr\x18\x1b \x01(\t\x12\x1d\n\tstreamUrl\x18\x1c \x01(\x0b\x32\n.StreamUrl\x12\x14\n\x0cmosaicStatus\x18\x1d \x01(\x03\x12\x11\n\tmosaicTip\x18\x1e \x01(\t\x12\x11\n\tcellStyle\x18\x1f \x01(\x03\x12\x19\n\x07linkMic\x18 \x01(\x0b\x32\x08.LinkMic\x12\x15\n\rluckymoneyNum\x18! \x01(\x03\x12\x1d\n\x08\x64\x65\x63oList\x18\" \x03(\x0b\x32\x0b.Decoration\x12\x18\n\x07topFans\x18# \x03(\x0b\x32\x07.TopFan\x12\x19\n\x05stats\x18$ \x01(\x0b\x32\n.RoomStats\x12\x1b\n\x13sunDailyIconContent\x18% \x01(\t\x12\x10\n\x08\x64istance\x18& \x01(\t\x12\x14\n\x0c\x64istanceCity\x18\' \x01(\t\x12\x10\n\x08location\x18( \x01(\t\x12\x14\n\x0crealDistance\x18) \x01(\t\x12\x1d\n\rfeedRoomLabel\x18* \x01(\x0b\x32\x06.Image\x12\x17\n\x0f\x63ommonLabelList\x18+ \x01(\t\x12&\n\x0flivingRoomAttrs\x18, \x01(\x0b\x32\r.RoomUserAttr\x12\x14\n\x0c\x61\x64minUserIds\x18- \x03(\x03\x12\x14\n\x05owner\x18. \x01(\x0b\x32\x05.User\x12\x13\n\x0bprivateInfo\x18/ \x01(\t\x1a\x37\n\x15\x44ynamicCoverDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x0b\n\tRoomExtra\"\x0b\n\tRoomStats\"\x0e\n\x0cRoomUserAttr\"\x0b\n\tStreamUrl\"\t\n\x07LinkMic\"\x0c\n\nDecoration\"\x08\n\x06TopFan\"\xf2\x14\n\x04User\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0f\n\x07shortId\x18\x02 \x01(\x03\x12\x10\n\x08nickname\x18\x03 \x01(\t\x12\x0e\n\x06gender\x18\x04 \x01(\x05\x12\x11\n\tsignature\x18\x05 \x01(\t\x12\r\n\x05level\x18\x06 \x01(\x05\x12\x10\n\x08\x62irthday\x18\x07 \x01(\x03\x12\x11\n\ttelephone\x18\x08 \x01(\t\x12\x1b\n\x0b\x61vatarThumb\x18\t \x01(\x0b\x32\x06.Image\x12\x1c\n\x0c\x61vatarMedium\x18\n \x01(\x0b\x32\x06.Image\x12\x1b\n\x0b\x61vatarLarge\x18\x0b \x01(\x0b\x32\x06.Image\x12\x10\n\x08verified\x18\x0c \x01(\x08\x12\x12\n\nexperience\x18\r \x01(\x05\x12\x0c\n\x04\x63ity\x18\x0e \x01(\t\x12\x0e\n\x06status\x18\x0f \x01(\x05\x12\x12\n\ncreateTime\x18\x10 \x01(\x03\x12\x12\n\nmodifyTime\x18\x11 \x01(\x03\x12\x0e\n\x06secret\x18\x12 \x01(\x05\x12\x16\n\x0eshareQrcodeUri\x18\x13 \x01(\t\x12\x1a\n\x12incomeSharePercent\x18\x14 \x01(\x05\x12\x1e\n\x0e\x62\x61\x64geImageList\x18\x15 \x01(\x0b\x32\x06.Image\x12$\n\nfollowInfo\x18\x16 \x01(\x0b\x32\x10.User.FollowInfo\x12 \n\x08payGrade\x18\x17 \x01(\x0b\x32\x0e.User.PayGrade\x12 \n\x08\x66\x61nsClub\x18\x18 \x01(\x0b\x32\x0e.User.FansClub\x12\x1c\n\x06\x62order\x18\x19 \x01(\x0b\x32\x0c.User.Border\x12\x11\n\tspecialId\x18\x1a \x01(\t\x12\x1c\n\x0c\x61vatarBorder\x18\x1b \x01(\x0b\x32\x06.Image\x12\x15\n\x05medal\x18\x1c \x01(\x0b\x32\x06.Image\x12\x1d\n\rrealTimeIcons\x18\x1d \x03(\x0b\x32\x06.Image\x12 \n\x10newRealTimeIcons\x18\x1e \x03(\x0b\x32\x06.Image\x12\x10\n\x08topVipNo\x18\x1f \x01(\x03\x12 \n\x08userAttr\x18 \x01(\x0b\x32\x0e.User.UserAttr\x12\x1e\n\x07ownRoom\x18! \x01(\x0b\x32\r.User.OwnRoom\x12\x10\n\x08payScore\x18\" \x01(\x03\x12\x13\n\x0bticketCount\x18# \x01(\x03\x12$\n\nanchorInfo\x18$ \x01(\x0b\x32\x10.User.AnchorInfo\x12\x14\n\x0clinkMicStats\x18% \x01(\x05\x12\x11\n\tdisplayId\x18& \x01(\t\x1a\n\n\x08UserAttr\x1a\t\n\x07OwnRoom\x1a\x0c\n\nAnchorInfo\x1ay\n\nFollowInfo\x12\x16\n\x0e\x66ollowingCount\x18\x01 \x01(\x03\x12\x15\n\rfollowerCount\x18\x02 \x01(\x03\x12\x14\n\x0c\x66ollowStatus\x18\x03 \x01(\x03\x12\x12\n\npushStatus\x18\x04 \x01(\x03\x12\x12\n\nremarkName\x18\x05 \x01(\t\x1a\xfd\x03\n\x08\x46\x61nsClub\x12)\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1b.User.FansClub.FansClubData\x12\x32\n\npreferData\x18\x02 \x03(\x0b\x32\x1e.User.FansClub.PreferDataEntry\x1aN\n\x0fPreferDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.User.FansClub.FansClubData:\x02\x38\x01\x1a\xc1\x02\n\x0c\x46\x61nsClubData\x12\x10\n\x08\x63lubName\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\x05\x12\x1a\n\x12userFansClubStatus\x18\x03 \x01(\x05\x12\x34\n\x05\x62\x61\x64ge\x18\x04 \x01(\x0b\x32%.User.FansClub.FansClubData.UserBadge\x12\x18\n\x10\x61vailableGiftIds\x18\x05 \x03(\x03\x12\x10\n\x08\x61nchorId\x18\x06 \x01(\x03\x1a\x91\x01\n\tUserBadge\x12?\n\x05icons\x18\x01 \x03(\x0b\x32\x30.User.FansClub.FansClubData.UserBadge.IconsEntry\x12\r\n\x05title\x18\x02 \x01(\t\x1a\x34\n\nIconsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x15\n\x05value\x18\x02 \x01(\x0b\x32\x06.Image:\x02\x38\x01\x1a\x08\n\x06\x42order\x1a\xc7\x01\n\rGradeBuffInfo\x12\x11\n\tbuffLevel\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\x12\x0f\n\x07\x65ndTime\x18\x03 \x01(\x03\x12\x35\n\tstatsInfo\x18\x04 \x03(\x0b\x32\".User.GradeBuffInfo.StatsInfoEntry\x12\x19\n\tbuffBadge\x18\x05 \x01(\x0b\x32\x06.Image\x1a\x30\n\x0eStatsInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\xec\x06\n\x08PayGrade\x12\x19\n\x11totalDiamondCount\x18\x01 \x01(\x03\x12\x1b\n\x0b\x64iamondIcon\x18\x02 \x01(\x0b\x32\x06.Image\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x14\n\x04icon\x18\x04 \x01(\x0b\x32\x06.Image\x12\x10\n\x08nextName\x18\x05 \x01(\t\x12\r\n\x05level\x18\x06 \x01(\x03\x12\x18\n\x08nextIcon\x18\x07 \x01(\x0b\x32\x06.Image\x12\x13\n\x0bnextDiamond\x18\x08 \x01(\x03\x12\x12\n\nnowDiamond\x18\t \x01(\x03\x12\x1b\n\x13thisGradeMinDiamond\x18\n \x01(\x03\x12\x1b\n\x13thisGradeMaxDiamond\x18\x0b \x01(\x03\x12\x15\n\rpayDiamondBak\x18\x0c \x01(\x03\x12\x15\n\rgradeDescribe\x18\r \x01(\t\x12/\n\rgradeIconList\x18\x0e \x03(\x0b\x32\x18.User.PayGrade.GradeIcon\x12\x16\n\x0escreenChatType\x18\x0f \x01(\x03\x12\x16\n\x06imIcon\x18\x10 \x01(\x0b\x32\x06.Image\x12\x1f\n\x0fimIconWithLevel\x18\x11 \x01(\x0b\x32\x06.Image\x12\x18\n\x08liveIcon\x18\x12 \x01(\x0b\x32\x06.Image\x12\"\n\x12newImIconWithLevel\x18\x13 \x01(\x0b\x32\x06.Image\x12\x1b\n\x0bnewLiveIcon\x18\x14 \x01(\x0b\x32\x06.Image\x12\x1a\n\x12upgradeNeedConsume\x18\x15 \x01(\x03\x12\x16\n\x0enextPrivileges\x18\x16 \x01(\t\x12\x1a\n\nbackground\x18\x17 \x01(\x0b\x32\x06.Image\x12\x1e\n\x0e\x62\x61\x63kgroundBack\x18\x18 \x01(\x0b\x32\x06.Image\x12\r\n\x05score\x18\x19 \x01(\x03\x12%\n\x08\x62uffInfo\x18\x1a \x01(\x0b\x32\x13.User.GradeBuffInfo\x12\x14\n\x0bgradeBanner\x18\xe9\x07 \x01(\t\x12 \n\x0fprofileDialogBg\x18\xea\x07 \x01(\x0b\x32\x06.Image\x12$\n\x13profileDialogBgBack\x18\xeb\x07 \x01(\x0b\x32\x06.Image\x1aW\n\tGradeIcon\x12\x14\n\x04icon\x18\x01 \x01(\x0b\x32\x06.Image\x12\x13\n\x0biconDiamond\x18\x02 \x01(\x03\x12\r\n\x05level\x18\x03 \x01(\x03\x12\x10\n\x08levelStr\x18\x04 \x01(\t\"\xa5\x01\n\nTextFormat\x12\r\n\x05\x63olor\x18\x01 \x01(\t\x12\x0c\n\x04\x62old\x18\x02 \x01(\x08\x12\x0e\n\x06italic\x18\x03 \x01(\x08\x12\x0e\n\x06weight\x18\x04 \x01(\x05\x12\x13\n\x0bitalicAngle\x18\x05 \x01(\x05\x12\x10\n\x08\x66ontSize\x18\x06 \x01(\x05\x12\x1c\n\x14userHeightLightColor\x18\x07 \x01(\x08\x12\x15\n\ruseRemoteClor\x18\x08 \x01(\x08\"n\n\tTextPiece\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\x1b\n\x06\x66ormat\x18\x02 \x01(\x0b\x32\x0b.TextFormat\x12\x13\n\x0bstringValue\x18\x0b \x01(\t\x12!\n\tuserValue\x18\x15 \x01(\x0b\x32\x0e.TextPieceUser\"\x86\x02\n\x05Image\x12\x0f\n\x07urlList\x18\x01 \x03(\t\x12\x0b\n\x03uri\x18\x02 \x01(\t\x12\x0e\n\x06height\x18\x03 \x01(\x03\x12\r\n\x05width\x18\x04 \x01(\x03\x12\x10\n\x08\x61vgColor\x18\x05 \x01(\t\x12\x11\n\timageType\x18\x06 \x01(\x05\x12\x12\n\nopenWebUrl\x18\x07 \x01(\t\x12\x1f\n\x07\x63ontent\x18\x08 \x01(\x0b\x32\x0e.Image.Content\x12\x12\n\nisAnimated\x18\t \x01(\x08\x1aR\n\x07\x43ontent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tfontColor\x18\x02 \x01(\t\x12\r\n\x05level\x18\x03 \x01(\x03\x12\x17\n\x0f\x61lternativeText\x18\x04 \x01(\t\"7\n\rTextPieceUser\x12\x13\n\x04user\x18\x01 \x01(\x0b\x32\x05.User\x12\x11\n\twithColon\x18\x02 \x01(\x08\"g\n\x10PublicAreaCommon\x12\x19\n\tuserLabel\x18\x01 \x01(\x0b\x32\x06.Image\x12\x19\n\x11userConsumeInRoom\x18\x02 \x01(\x03\x12\x1d\n\x15userSendGiftCntInRoom\x18\x03 \x01(\x03\"Q\n\x0eGiftIMPriority\x12\x12\n\nqueueSizes\x18\x01 \x03(\x03\x12\x19\n\x11selfQueuePriority\x18\x02 \x01(\x03\x12\x10\n\x08priority\x18\x03 \x01(\x03\"\xb9\x01\n\x0cGiftTrayInfo\x12\x1e\n\x0ftrayDisplayText\x18\x01 \x01(\x0b\x32\x05.Text\x12\x1b\n\x0btrayBaseImg\x18\x02 \x01(\x0b\x32\x06.Image\x12\x1b\n\x0btrayHeadImg\x18\x03 \x01(\x0b\x32\x06.Image\x12\x1c\n\x0ctrayRightImg\x18\x04 \x01(\x0b\x32\x06.Image\x12\x11\n\ttrayLevel\x18\x05 \x01(\x03\x12\x1e\n\x0etrayDynamicImg\x18\x06 \x01(\x0b\x32\x06.Image\"\x84\x0c\n\nGiftStruct\x12\x15\n\x05image\x18\x01 \x01(\x0b\x32\x06.Image\x12\x10\n\x08\x64\x65scribe\x18\x02 \x01(\t\x12\x0e\n\x06notify\x18\x03 \x01(\x08\x12\x10\n\x08\x64uration\x18\x04 \x01(\x03\x12\n\n\x02id\x18\x05 \x01(\x03\x12\x38\n\x0c\x66\x61nsclubInfo\x18\x06 \x01(\x0b\x32\".GiftStruct.GiftStructFansClubInfo\x12\x12\n\nforLinkmic\x18\x07 \x01(\x08\x12\x0e\n\x06\x64oodle\x18\x08 \x01(\x08\x12\x13\n\x0b\x66orFansclub\x18\t \x01(\x08\x12\r\n\x05\x63ombo\x18\n \x01(\x08\x12\x0c\n\x04type\x18\x0b \x01(\x05\x12\x14\n\x0c\x64iamondCount\x18\x0c \x01(\x05\x12\x1a\n\x12isDisplayedOnPanel\x18\r \x01(\x05\x12\x17\n\x0fprimaryEffectId\x18\x0e \x01(\x03\x12\x1d\n\rgiftLabelIcon\x18\x0f \x01(\x0b\x32\x06.Image\x12\x0c\n\x04name\x18\x10 \x01(\t\x12\x0e\n\x06region\x18\x11 \x01(\t\x12\x0e\n\x06manual\x18\x12 \x01(\t\x12\x11\n\tforCustom\x18\x13 \x01(\x08\x12\x37\n\x0especialEffects\x18\x14 \x03(\x0b\x32\x1f.GiftStruct.SpecialEffectsEntry\x12\x14\n\x04icon\x18\x15 \x01(\x0b\x32\x06.Image\x12\x12\n\nactionType\x18\x16 \x01(\x05\x12\x17\n\x0fwatermelonSeeds\x18\x17 \x01(\x05\x12\x12\n\ngoldEffect\x18\x18 \x01(\t\x12!\n\x04subs\x18\x19 \x03(\x0b\x32\x13.LuckyMoneyGiftMeta\x12\x13\n\x0bgoldenBeans\x18\x1a \x01(\x03\x12\x12\n\nhonorLevel\x18\x1b \x01(\x03\x12\x10\n\x08itemType\x18\x1c \x01(\x05\x12\x11\n\tschemeUrl\x18\x1d \x01(\t\x12*\n\rgiftOperation\x18\x1e \x01(\x0b\x32\x13.GiftPanelOperation\x12\x11\n\teventName\x18\x1f \x01(\t\x12\x12\n\nnobleLevel\x18 \x01(\x03\x12\x10\n\x08guideUrl\x18! \x01(\t\x12\x16\n\x0epunishMedicine\x18\" \x01(\x08\x12\x11\n\tforPortal\x18# \x01(\x08\x12\x14\n\x0c\x62usinessText\x18$ \x01(\t\x12\x0f\n\x07\x63nyGift\x18% \x01(\x08\x12\r\n\x05\x61ppId\x18& \x01(\x03\x12\x10\n\x08vipLevel\x18\' \x01(\x03\x12\x0e\n\x06isGray\x18( \x01(\x08\x12\x15\n\rgraySchemeUrl\x18) \x01(\t\x12\x11\n\tgiftScene\x18* \x01(\x03\x12\x1f\n\ngiftBanner\x18+ \x01(\x0b\x32\x0b.GiftBanner\x12\x14\n\x0ctriggerWords\x18, \x03(\t\x12$\n\rgiftBuffInfos\x18- \x03(\x0b\x32\r.GiftBuffInfo\x12\x18\n\x10\x66orFirstRecharge\x18. \x01(\x08\x12%\n\x15\x64ynamicImgForSelected\x18/ \x01(\x0b\x32\x06.Image\x12\x17\n\x0f\x61\x66terSendAction\x18\x30 \x01(\x05\x12\x17\n\x0fgiftOfflineTime\x18\x31 \x01(\x03\x12\x12\n\ntopBarText\x18\x32 \x01(\t\x12\x1e\n\x0etopRightAvatar\x18\x33 \x01(\x0b\x32\x06.Image\x12\x17\n\x0f\x62\x61nnerSchemeUrl\x18\x34 \x01(\t\x12\x10\n\x08isLocked\x18\x35 \x01(\x08\x12\x14\n\x0creqExtraType\x18\x36 \x01(\x03\x12\x10\n\x08\x61ssetIds\x18\x37 \x03(\x03\x12)\n\x0fgiftPreviewInfo\x18\x38 \x01(\x0b\x32\x10.GiftPreviewInfo\x12\x19\n\x07giftTip\x18\x39 \x01(\x0b\x32\x08.GiftTip\x12\x1b\n\x13needSweepLightCount\x18: \x01(\x05\x12!\n\tgroupInfo\x18; \x03(\x0b\x32\x0e.GiftGroupInfo\x1a\x35\n\x13SpecialEffectsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a=\n\x16GiftStructFansClubInfo\x12\x10\n\x08minLevel\x18\x01 \x01(\x05\x12\x11\n\tinsertPos\x18\x02 \x01(\x05\"\x14\n\x12\x41ssetEffectMixInfo\"\x14\n\x12LuckyMoneyGiftMeta\"\x14\n\x12GiftPanelOperation\"\x0c\n\nGiftBanner\"\x0e\n\x0cGiftBuffInfo\"\x11\n\x0fGiftPreviewInfo\"\t\n\x07GiftTip\"\x0f\n\rGiftGroupInfo\"\x14\n\x12\x45\x66\x66\x65\x63tMixImageInfob\x06proto3' + serialized_pb=_b('\n\rmessage.proto\"\xa7\x02\n\x08Response\x12\x1a\n\x08messages\x18\x01 \x03(\x0b\x32\x08.Message\x12\x0e\n\x06\x63ursor\x18\x02 \x01(\t\x12\x15\n\rfetchInterval\x18\x03 \x01(\x03\x12\x0b\n\x03now\x18\x04 \x01(\x03\x12\x13\n\x0binternalExt\x18\x05 \x01(\t\x12\x11\n\tfetchType\x18\x06 \x01(\x05\x12/\n\x0brouteParams\x18\x07 \x03(\x0b\x32\x1a.Response.RouteParamsEntry\x12\x19\n\x11heartbeatDuration\x18\x08 \x01(\x03\x12\x0f\n\x07needAck\x18\t \x01(\x08\x12\x12\n\npushServer\x18\n \x01(\t\x1a\x32\n\x10RouteParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"Z\n\x07Message\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\x12\r\n\x05msgId\x18\x03 \x01(\x03\x12\x0f\n\x07msgType\x18\x04 \x01(\x05\x12\x0e\n\x06offset\x18\x05 \x01(\x03\"\xc5\x03\n\x12RoomUserSeqMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12.\n\x05ranks\x18\x02 \x03(\x0b\x32\x1f.RoomUserSeqMessage.Contributor\x12\r\n\x05total\x18\x03 \x01(\x03\x12\x0e\n\x06popStr\x18\x04 \x01(\t\x12.\n\x05seats\x18\x05 \x03(\x0b\x32\x1f.RoomUserSeqMessage.Contributor\x12\x12\n\npopularity\x18\x06 \x01(\x03\x12\x11\n\ttotalUser\x18\x07 \x01(\x03\x12\x14\n\x0ctotalUserStr\x18\x08 \x01(\t\x12\x10\n\x08totalStr\x18\t \x01(\t\x12\x1b\n\x13onlineUserForAnchor\x18\n \x01(\t\x12\x18\n\x10totalPvForAnchor\x18\x0b \x01(\t\x1a\x90\x01\n\x0b\x43ontributor\x12\r\n\x05score\x18\x01 \x01(\x03\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x0c\n\x04rank\x18\x03 \x01(\x03\x12\r\n\x05\x64\x65lta\x18\x04 \x01(\x03\x12\x10\n\x08isHidden\x18\x05 \x01(\x08\x12\x18\n\x10scoreDescription\x18\x06 \x01(\t\x12\x14\n\x0c\x65xactlyScore\x18\x07 \x01(\t\"\xee\x07\n\x0bGiftMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x0e\n\x06giftId\x18\x02 \x01(\x03\x12\x16\n\x0e\x66\x61nTicketCount\x18\x03 \x01(\x03\x12\x12\n\ngroupCount\x18\x04 \x01(\x03\x12\x13\n\x0brepeatCount\x18\x05 \x01(\x03\x12\x12\n\ncomboCount\x18\x06 \x01(\x03\x12\x13\n\x04user\x18\x07 \x01(\x0b\x32\x05.User\x12\x15\n\x06toUser\x18\x08 \x01(\x0b\x32\x05.User\x12\x11\n\trepeatEnd\x18\t \x01(\x05\x12+\n\ntextEffect\x18\n \x01(\x0b\x32\x17.GiftMessage.TextEffect\x12\x0f\n\x07groupId\x18\x0b \x01(\x03\x12\x17\n\x0fincomeTaskgifts\x18\x0c \x01(\x03\x12\x1a\n\x12roomFanTicketCount\x18\r \x01(\x03\x12!\n\x08priority\x18\x0e \x01(\x0b\x32\x0f.GiftIMPriority\x12\x19\n\x04gift\x18\x0f \x01(\x0b\x32\x0b.GiftStruct\x12\r\n\x05logId\x18\x10 \x01(\t\x12\x10\n\x08sendType\x18\x11 \x01(\x03\x12+\n\x10publicAreaCommon\x18\x12 \x01(\x0b\x32\x11.PublicAreaCommon\x12\x1e\n\x0ftrayDisplayText\x18\x13 \x01(\x0b\x32\x05.Text\x12\x1c\n\x14\x62\x61nnedDisplayEffects\x18\x14 \x01(\x03\x12\x1f\n\x08trayInfo\x18\x15 \x01(\x0b\x32\r.GiftTrayInfo\x12/\n\x12\x61ssetEffectMixInfo\x18\x18 \x01(\x0b\x32\x13.AssetEffectMixInfo\x1a\x92\x03\n\nTextEffect\x12\x30\n\x08portrait\x18\x01 \x01(\x0b\x32\x1e.GiftMessage.TextEffect.Detail\x12\x31\n\tlandscape\x18\x02 \x01(\x0b\x32\x1e.GiftMessage.TextEffect.Detail\x1a\x9e\x02\n\x06\x44\x65tail\x12\x13\n\x04text\x18\x01 \x01(\x0b\x32\x05.Text\x12\x14\n\x0ctextFontSize\x18\x02 \x01(\x05\x12\x1a\n\nbackground\x18\x03 \x01(\x0b\x32\x06.Image\x12\r\n\x05start\x18\x04 \x01(\x05\x12\x10\n\x08\x64uration\x18\x05 \x01(\x05\x12\t\n\x01x\x18\x06 \x01(\x05\x12\t\n\x01y\x18\x07 \x01(\x05\x12\r\n\x05width\x18\x08 \x01(\x05\x12\x0e\n\x06height\x18\t \x01(\x05\x12\x10\n\x08shadowDx\x18\n \x01(\x05\x12\x10\n\x08shadowDy\x18\x0b \x01(\x05\x12\x14\n\x0cshadowRadius\x18\x0c \x01(\x05\x12\x13\n\x0bshadowColor\x18\r \x01(\t\x12\x13\n\x0bstrokeColor\x18\x0e \x01(\t\x12\x13\n\x0bstrokeWidth\x18\x0f \x01(\x05\"v\n\x0bLikeMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\r\n\x05\x63ount\x18\x02 \x01(\x03\x12\r\n\x05total\x18\x03 \x01(\x03\x12\r\n\x05\x63olor\x18\x04 \x01(\x03\x12\x13\n\x04user\x18\x05 \x01(\x0b\x32\x05.User\x12\x0c\n\x04icon\x18\x06 \x01(\t\"\x8e\x02\n\x0b\x43hatMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\t\x12\x17\n\x0fvisibleToSender\x18\x04 \x01(\x08\x12\x1f\n\x0f\x62\x61\x63kgroundImage\x18\x05 \x01(\x0b\x32\x06.Image\x12\x1b\n\x13\x66ullScreenTextColor\x18\x06 \x01(\t\x12!\n\x11\x62\x61\x63kgroundImageV2\x18\x07 \x01(\x0b\x32\x06.Image\x12+\n\x10publicAreaCommon\x18\t \x01(\x0b\x32\x11.PublicAreaCommon\x12\x19\n\tgiftImage\x18\n \x01(\x0b\x32\x06.Image\"\xb7\x01\n\rSocialMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x11\n\tshareType\x18\x03 \x01(\x03\x12\x0e\n\x06\x61\x63tion\x18\x04 \x01(\x03\x12\x13\n\x0bshareTarget\x18\x05 \x01(\t\x12\x13\n\x0b\x66ollowCount\x18\x06 \x01(\x03\x12+\n\x10publicAreaCommon\x18\x07 \x01(\x0b\x32\x11.PublicAreaCommon\"\xf5\x06\n\rMemberMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x13\n\x0bmemberCount\x18\x03 \x01(\x03\x12\x17\n\x08operator\x18\x04 \x01(\x0b\x32\x05.User\x12\x14\n\x0cisSetToAdmin\x18\x05 \x01(\x08\x12\x11\n\tisTopUser\x18\x06 \x01(\x08\x12\x11\n\trankScore\x18\x07 \x01(\x03\x12\x11\n\ttopUserNo\x18\x08 \x01(\x03\x12\x11\n\tenterType\x18\t \x01(\x03\x12\x0e\n\x06\x61\x63tion\x18\n \x01(\x03\x12\x19\n\x11\x61\x63tionDescription\x18\x0b \x01(\t\x12\x0e\n\x06userId\x18\x0c \x01(\x03\x12\x31\n\x0c\x65\x66\x66\x65\x63tConfig\x18\r \x01(\x0b\x32\x1b.MemberMessage.EffectConfig\x12\x0e\n\x06popStr\x18\x0e \x01(\t\x12\x36\n\x11\x65nterEffectConfig\x18\x0f \x01(\x0b\x32\x1b.MemberMessage.EffectConfig\x12\x1f\n\x0f\x62\x61\x63kgroundImage\x18\x10 \x01(\x0b\x32\x06.Image\x12!\n\x11\x62\x61\x63kgroundImageV2\x18\x11 \x01(\x0b\x32\x06.Image\x12 \n\x11\x61nchorDisplayText\x18\x12 \x01(\x0b\x32\x05.Text\x12+\n\x10publicAreaCommon\x18\x13 \x01(\x0b\x32\x11.PublicAreaCommon\x1a\xdc\x02\n\x0c\x45\x66\x66\x65\x63tConfig\x12\x0c\n\x04type\x18\x01 \x01(\x03\x12\x14\n\x04icon\x18\x02 \x01(\x0b\x32\x06.Image\x12\x11\n\tavatarPos\x18\x03 \x01(\x03\x12\x13\n\x04text\x18\x04 \x01(\x0b\x32\x05.Text\x12\x18\n\x08textIcon\x18\x05 \x01(\x0b\x32\x06.Image\x12\x10\n\x08stayTime\x18\x06 \x01(\x05\x12\x13\n\x0b\x61nimAssetId\x18\x07 \x01(\x03\x12\x15\n\x05\x62\x61\x64ge\x18\x08 \x01(\x0b\x32\x06.Image\x12\x18\n\x10\x66lexSettingArray\x18\t \x03(\x03\x12\x1f\n\x0ftextIconOverlay\x18\n \x01(\x0b\x32\x06.Image\x12\x1d\n\ranimatedBadge\x18\x0b \x01(\x0b\x32\x06.Image\x12\x15\n\rhasSweepLight\x18\x0c \x01(\x08\x12\x1c\n\x14textFlexSettingArray\x18\r \x03(\x03\x12\x19\n\x11\x63\x65nterAnimAssetId\x18\x0e \x01(\x03\"9\n\x0e\x43ontrolMessage\x12\x17\n\x06\x63ommon\x18\x01 \x01(\x0b\x32\x07.Common\x12\x0e\n\x06status\x18\x02 \x01(\x05\"\x83\x03\n\x06\x43ommon\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05msgId\x18\x02 \x01(\x03\x12\x0e\n\x06roomId\x18\x03 \x01(\x03\x12\x12\n\ncreateTime\x18\x04 \x01(\x03\x12\x0f\n\x07monitor\x18\x05 \x01(\x05\x12\x11\n\tisShowMsg\x18\x06 \x01(\x08\x12\x10\n\x08\x64\x65scribe\x18\x07 \x01(\t\x12\x1a\n\x0b\x64isplayText\x18\x08 \x01(\x0b\x32\x05.Text\x12\x10\n\x08\x66oldType\x18\t \x01(\x03\x12\x16\n\x0e\x61nchorFoldType\x18\n \x01(\x03\x12\x15\n\rpriorityScore\x18\x0b \x01(\x03\x12\r\n\x05logId\x18\x0c \x01(\t\x12\x19\n\x11msgProcessFilterK\x18\r \x01(\t\x12\x19\n\x11msgProcessFilterV\x18\x0e \x01(\t\x12\x13\n\x04user\x18\x0f \x01(\x0b\x32\x05.User\x12\x13\n\x04room\x18\x10 \x01(\x0b\x32\x05.Room\x12\x18\n\x10\x61nchorFoldTypeV2\x18\x11 \x01(\x03\x12\x1a\n\x12processAtSeiTimeMs\x18\x12 \x01(\x03\"k\n\x04Text\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x16\n\x0e\x64\x65\x66\x61ultPattern\x18\x02 \x01(\t\x12\"\n\rdefaultFormat\x18\x03 \x01(\x0b\x32\x0b.TextFormat\x12\x1a\n\x06pieces\x18\x04 \x03(\x0b\x32\n.TextPiece\"\x92\t\n\x04Room\x12\n\n\x02id\x18\x01 \x01(\x03\x12\r\n\x05idStr\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\x03\x12\x13\n\x0bownerUserId\x18\x04 \x01(\x03\x12\r\n\x05title\x18\x05 \x01(\t\x12\x11\n\tuserCount\x18\x06 \x01(\x03\x12\x12\n\ncreateTime\x18\x07 \x01(\x03\x12\x15\n\rlinkmicLayout\x18\x08 \x01(\x03\x12\x12\n\nfinishTime\x18\t \x01(\x03\x12\x19\n\x05\x65xtra\x18\n \x01(\x0b\x32\n.RoomExtra\x12\x17\n\x0f\x64ynamicCoverUri\x18\x0b \x01(\t\x12\x35\n\x10\x64ynamicCoverDict\x18\x0c \x03(\x0b\x32\x1b.Room.DynamicCoverDictEntry\x12\x14\n\x0clastPingTime\x18\r \x01(\x03\x12\x0e\n\x06liveId\x18\x0e \x01(\x03\x12\x16\n\x0estreamProvider\x18\x0f \x01(\x03\x12\x0e\n\x06osType\x18\x10 \x01(\x03\x12\x15\n\rclientVersion\x18\x11 \x01(\x03\x12\x13\n\x0bwithLinkmic\x18\x12 \x01(\x08\x12\x1d\n\x15\x65nableRoomPerspective\x18\x13 \x01(\x08\x12\x15\n\x05\x63over\x18\x14 \x01(\x0b\x32\x06.Image\x12\x1c\n\x0c\x64ynamicCover\x18\x15 \x01(\x0b\x32\x06.Image\x12\x1f\n\x0f\x64ynamicCoverLow\x18\x16 \x01(\x0b\x32\x06.Image\x12\x10\n\x08shareUrl\x18\x17 \x01(\t\x12\x17\n\x0f\x61nchorShareText\x18\x18 \x01(\t\x12\x15\n\ruserShareText\x18\x19 \x01(\t\x12\x10\n\x08streamId\x18\x1a \x01(\x03\x12\x13\n\x0bstreamIdStr\x18\x1b \x01(\t\x12\x1d\n\tstreamUrl\x18\x1c \x01(\x0b\x32\n.StreamUrl\x12\x14\n\x0cmosaicStatus\x18\x1d \x01(\x03\x12\x11\n\tmosaicTip\x18\x1e \x01(\t\x12\x11\n\tcellStyle\x18\x1f \x01(\x03\x12\x19\n\x07linkMic\x18 \x01(\x0b\x32\x08.LinkMic\x12\x15\n\rluckymoneyNum\x18! \x01(\x03\x12\x1d\n\x08\x64\x65\x63oList\x18\" \x03(\x0b\x32\x0b.Decoration\x12\x18\n\x07topFans\x18# \x03(\x0b\x32\x07.TopFan\x12\x19\n\x05stats\x18$ \x01(\x0b\x32\n.RoomStats\x12\x1b\n\x13sunDailyIconContent\x18% \x01(\t\x12\x10\n\x08\x64istance\x18& \x01(\t\x12\x14\n\x0c\x64istanceCity\x18\' \x01(\t\x12\x10\n\x08location\x18( \x01(\t\x12\x14\n\x0crealDistance\x18) \x01(\t\x12\x1d\n\rfeedRoomLabel\x18* \x01(\x0b\x32\x06.Image\x12\x17\n\x0f\x63ommonLabelList\x18+ \x01(\t\x12&\n\x0flivingRoomAttrs\x18, \x01(\x0b\x32\r.RoomUserAttr\x12\x14\n\x0c\x61\x64minUserIds\x18- \x03(\x03\x12\x14\n\x05owner\x18. \x01(\x0b\x32\x05.User\x12\x13\n\x0bprivateInfo\x18/ \x01(\t\x1a\x37\n\x15\x44ynamicCoverDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x0b\n\tRoomExtra\"\x0b\n\tRoomStats\"\x0e\n\x0cRoomUserAttr\"\x0b\n\tStreamUrl\"\t\n\x07LinkMic\"\x0c\n\nDecoration\"\x08\n\x06TopFan\"\xf2\x14\n\x04User\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0f\n\x07shortId\x18\x02 \x01(\x03\x12\x10\n\x08nickname\x18\x03 \x01(\t\x12\x0e\n\x06gender\x18\x04 \x01(\x05\x12\x11\n\tsignature\x18\x05 \x01(\t\x12\r\n\x05level\x18\x06 \x01(\x05\x12\x10\n\x08\x62irthday\x18\x07 \x01(\x03\x12\x11\n\ttelephone\x18\x08 \x01(\t\x12\x1b\n\x0b\x61vatarThumb\x18\t \x01(\x0b\x32\x06.Image\x12\x1c\n\x0c\x61vatarMedium\x18\n \x01(\x0b\x32\x06.Image\x12\x1b\n\x0b\x61vatarLarge\x18\x0b \x01(\x0b\x32\x06.Image\x12\x10\n\x08verified\x18\x0c \x01(\x08\x12\x12\n\nexperience\x18\r \x01(\x05\x12\x0c\n\x04\x63ity\x18\x0e \x01(\t\x12\x0e\n\x06status\x18\x0f \x01(\x05\x12\x12\n\ncreateTime\x18\x10 \x01(\x03\x12\x12\n\nmodifyTime\x18\x11 \x01(\x03\x12\x0e\n\x06secret\x18\x12 \x01(\x05\x12\x16\n\x0eshareQrcodeUri\x18\x13 \x01(\t\x12\x1a\n\x12incomeSharePercent\x18\x14 \x01(\x05\x12\x1e\n\x0e\x62\x61\x64geImageList\x18\x15 \x01(\x0b\x32\x06.Image\x12$\n\nfollowInfo\x18\x16 \x01(\x0b\x32\x10.User.FollowInfo\x12 \n\x08payGrade\x18\x17 \x01(\x0b\x32\x0e.User.PayGrade\x12 \n\x08\x66\x61nsClub\x18\x18 \x01(\x0b\x32\x0e.User.FansClub\x12\x1c\n\x06\x62order\x18\x19 \x01(\x0b\x32\x0c.User.Border\x12\x11\n\tspecialId\x18\x1a \x01(\t\x12\x1c\n\x0c\x61vatarBorder\x18\x1b \x01(\x0b\x32\x06.Image\x12\x15\n\x05medal\x18\x1c \x01(\x0b\x32\x06.Image\x12\x1d\n\rrealTimeIcons\x18\x1d \x03(\x0b\x32\x06.Image\x12 \n\x10newRealTimeIcons\x18\x1e \x03(\x0b\x32\x06.Image\x12\x10\n\x08topVipNo\x18\x1f \x01(\x03\x12 \n\x08userAttr\x18 \x01(\x0b\x32\x0e.User.UserAttr\x12\x1e\n\x07ownRoom\x18! \x01(\x0b\x32\r.User.OwnRoom\x12\x10\n\x08payScore\x18\" \x01(\x03\x12\x13\n\x0bticketCount\x18# \x01(\x03\x12$\n\nanchorInfo\x18$ \x01(\x0b\x32\x10.User.AnchorInfo\x12\x14\n\x0clinkMicStats\x18% \x01(\x05\x12\x11\n\tdisplayId\x18& \x01(\t\x1a\n\n\x08UserAttr\x1a\t\n\x07OwnRoom\x1a\x0c\n\nAnchorInfo\x1ay\n\nFollowInfo\x12\x16\n\x0e\x66ollowingCount\x18\x01 \x01(\x03\x12\x15\n\rfollowerCount\x18\x02 \x01(\x03\x12\x14\n\x0c\x66ollowStatus\x18\x03 \x01(\x03\x12\x12\n\npushStatus\x18\x04 \x01(\x03\x12\x12\n\nremarkName\x18\x05 \x01(\t\x1a\xfd\x03\n\x08\x46\x61nsClub\x12)\n\x04\x64\x61ta\x18\x01 \x01(\x0b\x32\x1b.User.FansClub.FansClubData\x12\x32\n\npreferData\x18\x02 \x03(\x0b\x32\x1e.User.FansClub.PreferDataEntry\x1aN\n\x0fPreferDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x1b.User.FansClub.FansClubData:\x02\x38\x01\x1a\xc1\x02\n\x0c\x46\x61nsClubData\x12\x10\n\x08\x63lubName\x18\x01 \x01(\t\x12\r\n\x05level\x18\x02 \x01(\x05\x12\x1a\n\x12userFansClubStatus\x18\x03 \x01(\x05\x12\x34\n\x05\x62\x61\x64ge\x18\x04 \x01(\x0b\x32%.User.FansClub.FansClubData.UserBadge\x12\x18\n\x10\x61vailableGiftIds\x18\x05 \x03(\x03\x12\x10\n\x08\x61nchorId\x18\x06 \x01(\x03\x1a\x91\x01\n\tUserBadge\x12?\n\x05icons\x18\x01 \x03(\x0b\x32\x30.User.FansClub.FansClubData.UserBadge.IconsEntry\x12\r\n\x05title\x18\x02 \x01(\t\x1a\x34\n\nIconsEntry\x12\x0b\n\x03key\x18\x01 \x01(\x05\x12\x15\n\x05value\x18\x02 \x01(\x0b\x32\x06.Image:\x02\x38\x01\x1a\x08\n\x06\x42order\x1a\xc7\x01\n\rGradeBuffInfo\x12\x11\n\tbuffLevel\x18\x01 \x01(\x03\x12\x0e\n\x06status\x18\x02 \x01(\x05\x12\x0f\n\x07\x65ndTime\x18\x03 \x01(\x03\x12\x35\n\tstatsInfo\x18\x04 \x03(\x0b\x32\".User.GradeBuffInfo.StatsInfoEntry\x12\x19\n\tbuffBadge\x18\x05 \x01(\x0b\x32\x06.Image\x1a\x30\n\x0eStatsInfoEntry\x12\x0b\n\x03key\x18\x01 \x01(\x03\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a\xec\x06\n\x08PayGrade\x12\x19\n\x11totalDiamondCount\x18\x01 \x01(\x03\x12\x1b\n\x0b\x64iamondIcon\x18\x02 \x01(\x0b\x32\x06.Image\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x14\n\x04icon\x18\x04 \x01(\x0b\x32\x06.Image\x12\x10\n\x08nextName\x18\x05 \x01(\t\x12\r\n\x05level\x18\x06 \x01(\x03\x12\x18\n\x08nextIcon\x18\x07 \x01(\x0b\x32\x06.Image\x12\x13\n\x0bnextDiamond\x18\x08 \x01(\x03\x12\x12\n\nnowDiamond\x18\t \x01(\x03\x12\x1b\n\x13thisGradeMinDiamond\x18\n \x01(\x03\x12\x1b\n\x13thisGradeMaxDiamond\x18\x0b \x01(\x03\x12\x15\n\rpayDiamondBak\x18\x0c \x01(\x03\x12\x15\n\rgradeDescribe\x18\r \x01(\t\x12/\n\rgradeIconList\x18\x0e \x03(\x0b\x32\x18.User.PayGrade.GradeIcon\x12\x16\n\x0escreenChatType\x18\x0f \x01(\x03\x12\x16\n\x06imIcon\x18\x10 \x01(\x0b\x32\x06.Image\x12\x1f\n\x0fimIconWithLevel\x18\x11 \x01(\x0b\x32\x06.Image\x12\x18\n\x08liveIcon\x18\x12 \x01(\x0b\x32\x06.Image\x12\"\n\x12newImIconWithLevel\x18\x13 \x01(\x0b\x32\x06.Image\x12\x1b\n\x0bnewLiveIcon\x18\x14 \x01(\x0b\x32\x06.Image\x12\x1a\n\x12upgradeNeedConsume\x18\x15 \x01(\x03\x12\x16\n\x0enextPrivileges\x18\x16 \x01(\t\x12\x1a\n\nbackground\x18\x17 \x01(\x0b\x32\x06.Image\x12\x1e\n\x0e\x62\x61\x63kgroundBack\x18\x18 \x01(\x0b\x32\x06.Image\x12\r\n\x05score\x18\x19 \x01(\x03\x12%\n\x08\x62uffInfo\x18\x1a \x01(\x0b\x32\x13.User.GradeBuffInfo\x12\x14\n\x0bgradeBanner\x18\xe9\x07 \x01(\t\x12 \n\x0fprofileDialogBg\x18\xea\x07 \x01(\x0b\x32\x06.Image\x12$\n\x13profileDialogBgBack\x18\xeb\x07 \x01(\x0b\x32\x06.Image\x1aW\n\tGradeIcon\x12\x14\n\x04icon\x18\x01 \x01(\x0b\x32\x06.Image\x12\x13\n\x0biconDiamond\x18\x02 \x01(\x03\x12\r\n\x05level\x18\x03 \x01(\x03\x12\x10\n\x08levelStr\x18\x04 \x01(\t\"\xa5\x01\n\nTextFormat\x12\r\n\x05\x63olor\x18\x01 \x01(\t\x12\x0c\n\x04\x62old\x18\x02 \x01(\x08\x12\x0e\n\x06italic\x18\x03 \x01(\x08\x12\x0e\n\x06weight\x18\x04 \x01(\x05\x12\x13\n\x0bitalicAngle\x18\x05 \x01(\x05\x12\x10\n\x08\x66ontSize\x18\x06 \x01(\x05\x12\x1c\n\x14userHeightLightColor\x18\x07 \x01(\x08\x12\x15\n\ruseRemoteClor\x18\x08 \x01(\x08\"n\n\tTextPiece\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\x1b\n\x06\x66ormat\x18\x02 \x01(\x0b\x32\x0b.TextFormat\x12\x13\n\x0bstringValue\x18\x0b \x01(\t\x12!\n\tuserValue\x18\x15 \x01(\x0b\x32\x0e.TextPieceUser\"\x86\x02\n\x05Image\x12\x0f\n\x07urlList\x18\x01 \x03(\t\x12\x0b\n\x03uri\x18\x02 \x01(\t\x12\x0e\n\x06height\x18\x03 \x01(\x03\x12\r\n\x05width\x18\x04 \x01(\x03\x12\x10\n\x08\x61vgColor\x18\x05 \x01(\t\x12\x11\n\timageType\x18\x06 \x01(\x05\x12\x12\n\nopenWebUrl\x18\x07 \x01(\t\x12\x1f\n\x07\x63ontent\x18\x08 \x01(\x0b\x32\x0e.Image.Content\x12\x12\n\nisAnimated\x18\t \x01(\x08\x1aR\n\x07\x43ontent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\tfontColor\x18\x02 \x01(\t\x12\r\n\x05level\x18\x03 \x01(\x03\x12\x17\n\x0f\x61lternativeText\x18\x04 \x01(\t\"7\n\rTextPieceUser\x12\x13\n\x04user\x18\x01 \x01(\x0b\x32\x05.User\x12\x11\n\twithColon\x18\x02 \x01(\x08\"g\n\x10PublicAreaCommon\x12\x19\n\tuserLabel\x18\x01 \x01(\x0b\x32\x06.Image\x12\x19\n\x11userConsumeInRoom\x18\x02 \x01(\x03\x12\x1d\n\x15userSendGiftCntInRoom\x18\x03 \x01(\x03\"Q\n\x0eGiftIMPriority\x12\x12\n\nqueueSizes\x18\x01 \x03(\x03\x12\x19\n\x11selfQueuePriority\x18\x02 \x01(\x03\x12\x10\n\x08priority\x18\x03 \x01(\x03\"\xb9\x01\n\x0cGiftTrayInfo\x12\x1e\n\x0ftrayDisplayText\x18\x01 \x01(\x0b\x32\x05.Text\x12\x1b\n\x0btrayBaseImg\x18\x02 \x01(\x0b\x32\x06.Image\x12\x1b\n\x0btrayHeadImg\x18\x03 \x01(\x0b\x32\x06.Image\x12\x1c\n\x0ctrayRightImg\x18\x04 \x01(\x0b\x32\x06.Image\x12\x11\n\ttrayLevel\x18\x05 \x01(\x03\x12\x1e\n\x0etrayDynamicImg\x18\x06 \x01(\x0b\x32\x06.Image\"\x84\x0c\n\nGiftStruct\x12\x15\n\x05image\x18\x01 \x01(\x0b\x32\x06.Image\x12\x10\n\x08\x64\x65scribe\x18\x02 \x01(\t\x12\x0e\n\x06notify\x18\x03 \x01(\x08\x12\x10\n\x08\x64uration\x18\x04 \x01(\x03\x12\n\n\x02id\x18\x05 \x01(\x03\x12\x38\n\x0c\x66\x61nsclubInfo\x18\x06 \x01(\x0b\x32\".GiftStruct.GiftStructFansClubInfo\x12\x12\n\nforLinkmic\x18\x07 \x01(\x08\x12\x0e\n\x06\x64oodle\x18\x08 \x01(\x08\x12\x13\n\x0b\x66orFansclub\x18\t \x01(\x08\x12\r\n\x05\x63ombo\x18\n \x01(\x08\x12\x0c\n\x04type\x18\x0b \x01(\x05\x12\x14\n\x0c\x64iamondCount\x18\x0c \x01(\x05\x12\x1a\n\x12isDisplayedOnPanel\x18\r \x01(\x05\x12\x17\n\x0fprimaryEffectId\x18\x0e \x01(\x03\x12\x1d\n\rgiftLabelIcon\x18\x0f \x01(\x0b\x32\x06.Image\x12\x0c\n\x04name\x18\x10 \x01(\t\x12\x0e\n\x06region\x18\x11 \x01(\t\x12\x0e\n\x06manual\x18\x12 \x01(\t\x12\x11\n\tforCustom\x18\x13 \x01(\x08\x12\x37\n\x0especialEffects\x18\x14 \x03(\x0b\x32\x1f.GiftStruct.SpecialEffectsEntry\x12\x14\n\x04icon\x18\x15 \x01(\x0b\x32\x06.Image\x12\x12\n\nactionType\x18\x16 \x01(\x05\x12\x17\n\x0fwatermelonSeeds\x18\x17 \x01(\x05\x12\x12\n\ngoldEffect\x18\x18 \x01(\t\x12!\n\x04subs\x18\x19 \x03(\x0b\x32\x13.LuckyMoneyGiftMeta\x12\x13\n\x0bgoldenBeans\x18\x1a \x01(\x03\x12\x12\n\nhonorLevel\x18\x1b \x01(\x03\x12\x10\n\x08itemType\x18\x1c \x01(\x05\x12\x11\n\tschemeUrl\x18\x1d \x01(\t\x12*\n\rgiftOperation\x18\x1e \x01(\x0b\x32\x13.GiftPanelOperation\x12\x11\n\teventName\x18\x1f \x01(\t\x12\x12\n\nnobleLevel\x18 \x01(\x03\x12\x10\n\x08guideUrl\x18! \x01(\t\x12\x16\n\x0epunishMedicine\x18\" \x01(\x08\x12\x11\n\tforPortal\x18# \x01(\x08\x12\x14\n\x0c\x62usinessText\x18$ \x01(\t\x12\x0f\n\x07\x63nyGift\x18% \x01(\x08\x12\r\n\x05\x61ppId\x18& \x01(\x03\x12\x10\n\x08vipLevel\x18\' \x01(\x03\x12\x0e\n\x06isGray\x18( \x01(\x08\x12\x15\n\rgraySchemeUrl\x18) \x01(\t\x12\x11\n\tgiftScene\x18* \x01(\x03\x12\x1f\n\ngiftBanner\x18+ \x01(\x0b\x32\x0b.GiftBanner\x12\x14\n\x0ctriggerWords\x18, \x03(\t\x12$\n\rgiftBuffInfos\x18- \x03(\x0b\x32\r.GiftBuffInfo\x12\x18\n\x10\x66orFirstRecharge\x18. \x01(\x08\x12%\n\x15\x64ynamicImgForSelected\x18/ \x01(\x0b\x32\x06.Image\x12\x17\n\x0f\x61\x66terSendAction\x18\x30 \x01(\x05\x12\x17\n\x0fgiftOfflineTime\x18\x31 \x01(\x03\x12\x12\n\ntopBarText\x18\x32 \x01(\t\x12\x1e\n\x0etopRightAvatar\x18\x33 \x01(\x0b\x32\x06.Image\x12\x17\n\x0f\x62\x61nnerSchemeUrl\x18\x34 \x01(\t\x12\x10\n\x08isLocked\x18\x35 \x01(\x08\x12\x14\n\x0creqExtraType\x18\x36 \x01(\x03\x12\x10\n\x08\x61ssetIds\x18\x37 \x03(\x03\x12)\n\x0fgiftPreviewInfo\x18\x38 \x01(\x0b\x32\x10.GiftPreviewInfo\x12\x19\n\x07giftTip\x18\x39 \x01(\x0b\x32\x08.GiftTip\x12\x1b\n\x13needSweepLightCount\x18: \x01(\x05\x12!\n\tgroupInfo\x18; \x03(\x0b\x32\x0e.GiftGroupInfo\x1a\x35\n\x13SpecialEffectsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x03:\x02\x38\x01\x1a=\n\x16GiftStructFansClubInfo\x12\x10\n\x08minLevel\x18\x01 \x01(\x05\x12\x11\n\tinsertPos\x18\x02 \x01(\x05\"\x14\n\x12\x41ssetEffectMixInfo\"\x14\n\x12LuckyMoneyGiftMeta\"\x14\n\x12GiftPanelOperation\"\x0c\n\nGiftBanner\"\x0e\n\x0cGiftBuffInfo\"\x11\n\x0fGiftPreviewInfo\"\t\n\x07GiftTip\"\x0f\n\rGiftGroupInfo\"\x14\n\x12\x45\x66\x66\x65\x63tMixImageInfob\x06proto3') ) @@ -31,29 +31,28 @@ _RESPONSE_ROUTEPARAMSENTRY = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='Response.RouteParamsEntry.key', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='Response.RouteParamsEntry.value', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - serialized_options=b'8\001', + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], @@ -69,7 +68,6 @@ _RESPONSE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='messages', full_name='Response.messages', index=0, @@ -77,70 +75,70 @@ _RESPONSE = _descriptor.Descriptor( has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cursor', full_name='Response.cursor', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fetchInterval', full_name='Response.fetchInterval', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='now', full_name='Response.now', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='internalExt', full_name='Response.internalExt', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fetchType', full_name='Response.fetchType', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='routeParams', full_name='Response.routeParams', index=6, number=7, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='heartbeatDuration', full_name='Response.heartbeatDuration', index=7, number=8, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='needAck', full_name='Response.needAck', index=8, number=9, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='pushServer', full_name='Response.pushServer', index=9, number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -164,43 +162,42 @@ _MESSAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='method', full_name='Message.method', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='payload', full_name='Message.payload', index=1, number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", + has_default_value=False, default_value=_b(""), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='msgId', full_name='Message.msgId', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='msgType', full_name='Message.msgType', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='offset', full_name='Message.offset', index=4, number=5, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -224,7 +221,6 @@ _ROOMUSERSEQMESSAGE_CONTRIBUTOR = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='score', full_name='RoomUserSeqMessage.Contributor.score', index=0, @@ -232,49 +228,49 @@ _ROOMUSERSEQMESSAGE_CONTRIBUTOR = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user', full_name='RoomUserSeqMessage.Contributor.user', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='rank', full_name='RoomUserSeqMessage.Contributor.rank', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='delta', full_name='RoomUserSeqMessage.Contributor.delta', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='isHidden', full_name='RoomUserSeqMessage.Contributor.isHidden', index=4, number=5, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='scoreDescription', full_name='RoomUserSeqMessage.Contributor.scoreDescription', index=5, number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='exactlyScore', full_name='RoomUserSeqMessage.Contributor.exactlyScore', index=6, number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -297,7 +293,6 @@ _ROOMUSERSEQMESSAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='common', full_name='RoomUserSeqMessage.common', index=0, @@ -305,77 +300,77 @@ _ROOMUSERSEQMESSAGE = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='ranks', full_name='RoomUserSeqMessage.ranks', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='total', full_name='RoomUserSeqMessage.total', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='popStr', full_name='RoomUserSeqMessage.popStr', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='seats', full_name='RoomUserSeqMessage.seats', index=4, number=5, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='popularity', full_name='RoomUserSeqMessage.popularity', index=5, number=6, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='totalUser', full_name='RoomUserSeqMessage.totalUser', index=6, number=7, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='totalUserStr', full_name='RoomUserSeqMessage.totalUserStr', index=7, number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='totalStr', full_name='RoomUserSeqMessage.totalStr', index=8, number=9, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='onlineUserForAnchor', full_name='RoomUserSeqMessage.onlineUserForAnchor', index=9, number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='totalPvForAnchor', full_name='RoomUserSeqMessage.totalPvForAnchor', index=10, number=11, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -399,7 +394,6 @@ _GIFTMESSAGE_TEXTEFFECT_DETAIL = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='text', full_name='GiftMessage.TextEffect.Detail.text', index=0, @@ -407,105 +401,105 @@ _GIFTMESSAGE_TEXTEFFECT_DETAIL = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='textFontSize', full_name='GiftMessage.TextEffect.Detail.textFontSize', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='background', full_name='GiftMessage.TextEffect.Detail.background', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='start', full_name='GiftMessage.TextEffect.Detail.start', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='duration', full_name='GiftMessage.TextEffect.Detail.duration', index=4, number=5, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='x', full_name='GiftMessage.TextEffect.Detail.x', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='y', full_name='GiftMessage.TextEffect.Detail.y', index=6, number=7, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='width', full_name='GiftMessage.TextEffect.Detail.width', index=7, number=8, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='height', full_name='GiftMessage.TextEffect.Detail.height', index=8, number=9, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shadowDx', full_name='GiftMessage.TextEffect.Detail.shadowDx', index=9, number=10, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shadowDy', full_name='GiftMessage.TextEffect.Detail.shadowDy', index=10, number=11, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shadowRadius', full_name='GiftMessage.TextEffect.Detail.shadowRadius', index=11, number=12, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shadowColor', full_name='GiftMessage.TextEffect.Detail.shadowColor', index=12, number=13, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='strokeColor', full_name='GiftMessage.TextEffect.Detail.strokeColor', index=13, number=14, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='strokeWidth', full_name='GiftMessage.TextEffect.Detail.strokeWidth', index=14, number=15, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -528,7 +522,6 @@ _GIFTMESSAGE_TEXTEFFECT = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='portrait', full_name='GiftMessage.TextEffect.portrait', index=0, @@ -536,14 +529,14 @@ _GIFTMESSAGE_TEXTEFFECT = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='landscape', full_name='GiftMessage.TextEffect.landscape', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -566,7 +559,6 @@ _GIFTMESSAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='common', full_name='GiftMessage.common', index=0, @@ -574,154 +566,154 @@ _GIFTMESSAGE = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftId', full_name='GiftMessage.giftId', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fanTicketCount', full_name='GiftMessage.fanTicketCount', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='groupCount', full_name='GiftMessage.groupCount', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='repeatCount', full_name='GiftMessage.repeatCount', index=4, number=5, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='comboCount', full_name='GiftMessage.comboCount', index=5, number=6, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user', full_name='GiftMessage.user', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='toUser', full_name='GiftMessage.toUser', index=7, number=8, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='repeatEnd', full_name='GiftMessage.repeatEnd', index=8, number=9, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='textEffect', full_name='GiftMessage.textEffect', index=9, number=10, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='groupId', full_name='GiftMessage.groupId', index=10, number=11, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='incomeTaskgifts', full_name='GiftMessage.incomeTaskgifts', index=11, number=12, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='roomFanTicketCount', full_name='GiftMessage.roomFanTicketCount', index=12, number=13, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='priority', full_name='GiftMessage.priority', index=13, number=14, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='gift', full_name='GiftMessage.gift', index=14, number=15, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='logId', full_name='GiftMessage.logId', index=15, number=16, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='sendType', full_name='GiftMessage.sendType', index=16, number=17, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='publicAreaCommon', full_name='GiftMessage.publicAreaCommon', index=17, number=18, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='trayDisplayText', full_name='GiftMessage.trayDisplayText', index=18, number=19, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='bannedDisplayEffects', full_name='GiftMessage.bannedDisplayEffects', index=19, number=20, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='trayInfo', full_name='GiftMessage.trayInfo', index=20, number=21, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='assetEffectMixInfo', full_name='GiftMessage.assetEffectMixInfo', index=21, number=24, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -745,7 +737,6 @@ _LIKEMESSAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='common', full_name='LikeMessage.common', index=0, @@ -753,42 +744,42 @@ _LIKEMESSAGE = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='count', full_name='LikeMessage.count', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='total', full_name='LikeMessage.total', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='color', full_name='LikeMessage.color', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user', full_name='LikeMessage.user', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='icon', full_name='LikeMessage.icon', index=5, number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -812,7 +803,6 @@ _CHATMESSAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='common', full_name='ChatMessage.common', index=0, @@ -820,63 +810,63 @@ _CHATMESSAGE = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user', full_name='ChatMessage.user', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='content', full_name='ChatMessage.content', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='visibleToSender', full_name='ChatMessage.visibleToSender', index=3, number=4, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='backgroundImage', full_name='ChatMessage.backgroundImage', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fullScreenTextColor', full_name='ChatMessage.fullScreenTextColor', index=5, number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='backgroundImageV2', full_name='ChatMessage.backgroundImageV2', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='publicAreaCommon', full_name='ChatMessage.publicAreaCommon', index=7, number=9, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftImage', full_name='ChatMessage.giftImage', index=8, number=10, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -900,7 +890,6 @@ _SOCIALMESSAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='common', full_name='SocialMessage.common', index=0, @@ -908,49 +897,49 @@ _SOCIALMESSAGE = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user', full_name='SocialMessage.user', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shareType', full_name='SocialMessage.shareType', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='action', full_name='SocialMessage.action', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shareTarget', full_name='SocialMessage.shareTarget', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='followCount', full_name='SocialMessage.followCount', index=5, number=6, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='publicAreaCommon', full_name='SocialMessage.publicAreaCommon', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -974,7 +963,6 @@ _MEMBERMESSAGE_EFFECTCONFIG = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='type', full_name='MemberMessage.EffectConfig.type', index=0, @@ -982,98 +970,98 @@ _MEMBERMESSAGE_EFFECTCONFIG = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='icon', full_name='MemberMessage.EffectConfig.icon', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='avatarPos', full_name='MemberMessage.EffectConfig.avatarPos', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='text', full_name='MemberMessage.EffectConfig.text', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='textIcon', full_name='MemberMessage.EffectConfig.textIcon', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='stayTime', full_name='MemberMessage.EffectConfig.stayTime', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='animAssetId', full_name='MemberMessage.EffectConfig.animAssetId', index=6, number=7, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='badge', full_name='MemberMessage.EffectConfig.badge', index=7, number=8, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='flexSettingArray', full_name='MemberMessage.EffectConfig.flexSettingArray', index=8, number=9, type=3, cpp_type=2, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='textIconOverlay', full_name='MemberMessage.EffectConfig.textIconOverlay', index=9, number=10, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='animatedBadge', full_name='MemberMessage.EffectConfig.animatedBadge', index=10, number=11, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='hasSweepLight', full_name='MemberMessage.EffectConfig.hasSweepLight', index=11, number=12, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='textFlexSettingArray', full_name='MemberMessage.EffectConfig.textFlexSettingArray', index=12, number=13, type=3, cpp_type=2, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='centerAnimAssetId', full_name='MemberMessage.EffectConfig.centerAnimAssetId', index=13, number=14, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1096,7 +1084,6 @@ _MEMBERMESSAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='common', full_name='MemberMessage.common', index=0, @@ -1104,133 +1091,133 @@ _MEMBERMESSAGE = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='user', full_name='MemberMessage.user', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='memberCount', full_name='MemberMessage.memberCount', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='operator', full_name='MemberMessage.operator', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='isSetToAdmin', full_name='MemberMessage.isSetToAdmin', index=4, number=5, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='isTopUser', full_name='MemberMessage.isTopUser', index=5, number=6, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='rankScore', full_name='MemberMessage.rankScore', index=6, number=7, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='topUserNo', full_name='MemberMessage.topUserNo', index=7, number=8, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='enterType', full_name='MemberMessage.enterType', index=8, number=9, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='action', full_name='MemberMessage.action', index=9, number=10, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='actionDescription', full_name='MemberMessage.actionDescription', index=10, number=11, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userId', full_name='MemberMessage.userId', index=11, number=12, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='effectConfig', full_name='MemberMessage.effectConfig', index=12, number=13, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='popStr', full_name='MemberMessage.popStr', index=13, number=14, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='enterEffectConfig', full_name='MemberMessage.enterEffectConfig', index=14, number=15, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='backgroundImage', full_name='MemberMessage.backgroundImage', index=15, number=16, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='backgroundImageV2', full_name='MemberMessage.backgroundImageV2', index=16, number=17, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='anchorDisplayText', full_name='MemberMessage.anchorDisplayText', index=17, number=18, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='publicAreaCommon', full_name='MemberMessage.publicAreaCommon', index=18, number=19, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1248,140 +1235,27 @@ _MEMBERMESSAGE = _descriptor.Descriptor( ) -_COMMON = _descriptor.Descriptor( - name='Common', - full_name='Common', +_CONTROLMESSAGE = _descriptor.Descriptor( + name='ControlMessage', + full_name='ControlMessage', filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( - name='method', full_name='Common.method', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='msgId', full_name='Common.msgId', index=1, - number=2, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='roomId', full_name='Common.roomId', index=2, - number=3, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='createTime', full_name='Common.createTime', index=3, - number=4, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='monitor', full_name='Common.monitor', index=4, - number=5, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='isShowMsg', full_name='Common.isShowMsg', index=5, - number=6, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='describe', full_name='Common.describe', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='displayText', full_name='Common.displayText', index=7, - number=8, type=11, cpp_type=10, label=1, + name='common', full_name='ControlMessage.common', index=0, + number=1, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( - name='foldType', full_name='Common.foldType', index=8, - number=9, type=3, cpp_type=2, label=1, + name='status', full_name='ControlMessage.status', index=1, + number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='anchorFoldType', full_name='Common.anchorFoldType', index=9, - number=10, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='priorityScore', full_name='Common.priorityScore', index=10, - number=11, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='logId', full_name='Common.logId', index=11, - number=12, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='msgProcessFilterK', full_name='Common.msgProcessFilterK', index=12, - number=13, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='msgProcessFilterV', full_name='Common.msgProcessFilterV', index=13, - number=14, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='user', full_name='Common.user', index=14, - number=15, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='room', full_name='Common.room', index=15, - number=16, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='anchorFoldTypeV2', full_name='Common.anchorFoldTypeV2', index=16, - number=17, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='processAtSeiTimeMs', full_name='Common.processAtSeiTimeMs', index=17, - number=18, type=3, cpp_type=2, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1394,8 +1268,158 @@ _COMMON = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3340, - serialized_end=3727, + serialized_start=3339, + serialized_end=3396, +) + + +_COMMON = _descriptor.Descriptor( + name='Common', + full_name='Common', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='method', full_name='Common.method', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='msgId', full_name='Common.msgId', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='roomId', full_name='Common.roomId', index=2, + number=3, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='createTime', full_name='Common.createTime', index=3, + number=4, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='monitor', full_name='Common.monitor', index=4, + number=5, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='isShowMsg', full_name='Common.isShowMsg', index=5, + number=6, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='describe', full_name='Common.describe', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='displayText', full_name='Common.displayText', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='foldType', full_name='Common.foldType', index=8, + number=9, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='anchorFoldType', full_name='Common.anchorFoldType', index=9, + number=10, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='priorityScore', full_name='Common.priorityScore', index=10, + number=11, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='logId', full_name='Common.logId', index=11, + number=12, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='msgProcessFilterK', full_name='Common.msgProcessFilterK', index=12, + number=13, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='msgProcessFilterV', full_name='Common.msgProcessFilterV', index=13, + number=14, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='user', full_name='Common.user', index=14, + number=15, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='room', full_name='Common.room', index=15, + number=16, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='anchorFoldTypeV2', full_name='Common.anchorFoldTypeV2', index=16, + number=17, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='processAtSeiTimeMs', full_name='Common.processAtSeiTimeMs', index=17, + number=18, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3399, + serialized_end=3786, ) @@ -1405,36 +1429,35 @@ _TEXT = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='Text.key', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='defaultPattern', full_name='Text.defaultPattern', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='defaultFormat', full_name='Text.defaultFormat', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='pieces', full_name='Text.pieces', index=3, number=4, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1447,8 +1470,8 @@ _TEXT = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3729, - serialized_end=3836, + serialized_start=3788, + serialized_end=3895, ) @@ -1458,7 +1481,6 @@ _ROOM_DYNAMICCOVERDICTENTRY = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='Room.DynamicCoverDictEntry.key', index=0, @@ -1466,28 +1488,28 @@ _ROOM_DYNAMICCOVERDICTENTRY = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='Room.DynamicCoverDictEntry.value', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - serialized_options=b'8\001', + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], - serialized_start=4954, - serialized_end=5009, + serialized_start=5013, + serialized_end=5068, ) _ROOM = _descriptor.Descriptor( @@ -1496,7 +1518,6 @@ _ROOM = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='id', full_name='Room.id', index=0, @@ -1504,329 +1525,329 @@ _ROOM = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='idStr', full_name='Room.idStr', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='status', full_name='Room.status', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='ownerUserId', full_name='Room.ownerUserId', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='title', full_name='Room.title', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userCount', full_name='Room.userCount', index=5, number=6, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='createTime', full_name='Room.createTime', index=6, number=7, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='linkmicLayout', full_name='Room.linkmicLayout', index=7, number=8, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='finishTime', full_name='Room.finishTime', index=8, number=9, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='extra', full_name='Room.extra', index=9, number=10, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='dynamicCoverUri', full_name='Room.dynamicCoverUri', index=10, number=11, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='dynamicCoverDict', full_name='Room.dynamicCoverDict', index=11, number=12, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='lastPingTime', full_name='Room.lastPingTime', index=12, number=13, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='liveId', full_name='Room.liveId', index=13, number=14, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='streamProvider', full_name='Room.streamProvider', index=14, number=15, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='osType', full_name='Room.osType', index=15, number=16, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='clientVersion', full_name='Room.clientVersion', index=16, number=17, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='withLinkmic', full_name='Room.withLinkmic', index=17, number=18, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='enableRoomPerspective', full_name='Room.enableRoomPerspective', index=18, number=19, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cover', full_name='Room.cover', index=19, number=20, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='dynamicCover', full_name='Room.dynamicCover', index=20, number=21, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='dynamicCoverLow', full_name='Room.dynamicCoverLow', index=21, number=22, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shareUrl', full_name='Room.shareUrl', index=22, number=23, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='anchorShareText', full_name='Room.anchorShareText', index=23, number=24, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userShareText', full_name='Room.userShareText', index=24, number=25, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='streamId', full_name='Room.streamId', index=25, number=26, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='streamIdStr', full_name='Room.streamIdStr', index=26, number=27, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='streamUrl', full_name='Room.streamUrl', index=27, number=28, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='mosaicStatus', full_name='Room.mosaicStatus', index=28, number=29, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='mosaicTip', full_name='Room.mosaicTip', index=29, number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cellStyle', full_name='Room.cellStyle', index=30, number=31, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='linkMic', full_name='Room.linkMic', index=31, number=32, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='luckymoneyNum', full_name='Room.luckymoneyNum', index=32, number=33, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='decoList', full_name='Room.decoList', index=33, number=34, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='topFans', full_name='Room.topFans', index=34, number=35, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='stats', full_name='Room.stats', index=35, number=36, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='sunDailyIconContent', full_name='Room.sunDailyIconContent', index=36, number=37, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='distance', full_name='Room.distance', index=37, number=38, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='distanceCity', full_name='Room.distanceCity', index=38, number=39, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='location', full_name='Room.location', index=39, number=40, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='realDistance', full_name='Room.realDistance', index=40, number=41, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='feedRoomLabel', full_name='Room.feedRoomLabel', index=41, number=42, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='commonLabelList', full_name='Room.commonLabelList', index=42, number=43, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='livingRoomAttrs', full_name='Room.livingRoomAttrs', index=43, number=44, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='adminUserIds', full_name='Room.adminUserIds', index=44, number=45, type=3, cpp_type=2, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='owner', full_name='Room.owner', index=45, number=46, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='privateInfo', full_name='Room.privateInfo', index=46, number=47, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -1839,8 +1860,8 @@ _ROOM = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=3839, - serialized_end=5009, + serialized_start=3898, + serialized_end=5068, ) @@ -1850,7 +1871,6 @@ _ROOMEXTRA = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -1864,8 +1884,8 @@ _ROOMEXTRA = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5011, - serialized_end=5022, + serialized_start=5070, + serialized_end=5081, ) @@ -1875,7 +1895,6 @@ _ROOMSTATS = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -1889,8 +1908,8 @@ _ROOMSTATS = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5024, - serialized_end=5035, + serialized_start=5083, + serialized_end=5094, ) @@ -1900,7 +1919,6 @@ _ROOMUSERATTR = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -1914,8 +1932,8 @@ _ROOMUSERATTR = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5037, - serialized_end=5051, + serialized_start=5096, + serialized_end=5110, ) @@ -1925,7 +1943,6 @@ _STREAMURL = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -1939,8 +1956,8 @@ _STREAMURL = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5053, - serialized_end=5064, + serialized_start=5112, + serialized_end=5123, ) @@ -1950,7 +1967,6 @@ _LINKMIC = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -1964,8 +1980,8 @@ _LINKMIC = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5066, - serialized_end=5075, + serialized_start=5125, + serialized_end=5134, ) @@ -1975,7 +1991,6 @@ _DECORATION = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -1989,8 +2004,8 @@ _DECORATION = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5077, - serialized_end=5089, + serialized_start=5136, + serialized_end=5148, ) @@ -2000,7 +2015,6 @@ _TOPFAN = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -2014,8 +2028,8 @@ _TOPFAN = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5091, - serialized_end=5099, + serialized_start=5150, + serialized_end=5158, ) @@ -2025,7 +2039,6 @@ _USER_USERATTR = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -2039,8 +2052,8 @@ _USER_USERATTR = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6015, - serialized_end=6025, + serialized_start=6074, + serialized_end=6084, ) _USER_OWNROOM = _descriptor.Descriptor( @@ -2049,7 +2062,6 @@ _USER_OWNROOM = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -2063,8 +2075,8 @@ _USER_OWNROOM = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6027, - serialized_end=6036, + serialized_start=6086, + serialized_end=6095, ) _USER_ANCHORINFO = _descriptor.Descriptor( @@ -2073,7 +2085,6 @@ _USER_ANCHORINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -2087,8 +2098,8 @@ _USER_ANCHORINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6038, - serialized_end=6050, + serialized_start=6097, + serialized_end=6109, ) _USER_FOLLOWINFO = _descriptor.Descriptor( @@ -2097,7 +2108,6 @@ _USER_FOLLOWINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='followingCount', full_name='User.FollowInfo.followingCount', index=0, @@ -2105,35 +2115,35 @@ _USER_FOLLOWINFO = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='followerCount', full_name='User.FollowInfo.followerCount', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='followStatus', full_name='User.FollowInfo.followStatus', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='pushStatus', full_name='User.FollowInfo.pushStatus', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='remarkName', full_name='User.FollowInfo.remarkName', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2146,8 +2156,8 @@ _USER_FOLLOWINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6052, - serialized_end=6173, + serialized_start=6111, + serialized_end=6232, ) _USER_FANSCLUB_PREFERDATAENTRY = _descriptor.Descriptor( @@ -2156,7 +2166,6 @@ _USER_FANSCLUB_PREFERDATAENTRY = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='User.FansClub.PreferDataEntry.key', index=0, @@ -2164,28 +2173,28 @@ _USER_FANSCLUB_PREFERDATAENTRY = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='User.FansClub.PreferDataEntry.value', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - serialized_options=b'8\001', + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], - serialized_start=6283, - serialized_end=6361, + serialized_start=6342, + serialized_end=6420, ) _USER_FANSCLUB_FANSCLUBDATA_USERBADGE_ICONSENTRY = _descriptor.Descriptor( @@ -2194,7 +2203,6 @@ _USER_FANSCLUB_FANSCLUBDATA_USERBADGE_ICONSENTRY = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='User.FansClub.FansClubData.UserBadge.IconsEntry.key', index=0, @@ -2202,28 +2210,28 @@ _USER_FANSCLUB_FANSCLUBDATA_USERBADGE_ICONSENTRY = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='User.FansClub.FansClubData.UserBadge.IconsEntry.value', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - serialized_options=b'8\001', + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], - serialized_start=6633, - serialized_end=6685, + serialized_start=6692, + serialized_end=6744, ) _USER_FANSCLUB_FANSCLUBDATA_USERBADGE = _descriptor.Descriptor( @@ -2232,7 +2240,6 @@ _USER_FANSCLUB_FANSCLUBDATA_USERBADGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='icons', full_name='User.FansClub.FansClubData.UserBadge.icons', index=0, @@ -2240,14 +2247,14 @@ _USER_FANSCLUB_FANSCLUBDATA_USERBADGE = _descriptor.Descriptor( has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='title', full_name='User.FansClub.FansClubData.UserBadge.title', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2260,8 +2267,8 @@ _USER_FANSCLUB_FANSCLUBDATA_USERBADGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6540, - serialized_end=6685, + serialized_start=6599, + serialized_end=6744, ) _USER_FANSCLUB_FANSCLUBDATA = _descriptor.Descriptor( @@ -2270,50 +2277,49 @@ _USER_FANSCLUB_FANSCLUBDATA = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='clubName', full_name='User.FansClub.FansClubData.clubName', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='level', full_name='User.FansClub.FansClubData.level', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userFansClubStatus', full_name='User.FansClub.FansClubData.userFansClubStatus', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='badge', full_name='User.FansClub.FansClubData.badge', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='availableGiftIds', full_name='User.FansClub.FansClubData.availableGiftIds', index=4, number=5, type=3, cpp_type=2, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='anchorId', full_name='User.FansClub.FansClubData.anchorId', index=5, number=6, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2326,8 +2332,8 @@ _USER_FANSCLUB_FANSCLUBDATA = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6364, - serialized_end=6685, + serialized_start=6423, + serialized_end=6744, ) _USER_FANSCLUB = _descriptor.Descriptor( @@ -2336,7 +2342,6 @@ _USER_FANSCLUB = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='data', full_name='User.FansClub.data', index=0, @@ -2344,14 +2349,14 @@ _USER_FANSCLUB = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='preferData', full_name='User.FansClub.preferData', index=1, number=2, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2364,8 +2369,8 @@ _USER_FANSCLUB = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6176, - serialized_end=6685, + serialized_start=6235, + serialized_end=6744, ) _USER_BORDER = _descriptor.Descriptor( @@ -2374,7 +2379,6 @@ _USER_BORDER = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -2388,8 +2392,8 @@ _USER_BORDER = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6687, - serialized_end=6695, + serialized_start=6746, + serialized_end=6754, ) _USER_GRADEBUFFINFO_STATSINFOENTRY = _descriptor.Descriptor( @@ -2398,7 +2402,6 @@ _USER_GRADEBUFFINFO_STATSINFOENTRY = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='User.GradeBuffInfo.StatsInfoEntry.key', index=0, @@ -2406,28 +2409,28 @@ _USER_GRADEBUFFINFO_STATSINFOENTRY = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='User.GradeBuffInfo.StatsInfoEntry.value', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - serialized_options=b'8\001', + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], - serialized_start=6849, - serialized_end=6897, + serialized_start=6908, + serialized_end=6956, ) _USER_GRADEBUFFINFO = _descriptor.Descriptor( @@ -2436,7 +2439,6 @@ _USER_GRADEBUFFINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='buffLevel', full_name='User.GradeBuffInfo.buffLevel', index=0, @@ -2444,35 +2446,35 @@ _USER_GRADEBUFFINFO = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='status', full_name='User.GradeBuffInfo.status', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='endTime', full_name='User.GradeBuffInfo.endTime', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='statsInfo', full_name='User.GradeBuffInfo.statsInfo', index=3, number=4, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='buffBadge', full_name='User.GradeBuffInfo.buffBadge', index=4, number=5, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2485,8 +2487,8 @@ _USER_GRADEBUFFINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6698, - serialized_end=6897, + serialized_start=6757, + serialized_end=6956, ) _USER_PAYGRADE_GRADEICON = _descriptor.Descriptor( @@ -2495,7 +2497,6 @@ _USER_PAYGRADE_GRADEICON = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='icon', full_name='User.PayGrade.GradeIcon.icon', index=0, @@ -2503,28 +2504,28 @@ _USER_PAYGRADE_GRADEICON = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='iconDiamond', full_name='User.PayGrade.GradeIcon.iconDiamond', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='level', full_name='User.PayGrade.GradeIcon.level', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='levelStr', full_name='User.PayGrade.GradeIcon.levelStr', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2537,8 +2538,8 @@ _USER_PAYGRADE_GRADEICON = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=7689, - serialized_end=7776, + serialized_start=7748, + serialized_end=7835, ) _USER_PAYGRADE = _descriptor.Descriptor( @@ -2547,7 +2548,6 @@ _USER_PAYGRADE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='totalDiamondCount', full_name='User.PayGrade.totalDiamondCount', index=0, @@ -2555,203 +2555,203 @@ _USER_PAYGRADE = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='diamondIcon', full_name='User.PayGrade.diamondIcon', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='User.PayGrade.name', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='icon', full_name='User.PayGrade.icon', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='nextName', full_name='User.PayGrade.nextName', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='level', full_name='User.PayGrade.level', index=5, number=6, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='nextIcon', full_name='User.PayGrade.nextIcon', index=6, number=7, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='nextDiamond', full_name='User.PayGrade.nextDiamond', index=7, number=8, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='nowDiamond', full_name='User.PayGrade.nowDiamond', index=8, number=9, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='thisGradeMinDiamond', full_name='User.PayGrade.thisGradeMinDiamond', index=9, number=10, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='thisGradeMaxDiamond', full_name='User.PayGrade.thisGradeMaxDiamond', index=10, number=11, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='payDiamondBak', full_name='User.PayGrade.payDiamondBak', index=11, number=12, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='gradeDescribe', full_name='User.PayGrade.gradeDescribe', index=12, number=13, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='gradeIconList', full_name='User.PayGrade.gradeIconList', index=13, number=14, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='screenChatType', full_name='User.PayGrade.screenChatType', index=14, number=15, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='imIcon', full_name='User.PayGrade.imIcon', index=15, number=16, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='imIconWithLevel', full_name='User.PayGrade.imIconWithLevel', index=16, number=17, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='liveIcon', full_name='User.PayGrade.liveIcon', index=17, number=18, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='newImIconWithLevel', full_name='User.PayGrade.newImIconWithLevel', index=18, number=19, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='newLiveIcon', full_name='User.PayGrade.newLiveIcon', index=19, number=20, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='upgradeNeedConsume', full_name='User.PayGrade.upgradeNeedConsume', index=20, number=21, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='nextPrivileges', full_name='User.PayGrade.nextPrivileges', index=21, number=22, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='background', full_name='User.PayGrade.background', index=22, number=23, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='backgroundBack', full_name='User.PayGrade.backgroundBack', index=23, number=24, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='score', full_name='User.PayGrade.score', index=24, number=25, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='buffInfo', full_name='User.PayGrade.buffInfo', index=25, number=26, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='gradeBanner', full_name='User.PayGrade.gradeBanner', index=26, number=1001, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='profileDialogBg', full_name='User.PayGrade.profileDialogBg', index=27, number=1002, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='profileDialogBgBack', full_name='User.PayGrade.profileDialogBgBack', index=28, number=1003, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -2764,8 +2764,8 @@ _USER_PAYGRADE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=6900, - serialized_end=7776, + serialized_start=6959, + serialized_end=7835, ) _USER = _descriptor.Descriptor( @@ -2774,7 +2774,6 @@ _USER = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='id', full_name='User.id', index=0, @@ -2782,266 +2781,266 @@ _USER = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shortId', full_name='User.shortId', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='nickname', full_name='User.nickname', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='gender', full_name='User.gender', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='signature', full_name='User.signature', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='level', full_name='User.level', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='birthday', full_name='User.birthday', index=6, number=7, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='telephone', full_name='User.telephone', index=7, number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='avatarThumb', full_name='User.avatarThumb', index=8, number=9, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='avatarMedium', full_name='User.avatarMedium', index=9, number=10, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='avatarLarge', full_name='User.avatarLarge', index=10, number=11, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='verified', full_name='User.verified', index=11, number=12, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='experience', full_name='User.experience', index=12, number=13, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='city', full_name='User.city', index=13, number=14, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='status', full_name='User.status', index=14, number=15, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='createTime', full_name='User.createTime', index=15, number=16, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='modifyTime', full_name='User.modifyTime', index=16, number=17, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='secret', full_name='User.secret', index=17, number=18, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shareQrcodeUri', full_name='User.shareQrcodeUri', index=18, number=19, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='incomeSharePercent', full_name='User.incomeSharePercent', index=19, number=20, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='badgeImageList', full_name='User.badgeImageList', index=20, number=21, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='followInfo', full_name='User.followInfo', index=21, number=22, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='payGrade', full_name='User.payGrade', index=22, number=23, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fansClub', full_name='User.fansClub', index=23, number=24, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='border', full_name='User.border', index=24, number=25, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='specialId', full_name='User.specialId', index=25, number=26, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='avatarBorder', full_name='User.avatarBorder', index=26, number=27, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='medal', full_name='User.medal', index=27, number=28, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='realTimeIcons', full_name='User.realTimeIcons', index=28, number=29, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='newRealTimeIcons', full_name='User.newRealTimeIcons', index=29, number=30, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='topVipNo', full_name='User.topVipNo', index=30, number=31, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userAttr', full_name='User.userAttr', index=31, number=32, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='ownRoom', full_name='User.ownRoom', index=32, number=33, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='payScore', full_name='User.payScore', index=33, number=34, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='ticketCount', full_name='User.ticketCount', index=34, number=35, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='anchorInfo', full_name='User.anchorInfo', index=35, number=36, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='linkMicStats', full_name='User.linkMicStats', index=36, number=37, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='displayId', full_name='User.displayId', index=37, number=38, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3054,8 +3053,8 @@ _USER = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=5102, - serialized_end=7776, + serialized_start=5161, + serialized_end=7835, ) @@ -3065,64 +3064,63 @@ _TEXTFORMAT = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='color', full_name='TextFormat.color', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='bold', full_name='TextFormat.bold', index=1, number=2, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='italic', full_name='TextFormat.italic', index=2, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='weight', full_name='TextFormat.weight', index=3, number=4, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='italicAngle', full_name='TextFormat.italicAngle', index=4, number=5, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fontSize', full_name='TextFormat.fontSize', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userHeightLightColor', full_name='TextFormat.userHeightLightColor', index=6, number=7, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='useRemoteClor', full_name='TextFormat.useRemoteClor', index=7, number=8, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3135,8 +3133,8 @@ _TEXTFORMAT = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=7779, - serialized_end=7944, + serialized_start=7838, + serialized_end=8003, ) @@ -3146,7 +3144,6 @@ _TEXTPIECE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='type', full_name='TextPiece.type', index=0, @@ -3154,28 +3151,28 @@ _TEXTPIECE = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='format', full_name='TextPiece.format', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='stringValue', full_name='TextPiece.stringValue', index=2, number=11, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userValue', full_name='TextPiece.userValue', index=3, number=21, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3188,8 +3185,8 @@ _TEXTPIECE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=7946, - serialized_end=8056, + serialized_start=8005, + serialized_end=8115, ) @@ -3199,36 +3196,35 @@ _IMAGE_CONTENT = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='name', full_name='Image.Content.name', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fontColor', full_name='Image.Content.fontColor', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='level', full_name='Image.Content.level', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='alternativeText', full_name='Image.Content.alternativeText', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3241,8 +3237,8 @@ _IMAGE_CONTENT = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=8239, - serialized_end=8321, + serialized_start=8298, + serialized_end=8380, ) _IMAGE = _descriptor.Descriptor( @@ -3251,7 +3247,6 @@ _IMAGE = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='urlList', full_name='Image.urlList', index=0, @@ -3259,63 +3254,63 @@ _IMAGE = _descriptor.Descriptor( has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='uri', full_name='Image.uri', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='height', full_name='Image.height', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='width', full_name='Image.width', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='avgColor', full_name='Image.avgColor', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='imageType', full_name='Image.imageType', index=5, number=6, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='openWebUrl', full_name='Image.openWebUrl', index=6, number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='content', full_name='Image.content', index=7, number=8, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='isAnimated', full_name='Image.isAnimated', index=8, number=9, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3328,8 +3323,8 @@ _IMAGE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=8059, - serialized_end=8321, + serialized_start=8118, + serialized_end=8380, ) @@ -3339,7 +3334,6 @@ _TEXTPIECEUSER = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='user', full_name='TextPieceUser.user', index=0, @@ -3347,14 +3341,14 @@ _TEXTPIECEUSER = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='withColon', full_name='TextPieceUser.withColon', index=1, number=2, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3367,8 +3361,8 @@ _TEXTPIECEUSER = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=8323, - serialized_end=8378, + serialized_start=8382, + serialized_end=8437, ) @@ -3378,7 +3372,6 @@ _PUBLICAREACOMMON = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='userLabel', full_name='PublicAreaCommon.userLabel', index=0, @@ -3386,21 +3379,21 @@ _PUBLICAREACOMMON = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userConsumeInRoom', full_name='PublicAreaCommon.userConsumeInRoom', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='userSendGiftCntInRoom', full_name='PublicAreaCommon.userSendGiftCntInRoom', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3413,8 +3406,8 @@ _PUBLICAREACOMMON = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=8380, - serialized_end=8483, + serialized_start=8439, + serialized_end=8542, ) @@ -3424,7 +3417,6 @@ _GIFTIMPRIORITY = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='queueSizes', full_name='GiftIMPriority.queueSizes', index=0, @@ -3432,21 +3424,21 @@ _GIFTIMPRIORITY = _descriptor.Descriptor( has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='selfQueuePriority', full_name='GiftIMPriority.selfQueuePriority', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='priority', full_name='GiftIMPriority.priority', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3459,8 +3451,8 @@ _GIFTIMPRIORITY = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=8485, - serialized_end=8566, + serialized_start=8544, + serialized_end=8625, ) @@ -3470,7 +3462,6 @@ _GIFTTRAYINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='trayDisplayText', full_name='GiftTrayInfo.trayDisplayText', index=0, @@ -3478,42 +3469,42 @@ _GIFTTRAYINFO = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='trayBaseImg', full_name='GiftTrayInfo.trayBaseImg', index=1, number=2, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='trayHeadImg', full_name='GiftTrayInfo.trayHeadImg', index=2, number=3, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='trayRightImg', full_name='GiftTrayInfo.trayRightImg', index=3, number=4, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='trayLevel', full_name='GiftTrayInfo.trayLevel', index=4, number=5, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='trayDynamicImg', full_name='GiftTrayInfo.trayDynamicImg', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3526,8 +3517,8 @@ _GIFTTRAYINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=8569, - serialized_end=8754, + serialized_start=8628, + serialized_end=8813, ) @@ -3537,36 +3528,35 @@ _GIFTSTRUCT_SPECIALEFFECTSENTRY = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='GiftStruct.SpecialEffectsEntry.key', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='value', full_name='GiftStruct.SpecialEffectsEntry.value', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], nested_types=[], enum_types=[ ], - serialized_options=b'8\001', + serialized_options=_b('8\001'), is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], - serialized_start=10181, - serialized_end=10234, + serialized_start=10240, + serialized_end=10293, ) _GIFTSTRUCT_GIFTSTRUCTFANSCLUBINFO = _descriptor.Descriptor( @@ -3575,7 +3565,6 @@ _GIFTSTRUCT_GIFTSTRUCTFANSCLUBINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='minLevel', full_name='GiftStruct.GiftStructFansClubInfo.minLevel', index=0, @@ -3583,14 +3572,14 @@ _GIFTSTRUCT_GIFTSTRUCTFANSCLUBINFO = _descriptor.Descriptor( has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='insertPos', full_name='GiftStruct.GiftStructFansClubInfo.insertPos', index=1, number=2, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -3603,8 +3592,8 @@ _GIFTSTRUCT_GIFTSTRUCTFANSCLUBINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10236, - serialized_end=10297, + serialized_start=10295, + serialized_end=10356, ) _GIFTSTRUCT = _descriptor.Descriptor( @@ -3613,7 +3602,6 @@ _GIFTSTRUCT = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='image', full_name='GiftStruct.image', index=0, @@ -3621,413 +3609,413 @@ _GIFTSTRUCT = _descriptor.Descriptor( has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='describe', full_name='GiftStruct.describe', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='notify', full_name='GiftStruct.notify', index=2, number=3, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='duration', full_name='GiftStruct.duration', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='GiftStruct.id', index=4, number=5, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='fansclubInfo', full_name='GiftStruct.fansclubInfo', index=5, number=6, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='forLinkmic', full_name='GiftStruct.forLinkmic', index=6, number=7, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='doodle', full_name='GiftStruct.doodle', index=7, number=8, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='forFansclub', full_name='GiftStruct.forFansclub', index=8, number=9, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='combo', full_name='GiftStruct.combo', index=9, number=10, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='type', full_name='GiftStruct.type', index=10, number=11, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='diamondCount', full_name='GiftStruct.diamondCount', index=11, number=12, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='isDisplayedOnPanel', full_name='GiftStruct.isDisplayedOnPanel', index=12, number=13, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='primaryEffectId', full_name='GiftStruct.primaryEffectId', index=13, number=14, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftLabelIcon', full_name='GiftStruct.giftLabelIcon', index=14, number=15, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='GiftStruct.name', index=15, number=16, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='region', full_name='GiftStruct.region', index=16, number=17, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='manual', full_name='GiftStruct.manual', index=17, number=18, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='forCustom', full_name='GiftStruct.forCustom', index=18, number=19, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='specialEffects', full_name='GiftStruct.specialEffects', index=19, number=20, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='icon', full_name='GiftStruct.icon', index=20, number=21, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='actionType', full_name='GiftStruct.actionType', index=21, number=22, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='watermelonSeeds', full_name='GiftStruct.watermelonSeeds', index=22, number=23, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='goldEffect', full_name='GiftStruct.goldEffect', index=23, number=24, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='subs', full_name='GiftStruct.subs', index=24, number=25, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='goldenBeans', full_name='GiftStruct.goldenBeans', index=25, number=26, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='honorLevel', full_name='GiftStruct.honorLevel', index=26, number=27, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='itemType', full_name='GiftStruct.itemType', index=27, number=28, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='schemeUrl', full_name='GiftStruct.schemeUrl', index=28, number=29, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftOperation', full_name='GiftStruct.giftOperation', index=29, number=30, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='eventName', full_name='GiftStruct.eventName', index=30, number=31, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='nobleLevel', full_name='GiftStruct.nobleLevel', index=31, number=32, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='guideUrl', full_name='GiftStruct.guideUrl', index=32, number=33, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='punishMedicine', full_name='GiftStruct.punishMedicine', index=33, number=34, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='forPortal', full_name='GiftStruct.forPortal', index=34, number=35, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='businessText', full_name='GiftStruct.businessText', index=35, number=36, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cnyGift', full_name='GiftStruct.cnyGift', index=36, number=37, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='appId', full_name='GiftStruct.appId', index=37, number=38, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='vipLevel', full_name='GiftStruct.vipLevel', index=38, number=39, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='isGray', full_name='GiftStruct.isGray', index=39, number=40, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='graySchemeUrl', full_name='GiftStruct.graySchemeUrl', index=40, number=41, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftScene', full_name='GiftStruct.giftScene', index=41, number=42, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftBanner', full_name='GiftStruct.giftBanner', index=42, number=43, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='triggerWords', full_name='GiftStruct.triggerWords', index=43, number=44, type=9, cpp_type=9, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftBuffInfos', full_name='GiftStruct.giftBuffInfos', index=44, number=45, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='forFirstRecharge', full_name='GiftStruct.forFirstRecharge', index=45, number=46, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='dynamicImgForSelected', full_name='GiftStruct.dynamicImgForSelected', index=46, number=47, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='afterSendAction', full_name='GiftStruct.afterSendAction', index=47, number=48, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftOfflineTime', full_name='GiftStruct.giftOfflineTime', index=48, number=49, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='topBarText', full_name='GiftStruct.topBarText', index=49, number=50, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='topRightAvatar', full_name='GiftStruct.topRightAvatar', index=50, number=51, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='bannerSchemeUrl', full_name='GiftStruct.bannerSchemeUrl', index=51, number=52, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), + has_default_value=False, default_value=_b("").decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='isLocked', full_name='GiftStruct.isLocked', index=52, number=53, type=8, cpp_type=7, label=1, has_default_value=False, default_value=False, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='reqExtraType', full_name='GiftStruct.reqExtraType', index=53, number=54, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='assetIds', full_name='GiftStruct.assetIds', index=54, number=55, type=3, cpp_type=2, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftPreviewInfo', full_name='GiftStruct.giftPreviewInfo', index=55, number=56, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='giftTip', full_name='GiftStruct.giftTip', index=56, number=57, type=11, cpp_type=10, label=1, has_default_value=False, default_value=None, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='needSweepLightCount', full_name='GiftStruct.needSweepLightCount', index=57, number=58, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='groupInfo', full_name='GiftStruct.groupInfo', index=58, number=59, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + serialized_options=None, file=DESCRIPTOR), ], extensions=[ ], @@ -4040,8 +4028,8 @@ _GIFTSTRUCT = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=8757, - serialized_end=10297, + serialized_start=8816, + serialized_end=10356, ) @@ -4051,7 +4039,6 @@ _ASSETEFFECTMIXINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4065,8 +4052,8 @@ _ASSETEFFECTMIXINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10299, - serialized_end=10319, + serialized_start=10358, + serialized_end=10378, ) @@ -4076,7 +4063,6 @@ _LUCKYMONEYGIFTMETA = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4090,8 +4076,8 @@ _LUCKYMONEYGIFTMETA = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10321, - serialized_end=10341, + serialized_start=10380, + serialized_end=10400, ) @@ -4101,7 +4087,6 @@ _GIFTPANELOPERATION = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4115,8 +4100,8 @@ _GIFTPANELOPERATION = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10343, - serialized_end=10363, + serialized_start=10402, + serialized_end=10422, ) @@ -4126,7 +4111,6 @@ _GIFTBANNER = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4140,8 +4124,8 @@ _GIFTBANNER = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10365, - serialized_end=10377, + serialized_start=10424, + serialized_end=10436, ) @@ -4151,7 +4135,6 @@ _GIFTBUFFINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4165,8 +4148,8 @@ _GIFTBUFFINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10379, - serialized_end=10393, + serialized_start=10438, + serialized_end=10452, ) @@ -4176,7 +4159,6 @@ _GIFTPREVIEWINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4190,8 +4172,8 @@ _GIFTPREVIEWINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10395, - serialized_end=10412, + serialized_start=10454, + serialized_end=10471, ) @@ -4201,7 +4183,6 @@ _GIFTTIP = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4215,8 +4196,8 @@ _GIFTTIP = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10414, - serialized_end=10423, + serialized_start=10473, + serialized_end=10482, ) @@ -4226,7 +4207,6 @@ _GIFTGROUPINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4240,8 +4220,8 @@ _GIFTGROUPINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10425, - serialized_end=10440, + serialized_start=10484, + serialized_end=10499, ) @@ -4251,7 +4231,6 @@ _EFFECTMIXIMAGEINFO = _descriptor.Descriptor( filename=None, file=DESCRIPTOR, containing_type=None, - create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -4265,8 +4244,8 @@ _EFFECTMIXIMAGEINFO = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=10442, - serialized_end=10462, + serialized_start=10501, + serialized_end=10521, ) _RESPONSE_ROUTEPARAMSENTRY.containing_type = _RESPONSE @@ -4320,6 +4299,7 @@ _MEMBERMESSAGE.fields_by_name['backgroundImage'].message_type = _IMAGE _MEMBERMESSAGE.fields_by_name['backgroundImageV2'].message_type = _IMAGE _MEMBERMESSAGE.fields_by_name['anchorDisplayText'].message_type = _TEXT _MEMBERMESSAGE.fields_by_name['publicAreaCommon'].message_type = _PUBLICAREACOMMON +_CONTROLMESSAGE.fields_by_name['common'].message_type = _COMMON _COMMON.fields_by_name['displayText'].message_type = _TEXT _COMMON.fields_by_name['user'].message_type = _USER _COMMON.fields_by_name['room'].message_type = _ROOM @@ -4426,6 +4406,7 @@ DESCRIPTOR.message_types_by_name['LikeMessage'] = _LIKEMESSAGE DESCRIPTOR.message_types_by_name['ChatMessage'] = _CHATMESSAGE DESCRIPTOR.message_types_by_name['SocialMessage'] = _SOCIALMESSAGE DESCRIPTOR.message_types_by_name['MemberMessage'] = _MEMBERMESSAGE +DESCRIPTOR.message_types_by_name['ControlMessage'] = _CONTROLMESSAGE DESCRIPTOR.message_types_by_name['Common'] = _COMMON DESCRIPTOR.message_types_by_name['Text'] = _TEXT DESCRIPTOR.message_types_by_name['Room'] = _ROOM @@ -4456,283 +4437,290 @@ DESCRIPTOR.message_types_by_name['GiftGroupInfo'] = _GIFTGROUPINFO DESCRIPTOR.message_types_by_name['EffectMixImageInfo'] = _EFFECTMIXIMAGEINFO _sym_db.RegisterFileDescriptor(DESCRIPTOR) -Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { +Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), dict( - 'RouteParamsEntry' : _reflection.GeneratedProtocolMessageType('RouteParamsEntry', (_message.Message,), { - 'DESCRIPTOR' : _RESPONSE_ROUTEPARAMSENTRY, - '__module__' : 'message_pb2' + RouteParamsEntry = _reflection.GeneratedProtocolMessageType('RouteParamsEntry', (_message.Message,), dict( + DESCRIPTOR = _RESPONSE_ROUTEPARAMSENTRY, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Response.RouteParamsEntry) - }) + )) , - 'DESCRIPTOR' : _RESPONSE, - '__module__' : 'message_pb2' + DESCRIPTOR = _RESPONSE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Response) - }) + )) _sym_db.RegisterMessage(Response) _sym_db.RegisterMessage(Response.RouteParamsEntry) -Message = _reflection.GeneratedProtocolMessageType('Message', (_message.Message,), { - 'DESCRIPTOR' : _MESSAGE, - '__module__' : 'message_pb2' +Message = _reflection.GeneratedProtocolMessageType('Message', (_message.Message,), dict( + DESCRIPTOR = _MESSAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Message) - }) + )) _sym_db.RegisterMessage(Message) -RoomUserSeqMessage = _reflection.GeneratedProtocolMessageType('RoomUserSeqMessage', (_message.Message,), { +RoomUserSeqMessage = _reflection.GeneratedProtocolMessageType('RoomUserSeqMessage', (_message.Message,), dict( - 'Contributor' : _reflection.GeneratedProtocolMessageType('Contributor', (_message.Message,), { - 'DESCRIPTOR' : _ROOMUSERSEQMESSAGE_CONTRIBUTOR, - '__module__' : 'message_pb2' + Contributor = _reflection.GeneratedProtocolMessageType('Contributor', (_message.Message,), dict( + DESCRIPTOR = _ROOMUSERSEQMESSAGE_CONTRIBUTOR, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:RoomUserSeqMessage.Contributor) - }) + )) , - 'DESCRIPTOR' : _ROOMUSERSEQMESSAGE, - '__module__' : 'message_pb2' + DESCRIPTOR = _ROOMUSERSEQMESSAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:RoomUserSeqMessage) - }) + )) _sym_db.RegisterMessage(RoomUserSeqMessage) _sym_db.RegisterMessage(RoomUserSeqMessage.Contributor) -GiftMessage = _reflection.GeneratedProtocolMessageType('GiftMessage', (_message.Message,), { +GiftMessage = _reflection.GeneratedProtocolMessageType('GiftMessage', (_message.Message,), dict( - 'TextEffect' : _reflection.GeneratedProtocolMessageType('TextEffect', (_message.Message,), { + TextEffect = _reflection.GeneratedProtocolMessageType('TextEffect', (_message.Message,), dict( - 'Detail' : _reflection.GeneratedProtocolMessageType('Detail', (_message.Message,), { - 'DESCRIPTOR' : _GIFTMESSAGE_TEXTEFFECT_DETAIL, - '__module__' : 'message_pb2' + Detail = _reflection.GeneratedProtocolMessageType('Detail', (_message.Message,), dict( + DESCRIPTOR = _GIFTMESSAGE_TEXTEFFECT_DETAIL, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftMessage.TextEffect.Detail) - }) + )) , - 'DESCRIPTOR' : _GIFTMESSAGE_TEXTEFFECT, - '__module__' : 'message_pb2' + DESCRIPTOR = _GIFTMESSAGE_TEXTEFFECT, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftMessage.TextEffect) - }) + )) , - 'DESCRIPTOR' : _GIFTMESSAGE, - '__module__' : 'message_pb2' + DESCRIPTOR = _GIFTMESSAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftMessage) - }) + )) _sym_db.RegisterMessage(GiftMessage) _sym_db.RegisterMessage(GiftMessage.TextEffect) _sym_db.RegisterMessage(GiftMessage.TextEffect.Detail) -LikeMessage = _reflection.GeneratedProtocolMessageType('LikeMessage', (_message.Message,), { - 'DESCRIPTOR' : _LIKEMESSAGE, - '__module__' : 'message_pb2' +LikeMessage = _reflection.GeneratedProtocolMessageType('LikeMessage', (_message.Message,), dict( + DESCRIPTOR = _LIKEMESSAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:LikeMessage) - }) + )) _sym_db.RegisterMessage(LikeMessage) -ChatMessage = _reflection.GeneratedProtocolMessageType('ChatMessage', (_message.Message,), { - 'DESCRIPTOR' : _CHATMESSAGE, - '__module__' : 'message_pb2' +ChatMessage = _reflection.GeneratedProtocolMessageType('ChatMessage', (_message.Message,), dict( + DESCRIPTOR = _CHATMESSAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:ChatMessage) - }) + )) _sym_db.RegisterMessage(ChatMessage) -SocialMessage = _reflection.GeneratedProtocolMessageType('SocialMessage', (_message.Message,), { - 'DESCRIPTOR' : _SOCIALMESSAGE, - '__module__' : 'message_pb2' +SocialMessage = _reflection.GeneratedProtocolMessageType('SocialMessage', (_message.Message,), dict( + DESCRIPTOR = _SOCIALMESSAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:SocialMessage) - }) + )) _sym_db.RegisterMessage(SocialMessage) -MemberMessage = _reflection.GeneratedProtocolMessageType('MemberMessage', (_message.Message,), { +MemberMessage = _reflection.GeneratedProtocolMessageType('MemberMessage', (_message.Message,), dict( - 'EffectConfig' : _reflection.GeneratedProtocolMessageType('EffectConfig', (_message.Message,), { - 'DESCRIPTOR' : _MEMBERMESSAGE_EFFECTCONFIG, - '__module__' : 'message_pb2' + EffectConfig = _reflection.GeneratedProtocolMessageType('EffectConfig', (_message.Message,), dict( + DESCRIPTOR = _MEMBERMESSAGE_EFFECTCONFIG, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:MemberMessage.EffectConfig) - }) + )) , - 'DESCRIPTOR' : _MEMBERMESSAGE, - '__module__' : 'message_pb2' + DESCRIPTOR = _MEMBERMESSAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:MemberMessage) - }) + )) _sym_db.RegisterMessage(MemberMessage) _sym_db.RegisterMessage(MemberMessage.EffectConfig) -Common = _reflection.GeneratedProtocolMessageType('Common', (_message.Message,), { - 'DESCRIPTOR' : _COMMON, - '__module__' : 'message_pb2' +ControlMessage = _reflection.GeneratedProtocolMessageType('ControlMessage', (_message.Message,), dict( + DESCRIPTOR = _CONTROLMESSAGE, + __module__ = 'message_pb2' + # @@protoc_insertion_point(class_scope:ControlMessage) + )) +_sym_db.RegisterMessage(ControlMessage) + +Common = _reflection.GeneratedProtocolMessageType('Common', (_message.Message,), dict( + DESCRIPTOR = _COMMON, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Common) - }) + )) _sym_db.RegisterMessage(Common) -Text = _reflection.GeneratedProtocolMessageType('Text', (_message.Message,), { - 'DESCRIPTOR' : _TEXT, - '__module__' : 'message_pb2' +Text = _reflection.GeneratedProtocolMessageType('Text', (_message.Message,), dict( + DESCRIPTOR = _TEXT, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Text) - }) + )) _sym_db.RegisterMessage(Text) -Room = _reflection.GeneratedProtocolMessageType('Room', (_message.Message,), { +Room = _reflection.GeneratedProtocolMessageType('Room', (_message.Message,), dict( - 'DynamicCoverDictEntry' : _reflection.GeneratedProtocolMessageType('DynamicCoverDictEntry', (_message.Message,), { - 'DESCRIPTOR' : _ROOM_DYNAMICCOVERDICTENTRY, - '__module__' : 'message_pb2' + DynamicCoverDictEntry = _reflection.GeneratedProtocolMessageType('DynamicCoverDictEntry', (_message.Message,), dict( + DESCRIPTOR = _ROOM_DYNAMICCOVERDICTENTRY, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Room.DynamicCoverDictEntry) - }) + )) , - 'DESCRIPTOR' : _ROOM, - '__module__' : 'message_pb2' + DESCRIPTOR = _ROOM, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Room) - }) + )) _sym_db.RegisterMessage(Room) _sym_db.RegisterMessage(Room.DynamicCoverDictEntry) -RoomExtra = _reflection.GeneratedProtocolMessageType('RoomExtra', (_message.Message,), { - 'DESCRIPTOR' : _ROOMEXTRA, - '__module__' : 'message_pb2' +RoomExtra = _reflection.GeneratedProtocolMessageType('RoomExtra', (_message.Message,), dict( + DESCRIPTOR = _ROOMEXTRA, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:RoomExtra) - }) + )) _sym_db.RegisterMessage(RoomExtra) -RoomStats = _reflection.GeneratedProtocolMessageType('RoomStats', (_message.Message,), { - 'DESCRIPTOR' : _ROOMSTATS, - '__module__' : 'message_pb2' +RoomStats = _reflection.GeneratedProtocolMessageType('RoomStats', (_message.Message,), dict( + DESCRIPTOR = _ROOMSTATS, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:RoomStats) - }) + )) _sym_db.RegisterMessage(RoomStats) -RoomUserAttr = _reflection.GeneratedProtocolMessageType('RoomUserAttr', (_message.Message,), { - 'DESCRIPTOR' : _ROOMUSERATTR, - '__module__' : 'message_pb2' +RoomUserAttr = _reflection.GeneratedProtocolMessageType('RoomUserAttr', (_message.Message,), dict( + DESCRIPTOR = _ROOMUSERATTR, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:RoomUserAttr) - }) + )) _sym_db.RegisterMessage(RoomUserAttr) -StreamUrl = _reflection.GeneratedProtocolMessageType('StreamUrl', (_message.Message,), { - 'DESCRIPTOR' : _STREAMURL, - '__module__' : 'message_pb2' +StreamUrl = _reflection.GeneratedProtocolMessageType('StreamUrl', (_message.Message,), dict( + DESCRIPTOR = _STREAMURL, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:StreamUrl) - }) + )) _sym_db.RegisterMessage(StreamUrl) -LinkMic = _reflection.GeneratedProtocolMessageType('LinkMic', (_message.Message,), { - 'DESCRIPTOR' : _LINKMIC, - '__module__' : 'message_pb2' +LinkMic = _reflection.GeneratedProtocolMessageType('LinkMic', (_message.Message,), dict( + DESCRIPTOR = _LINKMIC, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:LinkMic) - }) + )) _sym_db.RegisterMessage(LinkMic) -Decoration = _reflection.GeneratedProtocolMessageType('Decoration', (_message.Message,), { - 'DESCRIPTOR' : _DECORATION, - '__module__' : 'message_pb2' +Decoration = _reflection.GeneratedProtocolMessageType('Decoration', (_message.Message,), dict( + DESCRIPTOR = _DECORATION, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Decoration) - }) + )) _sym_db.RegisterMessage(Decoration) -TopFan = _reflection.GeneratedProtocolMessageType('TopFan', (_message.Message,), { - 'DESCRIPTOR' : _TOPFAN, - '__module__' : 'message_pb2' +TopFan = _reflection.GeneratedProtocolMessageType('TopFan', (_message.Message,), dict( + DESCRIPTOR = _TOPFAN, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:TopFan) - }) + )) _sym_db.RegisterMessage(TopFan) -User = _reflection.GeneratedProtocolMessageType('User', (_message.Message,), { +User = _reflection.GeneratedProtocolMessageType('User', (_message.Message,), dict( - 'UserAttr' : _reflection.GeneratedProtocolMessageType('UserAttr', (_message.Message,), { - 'DESCRIPTOR' : _USER_USERATTR, - '__module__' : 'message_pb2' + UserAttr = _reflection.GeneratedProtocolMessageType('UserAttr', (_message.Message,), dict( + DESCRIPTOR = _USER_USERATTR, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.UserAttr) - }) + )) , - 'OwnRoom' : _reflection.GeneratedProtocolMessageType('OwnRoom', (_message.Message,), { - 'DESCRIPTOR' : _USER_OWNROOM, - '__module__' : 'message_pb2' + OwnRoom = _reflection.GeneratedProtocolMessageType('OwnRoom', (_message.Message,), dict( + DESCRIPTOR = _USER_OWNROOM, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.OwnRoom) - }) + )) , - 'AnchorInfo' : _reflection.GeneratedProtocolMessageType('AnchorInfo', (_message.Message,), { - 'DESCRIPTOR' : _USER_ANCHORINFO, - '__module__' : 'message_pb2' + AnchorInfo = _reflection.GeneratedProtocolMessageType('AnchorInfo', (_message.Message,), dict( + DESCRIPTOR = _USER_ANCHORINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.AnchorInfo) - }) + )) , - 'FollowInfo' : _reflection.GeneratedProtocolMessageType('FollowInfo', (_message.Message,), { - 'DESCRIPTOR' : _USER_FOLLOWINFO, - '__module__' : 'message_pb2' + FollowInfo = _reflection.GeneratedProtocolMessageType('FollowInfo', (_message.Message,), dict( + DESCRIPTOR = _USER_FOLLOWINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.FollowInfo) - }) + )) , - 'FansClub' : _reflection.GeneratedProtocolMessageType('FansClub', (_message.Message,), { + FansClub = _reflection.GeneratedProtocolMessageType('FansClub', (_message.Message,), dict( - 'PreferDataEntry' : _reflection.GeneratedProtocolMessageType('PreferDataEntry', (_message.Message,), { - 'DESCRIPTOR' : _USER_FANSCLUB_PREFERDATAENTRY, - '__module__' : 'message_pb2' + PreferDataEntry = _reflection.GeneratedProtocolMessageType('PreferDataEntry', (_message.Message,), dict( + DESCRIPTOR = _USER_FANSCLUB_PREFERDATAENTRY, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.FansClub.PreferDataEntry) - }) + )) , - 'FansClubData' : _reflection.GeneratedProtocolMessageType('FansClubData', (_message.Message,), { + FansClubData = _reflection.GeneratedProtocolMessageType('FansClubData', (_message.Message,), dict( - 'UserBadge' : _reflection.GeneratedProtocolMessageType('UserBadge', (_message.Message,), { + UserBadge = _reflection.GeneratedProtocolMessageType('UserBadge', (_message.Message,), dict( - 'IconsEntry' : _reflection.GeneratedProtocolMessageType('IconsEntry', (_message.Message,), { - 'DESCRIPTOR' : _USER_FANSCLUB_FANSCLUBDATA_USERBADGE_ICONSENTRY, - '__module__' : 'message_pb2' + IconsEntry = _reflection.GeneratedProtocolMessageType('IconsEntry', (_message.Message,), dict( + DESCRIPTOR = _USER_FANSCLUB_FANSCLUBDATA_USERBADGE_ICONSENTRY, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.FansClub.FansClubData.UserBadge.IconsEntry) - }) + )) , - 'DESCRIPTOR' : _USER_FANSCLUB_FANSCLUBDATA_USERBADGE, - '__module__' : 'message_pb2' + DESCRIPTOR = _USER_FANSCLUB_FANSCLUBDATA_USERBADGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.FansClub.FansClubData.UserBadge) - }) + )) , - 'DESCRIPTOR' : _USER_FANSCLUB_FANSCLUBDATA, - '__module__' : 'message_pb2' + DESCRIPTOR = _USER_FANSCLUB_FANSCLUBDATA, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.FansClub.FansClubData) - }) + )) , - 'DESCRIPTOR' : _USER_FANSCLUB, - '__module__' : 'message_pb2' + DESCRIPTOR = _USER_FANSCLUB, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.FansClub) - }) + )) , - 'Border' : _reflection.GeneratedProtocolMessageType('Border', (_message.Message,), { - 'DESCRIPTOR' : _USER_BORDER, - '__module__' : 'message_pb2' + Border = _reflection.GeneratedProtocolMessageType('Border', (_message.Message,), dict( + DESCRIPTOR = _USER_BORDER, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.Border) - }) + )) , - 'GradeBuffInfo' : _reflection.GeneratedProtocolMessageType('GradeBuffInfo', (_message.Message,), { + GradeBuffInfo = _reflection.GeneratedProtocolMessageType('GradeBuffInfo', (_message.Message,), dict( - 'StatsInfoEntry' : _reflection.GeneratedProtocolMessageType('StatsInfoEntry', (_message.Message,), { - 'DESCRIPTOR' : _USER_GRADEBUFFINFO_STATSINFOENTRY, - '__module__' : 'message_pb2' + StatsInfoEntry = _reflection.GeneratedProtocolMessageType('StatsInfoEntry', (_message.Message,), dict( + DESCRIPTOR = _USER_GRADEBUFFINFO_STATSINFOENTRY, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.GradeBuffInfo.StatsInfoEntry) - }) + )) , - 'DESCRIPTOR' : _USER_GRADEBUFFINFO, - '__module__' : 'message_pb2' + DESCRIPTOR = _USER_GRADEBUFFINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.GradeBuffInfo) - }) + )) , - 'PayGrade' : _reflection.GeneratedProtocolMessageType('PayGrade', (_message.Message,), { + PayGrade = _reflection.GeneratedProtocolMessageType('PayGrade', (_message.Message,), dict( - 'GradeIcon' : _reflection.GeneratedProtocolMessageType('GradeIcon', (_message.Message,), { - 'DESCRIPTOR' : _USER_PAYGRADE_GRADEICON, - '__module__' : 'message_pb2' + GradeIcon = _reflection.GeneratedProtocolMessageType('GradeIcon', (_message.Message,), dict( + DESCRIPTOR = _USER_PAYGRADE_GRADEICON, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.PayGrade.GradeIcon) - }) + )) , - 'DESCRIPTOR' : _USER_PAYGRADE, - '__module__' : 'message_pb2' + DESCRIPTOR = _USER_PAYGRADE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User.PayGrade) - }) + )) , - 'DESCRIPTOR' : _USER, - '__module__' : 'message_pb2' + DESCRIPTOR = _USER, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:User) - }) + )) _sym_db.RegisterMessage(User) _sym_db.RegisterMessage(User.UserAttr) _sym_db.RegisterMessage(User.OwnRoom) @@ -4749,147 +4737,147 @@ _sym_db.RegisterMessage(User.GradeBuffInfo.StatsInfoEntry) _sym_db.RegisterMessage(User.PayGrade) _sym_db.RegisterMessage(User.PayGrade.GradeIcon) -TextFormat = _reflection.GeneratedProtocolMessageType('TextFormat', (_message.Message,), { - 'DESCRIPTOR' : _TEXTFORMAT, - '__module__' : 'message_pb2' +TextFormat = _reflection.GeneratedProtocolMessageType('TextFormat', (_message.Message,), dict( + DESCRIPTOR = _TEXTFORMAT, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:TextFormat) - }) + )) _sym_db.RegisterMessage(TextFormat) -TextPiece = _reflection.GeneratedProtocolMessageType('TextPiece', (_message.Message,), { - 'DESCRIPTOR' : _TEXTPIECE, - '__module__' : 'message_pb2' +TextPiece = _reflection.GeneratedProtocolMessageType('TextPiece', (_message.Message,), dict( + DESCRIPTOR = _TEXTPIECE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:TextPiece) - }) + )) _sym_db.RegisterMessage(TextPiece) -Image = _reflection.GeneratedProtocolMessageType('Image', (_message.Message,), { +Image = _reflection.GeneratedProtocolMessageType('Image', (_message.Message,), dict( - 'Content' : _reflection.GeneratedProtocolMessageType('Content', (_message.Message,), { - 'DESCRIPTOR' : _IMAGE_CONTENT, - '__module__' : 'message_pb2' + Content = _reflection.GeneratedProtocolMessageType('Content', (_message.Message,), dict( + DESCRIPTOR = _IMAGE_CONTENT, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Image.Content) - }) + )) , - 'DESCRIPTOR' : _IMAGE, - '__module__' : 'message_pb2' + DESCRIPTOR = _IMAGE, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:Image) - }) + )) _sym_db.RegisterMessage(Image) _sym_db.RegisterMessage(Image.Content) -TextPieceUser = _reflection.GeneratedProtocolMessageType('TextPieceUser', (_message.Message,), { - 'DESCRIPTOR' : _TEXTPIECEUSER, - '__module__' : 'message_pb2' +TextPieceUser = _reflection.GeneratedProtocolMessageType('TextPieceUser', (_message.Message,), dict( + DESCRIPTOR = _TEXTPIECEUSER, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:TextPieceUser) - }) + )) _sym_db.RegisterMessage(TextPieceUser) -PublicAreaCommon = _reflection.GeneratedProtocolMessageType('PublicAreaCommon', (_message.Message,), { - 'DESCRIPTOR' : _PUBLICAREACOMMON, - '__module__' : 'message_pb2' +PublicAreaCommon = _reflection.GeneratedProtocolMessageType('PublicAreaCommon', (_message.Message,), dict( + DESCRIPTOR = _PUBLICAREACOMMON, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:PublicAreaCommon) - }) + )) _sym_db.RegisterMessage(PublicAreaCommon) -GiftIMPriority = _reflection.GeneratedProtocolMessageType('GiftIMPriority', (_message.Message,), { - 'DESCRIPTOR' : _GIFTIMPRIORITY, - '__module__' : 'message_pb2' +GiftIMPriority = _reflection.GeneratedProtocolMessageType('GiftIMPriority', (_message.Message,), dict( + DESCRIPTOR = _GIFTIMPRIORITY, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftIMPriority) - }) + )) _sym_db.RegisterMessage(GiftIMPriority) -GiftTrayInfo = _reflection.GeneratedProtocolMessageType('GiftTrayInfo', (_message.Message,), { - 'DESCRIPTOR' : _GIFTTRAYINFO, - '__module__' : 'message_pb2' +GiftTrayInfo = _reflection.GeneratedProtocolMessageType('GiftTrayInfo', (_message.Message,), dict( + DESCRIPTOR = _GIFTTRAYINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftTrayInfo) - }) + )) _sym_db.RegisterMessage(GiftTrayInfo) -GiftStruct = _reflection.GeneratedProtocolMessageType('GiftStruct', (_message.Message,), { +GiftStruct = _reflection.GeneratedProtocolMessageType('GiftStruct', (_message.Message,), dict( - 'SpecialEffectsEntry' : _reflection.GeneratedProtocolMessageType('SpecialEffectsEntry', (_message.Message,), { - 'DESCRIPTOR' : _GIFTSTRUCT_SPECIALEFFECTSENTRY, - '__module__' : 'message_pb2' + SpecialEffectsEntry = _reflection.GeneratedProtocolMessageType('SpecialEffectsEntry', (_message.Message,), dict( + DESCRIPTOR = _GIFTSTRUCT_SPECIALEFFECTSENTRY, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftStruct.SpecialEffectsEntry) - }) + )) , - 'GiftStructFansClubInfo' : _reflection.GeneratedProtocolMessageType('GiftStructFansClubInfo', (_message.Message,), { - 'DESCRIPTOR' : _GIFTSTRUCT_GIFTSTRUCTFANSCLUBINFO, - '__module__' : 'message_pb2' + GiftStructFansClubInfo = _reflection.GeneratedProtocolMessageType('GiftStructFansClubInfo', (_message.Message,), dict( + DESCRIPTOR = _GIFTSTRUCT_GIFTSTRUCTFANSCLUBINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftStruct.GiftStructFansClubInfo) - }) + )) , - 'DESCRIPTOR' : _GIFTSTRUCT, - '__module__' : 'message_pb2' + DESCRIPTOR = _GIFTSTRUCT, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftStruct) - }) + )) _sym_db.RegisterMessage(GiftStruct) _sym_db.RegisterMessage(GiftStruct.SpecialEffectsEntry) _sym_db.RegisterMessage(GiftStruct.GiftStructFansClubInfo) -AssetEffectMixInfo = _reflection.GeneratedProtocolMessageType('AssetEffectMixInfo', (_message.Message,), { - 'DESCRIPTOR' : _ASSETEFFECTMIXINFO, - '__module__' : 'message_pb2' +AssetEffectMixInfo = _reflection.GeneratedProtocolMessageType('AssetEffectMixInfo', (_message.Message,), dict( + DESCRIPTOR = _ASSETEFFECTMIXINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:AssetEffectMixInfo) - }) + )) _sym_db.RegisterMessage(AssetEffectMixInfo) -LuckyMoneyGiftMeta = _reflection.GeneratedProtocolMessageType('LuckyMoneyGiftMeta', (_message.Message,), { - 'DESCRIPTOR' : _LUCKYMONEYGIFTMETA, - '__module__' : 'message_pb2' +LuckyMoneyGiftMeta = _reflection.GeneratedProtocolMessageType('LuckyMoneyGiftMeta', (_message.Message,), dict( + DESCRIPTOR = _LUCKYMONEYGIFTMETA, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:LuckyMoneyGiftMeta) - }) + )) _sym_db.RegisterMessage(LuckyMoneyGiftMeta) -GiftPanelOperation = _reflection.GeneratedProtocolMessageType('GiftPanelOperation', (_message.Message,), { - 'DESCRIPTOR' : _GIFTPANELOPERATION, - '__module__' : 'message_pb2' +GiftPanelOperation = _reflection.GeneratedProtocolMessageType('GiftPanelOperation', (_message.Message,), dict( + DESCRIPTOR = _GIFTPANELOPERATION, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftPanelOperation) - }) + )) _sym_db.RegisterMessage(GiftPanelOperation) -GiftBanner = _reflection.GeneratedProtocolMessageType('GiftBanner', (_message.Message,), { - 'DESCRIPTOR' : _GIFTBANNER, - '__module__' : 'message_pb2' +GiftBanner = _reflection.GeneratedProtocolMessageType('GiftBanner', (_message.Message,), dict( + DESCRIPTOR = _GIFTBANNER, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftBanner) - }) + )) _sym_db.RegisterMessage(GiftBanner) -GiftBuffInfo = _reflection.GeneratedProtocolMessageType('GiftBuffInfo', (_message.Message,), { - 'DESCRIPTOR' : _GIFTBUFFINFO, - '__module__' : 'message_pb2' +GiftBuffInfo = _reflection.GeneratedProtocolMessageType('GiftBuffInfo', (_message.Message,), dict( + DESCRIPTOR = _GIFTBUFFINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftBuffInfo) - }) + )) _sym_db.RegisterMessage(GiftBuffInfo) -GiftPreviewInfo = _reflection.GeneratedProtocolMessageType('GiftPreviewInfo', (_message.Message,), { - 'DESCRIPTOR' : _GIFTPREVIEWINFO, - '__module__' : 'message_pb2' +GiftPreviewInfo = _reflection.GeneratedProtocolMessageType('GiftPreviewInfo', (_message.Message,), dict( + DESCRIPTOR = _GIFTPREVIEWINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftPreviewInfo) - }) + )) _sym_db.RegisterMessage(GiftPreviewInfo) -GiftTip = _reflection.GeneratedProtocolMessageType('GiftTip', (_message.Message,), { - 'DESCRIPTOR' : _GIFTTIP, - '__module__' : 'message_pb2' +GiftTip = _reflection.GeneratedProtocolMessageType('GiftTip', (_message.Message,), dict( + DESCRIPTOR = _GIFTTIP, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftTip) - }) + )) _sym_db.RegisterMessage(GiftTip) -GiftGroupInfo = _reflection.GeneratedProtocolMessageType('GiftGroupInfo', (_message.Message,), { - 'DESCRIPTOR' : _GIFTGROUPINFO, - '__module__' : 'message_pb2' +GiftGroupInfo = _reflection.GeneratedProtocolMessageType('GiftGroupInfo', (_message.Message,), dict( + DESCRIPTOR = _GIFTGROUPINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:GiftGroupInfo) - }) + )) _sym_db.RegisterMessage(GiftGroupInfo) -EffectMixImageInfo = _reflection.GeneratedProtocolMessageType('EffectMixImageInfo', (_message.Message,), { - 'DESCRIPTOR' : _EFFECTMIXIMAGEINFO, - '__module__' : 'message_pb2' +EffectMixImageInfo = _reflection.GeneratedProtocolMessageType('EffectMixImageInfo', (_message.Message,), dict( + DESCRIPTOR = _EFFECTMIXIMAGEINFO, + __module__ = 'message_pb2' # @@protoc_insertion_point(class_scope:EffectMixImageInfo) - }) + )) _sym_db.RegisterMessage(EffectMixImageInfo) From 4246e6e9de34dcd44e32e12e9359c5e2ed862513 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 09:34:48 +0800 Subject: [PATCH 07/36] =?UTF-8?q?control=20message=20output=E5=85=B3?= =?UTF-8?q?=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/utils.py | 1 + messages/control.py | 12 ++++++++++++ output/IOutput.py | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 messages/control.py diff --git a/handler/utils.py b/handler/utils.py index 2f2ad36..aa8ab92 100644 --- a/handler/utils.py +++ b/handler/utils.py @@ -1,6 +1,7 @@ import os from handler.common import MESSAGE_QUEUE +from messages.control import ControlMessage from protobuf import message_pb2 from protobuf import wss_pb2 import gzip diff --git a/messages/control.py b/messages/control.py new file mode 100644 index 0000000..f435656 --- /dev/null +++ b/messages/control.py @@ -0,0 +1,12 @@ +import time + +from messages.base import Base +from protobuf import message_pb2 + + +class ControlMessage(Base): + def __init__(self): + self.instance = message_pb2.ChatMessage() + + def __str__(self): + return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '【直播间信息】' diff --git a/output/IOutput.py b/output/IOutput.py index 1491288..7006c06 100644 --- a/output/IOutput.py +++ b/output/IOutput.py @@ -1,5 +1,6 @@ from messages.base import Base from messages.chat import ChatMessage +from messages.control import ControlMessage from messages.gift import GiftMessage from messages.like import LikeMessage from messages.member import MemberMessage @@ -29,8 +30,11 @@ class IOutput(): def userseq_output(self, message: RoomUserSeqMessage): ... + def control_output(self, message: ControlMessage): + ... + def other_output(self, message_type: str, message_raw: bytes): ... - def error_output(self, exception: Exception): + def error_output(self, message_type: str, message_raw: bytes, exception: Exception): ... \ No newline at end of file From 427f28bd5744f2cd2d22bd663e8df03c2e8f3025 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 09:35:11 +0800 Subject: [PATCH 08/36] xml output --- messages/base.py | 6 +++++ messages/chat.py | 4 +++ messages/gift.py | 7 ++++- output/DebugWriter.py | 6 ----- output/__init__.py | 15 ++++++++--- output/debug.py | 26 ++++++++++++++++++ output/print.py | 2 +- output/xml.py | 62 +++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 116 insertions(+), 12 deletions(-) delete mode 100644 output/DebugWriter.py create mode 100644 output/debug.py create mode 100644 output/xml.py diff --git a/messages/base.py b/messages/base.py index f990078..623d310 100644 --- a/messages/base.py +++ b/messages/base.py @@ -13,6 +13,12 @@ class Base: def extra_info(self): return dict() + @property + def room_id(self): + if hasattr(self.instance, 'common'): + return self.instance.common.roomId + return None + def user(self): if(hasattr(self.instance, 'user')): return self.instance.user diff --git a/messages/chat.py b/messages/chat.py index 8d54b74..98aff9b 100644 --- a/messages/chat.py +++ b/messages/chat.py @@ -7,6 +7,10 @@ class ChatMessage(Base): def __init__(self): self.instance = message_pb2.ChatMessage() + @property + def content(self): + return self.instance.content + def format_content(self): return self.user().nickname + ': ' + self.instance.content diff --git a/messages/gift.py b/messages/gift.py index e96fd47..65b57c7 100644 --- a/messages/gift.py +++ b/messages/gift.py @@ -11,9 +11,14 @@ class GiftMessage(Base): return { 'giftId': self.instance.gift.id, 'giftName': self.instance.gift.name, - 'giftCount': self.instance.gift.diamondCount, + 'giftCount': self.instance.repeatCount, + 'diamondCount': self.instance.gift.diamondCount, } + @property + def gift(self): + return self.instance.gift + def format_content(self): return self.instance.common.describe diff --git a/output/DebugWriter.py b/output/DebugWriter.py deleted file mode 100644 index 11ff3c4..0000000 --- a/output/DebugWriter.py +++ /dev/null @@ -1,6 +0,0 @@ -from output import IOutput - - -class DebugWriter(IOutput): - def other_output(self, message_type: str, message_raw: bytes): - print(message_type) diff --git a/output/__init__.py b/output/__init__.py index 468ecb6..eed7200 100644 --- a/output/__init__.py +++ b/output/__init__.py @@ -1,6 +1,13 @@ -from output.IOutput import IOutput from output.print import Print +from output.debug import DebugWriter +from output.xml import XMLWriter +from typing import TYPE_CHECKING -OUTPUTER = [ - Print() -] \ No newline at end of file +if TYPE_CHECKING: + from output.IOutput import IOutput + +OUTPUTER: "list[IOutput]" = [ + Print(), + XMLWriter(), + DebugWriter() +] diff --git a/output/debug.py b/output/debug.py new file mode 100644 index 0000000..1960be2 --- /dev/null +++ b/output/debug.py @@ -0,0 +1,26 @@ +import os +import time +import traceback +from output.IOutput import IOutput + + +class DebugWriter(IOutput): + def other_output(self, message_type: str, message_raw: bytes): + if not os.path.isdir(os.path.join("", "debug")): + os.makedirs(os.path.join("", "debug")) + if not os.path.isdir(os.path.join("", "debug", message_type)): + os.makedirs(os.path.join("", "debug", message_type)) + with open(os.path.join("", "debug", message_type, str(time.time())), "wb") as f: + f.write(message_raw) + + def error_output(self, message_type: str, message_raw: bytes, exception: Exception): + if not os.path.isdir(os.path.join("", "error")): + os.makedirs(os.path.join("", "error")) + if not os.path.isdir(os.path.join("", "error", message_type)): + os.makedirs(os.path.join("", "error", message_type)) + ts = time.time() + with open(os.path.join("", "error", message_type, str(ts)), "wb") as f: + f.write(message_raw) + traceback.print_exc(file=open(os.path.join("", "error", message_type, str(ts)) + ".exc", "w", encoding="UTF-8")) + + diff --git a/output/print.py b/output/print.py index 23fcf55..3669a11 100644 --- a/output/print.py +++ b/output/print.py @@ -1,6 +1,6 @@ from colorama import init, Fore -from output import IOutput +from output.IOutput import IOutput RED = Fore.RED GREEN = Fore.GREEN diff --git a/output/xml.py b/output/xml.py new file mode 100644 index 0000000..eabb4fa --- /dev/null +++ b/output/xml.py @@ -0,0 +1,62 @@ +from output.IOutput import IOutput +from typing import IO +import time + + +class XMLWriter(IOutput): + """ + 可输出与B站弹幕姬兼容的xml弹幕格式,可用于转成ass字幕 + """ + def __init__(self): + self.file_mappings: "dict[str, IO[str]]" = {} + self.time_mappings: "dict[str, float]" = {} + + def _get_fd_by_room_id(self, room_id: str) -> IO[str]: + if room_id in self.file_mappings: + return self.file_mappings[room_id] + fd = open(f"{room_id}_{time.time()}.xml", "w", encoding="UTF-8") + self.file_mappings[room_id] = fd + self.time_mappings[room_id] = time.time() + return fd + + def _close_fd_by_room_id(self, room_id: str): + if room_id in self.file_mappings: + fd = self.file_mappings[room_id] + if not fd.closed: + fd.close() + del self.file_mappings[room_id] + if room_id in self.time_mappings: + del self.time_mappings[room_id] + + def control_output(self, message): + # 下播了 + self._close_fd_by_room_id(message.room_id) + + def _get_bias_ts_by_room_id(self, room_id: str, cur_ts: float = 0): + if cur_ts == 0: + cur_ts = time.time() + if room_id not in self.time_mappings: + return 0 + return cur_ts - self.time_mappings[room_id] + + def chat_output(self, message): + fd = self._get_fd_by_room_id(message.room_id) + if fd is None: + return + cur_time = time.time() + _c = """{}\r\n""".format( + self._get_bias_ts_by_room_id(message.room_id, cur_time), + cur_time*1000, message.user().id, message.user().nickname, message.content + ) + fd.write(_c) + + def gift_output(self, message): + fd = self._get_fd_by_room_id(message.room_id) + if fd is None: + return + cur_time = time.time() + _c = """\r\n""".format( + self._get_bias_ts_by_room_id(message.room_id, cur_time), + message.user().nickname, message.gift.name, message.instance.repeatCount + ) + fd.write(_c) From c10b1e114d135a920b1bd32f92d40120531593c6 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 09:36:41 +0800 Subject: [PATCH 09/36] =?UTF-8?q?http=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=AF=BC=E5=87=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/common.py | 10 +++++++++- handler/http_server.py | 4 ++-- handler/utils.py | 19 ++++++++++++------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/handler/common.py b/handler/common.py index e946253..292b2c6 100644 --- a/handler/common.py +++ b/handler/common.py @@ -1,3 +1,11 @@ +import time from queue import SimpleQueue -MESSAGE_QUEUE = SimpleQueue() +MESSAGE_QUEUE: "SimpleQueue[MessagePayload]" = SimpleQueue() + + +class MessagePayload(object): + def __init__(self, body: bytes, timestamp: str = ""): + self.request_timestamp = timestamp + self.body = body + self.curretnt_timestamp = time.time() diff --git a/handler/http_server.py b/handler/http_server.py index 9dc42e1..5529e23 100644 --- a/handler/http_server.py +++ b/handler/http_server.py @@ -1,5 +1,5 @@ from flask import Flask, request, Response -from handler.common import MESSAGE_QUEUE +from handler.common import MESSAGE_QUEUE, MessagePayload import logging log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) @@ -10,6 +10,6 @@ app.config['JSON_AS_ASCII'] = False @app.post("/message") def message_from_mitmproxy(): - payload = request.data + payload = MessagePayload(request.data, request.headers.get("X-MITM-TS", "")) MESSAGE_QUEUE.put(payload) return Response(status=204) \ No newline at end of file diff --git a/handler/utils.py b/handler/utils.py index aa8ab92..8c1adb7 100644 --- a/handler/utils.py +++ b/handler/utils.py @@ -16,18 +16,16 @@ from output import OUTPUTER def loop_queue(): while True: message = MESSAGE_QUEUE.get() - if type(message) == str: - message = message.encode("UTF-8") try: response = message_pb2.Response() wss = wss_pb2.WssResponse() - wss.ParseFromString(message) + wss.ParseFromString(message.body) decompressed = gzip.decompress(wss.data) response.ParseFromString(decompressed) decodeMsg(response.messages) except Exception as e: - # 发出去的信息无法解析 - pass + for output in OUTPUTER: + output.error_output("ParseError", message.body, e) def decodeMsg(messages): for message in messages: @@ -62,7 +60,14 @@ def decodeMsg(messages): room_user_seq_message.set_payload(message.payload) for output in OUTPUTER: output.userseq_output(room_user_seq_message) + elif message.method == 'WebcastControlMessage': + control_message = ControlMessage() + control_message.set_payload(message.payload) + for output in OUTPUTER: + output.control_output(control_message) else: - ... + for output in OUTPUTER: + output.other_output(message.method, message.payload) except Exception as e: - print(e) + for output in OUTPUTER: + output.error_output(message.method, message.payload, e) From 8c10aa1848d578e80662382f255b798f4231af87 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 09:37:57 +0800 Subject: [PATCH 10/36] =?UTF-8?q?BrowserManage=E7=AE=80=E5=8D=95=E5=B0=81?= =?UTF-8?q?=E8=A3=85=E7=AE=A1=E7=90=86=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/__init__.py | 4 +--- browser/manager.py | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 browser/manager.py diff --git a/browser/__init__.py b/browser/__init__.py index b8e985e..36a775b 100644 --- a/browser/__init__.py +++ b/browser/__init__.py @@ -1,3 +1 @@ -from browser.edge import EdgeDriver - -driver = EdgeDriver() \ No newline at end of file +from browser.manager import BrowserManager diff --git a/browser/manager.py b/browser/manager.py new file mode 100644 index 0000000..2fd9118 --- /dev/null +++ b/browser/manager.py @@ -0,0 +1,25 @@ +from config.helper import config +from browser.edge import EdgeDriver +from browser.chrome import ChromeDriver +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from typing import Type + from browser.IDriver import IDriver + + +class BrowserManager(): + _mapping: "dict[str, Type[IDriver]]" = { + "chrome": ChromeDriver, + "edge": EdgeDriver + } + + def __init__(self): + _config = config()["webdriver"]["use"] + if _config not in self._mapping: + raise Exception("不支持的浏览器") + self._driver = self._mapping[_config]() + + @property + def driver(self): + return self._driver From a595bcf731af78ef0b8ad3cf1a5e81e5f8b0e6d3 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 09:38:24 +0800 Subject: [PATCH 11/36] =?UTF-8?q?mitm=20script=E4=BD=8D=E7=BD=AE=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proxy_script.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 proxy_script.py diff --git a/proxy_script.py b/proxy_script.py new file mode 100644 index 0000000..8ee8c68 --- /dev/null +++ b/proxy_script.py @@ -0,0 +1,25 @@ +# ! IMPORT ! make sure you ran mitmproxy with this script, +# eg: `/path/to/mitmproxy -s mitmproxy.py` +import time +from mitmproxy import http +import re +import requests + +session = requests.session() + + +class Writer: + def websocket_message(self, flow: http.HTTPFlow): + re_c = re.search('webcast\d-ws-web-.*\.douyin\.com', flow.request.host) + if re_c: + message = flow.websocket.messages[-1] + if message.from_client: + return + content = message.content + session.post("http://127.0.0.1:5000/message", headers={ + "X-MITM-TS": str(time.time()), + "X_REFERER": flow.request.host + }, data=content, timeout=(1, 1)) + + +addons = [Writer()] From 9fe1384b5d9b4e8ea88c5c479f2e657ccd7a711e Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 09:38:48 +0800 Subject: [PATCH 12/36] =?UTF-8?q?=E7=95=99=E7=82=B9=E5=9D=91=E4=B9=8B?= =?UTF-8?q?=E5=90=8E=E5=86=8D=E5=A1=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 10 +++++++++- config/settings.yml | 5 ++++- main.py | 16 +++++----------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/.gitignore b/.gitignore index 7778571..019a780 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,10 @@ evn/* -.DS_Store \ No newline at end of file +.DS_Store +.idea +.vscode +venv +debug +error +__pycache__ +*.py[cod] +*.xml \ No newline at end of file diff --git a/config/settings.yml b/config/settings.yml index c9b90ac..c09605f 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -4,7 +4,10 @@ mitm: port: 8080 webdriver: - bin: 'msedgedriver.exe' + headless: False + use: edge + edge: + bin: msedgedriver.exe rooms: - 19829678666 diff --git a/main.py b/main.py index dff7865..17c70e6 100644 --- a/main.py +++ b/main.py @@ -1,25 +1,19 @@ -import sys import threading import subprocess -from urllib.parse import urlparse from config.helper import config from handler.http_server import app from handler.utils import loop_queue -from scripts import webdriver +from browser.manager import BrowserManager if __name__ == '__main__': - if len(sys.argv) == 1 or not urlparse(sys.argv[1]).scheme: - print('Invalid url provided, please check...') - sys.exit(1) - api_thread = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],)) - api_thread.start() mitmproxy_process = subprocess.Popen([ - config()["mitm"]["bin"], "-s", "./scripts/mitmproxy.py", "-q", + config()["mitm"]["bin"], "-s", "./proxy_script.py", "-q", "--listen-host", config()["mitm"]["host"], "--listen-port", str(config()["mitm"]["port"]) ]) - t = threading.Thread(target=webdriver.go, args=(sys.argv[1],)) - t.start() + api_thread = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],)) + api_thread.start() + manager = BrowserManager() queue_thread = threading.Thread(target=loop_queue) queue_thread.start() queue_thread.join() From 49a07151916c0bc1b4948882a8be32b6ab640357 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 14:48:59 +0800 Subject: [PATCH 13/36] =?UTF-8?q?=E7=94=B1outputManager=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=95=B4=E4=B8=AA=E8=BE=93=E5=87=BA=E7=B1=BB=E5=8F=8A=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E6=B6=88=E6=81=AF=E3=80=81=E5=88=86=E6=B5=81=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=8A=9F=E8=83=BD=EF=BC=8Cdebug=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=AF=B9=E6=8E=A5=E3=80=81xml=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E9=83=A8=E5=88=86=E9=85=8D=E7=BD=AE=E5=AF=B9=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/settings.yml | 16 +++++-- handler/utils.py | 73 ----------------------------- main.py | 10 ++-- output/__init__.py | 13 ------ output/debug.py | 29 +++++++----- output/manager.py | 109 ++++++++++++++++++++++++++++++++++++++++++++ output/xml.py | 10 +++- 7 files changed, 153 insertions(+), 107 deletions(-) delete mode 100644 handler/utils.py create mode 100644 output/manager.py diff --git a/config/settings.yml b/config/settings.yml index c09605f..24d46a1 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -9,9 +9,19 @@ webdriver: edge: bin: msedgedriver.exe -rooms: - - 19829678666 - - https://live.douyin.com/579197336883 +output: + use: + - print + - xml + - debug + xml: + save_path: "./" + file_pattern: "{room_id}_{ts}.xml" + debug: + save_path: + error: "./error" + unknown: "./debug" + known: False http: host: 127.0.0.1 diff --git a/handler/utils.py b/handler/utils.py deleted file mode 100644 index 8c1adb7..0000000 --- a/handler/utils.py +++ /dev/null @@ -1,73 +0,0 @@ -import os - -from handler.common import MESSAGE_QUEUE -from messages.control import ControlMessage -from protobuf import message_pb2 -from protobuf import wss_pb2 -import gzip -from messages.member import MemberMessage -from messages.like import LikeMessage -from messages.roomuserseq import RoomUserSeqMessage -from messages.gift import GiftMessage -from messages.social import SocialMessage -from messages.chat import ChatMessage -from output import OUTPUTER - -def loop_queue(): - while True: - message = MESSAGE_QUEUE.get() - try: - response = message_pb2.Response() - wss = wss_pb2.WssResponse() - wss.ParseFromString(message.body) - decompressed = gzip.decompress(wss.data) - response.ParseFromString(decompressed) - decodeMsg(response.messages) - except Exception as e: - for output in OUTPUTER: - output.error_output("ParseError", message.body, e) - -def decodeMsg(messages): - for message in messages: - try: - if message.method == 'WebcastMemberMessage': - member_message = MemberMessage() - member_message.set_payload(message.payload) - for output in OUTPUTER: - output.member_output(member_message) - elif message.method == 'WebcastSocialMessage': - social_message = SocialMessage() - social_message.set_payload(message.payload) - for output in OUTPUTER: - output.social_output(social_message) - elif message.method == 'WebcastChatMessage': - chat_message = ChatMessage() - chat_message.set_payload(message.payload) - for output in OUTPUTER: - output.chat_output(chat_message) - elif message.method == 'WebcastLikeMessage': - like_message = LikeMessage() - like_message.set_payload(message.payload) - for output in OUTPUTER: - output.like_output(like_message) - elif message.method == 'WebcastGiftMessage': - gift_message = GiftMessage() - gift_message.set_payload(message.payload) - for output in OUTPUTER: - output.gift_output(gift_message) - elif message.method == 'WebcastRoomUserSeqMessage': - room_user_seq_message = RoomUserSeqMessage() - room_user_seq_message.set_payload(message.payload) - for output in OUTPUTER: - output.userseq_output(room_user_seq_message) - elif message.method == 'WebcastControlMessage': - control_message = ControlMessage() - control_message.set_payload(message.payload) - for output in OUTPUTER: - output.control_output(control_message) - else: - for output in OUTPUTER: - output.other_output(message.method, message.payload) - except Exception as e: - for output in OUTPUTER: - output.error_output(message.method, message.payload, e) diff --git a/main.py b/main.py index 17c70e6..6fe29bf 100644 --- a/main.py +++ b/main.py @@ -3,8 +3,8 @@ import subprocess from config.helper import config from handler.http_server import app -from handler.utils import loop_queue from browser.manager import BrowserManager +from output.manager import OutputManager if __name__ == '__main__': mitmproxy_process = subprocess.Popen([ @@ -13,9 +13,9 @@ if __name__ == '__main__': ]) api_thread = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],)) api_thread.start() - manager = BrowserManager() - queue_thread = threading.Thread(target=loop_queue) - queue_thread.start() - queue_thread.join() + browser_manager = BrowserManager() + output_manager = OutputManager() + output_manager.start_loop() + api_thread.join() diff --git a/output/__init__.py b/output/__init__.py index eed7200..e69de29 100644 --- a/output/__init__.py +++ b/output/__init__.py @@ -1,13 +0,0 @@ -from output.print import Print -from output.debug import DebugWriter -from output.xml import XMLWriter -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from output.IOutput import IOutput - -OUTPUTER: "list[IOutput]" = [ - Print(), - XMLWriter(), - DebugWriter() -] diff --git a/output/debug.py b/output/debug.py index 1960be2..b83028b 100644 --- a/output/debug.py +++ b/output/debug.py @@ -1,26 +1,33 @@ import os import time import traceback + +from config.helper import config from output.IOutput import IOutput class DebugWriter(IOutput): + def __init__(self): + # 获取对应配置文件 + self.unknown_output_dir = config()['output']['debug']['save_path']['unknown'] + if not os.path.isdir(self.unknown_output_dir): + os.makedirs(self.unknown_output_dir) + self.error_output_dir = config()['output']['debug']['save_path']['error'] + if not os.path.isdir(self.error_output_dir): + os.makedirs(self.error_output_dir) + def other_output(self, message_type: str, message_raw: bytes): - if not os.path.isdir(os.path.join("", "debug")): - os.makedirs(os.path.join("", "debug")) - if not os.path.isdir(os.path.join("", "debug", message_type)): - os.makedirs(os.path.join("", "debug", message_type)) - with open(os.path.join("", "debug", message_type, str(time.time())), "wb") as f: + if not os.path.isdir(os.path.join(self.unknown_output_dir, message_type)): + os.makedirs(os.path.join(self.unknown_output_dir, message_type)) + with open(os.path.join(self.unknown_output_dir, message_type, str(time.time())), "wb") as f: f.write(message_raw) def error_output(self, message_type: str, message_raw: bytes, exception: Exception): - if not os.path.isdir(os.path.join("", "error")): - os.makedirs(os.path.join("", "error")) - if not os.path.isdir(os.path.join("", "error", message_type)): - os.makedirs(os.path.join("", "error", message_type)) + if not os.path.isdir(os.path.join(self.error_output_dir, message_type)): + os.makedirs(os.path.join(self.error_output_dir, message_type)) ts = time.time() - with open(os.path.join("", "error", message_type, str(ts)), "wb") as f: + with open(os.path.join(self.error_output_dir, message_type, str(ts)), "wb") as f: f.write(message_raw) - traceback.print_exc(file=open(os.path.join("", "error", message_type, str(ts)) + ".exc", "w", encoding="UTF-8")) + traceback.print_exc(file=open(os.path.join(self.error_output_dir, message_type, str(ts)) + ".exc", "w", encoding="UTF-8")) diff --git a/output/manager.py b/output/manager.py new file mode 100644 index 0000000..e241a91 --- /dev/null +++ b/output/manager.py @@ -0,0 +1,109 @@ +import gzip +import threading +from typing import TYPE_CHECKING + +from config.helper import config +from handler.common import MessagePayload, MESSAGE_QUEUE +from messages.chat import ChatMessage +from messages.control import ControlMessage +from messages.gift import GiftMessage +from messages.like import LikeMessage +from messages.member import MemberMessage +from messages.roomuserseq import RoomUserSeqMessage +from messages.social import SocialMessage +from output.print import Print +from output.xml import XMLWriter +from output.debug import DebugWriter +from protobuf import message_pb2, wss_pb2 + +if TYPE_CHECKING: + from typing import Type, Optional + from output.IOutput import IOutput + + +class OutputManager(): + _mapping: "dict[str, Type[IOutput]]" = { + "print": Print, + "xml": XMLWriter, + "debug": DebugWriter, + } + _writer: "list[IOutput]" = [] + _thread: "Optional[threading.Thread]"= None + + def __init__(self): + _config = config()['output']['use'] + if type(_config) != list: + _config = [_config] + for _c in _config: + if _c not in self._mapping: + raise Exception("不支持的输出方式") + self._writer.append(self._mapping[_c]()) + + def __del__(self): + ... + + def decode_payload(self, message: MessagePayload): + try: + response = message_pb2.Response() + wss = wss_pb2.WssResponse() + wss.ParseFromString(message.body) + decompressed = gzip.decompress(wss.data) + response.ParseFromString(decompressed) + self.decode_message(response.messages) + except Exception as e: + for writer in self._writer: + writer.error_output("ParseError", message.body, e) + + def decode_message(self, message_list: list[message_pb2.Message]): + for message in message_list: + try: + if message.method == 'WebcastMemberMessage': + member_message = MemberMessage() + member_message.set_payload(message.payload) + for writer in self._writer: + writer.member_output(member_message) + elif message.method == 'WebcastSocialMessage': + social_message = SocialMessage() + social_message.set_payload(message.payload) + for writer in self._writer: + writer.social_output(social_message) + elif message.method == 'WebcastChatMessage': + chat_message = ChatMessage() + chat_message.set_payload(message.payload) + for writer in self._writer: + writer.chat_output(chat_message) + elif message.method == 'WebcastLikeMessage': + like_message = LikeMessage() + like_message.set_payload(message.payload) + for writer in self._writer: + writer.like_output(like_message) + elif message.method == 'WebcastGiftMessage': + gift_message = GiftMessage() + gift_message.set_payload(message.payload) + for writer in self._writer: + writer.gift_output(gift_message) + elif message.method == 'WebcastRoomUserSeqMessage': + room_user_seq_message = RoomUserSeqMessage() + room_user_seq_message.set_payload(message.payload) + for writer in self._writer: + writer.userseq_output(room_user_seq_message) + elif message.method == 'WebcastControlMessage': + control_message = ControlMessage() + control_message.set_payload(message.payload) + for writer in self._writer: + writer.control_output(control_message) + else: + for writer in self._writer: + writer.other_output(message.method, message.payload) + except Exception as e: + for writer in self._writer: + writer.error_output(message.method, message.payload, e) + + def start_loop(self): + self._thread = threading.Thread(target=self._handle) + self._thread.start() + + def _handle(self): + while True: + message = MESSAGE_QUEUE.get() + self.decode_payload(message) diff --git a/output/xml.py b/output/xml.py index eabb4fa..885bfc6 100644 --- a/output/xml.py +++ b/output/xml.py @@ -1,3 +1,4 @@ +from config.helper import config from output.IOutput import IOutput from typing import IO import time @@ -10,13 +11,18 @@ class XMLWriter(IOutput): def __init__(self): self.file_mappings: "dict[str, IO[str]]" = {} self.time_mappings: "dict[str, float]" = {} + self._file_name_pattern: "str" = config()['output']['xml']['file_pattern'] def _get_fd_by_room_id(self, room_id: str) -> IO[str]: if room_id in self.file_mappings: return self.file_mappings[room_id] - fd = open(f"{room_id}_{time.time()}.xml", "w", encoding="UTF-8") + cur_ts = time.time() + fd = open(self._file_name_pattern.format_map({ + "room_id": room_id, + "ts": cur_ts + }), "w", encoding="UTF-8") self.file_mappings[room_id] = fd - self.time_mappings[room_id] = time.time() + self.time_mappings[room_id] = cur_ts return fd def _close_fd_by_room_id(self, room_id: str): From b3bfe6ae581775ed6b49a354ae260e82548d8243 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 14:53:18 +0800 Subject: [PATCH 14/36] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=5F?= =?UTF-8?q?=5Fpycache=5F=5F=E5=86=85=E5=AE=B9=E5=8F=8Avscode=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 13 --------- .vscode/settings.json | 6 ----- README.md | 2 +- __pycache__/selenium.cpython-39.pyc | Bin 452 -> 0 bytes config/__pycache__/__init__.cpython-38.pyc | Bin 145 -> 0 bytes config/__pycache__/__init__.cpython-39.pyc | Bin 141 -> 0 bytes config/__pycache__/helper.cpython-38.pyc | Bin 475 -> 0 bytes config/__pycache__/helper.cpython-39.pyc | Bin 483 -> 0 bytes messages/__pycache__/__init__.cpython-38.pyc | Bin 147 -> 0 bytes messages/__pycache__/__init__.cpython-39.pyc | Bin 143 -> 0 bytes messages/__pycache__/base.cpython-38.pyc | Bin 1846 -> 0 bytes messages/__pycache__/base.cpython-39.pyc | Bin 1850 -> 0 bytes messages/__pycache__/chat.cpython-38.pyc | Bin 940 -> 0 bytes messages/__pycache__/chat.cpython-39.pyc | Bin 936 -> 0 bytes messages/__pycache__/gift.cpython-38.pyc | Bin 1138 -> 0 bytes messages/__pycache__/gift.cpython-39.pyc | Bin 1134 -> 0 bytes messages/__pycache__/like.cpython-38.pyc | Bin 988 -> 0 bytes messages/__pycache__/like.cpython-39.pyc | Bin 984 -> 0 bytes messages/__pycache__/member.cpython-38.pyc | Bin 1057 -> 0 bytes messages/__pycache__/member.cpython-39.pyc | Bin 1053 -> 0 bytes .../__pycache__/roomuserseq.cpython-38.pyc | Bin 1189 -> 0 bytes .../__pycache__/roomuserseq.cpython-39.pyc | Bin 1183 -> 0 bytes messages/__pycache__/social.cpython-38.pyc | Bin 945 -> 0 bytes messages/__pycache__/social.cpython-39.pyc | Bin 941 -> 0 bytes messages/__pycache__/utils.cpython-38.pyc | Bin 2207 -> 0 bytes messages/__pycache__/utils.cpython-39.pyc | Bin 2063 -> 0 bytes protobuf/__pycache__/__init__.cpython-38.pyc | Bin 147 -> 0 bytes protobuf/__pycache__/__init__.cpython-39.pyc | Bin 143 -> 0 bytes .../__pycache__/message_pb2.cpython-38.pyc | Bin 75281 -> 0 bytes .../__pycache__/message_pb2.cpython-39.pyc | Bin 66499 -> 0 bytes protobuf/__pycache__/wss_pb2.cpython-38.pyc | Bin 1086 -> 0 bytes scripts/__init__.py | 0 scripts/__pycache__/__init__.cpython-38.pyc | Bin 146 -> 0 bytes scripts/__pycache__/__init__.cpython-39.pyc | Bin 142 -> 0 bytes scripts/__pycache__/mitmproxy.cpython-38.pyc | Bin 783 -> 0 bytes scripts/__pycache__/mitmproxy.cpython-39.pyc | Bin 740 -> 0 bytes scripts/__pycache__/utils.cpython-39.pyc | Bin 412 -> 0 bytes scripts/__pycache__/watcher.cpython-38.pyc | Bin 1526 -> 0 bytes scripts/__pycache__/watcher.cpython-39.pyc | Bin 1493 -> 0 bytes scripts/__pycache__/webdriver.cpython-38.pyc | Bin 2065 -> 0 bytes scripts/__pycache__/webdriver.cpython-39.pyc | Bin 1985 -> 0 bytes scripts/mitmproxy.py | 25 ------------------ scripts/utils.py | 10 ------- store/__pycache__/__init__.cpython-38.pyc | Bin 144 -> 0 bytes store/__pycache__/__init__.cpython-39.pyc | Bin 140 -> 0 bytes store/__pycache__/mongo.cpython-38.pyc | Bin 1526 -> 0 bytes store/__pycache__/mongo.cpython-39.pyc | Bin 1522 -> 0 bytes 47 files changed, 1 insertion(+), 55 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 .vscode/settings.json delete mode 100644 __pycache__/selenium.cpython-39.pyc delete mode 100644 config/__pycache__/__init__.cpython-38.pyc delete mode 100644 config/__pycache__/__init__.cpython-39.pyc delete mode 100644 config/__pycache__/helper.cpython-38.pyc delete mode 100644 config/__pycache__/helper.cpython-39.pyc delete mode 100644 messages/__pycache__/__init__.cpython-38.pyc delete mode 100644 messages/__pycache__/__init__.cpython-39.pyc delete mode 100644 messages/__pycache__/base.cpython-38.pyc delete mode 100644 messages/__pycache__/base.cpython-39.pyc delete mode 100644 messages/__pycache__/chat.cpython-38.pyc delete mode 100644 messages/__pycache__/chat.cpython-39.pyc delete mode 100644 messages/__pycache__/gift.cpython-38.pyc delete mode 100644 messages/__pycache__/gift.cpython-39.pyc delete mode 100644 messages/__pycache__/like.cpython-38.pyc delete mode 100644 messages/__pycache__/like.cpython-39.pyc delete mode 100644 messages/__pycache__/member.cpython-38.pyc delete mode 100644 messages/__pycache__/member.cpython-39.pyc delete mode 100644 messages/__pycache__/roomuserseq.cpython-38.pyc delete mode 100644 messages/__pycache__/roomuserseq.cpython-39.pyc delete mode 100644 messages/__pycache__/social.cpython-38.pyc delete mode 100644 messages/__pycache__/social.cpython-39.pyc delete mode 100644 messages/__pycache__/utils.cpython-38.pyc delete mode 100644 messages/__pycache__/utils.cpython-39.pyc delete mode 100644 protobuf/__pycache__/__init__.cpython-38.pyc delete mode 100644 protobuf/__pycache__/__init__.cpython-39.pyc delete mode 100644 protobuf/__pycache__/message_pb2.cpython-38.pyc delete mode 100644 protobuf/__pycache__/message_pb2.cpython-39.pyc delete mode 100644 protobuf/__pycache__/wss_pb2.cpython-38.pyc delete mode 100644 scripts/__init__.py delete mode 100644 scripts/__pycache__/__init__.cpython-38.pyc delete mode 100644 scripts/__pycache__/__init__.cpython-39.pyc delete mode 100644 scripts/__pycache__/mitmproxy.cpython-38.pyc delete mode 100644 scripts/__pycache__/mitmproxy.cpython-39.pyc delete mode 100644 scripts/__pycache__/utils.cpython-39.pyc delete mode 100644 scripts/__pycache__/watcher.cpython-38.pyc delete mode 100644 scripts/__pycache__/watcher.cpython-39.pyc delete mode 100644 scripts/__pycache__/webdriver.cpython-38.pyc delete mode 100644 scripts/__pycache__/webdriver.cpython-39.pyc delete mode 100644 scripts/mitmproxy.py delete mode 100644 scripts/utils.py delete mode 100644 store/__pycache__/__init__.cpython-38.pyc delete mode 100644 store/__pycache__/__init__.cpython-39.pyc delete mode 100644 store/__pycache__/mongo.cpython-38.pyc delete mode 100644 store/__pycache__/mongo.cpython-39.pyc diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 76159c2..0000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Python: 当前文件", - "type": "python", - "request": "launch", - "program": "${file}", - "console": "integratedTerminal", - "args": ["https://live.douyin.com/162574996168"] - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index b98b726..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cSpell.words": [ - "douyin", - "mitmproxy" - ] -} \ No newline at end of file diff --git a/README.md b/README.md index 8221ba5..20875cc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -抖音web直播间([live.douyin.com](https://live.douyin.com))弹幕抓取 +抖音web直播间([live.douyin.com](https://live.douyin.com))弹幕抓取 -- **屏幕效果截图** diff --git a/__pycache__/selenium.cpython-39.pyc b/__pycache__/selenium.cpython-39.pyc deleted file mode 100644 index a7534176965a58ec51e12d28b7a6c04f225e4f23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 452 zcmYjOy-ve05Vn&vNm1I4%t$O1QVc^VAcTw^4 z>$}N}+zd^OzbHM%Pc-Ud)qaLC z<=GQ(O`O|GW@RCiO+m&C0g%WhE{MVY-=5 z%h@6;{G`mu;CK+61gGc0;4J93l`DWjk2l>Msc&Q>u!S4cK&`$ zX$12Mc$PyUW7cGpeX~}qS6FYQ%n8U3#Cy8Q8h($+g8(kb1d0h6f|$y(A~Mr%8r9m# cPEoZ`?qy!m8G|eRLr8cUTg`kf;T@~lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!GnmQ{>zr9wbu zNk)ENjFEwnk%4JUN`7f&W?p=GYEpboW?5=Xa(-S~W_nC~d}dx|NqoFsLFFwDo80`A O(wtN~ka?ehm;nIAIU*bY diff --git a/config/__pycache__/__init__.cpython-39.pyc b/config/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index e9825a5c9d7656e1769e1a9c3d0021b5ae24cbe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmYe~<>g`kf>mtG5<&E15P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HKerR!OQL%n{ zYF@g&OKNd;Nq&KTNhXlWj?c*~OVv-#&r8cp*N>0S%*!l^kJl@xyv1RYo1apelWGSt J>oX8D007c$AQS)q diff --git a/config/__pycache__/helper.cpython-38.pyc b/config/__pycache__/helper.cpython-38.pyc deleted file mode 100644 index 33ae2ff7bbbc0fed669839f9747d4f4b42609775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 475 zcmYjN!AiqG5S`tuF-oI1y-BaVs1&`3h#-gu6}5;G0wL{gZOS$Yo2?S5r|MDs1;vxU zv{w%z_yc-!Hd^SwzL~eP``$3;zCRBbU*8Yy56thDOb11>i>Ig~aNtD3fCPltno1f_ z?r?Swfx~GF8Z)2x3L3<)lUVnTJC;qtDp{{RJjDTm22C^_lfLuJUSLc(S%y2%Gb2nb#ayVy zoN)@Rl=U}W6m=6RqR6;;tVF7f7q^Q{4z(~W%SCEf8KVG`_&1o}A4>VJLIZzdQArrm zeFNpA=+8!fD?BReC#CLXY1mwEHrF>po(;<+jc!CclF79QJ6YOIuEL&>xlpTlY23dX yX4l~&09m3nq871gFf*Iu0%g*!##VN3Ri`qXf(2|CZ+npOp%gm=Sz!fh#G}6{oO1#I diff --git a/config/__pycache__/helper.cpython-39.pyc b/config/__pycache__/helper.cpython-39.pyc deleted file mode 100644 index c018293fa6d49292a7a7f5a333f4f5dadafd7af0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 483 zcmYjNy-ve05WaKVG_4v&SXr|W*bzbkF(HIh5F$&IVz*7}CXwwT6~Po%#4Esp#4CAV zVd52-xCAP3r~B^D{_b>H81{jr8@y#7u^0D%e?m>@PWQ!HV^6Z{bp zPp~0GoiBO?5juXJ+3DF$ldYv;3doMg%msl3i8|)iMeLa+Ye~{ zS@*udKzL8=3K&i0q_u}Iggr1PyMV1;6AG$D{Om4_jkGo|CT3@~P!2Wig`kf;T@~lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!GTmQ{>zr9wbu zNk)ENjFEwnk%4JUN`7f&W?p=GYEpboW?5=XZfbFHVtQ(EOniK1US>&ryk0@&Ee@O9 Q{FKt1R6CG~pMjVG02B%%00000 diff --git a/messages/__pycache__/__init__.cpython-39.pyc b/messages/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 21bc1e792b17f57b6d5aa918618dbeeceb8e904e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmYe~<>g`kf`E!8i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6v6KeRZts8~Ne zH7{M?CAB!aB)>qvBojzw$LD00rRwLV78fU`rxxqS$7kkcmc+;F6;$5hu*uC&Da}c> K1DW<2h#3GVtRW5n diff --git a/messages/__pycache__/base.cpython-38.pyc b/messages/__pycache__/base.cpython-38.pyc deleted file mode 100644 index 6c0835db36777917761798c2456267e284abc35f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1846 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 Y!FPEw;YSVVXBZ$A0tulfby$b}1NdE~1ONa4 diff --git a/messages/__pycache__/chat.cpython-38.pyc b/messages/__pycache__/chat.cpython-38.pyc deleted file mode 100644 index 3286eb3bc139aeff47a395283a11b8907ac03f59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmZ`%&1(}u6rY*hB-=J=@dFFuAqV%chn5oRC5RMz&`W|)Jh%jg&CbMb+>bc3t0eRg zu%5O5L2?l6zqHpNDEJTP$@g{>Sy3O%oA>5@{ob4Ryw%z!K;M77AAX{QtWc?v3Cal^ zeGE(xK||u=%|aS6mr<0B(1=Xeq~r+^rl?&KQIqC7!>tK=Mx6RLh$MZ7<~xzp+IuPa zWY_`KeC%oIqp?a1loL4mJ}^mKDu~Mj73`9@hA@N)HxvhV)c>{82EJNt*b_MI< z#^L{t>feC>lPu)%k?itkUizffYKVzl=_z|jf{oGr*x7ueucfHK_qiar)pG4TVdjRA&LtB@1NZ? zI0t{uTi~#1<5snewY~4u@lS9@oaft|M~TQnl$)Ht&b+X+C>%#w?IudN0TqS=EY<}F ztC3mMGAyHbbLwgjUUF-qk~A4+qhh=A)@C;jhp_X?*rceWEvgisV?8W!J;LoR3$P|_ FvR_U)(zE~o diff --git a/messages/__pycache__/chat.cpython-39.pyc b/messages/__pycache__/chat.cpython-39.pyc deleted file mode 100644 index c74fe53a73e5016be3e95552d5e4bd38b416f0c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmZ`%J8u&~5Z>K8+n2-+;vpg-iWFRNMSKyWvJi?05;SoWQE<)be7iPh-^1*#k+4!& zB0Z#|w51f}FI{UP!C#Fufs2tkTojxV}o)6S3dzF zh@c4xkh6rQEMOF6E3r~Luqk;-ge@AEL^P!R(Fz)Zo)fS610qS^qs3k-wGKy;PX~`d zwV#JtMrf=b2FeLs{RoI80Tm=*f(mv?0!vuJ1`bI?6L>?kAc0ftoxTmtS@n4YRs23E z!yBR;F#J6BUu&tfKa$zV zeu^gksUPd4|A1< zhHrdu{9Akv>iGV2`wJx|D%<)H1Z=CIK-r3{m|%!?X{|_!)#}f0yKj!%^vD&5?yH`A z)^pEiZ3tU0K7adk_5JH&y|}_!Oq|NX(MAnRX(!2}FhNn_?EYCzi*xYjyaNu~GVa#P z*x37C6K8@w;=I`9Jk7-{LAlNOyIGi27KQDovfV)mr(Yx3z;acvu^Nd(9m}!GH?OH~ u!As#xRc`XZY*=nq(b?`scL4jYtnC-IZ_6y@aGa+Vu4lNpRRY$gZT1V}(9o3t diff --git a/messages/__pycache__/gift.cpython-38.pyc b/messages/__pycache__/gift.cpython-38.pyc deleted file mode 100644 index 1bab22655ee70c9cc39437b5d53f7140a5ba2825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1138 zcmZuwPiqrV5P$FOCfTHEp;)bmNG~}o*ib^f6cMq9>Y+gh9$W&C&CW~Ruz%XO8#See ziuJB{4-I(fckq+EYY$TJ3n&QAY!X~)-?B6F-kY8I{bpugEiX41uAjd?4FbW~C2h*f z#?4cFvuzZ>fJe+DEg~KZPjIrW$ck;x=4_9F4V5zn6=i?4ybAChbE{YQCF{D}EX69z z`~xKq2OZqn&-_dUbXi^qVwUhB8j5)wm?waPIAfj#7TBmU2~<&6pau@=D%3Gi!z}HE z!+d|1B;ci}WK-Z>e6tl4IXmZ5cEY3p)?*jE>sp!|H1Rb~m}I%11nL4&W-1z9FkQ!s z-`k^|{{Cd+oj zl=WU2%>QoJ08!!s(0w#$B7mb5Q#KVK))C^lHD&8KAFkCsUTwYJY{i=`*l0c9Y3=W{ zdgCU3c6s{w>h!~pZ{IIZzqq!s^AHQ_WVs#|Ry|4sKO$4Fq4$k!YEq)Vl;p6WajQ&Y ze&2O#G)mMmDNRGlIE8UUc2mluu^-KD^b#ean#@w(C5xuFB&Y+$s8i94Zek}br{-A2 zsaw^z@xnNVI?dC;cv$=!W_dB$?E(I|+FArD1upUwBjY@t!Fxh&&nS;0n!G9g0zfPQ A-2eap diff --git a/messages/__pycache__/gift.cpython-39.pyc b/messages/__pycache__/gift.cpython-39.pyc deleted file mode 100644 index c3aa897dcf08abd5a77c0a0a4eb20701b6a78585..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1134 zcmZuw&1w`u5bmGZ+1bq|5R67d#LFHA%&v&1ARZ5zo}CEO%~kh+yz858d- zF&RCAt@k`OD#6400ub|r55Q0)qLM^RQprw9#3h#=Xhq`!AF^wB@94Q&5K@OW&*hf+2VSlHTN_3xr6E)C$pr`vy}GdbCl)*;_hX z0gO;8!1us7CI{qz91VxQ*rN zD?oR_z-f>aB%6^LlWY?pp79ykgxLuB;Ap-3cB`9jb>;o;%kA#oc6T`Kz_p8$FPA5u zetrLWaq>0voM%%gXke@!S5_-4lQ=_DZ-Do;Y??xVzYyrKq;aE8V{twRn>b3?G9g@B zh`f~34DF5(@1}7!KhZ0g2x~G=c^fU9+?v1+RAY`sueu4H()hwZK)LYGi^Zb9hg&?FRD%tV28OFNiDu6aWAK diff --git a/messages/__pycache__/like.cpython-38.pyc b/messages/__pycache__/like.cpython-38.pyc deleted file mode 100644 index 7f6268dd9ab065c557fac02c8274e922132856da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmZuw&ui2`6rLZ+Hf?vSQn4T+J-CM)TFO!{MWpCK5AGrq4~B&yo5^an`B5{8vZaS& ztLRO=co0hW*n_uvPzwG7{spd3jK)O%Sl3zg~2{ zQ9_2eD4Pb0Wf*D^oFtO^#KM{RG+-8^h`G-L&C)2jL!>74Z6bA7+v1ik=?XC`$FP&M zOqxvwu2S|RSFCj!u+(nZ%5^YUHU^7j80s20msnI1i%BZkHnF(mQiBR0$XXz?2)`67i zPLzg8TmhV`E*$R9rn*ra*oknWFmb~KTV|x^a#_#6v@@zOO|I$+0DKBb!LtDwFw_D% z`GA~iTE9?#I9Ctm>TOFR%^fQW96#{I~#eT4Bj zVEqpybDuJgUQG)9g+>g4M8B3b{v)>Aw`|q4q}ygu`lx-lJ z`#;})I(fH$dhjxz0N3&N9q^nUymBmU=Ac5`ap3o3FOr(6EKMySY0FRYI7@4Q3&o|u zcs<=q(#XrWpTwDrGi;Z!p37A||I*H=!Zd}dD**5r1O;mh$Jhg z;+s=T&%+mO57Hz{x_PhYMBNq7tl diff --git a/messages/__pycache__/member.cpython-38.pyc b/messages/__pycache__/member.cpython-38.pyc deleted file mode 100644 index 550c9f9257047b510352955d7d624a0b74dfa6cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1057 zcmZ8gy>AmS6t{hs%Qa0ZDkxn#bRfeawQ3_^h!8?Bz>=s^Vc-3syB10+qP zO0+w$Fmy=@Z>T5N3J@1Vapm$ki(eaYS5#wQht)WV$9sPY^R%;Rvw;H{Tg4Y^_0lCCkvBQ!Cms9PA55uR8KkI0n3N|-SvP?Xsm z+6PdrY(et?}b_w*WsGb zp#LwfNGbSJx(v3fS6!K}=+dL8{4LBWoM2hZosj!dm@oZyWhzg+O1r*<7OK^n$QiExzE({FSfGp=eQnd Lw(|s}jLYONyCeU* diff --git a/messages/__pycache__/member.cpython-39.pyc b/messages/__pycache__/member.cpython-39.pyc deleted file mode 100644 index f2d9c771e6018eba87e64d92c8a6db43a01b9733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1053 zcmZ8gy>AmS6t{hs%Qa0ZDkxnl!9a!}wSkH$LI?p8ERB!~1GiY0vlCr%AHjAIO%tgS zWd|09E;#{12e$6~A6_dyIe4krmsXjnQMoY*so%ti=) zMfw2Gx=!Vp}>?S>^xfH0kEH%z4RlYk!sKFOo*F%m8~{%kj& zOD<%y$CF<35tjp%4x1_jHK0-WiZ{=DlVBJuTf;r=QW_?qqO=Sdq$z^%`04`It&5Na z&=y1*I63H>U`$XS^>Lr{ttp<2X(9G7IG}^7o$c*GjK2-t|Y3dg?31MWSt!K)Xp83=%)) zx-2-v1{~Nj-Dp?w7!Dxz5^Qsh3bACoE8SGYzM?^zD4wWgIFk+tgsZqh#v6+qECw$y zVV=)`&Y9Q%!#p3uAW4QY!pJ&sGqWC=L9`nBp>A69)AE&6O#IcuH5n zck!xgiyfUuv>T2Y0z)9Bxx=cw=n2DUKAi?kPNR!m z+ja7@h9j=Pv37?dRcU9`&4<~mU5w*a2YxbP1}YDq>*Zf=?cObL-7{<#1xOWF$zKR9 B{(}Gj diff --git a/messages/__pycache__/roomuserseq.cpython-38.pyc b/messages/__pycache__/roomuserseq.cpython-38.pyc deleted file mode 100644 index 20474b22a2642cb83d0bfb508c477388abd4c89c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1189 zcmZ`&&1+LZ5Z~SRUhu`;8m8?ND*Ws{PtM3}-_CBl;Cicz)%Es=cUJKQA2 zJdH;^8HUbn$>*yDFwM(OC~J5)IDkYC@C+!Dl&K(PCa7Smq-+R7n6LtfNWf}|q_AO4 zh!Frv#p5@Fz?%!DD#?Y}9#)MG1VV(>$^thCWvcNbX z5vMgJU6)7=WiwU}l;=de7Wk3$qa$#+pPAD`*!=5#h!J9IM$@2Ri3J78I;6t{%R;|q zNn`+1vuUkRu+1#+UQcvL7MdV$6&H`?ZcXOA$()$TU7N|x&g4q1aR{}&{BrNzgWa_! z-!?aQ-hA9%e$_&z-7l}ZkDqnd-tTUH-QRkvUH7-1cAr1$zWB7W{CV#~2e$Lc*o+#U zjO{Q|b*+uKLCtZsYQW||#W3v9L?t-~PtK7}KSL*mWaz-H2&m9+zT-*G;}qv!AX+Z! zY0ei~j@vs?qllM5p^=ZHhMhhjuuJr}z)lIV);6^b+p-P4n@^~tuov6&Du{w=tFHf1 joaz69sVaPSW%Pp#1lBmZC+!P8dKa;!bVu4OP1EcT#10(x diff --git a/messages/__pycache__/roomuserseq.cpython-39.pyc b/messages/__pycache__/roomuserseq.cpython-39.pyc deleted file mode 100644 index 3eac0d5973272a16ce6af34118bffc3e64a6fa41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1183 zcmZ`&&ubGw6rP#gO}1%LwF&`6&_fOZZA1j6h=>Y$X$}StF2bq+iT6!q9 z2;y(Vi}cW(YA+%lYsLR#uQhEw_3lOA+cX$y9GExn&AfTvH}Adi3xynkas0u$e}xgU zjmF@x!MF}nUjiYBpds;aWg(52$0+JnXhpVXQ*xUKTR1C3IMQCWJV($PDQAAdO;Rn> zWHgdm`!kZarZ0kN-|)4p0w`EqK|!((=`g{H(5XdYEMRKSI?EJny9m73 zG96Nc@|T_J!m-l*^QGu~Nt`L&nJi6BmTK*B2(`WRW^et;?&|X&o0~iDKW{I+Z6nj} zw|CuVFT1NBcQ?Q9Z+%Ez_qSejUp?)<{<5?5b?;LLw#(VXHbEp4R~ywxwUIEc`(dhD zusKjK3_CPYSoKZ(%FL7HcHt}@3k^Z2h(EkGy)9}re)ekZd XIK@dj(!JWFcMV%gBaX}RG|&D3Q#l%% diff --git a/messages/__pycache__/social.cpython-38.pyc b/messages/__pycache__/social.cpython-38.pyc deleted file mode 100644 index 3a691c1948bf953f6be8cbe8af09d41b03d0f1f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 945 zcmaJLw^b1PzIcHw$URTt?A0LL)L=ladESn4)q_L`9mf4Ywj_pE%X;kV$$D)mI{^ zl=oEf@vsf9dCybQ$H!%1;OxOsH$X|^QbAlMs9?v$HH0BdxS@%t!d($HXkh6^Kk)-E z?3U$ynB$M2jV15HQ5&E#GNm(eNH`M&l4;K|QVd9OQf&pX%DmW@r+`n%aCAyi3m$&m z-tP>$ljfsI_AH49?cH{J_trop`6P(>D>>w0@KO#g=Tie!;AxE~+TuKjgN*YUR8iQ7 z(1YtMcw38*{{ufHQ!*p_RM0I1&U*P(DAxRTa&~d{@%+o1^Uq%|-hXnKHghFYZN-8A zJoX})Rw1kyqEu_(>Wxv7MqbAKB+g`O3JRLd$czcL z1$&+vGg1IHdIy{KlN~$Su|?B<*s;4EyPww~ZGQB&oML|T&M~!_1(DR2%FDL{Wj4; z5-cfPV!;?(u0mx|%dm{%n^R4ZY1$g6NtO)rQ9&@>SkR+21mdU0qQp|!qD%3EtUD#H NyGY=&0jtwG`wd^W+(-Zb diff --git a/messages/__pycache__/social.cpython-39.pyc b/messages/__pycache__/social.cpython-39.pyc deleted file mode 100644 index 46f97aefad8bafbea7042980f29facb8b0a9f363..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmaJK8+m~QRq<}OjQgFo;@ktR?gir)X(8P^J!8NP%?bD zfg17)Y(YT^sx%1x$u<-Yk@yQ#%-qGu7Ko8{9=r4SW_H3(XPp3j|L`$9qlC=SSSA~c z133CFFhK-ONPvGbm`4wJ(= zeFS~{A=EMDLpXW^SV5+AMve(*fT!`z{2~T1=1Kfg`q#Z_UsqVVlUK&!JkH{R^A=>#ScK4{+bdYR3zz?c zJ|$IRu+r9&JPH$3RR_HP*-wje z@aG&I7LD9mZRFac=QZ(Da59{mb&R>*aQokr1NnLLfHC%uthC{5j1&6DV zIn=QntGe@=3b)KS6O|YFpd41qWjc%X=ni1%m9uoG+-jz%-nWvAm_#?|En zkJ>q4!~r2;ao`dmjgR~b4mlxC9P7%7zmOBJYQ{5dl5X|a@4c$}rt7_W-#n~TJOtOh zD?hYY388mz_aWu;5l{<@H{)uYljF}N`Co!#4h+1zY6b*K3+w0WBrXK6YxD@#0Tak11N*HagR9X@hvD@hVPOu1O)yQ667Zm=asZe=xT2hDI4 zDBXJ89F7x3gE)|i-bn;+WBpBo%YnBp%`JG+9)LtWe2fmTB)tN>N%whoQQ8@lWuoN_KdBtT_!?S3U!fJW4p#gTMY6i% zi61dKfUtAN_HFk8t-Vs2^2pl;0UmnO0z|s82RhV9`R++r=%zG%-iHg?odS3tp7b^Vg6^d7 z*t%!QCGxs;fs_ZMZ?Z0t8XRumnY$z^@M3O9Br<93Z5e$uswgJ(z}Sh1Tb`mC{88wCe%Mn_A#9JD! zXn04%yBglppi{)GwR@jGsEfCCKr5KpYA&H#LWRz%azBj{e=p>p>3_HM0{|CNs)bPF P;3nh5hGd?)i97xu#5XS| diff --git a/messages/__pycache__/utils.cpython-39.pyc b/messages/__pycache__/utils.cpython-39.pyc deleted file mode 100644 index b31cddc38257ca35631acd9934191edeb1b66a51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2063 zcmZuyOK&4Z5bkdGjK|M7iSvRb1Xv*~&^pT*tu~uD0VxTqB#V_sD{JEEI1|q+J)IS? zoIMaONJvBoaakcHC&VA%2Oz|e1IM{?;xFup>b7G~*qu>-T~*Wbjr*&vvRx|W5nSIs z_{E+9>mTK$F9Oa(81Zia4sx)En3{=)eZmMO{&+tuVYTNL#zQrtUn_kY( zv%I#mUcoQ2qP8usMjh!znr?nBR2pE~=IPh2M_0Yd9(RJdW)SZ$$?mgIn6-{s9+T zgP?l8>2~?po!SXQ|4GcnECpp#I+Z70b&yd64xEAAwg zKM*%ga*eOrJd$o0BqWRzQ*b|g#%naO4qcB&wmf2%xS_{~3Ff~dF$-UPdB3i55Z60A z=+xJE+?8Qemo7}*mghd>^_y?hPo?X{_oB0;cp5}@y9>YIksHh@g)0CETZG~wE|ZUN z8P5|j53yTG$w8n1Lnq}gNLL@Np-cSq_j7!Sd*6Zdkd`hHk0ri9kQ#CY={e4*#0*lT z666qRzJRjm6F@4nFVN3AVV5{q*9-cb@P~ds+a;G+RAmtujJ}a#Fj5R9&0zeG;cLxcX@)Ok85qpInPM6vL!u01eX&O>{!xa8F(0vp?Z@LyPHEp)jmL zS?FVKJ-1FM9CMh}F;_Mm=lnLSHu*u@j-f(RwV&X8kAC^#)1{YqX|&>2VY8{>d#UOk z#Zql!6iampwlIA6HT`5dF?}wNLPuoa+_6H;Wh=7JywG-7_QtRxIR9=e~)|!j=UKG9kg`{<=cw+$xT?y zz~^*r4?q>DCWP%X$4tz6jNJKJAsX84cU0P+Ot-fjfn@E>FlIdD&=&RnAHxw zP}sgLRMQdauRy$|;B5s<3f@uhu7dXfn9=<7v%Q8`Q~}kw^afKhs%9yamWlO=A3CQV af1v(w;`ae8Tm->JH>nU4g`kf;T@~lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!GTmQ{>zr9wbu zNk)ENjFEwnk%4JUN`7f&W?p=GYEpboW?5=XK~a85eo|>#OniK1US>&ryk0@&Ee@O9 Q{FKt1R6CG~pMjVG02i$z82|tP diff --git a/protobuf/__pycache__/__init__.cpython-39.pyc b/protobuf/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 95b3744213458bd6bc6d5e3ba5624428c77d4538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmYe~<>g`kf`E!8i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6v6KeRZts8~Ne zH7{M?CAB!aB)>qvBojzw$LD00rRo K1DW<2h#3GZPa!7& diff --git a/protobuf/__pycache__/message_pb2.cpython-38.pyc b/protobuf/__pycache__/message_pb2.cpython-38.pyc deleted file mode 100644 index 435b34f52bff0b7d7c4e104bb10b260ecd51879e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75281 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 APyhe` diff --git a/protobuf/__pycache__/message_pb2.cpython-39.pyc b/protobuf/__pycache__/message_pb2.cpython-39.pyc deleted file mode 100644 index f4485288e2680c03e869b3f938265942eaf18f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66499 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 XT1WMlebg8(V}4#$nwk_NgMR-HPA>)& diff --git a/protobuf/__pycache__/wss_pb2.cpython-38.pyc b/protobuf/__pycache__/wss_pb2.cpython-38.pyc deleted file mode 100644 index 0cd79c036f6fdda204520625d8fb3e5bbfdc195e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1086 zcmZ8gOK;Oa5VoC%lZ{g+X-iXtAnJ);swxN}A%sAEAdvb{+zQExw6e34)WyzPyH2b0 z#D#x>P|A(Jv=S#y6-RCy5Mw7K5w<-3=G)ov&V1wZYL#esk&mBzy{KtFQfK)x(RqcB z{ECKYuEum`gnDGSIX%TW#Cf-n;XLA^Yi78Bxa5{ITtrOVimpLrV%=(P6$a5JjXX7^Ku0eIO4r{kMX2@OMW0env_`)o(=?1Gp zoi^DD+D&FT+O~c3=nV`(cnPppEO^3uJZ$-+ejh}u#~JM0VIkVKt_TC!6G5DCfu6na zXv}$tlo^4P-T=~A0sRnqNx+9`tQc@IEBH3mVC0K4Vu& zWgd=XVL3FC1DcFuXcmzzHwZCeziDRJBKfp}W(hs3fk`BYD-bjZB50PgBh5PMz z%6N}bWe+$XgfML$N+k>oP!+n6MC6chYfDTflE|llB{~yI6sG$YVhJ2+P1Wdsf+=$! z`rar^@C>*_nXl@v8FN4cUKrc}I}Ab)<#g}*EO%DEr2d!=y$D>3zIU9?fpdCt>>Q{E z^N~B9P2ACRbk4Bz%A7eO{g;&8fk7Y>5HnUa=(%%1_voT$4wl5@bl9Y-Q&eSkDk>9C zB+6c36!oJ17pXlzXaE2J diff --git a/scripts/__init__.py b/scripts/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/__pycache__/__init__.cpython-38.pyc b/scripts/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index ffb1d1b361e924cc82a70dc5ae0b0eab4046288d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmWIL<>g`kf;T@~lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!G{mQ{>zr9wbu zNk)ENjFEwnk%4JUN`7f&W?p=GYEpboW?5=XadJ^+K}m5;e0*kJW=VX!UP0w84x8Nk Pl+v73JCK2&ftUdR@V_Fj diff --git a/scripts/__pycache__/__init__.cpython-39.pyc b/scripts/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index b3a67ec2a52746a34bec8044dcba39133545608a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmYe~<>g`kf`E!8i6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vQKeRZts8~Ne zH7{M?CAB!aB)>qvBojzw$LD00rRoK@dDdNOJJ!Bq9jvDXf}hWmp)J=}vaC^ONoFF`JN_ zvUv3cJR}DXzEWL1?JIcE>O?}of~u~nuKKFFs!wXQ3PJku_-p@=5%S9#`{bbU8d<+U zA&8&}3GB%dnzDe=txGI~7bg*Bp_!MFQ_s#YQTNHAwPFggx)bMXikd23dDe7_y>*&gqDa zoHbjpIa9}m3ufGvw~J?weOzCBtv7~_x1f*+AlWx?mp>Xxa_`I4?FC8y*$`9MCB z&-hl`LudAIBKuKKo2Si*Zld07JvnQMyqLz>Su4uZS-pLtrPA%8%!cjlMVQ22WE2_HM=Bm0-A-eZj#Yj& zZH=dJXICWrSHlifZ~h6rO*uWJ2Xt27E~52caHrvcABI^km0<{#Fidk%Bv!A6;bqZF zwl~Ud4*d7s?(th(q`HshrmH=1WPSE`_{iEO_;h18JXJ*t%DculaH@pPO#pa3A@WS` af!P-;iwOS9ZA-80Xtc%lX_fly!2b*3ddSoO diff --git a/scripts/__pycache__/mitmproxy.cpython-39.pyc b/scripts/__pycache__/mitmproxy.cpython-39.pyc deleted file mode 100644 index abd43d537ec7e6f493727d86a955e5879f8a2592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmYjPJ8u**5T5aRAGz!ika#qRf^M4wB&rA@BqX3ZArUFCinO|%eV1MK72C_@qEKym z{s2YNAn}(hIx7AG72`b-ovrz7&)DDi8+$e$kAT{*(T~{?0{nK1?dH+q6`9^A5FoIG z)Qzmfilq$Q+$+6`rySue2rm3f5Pr{6U-~^PF%1NMfF$@s=V6+lZxlU~6E3ih1|Pw-2g`U9(PgF}@Ysiq0Dd{H(l8z^ZyRnOTLr=yI> zUX$q~f(tC5K!Kl``e>N(dMJ3|o8T(Eh9Y`E@_P2|@mF@iu6E3bcJCH(kJpHBNP;=_ z-b1KwKLb5|3OMvngaSyaH$C4g^DlBDnr@xflX+8FwmMG6HdOMoliE-X8i!3QYvnFy zcdFb}t!mEJX;?PPOytV)uFHk>9X_|-i9ECZ%89l9@!CjjBPDg))LPn*N@-+m63=oi z%Z2hCCoX=1x<|9WclBK5tRHz tc=IzRC$em%8VWS*w82aW61>IgB#u~?SX|*SF+*q9k52h+(=6Iuo zL;V5TulzGkX4GtwT$XuqEzQzabz&8nbXm4;K%F-Akd`nYI3i=ql_i^` z(m7~>0SWdt>?_!h`yBfgdfn5$!k%_V+g-Mm0FONK?sRv*AN51C*&r}xw|_pn?-KF{ zDmMq5kpr0e9E2c(W`t9_GS2Mka0gbFxf73j6m6WWHu1S{_ih$U>by>gWQ)d<@U3r& z@I>vJh}sq7A!xn`KntXQFI!InV*2AyTJVD=^gMo4YQ@24#n>}PsA!{a_Yr8SFNwVJ2^V+9iP02d&lwV z!`|Veh*hqZ*?CnLsgj8))ciN1w!rVNd*6T2e>`tLnVV6O_xJDY@87xG7ezTw^Z1oK zi?j4X_I0AtsnPvct3*4~c@@NQnx`g?w=q2gjnIHz?yhU;Y_1cESL@-xT8C*%`Uy5z z(i!jQ3x7#|ZNFhASk#5Hq+kK~nk^G9noF`| zl$?^g7NU|^((JRYVxeoK7bST)tmr&3|R zxHBycz^jsYIxwS%a?e`)r`9Sg@_3NXV|$62Xe0t*H7L75FZb4L>D)ByMxOc*jMPUc zJ_b>RKpc}M6A2Gas88_xU7f{7db)<2BvtO=*y14Hi3N?A&UJm4++ zQbjTBY<>&c{wDa&+Y4KUR@hsIt diff --git a/scripts/__pycache__/watcher.cpython-39.pyc b/scripts/__pycache__/watcher.cpython-39.pyc deleted file mode 100644 index e7b167e8f85037c65d34e5f82666cb22ff835b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1493 zcmZux&5|265SBDQ9?y<9i7U1IoR)%0)m-dAaZFJQn}u+|3yI0r>cB7=DfW2BGq$8z z@Yd$!JyAvR3igTOmFAigufU0J*$xXtF16ItYN@-wubp-}A%XGZ^WW3g4k52mxjkG^ zj$rB^KnNmeK{&N5;|x|-I8&Fq6m3r7O?~d$y<4=V0S_pVY}H;99)3lHC;S^C{3YXi zptVE*S|I(U!y`eTk+}UQyg>#rZGzJmTB=K_V1MvsUdU$)ZRGUiQkLdPT8hG2qPm== z*~K?{^hI7~=zDuGP>x{gLlDwN4G~lB2qv5x!d>AC4_1f@-flImv(#i`sTz`@>u%s4 z=P^v(1!2gNT$6-eQ;<*saHfOUQFy2cs%_v+_wm#`Y@c2p08duBW zWz!b9l9{R0;t!(s!0)e5`rkvsx<8WTsQ*~%3scSdCWqxBDe_C%*O|&^M)!Z(1lgM{ znjlH?GB-)GkD(z@ga-8L?lzC!&YV#+Z3kdX0+=?PUtojjyn<9Fbiy#Di6f|Bzd96> zoY0lKCX`$q8E@jRT5Iy#;VX8{R)J}oaJ9E4YevZ#VDG|j2|n`&9~1rjA^70$9OnGN z87U7oy1g;N8_!9}9&TRfpl-|P42FPr8%k3v4N1rQO>2v`YC)(x&;XFA0ewuN@w7>m zX~L{3!9xKzcV4>QG2(NHdT_PhaEeQ4LeHt>xBKj%p@3O1C9TISE5c>#N znNDSrG+~lVD@+9TQIgE-wAff|VyXj|ssj{Aj#~nsRUQcZu6+;zby?urZ~yB6#QF#i zz6)a40n*}oLzWaezyb2Q>JFIyMG_d>&21Dd<0Tlm<3 zw=yWYks|hZlKp7>9$O;nXhS}qc6{16;9 zB2SnPX@~Uc{+1rS+s6j6r`~}>3e#5afoLLNipjI7G~-IB_woDNDvO2q0H$rGfH7)I z6L)y`ABy$13{&^uAou3AtR?T-wiMN n$-VFJDq9^3r+xcvVK%{|4S7C8oHTZSKm(v%#3B~3{e!;&2&+?S diff --git a/scripts/__pycache__/webdriver.cpython-38.pyc b/scripts/__pycache__/webdriver.cpython-38.pyc deleted file mode 100644 index 735c6d243d02f752cc338903aaeeeeefeadce227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2065 zcmZ`)UvC>l5Wl_iozLe#asD=GT3V10_`z1GREZ)$gd`HJnzT(?6|Ewj?AwjA(cZ1Q zyGP>SNJv3EAP`@G2j`KmbdT`Vj{pyd*>z$9O7FC@znPs|&(8j4{IXt;9C+R<|Iquk z;y8a8t@&yd_6A0oE#2q}D5k{c9+)X{~A!GA+DfO{$aft_M8J8{gd6-skC5>=o z^?+B?8m?Jf=Jm9J8y1IrCT-%T#T7oA&fz(WBR-!l;03@{Qv2S)iv;aDt@;~?$k}e8 zqH;ugM6z$F1f~3Rpqa=N!1)cTn51OAJLvWpXPQyfatr^N6vxA&Vy73w0R>n0%OS}6 zE85$z8@=i>4TjZ$q>5$-*8lf>FNV{i{z!gZ`inHXLBji|nX^Q+Q3Z|%RkoI5~SCmxMsrhXyBQ2E*W<@eK)Zj4GKI&)9`QE5Cws`htF z=FBZY*WJGQK&2I8Vb-NE)#B425O*|+#<$3<-8mZH9#zQPiUV@q%31JTn4-lgS_1nG7|T=3$`suM`|7VYGqCqN z=MH4@GSWNb)+AEoymB5m&z&9TYalBS==S!>Y`Z-$WN0fYfj*zTucRS-;alrT)NUWp zF5y(ElbdbU&)|C736+}dGsA&4l~PD`GJmmlx2+VvG*;VfmL;N}F)a$O$Fi1Jl*NRc zc!5l)87Eh`iD&3BO>*7saT*W0`rwVJP4?Y$C%Xc+Igey{r)bg+h4SbaCi=t#u5m=oRWhj?eGE(@OX-^u06q#y@Xgph2rQy>p^S{xB^L@Kv}Z> z>tF3W-P*+SW>YQxlTv$~I9NZBBBe4k?lUYMaF)Q)hw%}VdExb`#y*^$aS1KZk!9oN zKH7i`($_gv8cv(Tsw&EP_Bt1k<~n>6ceR$Rmup&-4wc9XpNlS0($ss=P~eaV&S_%W zQ4z5WvaDl~QAjWs3eL3tWNmjh-d@|iL9AOYF9Z@1d~ozluYcn zw$G%}F?6Y%YaE&|%pG1J(L0n)6OFG-XZp>NAAt7P$B#eR+Zx_|Hq-|q+q-}7{{4Fo z_K3)baKDBd99rp~N+cU-wKwgpox!kh`(g%mP>(@4C_u|7@*)JU8=w$1Q4?l^T~zx! z@La&=T|jey>>4V;SKtFL*iiImSP5O(g56q6aup`|4hS47Xto*4)5-n4d#QH*jb@Um z&Sjs(iF6Z+hF`$v{nI&aWpZwQ!4k#Z$+c7m$RPD8P;Cy{yX=gKOFZqi2(71-5rh??0 Wer}3cnfeS-=+=;Vn^xA0=Kcd*WI;~= diff --git a/scripts/__pycache__/webdriver.cpython-39.pyc b/scripts/__pycache__/webdriver.cpython-39.pyc deleted file mode 100644 index eb223492e507e3542e7215ad4be8c44bdf63e2e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1985 zcmZ`)PjBQj6pxchCX@No>2%s{_b(g}%%M|O;<6GThPDzbZM(4DRfR86X6#Ng>%>{x z*|w{xgeVdh5PSd*(-Yz=`O0Y}z5pB$&z@~5s2j`AzxVv&JU{=QlQf%=0}uKB*CY=e z=XaxAeOypJgD!snK^%gZgXbf{2y~aZnTI`OY#ys*KK3oHupq1As>MDFvl^~t5ss`L zuzJ?O4U4O+nYD1s;*c$5ZQQoF#ul>UFge~mX%9%1MI86z!xD$(d_QI1LH-c_sH5j zQsnFd4J**jfRK6TzVkDZ>O=4~?Q7`70pi@;eYLp0UKkRrODcdipS&l9A-eXh^;NXK zen=C-sFd0prg_iPRX(Q`?vgpF;?WgW;RSk3N2N-JjK)Qx4quz9O27FEIk^60dv|O5 zNxU_9I>2>BkJTp66%YwG(i}LMussEQ!ZpEpW*MYI10UuGTvrUzfz^qw0?}iU678#0 zF{)c7#2=4%39OV#Xn(|EH#jT>i&+X5Lq*+6NS5ZY^-YP?K0nH#RH~u_vtr4Jt`W;d ztQc{_h*c0c#iRpaJ9+=2|!7bTSnc3Z-%)YUS7QF2Ig6W)mvr9?U`71foA z4R%rE@4#~bo7P1gKz0sQz#n{|fel4}hPBWYJy@r=B5uJT?t;Lfgv&8c%WQsX?_Q|= zf8&_vr+<+jLnhq6&W~pq&->R^*_<@@-u{wh*%dzCe!J`NWKNbl*SN^CD7aAlGM)48 zx-c(%=y3r&p#&I{6R2kR^H?hC=KSB#KcuXn!d8l|+r#X`{>I#r&1TXb?G^C>q(+Ay aXPlIberifsnyL&@=r)jPZ7Ul_bN>Nd2_?Y* diff --git a/scripts/mitmproxy.py b/scripts/mitmproxy.py deleted file mode 100644 index 8169ec3..0000000 --- a/scripts/mitmproxy.py +++ /dev/null @@ -1,25 +0,0 @@ -# ! IMPORT ! make sure you ran mitmproxy with this script, -# eg: `/path/to/mitmproxy -s mitmproxy.py` -import time -from mitmproxy import http -import re -import requests - -session = requests.session() - - -class Writer: - def websocket_message(self, flow: http.HTTPFlow): - re_c = re.search('webcast\d-ws-web-.*\.douyin\.com', flow.request.host) - if re_c: - message = flow.websocket.messages[-1] - if message.from_client: - return - content = message.content - session.post("http://127.0.0.1:5000/message", data=content, headers={ - "X-MITM-TS": str(time.time()), - "X_REFERER": flow.request.host - }, timeout=(1, 1)) - - -addons = [Writer()] diff --git a/scripts/utils.py b/scripts/utils.py deleted file mode 100644 index 5b99707..0000000 --- a/scripts/utils.py +++ /dev/null @@ -1,10 +0,0 @@ -import requests - -from config.helper import config - -def getUserinfo(uid): - try: - r = requests.get(config()['api']['userinfo'] + str(uid)) - return r.json() - except: - pass \ No newline at end of file diff --git a/store/__pycache__/__init__.cpython-38.pyc b/store/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index ac04b656666d3e6e80e4f78777ae6431d8294e54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmWIL<>g`kf;T@~lR)%i5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!G%mQ{>zr9wbu zNk)ENjFEwnk%4JUN`7f&W?p=GYEpboW?5=XaY=qrYD|25W?p7Ve7s&kg`kf`gNmB!cM2AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUS;{m|mnqGJ8@ z)Vy?km(=3ylKcYwl1w0#9iNj~ma1P|l3$dnA0MBYmst`YuUAlci^C>2KczG$)edCT IXCP((00oaAYXATM diff --git a/store/__pycache__/mongo.cpython-38.pyc b/store/__pycache__/mongo.cpython-38.pyc deleted file mode 100644 index c2b65acd03239e499abec0313da405f7cfba31be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1526 zcmbVMOK;Oa5Z+zespBMl(n7?A3rM+CRU|G5A*4!hYJ`+>u_CP!@3y%35!N=4%D0wd z{{ubdFYT365BvZ)F|(;tlX7CEea-I9eDlrBzVCEA0`2FoZ{7wyd}aC_9YSa1@kRIhotA+z+E!vQQZjAfvFgL{}Sl!m%QJS2l!#q_o zpfz*2wxJ(F&kkV7$#{8KjLNlDs1Sfm zl5s41j$WJ2jNES-+lNsolUy;d0lu4!W@0j@+RkKjGAF79N5A`LFGfeRC+}wYhcp@W z5BmLs=Od98voPUbip^Dqf>&Ku|jxM~QjnDhljeE`` z9^?EvEWk~0|C&$;OVY6q@VXu35t zf8RO|3{h|w8?GJbhKg-iAg(i7(vp>sxmOlMnwhjMra(jva1e=ZDLIYCf#hi-d$xh7 zn~>QeM9|t6<9w`8-wI~612WW50o|(st?9f+9+rmziR3ThRnluHt%^7U%L@}kiKync z#O=cURSlD=9-ZQ_f*9Y*piWB}2 zS4>zRF;e#61`8X087B(kFjr=`2${bTq(zc*kp@K!6`56;h1ymK(hd1F%<`;TL%CJs zXmJW@aoqE;3bFDz*B<9_DvAi#ZO%Ux<7jcBFf~oZs4ZL}_X;Uc$c1{01O5WF!PFQA z9kVmT;&7>JyOwKt&|OR68Dt)ozV0mk)cp@Kno4E<8gpLLXVjxo?Y>-qe1+tgU&Cc> F_6H53HW&Z^ diff --git a/store/__pycache__/mongo.cpython-39.pyc b/store/__pycache__/mongo.cpython-39.pyc deleted file mode 100644 index 7e2817fd3b04a73c4110ed5fff3667fb918847ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1522 zcmbVMy>8nu5GM8G$g-W^CauxEfEPOtP!t7Hv{St}U9<>_$hb;m$))6?3A`mkm%Kwg z6@DeIo$?Bu`W+oPs?(_i_;)1lzWeTuQK#cGw8i(IQOjoR7j5bdGWHg|c!fbQ!BZB{ zY^8i+1r}!?n6QO&%Y<`d1-9TL)^qQ1mkoPdH{v`yPsTCr>us&|J*1KaT(H0rTv)dZ zI*h)+5w2)p?}|O)iRLX28p0PXNVY^C z%P>v8%0WRs42$S;UY{=vsJcCO_ zdBhaqfLRZd_TxNFWn3nC1`%0N^kxHs-Y#SrK3?tMN`A>bW6!;8pSfqGud+tMBPMIi-bUHM?__$NZ$r# zbpRP@sDK{TfYx+AA&*MKfF$x)@tX4m%BmvH!19xfP!g);196AAzX{?9G6GV8IIMwq z)bO7eS`Qi~QFf)C|HJwV$Ou7Yy-q>x?Gy9sT78DcRh;N|xU+ Date: Sun, 5 Jun 2022 15:38:15 +0800 Subject: [PATCH 15/36] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E7=9A=84=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=EF=BC=8C=E5=8F=8A=E9=83=A8=E5=88=86=E4=BF=A1=E6=81=AF=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/http_server.py | 35 ++++++++++++++++++++++++++++++++++- proxy_script.py | 11 ++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/handler/http_server.py b/handler/http_server.py index 5529e23..c2fccb1 100644 --- a/handler/http_server.py +++ b/handler/http_server.py @@ -1,6 +1,9 @@ +import json + from flask import Flask, request, Response from handler.common import MESSAGE_QUEUE, MessagePayload import logging +# 不要日志,当它不存在 log = logging.getLogger('werkzeug') log.setLevel(logging.ERROR) @@ -12,4 +15,34 @@ app.config['JSON_AS_ASCII'] = False def message_from_mitmproxy(): payload = MessagePayload(request.data, request.headers.get("X-MITM-TS", "")) MESSAGE_QUEUE.put(payload) - return Response(status=204) \ No newline at end of file + return Response(status=204) + + +@app.post("/user_info") +def user_info_from_mitmproxy(): + try: + user_info = json.loads(request.data) + except json.JSONDecodeError: + return Response(status=403) + print(user_info) + if "user" not in user_info: + # 这个请求有问题 + return Response(status=403) + user = user_info['user'] + #有用的信息 + { + # 抖音加密的用户id,也就是url上的id字符串 + "sec_user_id": user.get('sec_uid', ""), + # 用户真实的数字id + "user_id": user.get('uid', 0), + # 开播状态,1是开播了 + "live_status": user.get('live_status', 0), + # 和西瓜视频一样,每次开播,room_id都会变化,需要动态拿取 + "room_id": user.get('room_id', 0), + "nickname": user.get('nickname', ""), + # 多平台粉丝数,包含西瓜视频等关联字节公司下的账号粉丝总数 + "mp_fans_count": user.get('mplatform_followers_count', 0), + # 近期加的归属地 + "ip_location": user.get('ip_location', ""), + } + return Response(status=204) diff --git a/proxy_script.py b/proxy_script.py index 8ee8c68..5bf8232 100644 --- a/proxy_script.py +++ b/proxy_script.py @@ -9,6 +9,15 @@ session = requests.session() class Writer: + def response(self, flow: http.HTTPFlow): + # /aweme/v1/web/user/profile/other/ 他人主页获取他人信息 + if '/aweme/v1/web/user/profile/other' in flow.request.path: + response_json_content = flow.response.content + session.post("http://127.0.0.1:5000/user_info", headers={ + "X-MITM-TS": str(time.time()), + "X_REFERER": flow.request.url + }, data=response_json_content, timeout=(1, 1)) + def websocket_message(self, flow: http.HTTPFlow): re_c = re.search('webcast\d-ws-web-.*\.douyin\.com', flow.request.host) if re_c: @@ -18,7 +27,7 @@ class Writer: content = message.content session.post("http://127.0.0.1:5000/message", headers={ "X-MITM-TS": str(time.time()), - "X_REFERER": flow.request.host + "X_REFERER": flow.request.url }, data=content, timeout=(1, 1)) From 9850a245514676a5194fc252fdbc21265d89a314 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 22:38:04 +0800 Subject: [PATCH 16/36] =?UTF-8?q?=E4=BD=BF=E7=94=A8switch=5Fto.window?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3switch=5Fto=5Fwindow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/chrome.py | 2 +- browser/edge.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/browser/chrome.py b/browser/chrome.py index 5dda8d2..b99ada5 100644 --- a/browser/chrome.py +++ b/browser/chrome.py @@ -43,7 +43,7 @@ class ChromeDriver(IDriver): return if tab_handler == self.browser.current_window_handle: return - self.browser.switch_to_window(tab_handler) + self.browser.switch_to.window(tab_handler) def open_url(self, url: str, tab_handler: str = ""): if tab_handler != "": diff --git a/browser/edge.py b/browser/edge.py index 1011839..28648fc 100644 --- a/browser/edge.py +++ b/browser/edge.py @@ -43,7 +43,7 @@ class EdgeDriver(IDriver): return if tab_handler == self.browser.current_window_handle: return - self.browser.switch_to_window(tab_handler) + self.browser.switch_to.window(tab_handler) def open_url(self, url: str, tab_handler: str = ""): if tab_handler != "": From d48f7c772f6f82fdea07cf5739b7e44ce89e27c9 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 22:38:31 +0800 Subject: [PATCH 17/36] =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/IDriver.py | 12 ++++++- browser/manager.py | 76 +++++++++++++++++++++++++++++++++++++++++++-- config/settings.yml | 6 ++++ main.py | 6 ++-- 4 files changed, 93 insertions(+), 7 deletions(-) diff --git a/browser/IDriver.py b/browser/IDriver.py index e18d6ed..4eff625 100644 --- a/browser/IDriver.py +++ b/browser/IDriver.py @@ -1,2 +1,12 @@ class IDriver(): - ... \ No newline at end of file + def new_tab(self) -> str: + ... + + def change_tab(self, tab_handler: str): + ... + + def open_url(self, url: str, tab_handler: str = ""): + ... + + def screenshot(self, tab_handler: str = "") -> str: + ... diff --git a/browser/manager.py b/browser/manager.py index 2fd9118..94bb83f 100644 --- a/browser/manager.py +++ b/browser/manager.py @@ -1,12 +1,17 @@ +import threading +from urllib.parse import urlparse + from config.helper import config from browser.edge import EdgeDriver from browser.chrome import ChromeDriver from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Type + from typing import Type, Optional from browser.IDriver import IDriver +_manager: "Optional[BrowserManager]" = None + class BrowserManager(): _mapping: "dict[str, Type[IDriver]]" = { @@ -18,8 +23,75 @@ class BrowserManager(): _config = config()["webdriver"]["use"] if _config not in self._mapping: raise Exception("不支持的浏览器") - self._driver = self._mapping[_config]() + self._driver: IDriver = self._mapping[_config]() + self._tabs: list[TabInfo] = [] + + def init_browser(self): + _users = config()['live']['users'] + if type(_users) is not list: + _users = [_users] + _rooms = config()['live']['rooms'] + if type(_rooms) is not list: + _rooms = [_rooms] + for _user in _users: + self.open_user_page(str(_user)) + for _room in _rooms: + self.open_live_page(str(_room)) @property def driver(self): return self._driver + + def open_user_page(self, sec_user_id: str): + tab = TabInfo() + tab.tab_type = TabInfo.TAB_TYPE_USER + tab.user_id = sec_user_id + if urlparse(sec_user_id).scheme: + tab.url = sec_user_id + else: + # 单独的用户id + tab.url = "https://www.douyin.com/user/" + sec_user_id + self.open_tab(tab) + + def open_live_page(self, live_url: str): + tab = TabInfo() + tab.tab_type = TabInfo.TAB_TYPE_LIVE + if not urlparse(live_url).scheme: + # 单独的房间号 + live_url = "https://live.douyin.com/" + live_url + tab.url = live_url + self.open_tab(tab) + + def open_tab(self, tab_info: "TabInfo"): + tab_handler = self._driver.new_tab() + tab_info.tab_handler = tab_handler + if not tab_info.tab_type: + tab_info.tab_type = TabInfo.TAB_TYPE_OTHER + self.driver.open_url(tab_info.url, tab_handler) + if tab_info not in self._tabs: + self._tabs.append(tab_info) + + +class TabInfo(object): + TAB_TYPE_OTHER = "other" + TAB_TYPE_USER = "user" + TAB_TYPE_LIVE = "live" + + def __init__(self): + self.tab_handler: str = "" + self.user_id: str = "" + self.url: str = "" + self.tab_type: str = self.TAB_TYPE_OTHER + + +def init_manager(): + global _manager + _manager = BrowserManager() + threading.Thread(target=_manager.init_browser).start() + return _manager + + +def get_manager(): + if _manager is None: + return init_manager() + return _manager diff --git a/config/settings.yml b/config/settings.yml index 24d46a1..8f53b71 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -23,6 +23,12 @@ output: unknown: "./debug" known: False +live: + rooms: + - "585723119943" + users: + - MS4wLjABAAAAzBItqEvCjPryxn_Y6w6LtRBFDOVNfjvYSJg8VVZFwlw + http: host: 127.0.0.1 port: 5000 diff --git a/main.py b/main.py index 6fe29bf..ca0edea 100644 --- a/main.py +++ b/main.py @@ -3,7 +3,7 @@ import subprocess from config.helper import config from handler.http_server import app -from browser.manager import BrowserManager +from browser.manager import init_manager as init_browser_manager from output.manager import OutputManager if __name__ == '__main__': @@ -13,9 +13,7 @@ if __name__ == '__main__': ]) api_thread = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],)) api_thread.start() - browser_manager = BrowserManager() + browser_manager = init_browser_manager() output_manager = OutputManager() output_manager.start_loop() api_thread.join() - - From dc1800e492da4fd03350cf49bcb341a130c1cf9b Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 22:38:59 +0800 Subject: [PATCH 18/36] =?UTF-8?q?=E8=A1=A5=E5=85=85fansclub=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- output/IOutput.py | 10 ++++++++++ output/print.py | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/output/IOutput.py b/output/IOutput.py index 7006c06..84b2601 100644 --- a/output/IOutput.py +++ b/output/IOutput.py @@ -1,6 +1,7 @@ from messages.base import Base from messages.chat import ChatMessage from messages.control import ControlMessage +from messages.fansclub import FansclubMessage from messages.gift import GiftMessage from messages.like import LikeMessage from messages.member import MemberMessage @@ -9,6 +10,9 @@ from messages.social import SocialMessage class IOutput(): + def __del__(self): + self.terminate() + def output(self, message_type: str, message_obj: Base): ... @@ -33,8 +37,14 @@ class IOutput(): def control_output(self, message: ControlMessage): ... + def fansclub_output(self, message: FansclubMessage): + ... + def other_output(self, message_type: str, message_raw: bytes): ... def error_output(self, message_type: str, message_raw: bytes, exception: Exception): + ... + + def terminate(self): ... \ No newline at end of file diff --git a/output/print.py b/output/print.py index 3669a11..192a8a8 100644 --- a/output/print.py +++ b/output/print.py @@ -31,3 +31,9 @@ class Print(IOutput): def userseq_output(self, msg): print(f"\n{YELLOW}[+] {msg} {RESET}") + + def control_output(self, msg): + print(f"\n{CYAN}[+] {msg} {RESET}") + + def fansclub_output(self, msg): + print(f"\n{GREEN}[+] {msg} {RESET}") From 788c8cba9d31dd6538f3ff57b802f6d9b989da1f Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Sun, 5 Jun 2022 22:39:19 +0800 Subject: [PATCH 19/36] =?UTF-8?q?=E7=95=99=E4=B8=80=E4=B8=AA=E9=80=80?= =?UTF-8?q?=E5=87=BA=E5=90=8E=E6=B8=85=E7=90=86=E7=9A=84=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E8=99=BD=E7=84=B6windows=E4=B8=8A=E7=94=A8=E4=B8=8D?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 10 ++++++++++ output/manager.py | 6 +++++- output/xml.py | 27 +++++++++++++++++---------- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/main.py b/main.py index ca0edea..768b348 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ import threading import subprocess +import atexit from config.helper import config from handler.http_server import app @@ -15,5 +16,14 @@ if __name__ == '__main__': api_thread.start() browser_manager = init_browser_manager() output_manager = OutputManager() + + + def terminate(): + print("terminate") + browser_manager.terminate() + output_manager.terminate() + + + atexit.register(terminate) output_manager.start_loop() api_thread.join() diff --git a/output/manager.py b/output/manager.py index e241a91..47f637b 100644 --- a/output/manager.py +++ b/output/manager.py @@ -40,7 +40,7 @@ class OutputManager(): self._writer.append(self._mapping[_c]()) def __del__(self): - ... + self.terminate() def decode_payload(self, message: MessagePayload): try: @@ -107,3 +107,7 @@ class OutputManager(): while True: message = MESSAGE_QUEUE.get() self.decode_payload(message) + + def terminate(self): + for writer in self._writer: + writer.terminate() diff --git a/output/xml.py b/output/xml.py index 885bfc6..ecb5804 100644 --- a/output/xml.py +++ b/output/xml.py @@ -8,29 +8,30 @@ class XMLWriter(IOutput): """ 可输出与B站弹幕姬兼容的xml弹幕格式,可用于转成ass字幕 """ + def __init__(self): - self.file_mappings: "dict[str, IO[str]]" = {} + self._file_mappings: "dict[str, IO[str]]" = {} self.time_mappings: "dict[str, float]" = {} self._file_name_pattern: "str" = config()['output']['xml']['file_pattern'] def _get_fd_by_room_id(self, room_id: str) -> IO[str]: - if room_id in self.file_mappings: - return self.file_mappings[room_id] + if room_id in self._file_mappings: + return self._file_mappings[room_id] cur_ts = time.time() fd = open(self._file_name_pattern.format_map({ "room_id": room_id, "ts": cur_ts }), "w", encoding="UTF-8") - self.file_mappings[room_id] = fd + self._file_mappings[room_id] = fd self.time_mappings[room_id] = cur_ts return fd def _close_fd_by_room_id(self, room_id: str): - if room_id in self.file_mappings: - fd = self.file_mappings[room_id] + if room_id in self._file_mappings: + fd = self._file_mappings[room_id] if not fd.closed: fd.close() - del self.file_mappings[room_id] + del self._file_mappings[room_id] if room_id in self.time_mappings: del self.time_mappings[room_id] @@ -50,9 +51,9 @@ class XMLWriter(IOutput): if fd is None: return cur_time = time.time() - _c = """{}\r\n""".format( - self._get_bias_ts_by_room_id(message.room_id, cur_time), - cur_time*1000, message.user().id, message.user().nickname, message.content + _c = """{}\r\n""".format( + self._get_bias_ts_by_room_id(message.room_id, cur_time), message.room_id, + cur_time * 1000, message.user().id, message.user().nickname, message.content ) fd.write(_c) @@ -66,3 +67,9 @@ class XMLWriter(IOutput): message.user().nickname, message.gift.name, message.instance.repeatCount ) fd.write(_c) + + def terminate(self): + print("保存所有弹幕文件中...") + for _room_id in self._file_mappings: + self._close_fd_by_room_id(_room_id) + print("保存完毕") From 77d48545304157d097e10f3013d0d6cec9d77ab0 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 09:10:37 +0800 Subject: [PATCH 20/36] =?UTF-8?q?write=E5=90=8E=E5=8F=8A=E6=97=B6flush?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8Dwindows=E9=80=80=E5=87=BA=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=A7=A6=E5=8F=91=E7=BB=91=E5=AE=9A=E7=9A=84=E4=BF=A1?= =?UTF-8?q?=E5=8F=B7=E7=9B=91=E5=90=AC=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- output/xml.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/output/xml.py b/output/xml.py index ecb5804..c2692d7 100644 --- a/output/xml.py +++ b/output/xml.py @@ -56,6 +56,7 @@ class XMLWriter(IOutput): cur_time * 1000, message.user().id, message.user().nickname, message.content ) fd.write(_c) + fd.flush() def gift_output(self, message): fd = self._get_fd_by_room_id(message.room_id) @@ -67,6 +68,7 @@ class XMLWriter(IOutput): message.user().nickname, message.gift.name, message.instance.repeatCount ) fd.write(_c) + fd.flush() def terminate(self): print("保存所有弹幕文件中...") From 82110682152a7fcab3d7958aa8f04b22e35e0174 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 12:25:42 +0800 Subject: [PATCH 21/36] =?UTF-8?q?=E4=BD=BF=E7=94=A87.0.x=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=9A=84mitmproxy=EF=BC=8C=E5=8E=BB=E9=99=A4=E5=A4=96=E7=BD=AE?= =?UTF-8?q?mitmproxy=E4=BE=9D=E8=B5=96=EF=BC=8C=E5=8F=AF=E7=AE=80=E5=8C=96?= =?UTF-8?q?http=E7=BD=91=E7=BB=9C=E5=BC=80=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/settings.yml | 2 +- handler/common.py | 11 ------- main.py | 18 +++++------ output/manager.py | 5 +-- proxy/__init__.py | 0 proxy/addon/__init__.py | 0 proxy/addon/danmaku_ws.py | 24 +++++++++++++++ proxy/addon/userinfo_http.py | 11 +++++++ proxy/common.py | 9 ++++++ proxy/manager.py | 59 ++++++++++++++++++++++++++++++++++++ proxy/queues.py | 4 +++ requirements.txt | 4 +-- 12 files changed, 119 insertions(+), 28 deletions(-) delete mode 100644 handler/common.py create mode 100644 proxy/__init__.py create mode 100644 proxy/addon/__init__.py create mode 100644 proxy/addon/danmaku_ws.py create mode 100644 proxy/addon/userinfo_http.py create mode 100644 proxy/common.py create mode 100644 proxy/manager.py create mode 100644 proxy/queues.py diff --git a/config/settings.yml b/config/settings.yml index 8f53b71..726e3b7 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -1,5 +1,4 @@ mitm: - bin: 'C:\Program Files (x86)\mitmproxy\bin\mitmdump.exe' host: 127.0.0.1 port: 8080 @@ -26,6 +25,7 @@ output: live: rooms: - "585723119943" + - "583853809376" users: - MS4wLjABAAAAzBItqEvCjPryxn_Y6w6LtRBFDOVNfjvYSJg8VVZFwlw diff --git a/handler/common.py b/handler/common.py deleted file mode 100644 index 292b2c6..0000000 --- a/handler/common.py +++ /dev/null @@ -1,11 +0,0 @@ -import time -from queue import SimpleQueue - -MESSAGE_QUEUE: "SimpleQueue[MessagePayload]" = SimpleQueue() - - -class MessagePayload(object): - def __init__(self, body: bytes, timestamp: str = ""): - self.request_timestamp = timestamp - self.body = body - self.curretnt_timestamp = time.time() diff --git a/main.py b/main.py index 768b348..344b17b 100644 --- a/main.py +++ b/main.py @@ -1,19 +1,13 @@ -import threading -import subprocess import atexit +import signal -from config.helper import config -from handler.http_server import app from browser.manager import init_manager as init_browser_manager from output.manager import OutputManager +from proxy.manager import init_manager as init_proxy_manager if __name__ == '__main__': - mitmproxy_process = subprocess.Popen([ - config()["mitm"]["bin"], "-s", "./proxy_script.py", "-q", - "--listen-host", config()["mitm"]["host"], "--listen-port", str(config()["mitm"]["port"]) - ]) - api_thread = threading.Thread(target=app.run, args=(config()["http"]["host"], config()["http"]["port"],)) - api_thread.start() + proxy_manager = init_proxy_manager() + proxy_manager.start_loop() browser_manager = init_browser_manager() output_manager = OutputManager() @@ -25,5 +19,7 @@ if __name__ == '__main__': atexit.register(terminate) + signal.signal(signal.SIGTERM, terminate) + signal.signal(signal.SIGINT, terminate) output_manager.start_loop() - api_thread.join() + proxy_manager.join() diff --git a/output/manager.py b/output/manager.py index 47f637b..8577612 100644 --- a/output/manager.py +++ b/output/manager.py @@ -3,7 +3,7 @@ import threading from typing import TYPE_CHECKING from config.helper import config -from handler.common import MessagePayload, MESSAGE_QUEUE +from proxy.queues import MESSAGE_QUEUE from messages.chat import ChatMessage from messages.control import ControlMessage from messages.gift import GiftMessage @@ -19,6 +19,7 @@ from protobuf import message_pb2, wss_pb2 if TYPE_CHECKING: from typing import Type, Optional from output.IOutput import IOutput + from proxy.common import MessagePayload class OutputManager(): @@ -42,7 +43,7 @@ class OutputManager(): def __del__(self): self.terminate() - def decode_payload(self, message: MessagePayload): + def decode_payload(self, message: "MessagePayload"): try: response = message_pb2.Response() wss = wss_pb2.WssResponse() diff --git a/proxy/__init__.py b/proxy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/proxy/addon/__init__.py b/proxy/addon/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/proxy/addon/danmaku_ws.py b/proxy/addon/danmaku_ws.py new file mode 100644 index 0000000..4d79d48 --- /dev/null +++ b/proxy/addon/danmaku_ws.py @@ -0,0 +1,24 @@ +import re + +from proxy.common import MessagePayload +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from mitmproxy import http + from queue import SimpleQueue + + +class DanmakuWebsocketAddon: + def __init__(self, queue: "SimpleQueue[MessagePayload]"): + self._queue = queue + + def websocket_message(self, flow: "http.HTTPFlow"): + re_c = re.search('webcast\d-ws-web-.*\.douyin\.com', flow.request.host) + if re_c: + message = flow.websocket.messages[-1] + if message.from_client: + return + payload = MessagePayload(message.content) + payload.request_url = flow.request.url + payload.request_query = flow.request.query + self._queue.put(payload) diff --git a/proxy/addon/userinfo_http.py b/proxy/addon/userinfo_http.py new file mode 100644 index 0000000..e3e3074 --- /dev/null +++ b/proxy/addon/userinfo_http.py @@ -0,0 +1,11 @@ +from mitmproxy import http + + +class UserInfoAddon: + def __init__(self): + ... + + def response(self, flow: http.HTTPFlow): + # /aweme/v1/web/user/profile/other/ 他人主页获取他人信息 + if '/aweme/v1/web/user/profile/other' in flow.request.path: + content = flow.response.content diff --git a/proxy/common.py b/proxy/common.py new file mode 100644 index 0000000..68f00b9 --- /dev/null +++ b/proxy/common.py @@ -0,0 +1,9 @@ +import time + + +class MessagePayload(object): + def __init__(self, body: bytes): + self.body = body + self.timestamp: float = time.time() + self.request_url: str = "" + self.request_query: dict[str, str] = {} diff --git a/proxy/manager.py b/proxy/manager.py new file mode 100644 index 0000000..6c418ff --- /dev/null +++ b/proxy/manager.py @@ -0,0 +1,59 @@ +import asyncio +import threading +from typing import TYPE_CHECKING + +from mitmproxy.options import Options +from mitmproxy.tools.dump import DumpMaster + +from config.helper import config +from proxy.addon.danmaku_ws import DanmakuWebsocketAddon +from proxy.queues import MESSAGE_QUEUE + +if TYPE_CHECKING: + from typing import Optional + +_manager: "Optional[ProxyManager]" = None + + +class ProxyManager: + def __init__(self): + self._mitm_instance = None + opts = Options( + listen_host=config()['mitm']['host'], + listen_port=config()['mitm']['port'], + ) + self._mitm_instance = DumpMaster(options=opts) + self._load_addon() + opts.update_defer( + flow_detail=0, + termlog_verbosity="error", + ) + self._thread = None + + def _load_addon(self): + self._mitm_instance.addons.add(DanmakuWebsocketAddon(MESSAGE_QUEUE)) + + def _start(self): + loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + self._mitm_instance.run() + + def start_loop(self): + self._thread = threading.Thread(target=self._start) + self._thread.start() + + def join(self): + if self._thread: + self._thread.join() + + +def init_manager(): + global _manager + _manager = ProxyManager() + return _manager + + +def get_manager(): + if _manager is None: + return init_manager() + return _manager diff --git a/proxy/queues.py b/proxy/queues.py new file mode 100644 index 0000000..ac037ba --- /dev/null +++ b/proxy/queues.py @@ -0,0 +1,4 @@ +from queue import SimpleQueue +from proxy.common import MessagePayload + +MESSAGE_QUEUE: "SimpleQueue[MessagePayload]" = SimpleQueue() diff --git a/requirements.txt b/requirements.txt index ee9e40c..dcc86b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,5 @@ protobuf==3.19.1 PyYAML==6.0 selenium==4.1.0 requests==2.27.1 -scripts==2.0 - -Flask~=2.1.2 \ No newline at end of file +mitmproxy~=7.0.4 From 710da4234164dac18c177f07eb9b45b031794569 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 12:36:27 +0800 Subject: [PATCH 22/36] =?UTF-8?q?=E5=8E=BB=E9=99=A4api=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handler/__init__.py | 0 handler/http_server.py | 48 ------------------------------------------ 2 files changed, 48 deletions(-) delete mode 100644 handler/__init__.py delete mode 100644 handler/http_server.py diff --git a/handler/__init__.py b/handler/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/handler/http_server.py b/handler/http_server.py deleted file mode 100644 index c2fccb1..0000000 --- a/handler/http_server.py +++ /dev/null @@ -1,48 +0,0 @@ -import json - -from flask import Flask, request, Response -from handler.common import MESSAGE_QUEUE, MessagePayload -import logging -# 不要日志,当它不存在 -log = logging.getLogger('werkzeug') -log.setLevel(logging.ERROR) - -app = Flask(__name__) -app.config['JSON_AS_ASCII'] = False - - -@app.post("/message") -def message_from_mitmproxy(): - payload = MessagePayload(request.data, request.headers.get("X-MITM-TS", "")) - MESSAGE_QUEUE.put(payload) - return Response(status=204) - - -@app.post("/user_info") -def user_info_from_mitmproxy(): - try: - user_info = json.loads(request.data) - except json.JSONDecodeError: - return Response(status=403) - print(user_info) - if "user" not in user_info: - # 这个请求有问题 - return Response(status=403) - user = user_info['user'] - #有用的信息 - { - # 抖音加密的用户id,也就是url上的id字符串 - "sec_user_id": user.get('sec_uid', ""), - # 用户真实的数字id - "user_id": user.get('uid', 0), - # 开播状态,1是开播了 - "live_status": user.get('live_status', 0), - # 和西瓜视频一样,每次开播,room_id都会变化,需要动态拿取 - "room_id": user.get('room_id', 0), - "nickname": user.get('nickname', ""), - # 多平台粉丝数,包含西瓜视频等关联字节公司下的账号粉丝总数 - "mp_fans_count": user.get('mplatform_followers_count', 0), - # 近期加的归属地 - "ip_location": user.get('ip_location', ""), - } - return Response(status=204) From d57287507a728df5de658386624ef99a681fc251 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 12:36:53 +0800 Subject: [PATCH 23/36] =?UTF-8?q?=E7=B2=89=E4=B8=9D=E5=9B=A2=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- output/manager.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/output/manager.py b/output/manager.py index 8577612..a6dd305 100644 --- a/output/manager.py +++ b/output/manager.py @@ -3,6 +3,7 @@ import threading from typing import TYPE_CHECKING from config.helper import config +from messages.fansclub import FansclubMessage from proxy.queues import MESSAGE_QUEUE from messages.chat import ChatMessage from messages.control import ControlMessage @@ -93,6 +94,11 @@ class OutputManager(): control_message.set_payload(message.payload) for writer in self._writer: writer.control_output(control_message) + elif message.method == 'WebcastFansclubMessage': + fansclub_message = FansclubMessage() + fansclub_message.set_payload(message.payload) + for writer in self._writer: + writer.fansclub_output(fansclub_message) else: for writer in self._writer: writer.other_output(message.method, message.payload) From 218082fed6529e8a30a40bee12efddbb76cc20d2 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 15:07:07 +0800 Subject: [PATCH 24/36] =?UTF-8?q?op=5Ftab=E5=BF=AB=E6=8D=B7=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/IDriver.py | 20 ++++++++++++++++++++ browser/chrome.py | 20 +++++++++++--------- browser/edge.py | 20 +++++++++++--------- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/browser/IDriver.py b/browser/IDriver.py index 4eff625..cb8b353 100644 --- a/browser/IDriver.py +++ b/browser/IDriver.py @@ -1,12 +1,32 @@ +import contextlib + + class IDriver(): def new_tab(self) -> str: ... + def get_current_tab(self) -> str: + ... + def change_tab(self, tab_handler: str): ... def open_url(self, url: str, tab_handler: str = ""): ... + @contextlib.contextmanager + def op_tab(self, tab_handler: str): + cur_handle = self.get_current_tab() + if tab_handler == "": + tab_handler = cur_handle + try: + self.change_tab(tab_handler) + yield self + finally: + self.change_tab(cur_handle) + + def refresh(self, tab_handler: str = ""): + ... + def screenshot(self, tab_handler: str = "") -> str: ... diff --git a/browser/chrome.py b/browser/chrome.py index b99ada5..939a3c9 100644 --- a/browser/chrome.py +++ b/browser/chrome.py @@ -45,15 +45,17 @@ class ChromeDriver(IDriver): return self.browser.switch_to.window(tab_handler) + def get_current_tab(self) -> str: + return self.browser.current_window_handle + def open_url(self, url: str, tab_handler: str = ""): - if tab_handler != "": - self.change_tab(tab_handler) - self.browser.get(url) + with self.op_tab(tab_handler): + self.browser.get(url) + + def refresh(self, tab_handler: str = ""): + with self.op_tab(tab_handler): + self.browser.refresh() def screenshot(self, tab_handler: str = "") -> str: - cur_handle = self.browser.current_window_handle - if tab_handler != "": - self.change_tab(tab_handler) - b64 = self.browser.get_screenshot_as_base64() - self.change_tab(cur_handle) - return b64 + with self.op_tab(tab_handler): + return self.browser.get_screenshot_as_base64() diff --git a/browser/edge.py b/browser/edge.py index 28648fc..4bb2e5a 100644 --- a/browser/edge.py +++ b/browser/edge.py @@ -38,6 +38,9 @@ class EdgeDriver(IDriver): return _handle return "" + def get_current_tab(self) -> str: + return self.browser.current_window_handle + def change_tab(self, tab_handler: str): if tab_handler not in self.browser.window_handles: return @@ -46,14 +49,13 @@ class EdgeDriver(IDriver): self.browser.switch_to.window(tab_handler) def open_url(self, url: str, tab_handler: str = ""): - if tab_handler != "": - self.change_tab(tab_handler) - self.browser.get(url) + with self.op_tab(tab_handler): + self.browser.get(url) + + def refresh(self, tab_handler: str = ""): + with self.op_tab(tab_handler): + self.browser.refresh() def screenshot(self, tab_handler: str = "") -> str: - cur_handle = self.browser.current_window_handle - if tab_handler != "": - self.change_tab(tab_handler) - b64 = self.browser.get_screenshot_as_base64() - self.change_tab(cur_handle) - return b64 + with self.op_tab(tab_handler): + return self.browser.get_screenshot_as_base64() From b0c1afb2fd0bd38b79996e20e7dc629bd1f03804 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 15:16:21 +0800 Subject: [PATCH 25/36] =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E6=9E=90?= =?UTF-8?q?=E6=9E=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/IDriver.py | 14 ++++++++++---- browser/chrome.py | 3 --- browser/edge.py | 3 --- browser/manager.py | 3 +++ 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/browser/IDriver.py b/browser/IDriver.py index cb8b353..d52fb4d 100644 --- a/browser/IDriver.py +++ b/browser/IDriver.py @@ -1,11 +1,17 @@ import contextlib +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from selenium.webdriver.remote.webdriver import WebDriver class IDriver(): - def new_tab(self) -> str: - ... + browser: "WebDriver" - def get_current_tab(self) -> str: + def __del__(self): + self.browser.stop_client() + + def new_tab(self) -> str: ... def change_tab(self, tab_handler: str): @@ -16,7 +22,7 @@ class IDriver(): @contextlib.contextmanager def op_tab(self, tab_handler: str): - cur_handle = self.get_current_tab() + cur_handle = self.browser.current_window_handle if tab_handler == "": tab_handler = cur_handle try: diff --git a/browser/chrome.py b/browser/chrome.py index 939a3c9..488249b 100644 --- a/browser/chrome.py +++ b/browser/chrome.py @@ -45,9 +45,6 @@ class ChromeDriver(IDriver): return self.browser.switch_to.window(tab_handler) - def get_current_tab(self) -> str: - return self.browser.current_window_handle - def open_url(self, url: str, tab_handler: str = ""): with self.op_tab(tab_handler): self.browser.get(url) diff --git a/browser/edge.py b/browser/edge.py index 4bb2e5a..3764f02 100644 --- a/browser/edge.py +++ b/browser/edge.py @@ -38,9 +38,6 @@ class EdgeDriver(IDriver): return _handle return "" - def get_current_tab(self) -> str: - return self.browser.current_window_handle - def change_tab(self, tab_handler: str): if tab_handler not in self.browser.window_handles: return diff --git a/browser/manager.py b/browser/manager.py index 94bb83f..27d276e 100644 --- a/browser/manager.py +++ b/browser/manager.py @@ -71,6 +71,9 @@ class BrowserManager(): if tab_info not in self._tabs: self._tabs.append(tab_info) + def terminate(self): + del self._driver + class TabInfo(object): TAB_TYPE_OTHER = "other" From 0e8d328e09cd2dd6e298b654b6028cb58666cdee Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 16:27:31 +0800 Subject: [PATCH 26/36] =?UTF-8?q?=E8=A1=A5=E5=85=85chromeDriver=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/chrome.py | 2 +- config/settings.yml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/browser/chrome.py b/browser/chrome.py index 488249b..d553e2f 100644 --- a/browser/chrome.py +++ b/browser/chrome.py @@ -21,7 +21,7 @@ class ChromeDriver(IDriver): proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) proxy.ssl_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) - capabilities = DesiredCapabilities.EDGE + capabilities = DesiredCapabilities.CHROME proxy.add_to_capabilities(capabilities) self.browser = webdriver.Chrome(options=options, diff --git a/config/settings.yml b/config/settings.yml index 726e3b7..044cfc8 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -7,6 +7,8 @@ webdriver: use: edge edge: bin: msedgedriver.exe + chrome: + bin: chromedriver output: use: From 224a047da03310723d9586618d4a550562b468d9 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 16:33:17 +0800 Subject: [PATCH 27/36] =?UTF-8?q?requirements=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/helper.py | 4 ++-- requirements.txt | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/config/helper.py b/config/helper.py index 3a737e5..4c67e88 100644 --- a/config/helper.py +++ b/config/helper.py @@ -1,9 +1,9 @@ from pathlib import Path -import yaml +from ruamel import yaml def config(): settings_file = str(Path(__file__).parent.absolute()) + '/settings.yml' with open(settings_file, 'r') as f: - return yaml.load(f, Loader=yaml.FullLoader) + return yaml.load(f, Loader=yaml.UnsafeLoader) diff --git a/requirements.txt b/requirements.txt index dcc86b3..7b7733b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,6 @@ colorama==0.4.4 -protobuf==3.19.1 -PyYAML==6.0 selenium==4.1.0 requests==2.27.1 mitmproxy~=7.0.4 +protobuf<3.19 \ No newline at end of file From f6b31811420f0584a0a02e064edf05c9cb77f356 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 16:38:41 +0800 Subject: [PATCH 28/36] type hint for python3.8 --- browser/manager.py | 4 ++-- output/manager.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/browser/manager.py b/browser/manager.py index 27d276e..41e2956 100644 --- a/browser/manager.py +++ b/browser/manager.py @@ -7,7 +7,7 @@ from browser.chrome import ChromeDriver from typing import TYPE_CHECKING if TYPE_CHECKING: - from typing import Type, Optional + from typing import Type, Optional, List from browser.IDriver import IDriver _manager: "Optional[BrowserManager]" = None @@ -24,7 +24,7 @@ class BrowserManager(): if _config not in self._mapping: raise Exception("不支持的浏览器") self._driver: IDriver = self._mapping[_config]() - self._tabs: list[TabInfo] = [] + self._tabs: "List[TabInfo]" = [] def init_browser(self): _users = config()['live']['users'] diff --git a/output/manager.py b/output/manager.py index a6dd305..e00b65b 100644 --- a/output/manager.py +++ b/output/manager.py @@ -18,7 +18,7 @@ from output.debug import DebugWriter from protobuf import message_pb2, wss_pb2 if TYPE_CHECKING: - from typing import Type, Optional + from typing import Type, Optional, List from output.IOutput import IOutput from proxy.common import MessagePayload @@ -29,7 +29,7 @@ class OutputManager(): "xml": XMLWriter, "debug": DebugWriter, } - _writer: "list[IOutput]" = [] + _writer: "List[IOutput]" = [] _thread: "Optional[threading.Thread]"= None def __init__(self): @@ -56,7 +56,7 @@ class OutputManager(): for writer in self._writer: writer.error_output("ParseError", message.body, e) - def decode_message(self, message_list: list[message_pb2.Message]): + def decode_message(self, message_list: "List[message_pb2.Message]"): for message in message_list: try: if message.method == 'WebcastMemberMessage': From 059f82de00d34768b805de48e1216e20baf41f5c Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 16:47:40 +0800 Subject: [PATCH 29/36] =?UTF-8?q?no-sandbox=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/chrome.py | 2 ++ config/settings.yml | 1 + 2 files changed, 3 insertions(+) diff --git a/browser/chrome.py b/browser/chrome.py index d553e2f..9a56539 100644 --- a/browser/chrome.py +++ b/browser/chrome.py @@ -17,6 +17,8 @@ class ChromeDriver(IDriver): options.add_argument('-ignore-certificate-errors') options.add_argument('-ignore -ssl-errors') options.add_argument('--incognito') + if config()['webdriver']['chrome']['no_sandbox']: + options.add_argument('--no-sandbox') proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = "%s:%s" % (config()['mitm']['host'], config()['mitm']['port']) diff --git a/config/settings.yml b/config/settings.yml index 044cfc8..01a3469 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -9,6 +9,7 @@ webdriver: bin: msedgedriver.exe chrome: bin: chromedriver + no_sandbox: True output: use: From e02d0e05136044ad5cc46741f3f8f54494be4662 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 16:51:45 +0800 Subject: [PATCH 30/36] =?UTF-8?q?=E6=9E=90=E6=9E=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E5=85=BC=E5=AE=B9=E6=9C=89=E5=8F=82=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.py b/main.py index 344b17b..d684d99 100644 --- a/main.py +++ b/main.py @@ -12,7 +12,7 @@ if __name__ == '__main__': output_manager = OutputManager() - def terminate(): + def terminate(*_): print("terminate") browser_manager.terminate() output_manager.terminate() From d0d14291188a621b7fb56f7a4538946a77d1795b Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 16:54:38 +0800 Subject: [PATCH 31/36] =?UTF-8?q?xml=E4=BF=9D=E5=AD=98=E5=B9=B6=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- output/xml.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/output/xml.py b/output/xml.py index c2692d7..151e475 100644 --- a/output/xml.py +++ b/output/xml.py @@ -72,6 +72,8 @@ class XMLWriter(IOutput): def terminate(self): print("保存所有弹幕文件中...") - for _room_id in self._file_mappings: + # copy + _rooms = [i for i in self._file_mappings.keys()] + for _room_id in _rooms: self._close_fd_by_room_id(_room_id) print("保存完毕") From 7135e105276eafb3b582ba9af2a6d729962325ab Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 16:55:02 +0800 Subject: [PATCH 32/36] =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E6=9E=90?= =?UTF-8?q?=E6=9E=84=E6=97=B6=EF=BC=8C=E6=8E=A8=E5=87=BA=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/IDriver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/IDriver.py b/browser/IDriver.py index d52fb4d..996441b 100644 --- a/browser/IDriver.py +++ b/browser/IDriver.py @@ -9,7 +9,7 @@ class IDriver(): browser: "WebDriver" def __del__(self): - self.browser.stop_client() + self.browser.quit() def new_tab(self) -> str: ... From 81c53ba373377f58f458e99c029d007242e806ac Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 17:07:00 +0800 Subject: [PATCH 33/36] =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E6=80=A7=E5=8F=8Amitm=E6=9E=90=E6=9E=84=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/chrome.py | 6 ++++-- browser/edge.py | 5 +++-- browser/manager.py | 3 ++- main.py | 1 + proxy/manager.py | 7 +++++++ 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/browser/chrome.py b/browser/chrome.py index 9a56539..5a44aa2 100644 --- a/browser/chrome.py +++ b/browser/chrome.py @@ -13,10 +13,12 @@ class ChromeDriver(IDriver): options = Options() if config()['webdriver']['headless']: options.add_argument("--headless") + options.add_argument("--window-size=1920,1080") options.add_argument('--proxy-server=%s:%s' % (config()['mitm']['host'], config()['mitm']['port'])) - options.add_argument('-ignore-certificate-errors') - options.add_argument('-ignore -ssl-errors') + options.add_argument('--ignore-certificate-errors') + options.add_argument('--ignore-ssl-errors') options.add_argument('--incognito') + options.add_experimental_option('excludeSwitches', ['ignore-certificate-errors']) if config()['webdriver']['chrome']['no_sandbox']: options.add_argument('--no-sandbox') proxy = Proxy() diff --git a/browser/edge.py b/browser/edge.py index 3764f02..c3618c7 100644 --- a/browser/edge.py +++ b/browser/edge.py @@ -13,9 +13,10 @@ class EdgeDriver(IDriver): options = Options() if config()['webdriver']['headless']: options.add_argument("--headless") + options.add_argument("--window-size=1920,1080") options.add_argument('--proxy-server=%s:%s' % (config()['mitm']['host'], config()['mitm']['port'])) - options.add_argument('-ignore-certificate-errors') - options.add_argument('-ignore -ssl-errors') + options.add_argument('--ignore-certificate-errors') + options.add_argument('--ignore-ssl-errors') options.add_argument('--incognito') proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL diff --git a/browser/manager.py b/browser/manager.py index 41e2956..e436261 100644 --- a/browser/manager.py +++ b/browser/manager.py @@ -72,7 +72,8 @@ class BrowserManager(): self._tabs.append(tab_info) def terminate(self): - del self._driver + if self._driver: + del self._driver class TabInfo(object): diff --git a/main.py b/main.py index d684d99..43dbecd 100644 --- a/main.py +++ b/main.py @@ -16,6 +16,7 @@ if __name__ == '__main__': print("terminate") browser_manager.terminate() output_manager.terminate() + proxy_manager.terminate() atexit.register(terminate) diff --git a/proxy/manager.py b/proxy/manager.py index 6c418ff..41d2617 100644 --- a/proxy/manager.py +++ b/proxy/manager.py @@ -30,6 +30,13 @@ class ProxyManager: ) self._thread = None + def __del__(self): + self.terminate() + + def terminate(self): + if self._mitm_instance: + self._mitm_instance.shutdown() + def _load_addon(self): self._mitm_instance.addons.add(DanmakuWebsocketAddon(MESSAGE_QUEUE)) From 5d2b86d8e745ef2439d1415188f48530f847496c Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 17:15:10 +0800 Subject: [PATCH 34/36] =?UTF-8?q?=E6=B5=8F=E8=A7=88=E5=99=A8=E6=9E=90?= =?UTF-8?q?=E6=9E=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- browser/IDriver.py | 3 +++ browser/manager.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/browser/IDriver.py b/browser/IDriver.py index 996441b..a89c681 100644 --- a/browser/IDriver.py +++ b/browser/IDriver.py @@ -9,6 +9,9 @@ class IDriver(): browser: "WebDriver" def __del__(self): + self.terminate() + + def terminate(self): self.browser.quit() def new_tab(self) -> str: diff --git a/browser/manager.py b/browser/manager.py index e436261..aa1942e 100644 --- a/browser/manager.py +++ b/browser/manager.py @@ -73,7 +73,7 @@ class BrowserManager(): def terminate(self): if self._driver: - del self._driver + self._driver.terminate() class TabInfo(object): From 2444545dc167bacd16a15c1a5c7e10508cba9182 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Mon, 6 Jun 2022 17:22:57 +0800 Subject: [PATCH 35/36] =?UTF-8?q?=E9=81=BF=E5=85=8D=E9=80=80=E5=87=BA?= =?UTF-8?q?=E6=97=B6=EF=BC=8Coutput=E9=98=BB=E5=A1=9E=E9=80=80=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- output/manager.py | 9 +++++++++ proxy/queues.py | 8 ++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/output/manager.py b/output/manager.py index e00b65b..79519c7 100644 --- a/output/manager.py +++ b/output/manager.py @@ -31,6 +31,7 @@ class OutputManager(): } _writer: "List[IOutput]" = [] _thread: "Optional[threading.Thread]"= None + _should_exit = threading.Event() def __init__(self): _config = config()['output']['use'] @@ -107,14 +108,22 @@ class OutputManager(): writer.error_output(message.method, message.payload, e) def start_loop(self): + self._should_exit.clear() self._thread = threading.Thread(target=self._handle) self._thread.start() def _handle(self): while True: message = MESSAGE_QUEUE.get() + if self._should_exit.is_set(): + break + if message is None: + continue self.decode_payload(message) def terminate(self): + self._should_exit.set() + MESSAGE_QUEUE.put(None) + for writer in self._writer: writer.terminate() diff --git a/proxy/queues.py b/proxy/queues.py index ac037ba..a9cf669 100644 --- a/proxy/queues.py +++ b/proxy/queues.py @@ -1,4 +1,8 @@ from queue import SimpleQueue -from proxy.common import MessagePayload +from typing import TYPE_CHECKING -MESSAGE_QUEUE: "SimpleQueue[MessagePayload]" = SimpleQueue() +if TYPE_CHECKING: + from typing import Optional + from proxy.common import MessagePayload + +MESSAGE_QUEUE: "SimpleQueue[Optional[MessagePayload]]" = SimpleQueue() From 51e262762abd33cd4716908b43c435c6c7b940b5 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 8 Jun 2022 11:21:42 +0800 Subject: [PATCH 36/36] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=9C=A8linux=E4=B8=8A?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=AD=A3=E5=B8=B8gracefully=20exit=20?= =?UTF-8?q?=E5=90=8E=E6=9C=9FAFK=E4=BA=86=EF=BC=8C=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E5=A4=AA=E5=BF=99=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- output/IOutput.py | 3 +++ output/manager.py | 3 ++- proxy/manager.py | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/output/IOutput.py b/output/IOutput.py index 84b2601..d3dd3a1 100644 --- a/output/IOutput.py +++ b/output/IOutput.py @@ -43,6 +43,9 @@ class IOutput(): def other_output(self, message_type: str, message_raw: bytes): ... + def debug_output(self, message_type: str, message_raw: str): + ... + def error_output(self, message_type: str, message_raw: bytes, exception: Exception): ... diff --git a/output/manager.py b/output/manager.py index 79519c7..40a5c4c 100644 --- a/output/manager.py +++ b/output/manager.py @@ -122,7 +122,8 @@ class OutputManager(): self.decode_payload(message) def terminate(self): - self._should_exit.set() + if self._should_exit: + self._should_exit.set() MESSAGE_QUEUE.put(None) for writer in self._writer: diff --git a/proxy/manager.py b/proxy/manager.py index 41d2617..d8f4b3a 100644 --- a/proxy/manager.py +++ b/proxy/manager.py @@ -18,6 +18,7 @@ _manager: "Optional[ProxyManager]" = None class ProxyManager: def __init__(self): self._mitm_instance = None + self._loop: "Optional[asyncio.AbstractEventLoop]" = None opts = Options( listen_host=config()['mitm']['host'], listen_port=config()['mitm']['port'], @@ -34,6 +35,9 @@ class ProxyManager: self.terminate() def terminate(self): + if self._loop: + if self._loop.is_running(): + self._loop.stop() if self._mitm_instance: self._mitm_instance.shutdown() @@ -42,6 +46,7 @@ class ProxyManager: def _start(self): loop = asyncio.new_event_loop() + self._loop = loop asyncio.set_event_loop(loop) self._mitm_instance.run()