录播端
This commit is contained in:
parent
f598a5da05
commit
3cdd12644e
53
Common.py
53
Common.py
@ -64,7 +64,7 @@ network = [{
|
||||
|
||||
def reloadConfig():
|
||||
global config
|
||||
if(os.path.exists('config.json')):
|
||||
if (os.path.exists('config.json')):
|
||||
_config_fp = open("config.json", "r", encoding="utf8")
|
||||
_config = json.load(_config_fp)
|
||||
config.update(_config)
|
||||
@ -100,14 +100,14 @@ def updateNetwork():
|
||||
|
||||
def getTimeDelta(a, b):
|
||||
sec = (a - b).seconds
|
||||
ms = (a - b).microseconds
|
||||
return sec+(ms/100000.0)
|
||||
ms = (a - b).microseconds
|
||||
return sec + (ms / 100000.0)
|
||||
|
||||
|
||||
def _doClean(_force=False):
|
||||
global doCleanTime, _clean_flag
|
||||
_disk = psutil.disk_usage(".")
|
||||
if _disk.percent > config["max"] or getTimeDelta(datetime.now(), doCleanTime) > config["exp"]*86400 or _force:
|
||||
if _disk.percent > config["max"] or getTimeDelta(datetime.now(), doCleanTime) > config["exp"] * 86400 or _force:
|
||||
_clean_flag = True
|
||||
doCleanTime = datetime.now()
|
||||
appendOperation("执行配置的清理命令")
|
||||
@ -127,9 +127,9 @@ def doClean(_force=False):
|
||||
|
||||
def getCurrentStatus():
|
||||
_disk = psutil.disk_usage(".")
|
||||
_mem = psutil.virtual_memory()
|
||||
_net = psutil.net_io_counters()
|
||||
_delta= getTimeDelta(network[-1]["currentTime"], network[-2]["currentTime"])
|
||||
_mem = psutil.virtual_memory()
|
||||
_net = psutil.net_io_counters()
|
||||
_delta = getTimeDelta(network[-1]["currentTime"], network[-2]["currentTime"])
|
||||
if 60 > _delta > 1:
|
||||
_inSpeed = (network[-1]["in"]["currentByte"] - network[-2]["in"]["currentByte"]) / _delta
|
||||
_outSpeed = (network[-1]["out"]["currentByte"] - network[-2]["out"]["currentByte"]) / _delta
|
||||
@ -312,7 +312,6 @@ def loginBilibili(force=False):
|
||||
class downloader(XiGuaLiveApi):
|
||||
playlist = None
|
||||
|
||||
|
||||
def updRoomInfo(self, force=False):
|
||||
doClean()
|
||||
super(downloader, self).updRoomInfo(force)
|
||||
@ -339,36 +338,6 @@ class downloader(XiGuaLiveApi):
|
||||
streamUrl = None
|
||||
self.playlist = None
|
||||
|
||||
def onLike(self, user):
|
||||
pass
|
||||
|
||||
def onAd(self, i):
|
||||
pass
|
||||
|
||||
def onChat(self, chat):
|
||||
pass
|
||||
|
||||
def onEnter(self, msg):
|
||||
pass
|
||||
|
||||
def onJoin(self, user):
|
||||
pass
|
||||
|
||||
def onLeave(self, json):
|
||||
self.updRoomInfo()
|
||||
|
||||
def onMessage(self, msg):
|
||||
pass
|
||||
|
||||
def onPresent(self, gift):
|
||||
pass
|
||||
|
||||
def onPresentEnd(self, gift):
|
||||
pass
|
||||
|
||||
def onSubscribe(self, user):
|
||||
pass
|
||||
|
||||
|
||||
api = downloader(config["l_u"])
|
||||
|
||||
@ -399,7 +368,7 @@ def publishVideo(date):
|
||||
global isUpload
|
||||
if forceNotUpload is False:
|
||||
b.finishUpload(config["t_t"].format(date), 17, config["tag"], config["des"],
|
||||
source=config["src"], no_reprint=0)
|
||||
source=config["src"], no_reprint=0)
|
||||
b.clear()
|
||||
else:
|
||||
appendUploadStatus("设置了不上传,所以[{}]的录播不会上传了".format(date))
|
||||
@ -417,16 +386,16 @@ def encodeVideo(name):
|
||||
appendEncodeStatus("Encoded File >{}< is too small, will ignore it".format(name))
|
||||
return False
|
||||
global isEncode
|
||||
isEncode=True
|
||||
isEncode = True
|
||||
appendEncodeStatus("Encoding >{}< Start".format(name))
|
||||
_new_name = os.path.splitext(name)[0]+".mp4"
|
||||
_new_name = os.path.splitext(name)[0] + ".mp4"
|
||||
_code = os.system(config["enc"].format(f=name, t=_new_name))
|
||||
if _code != 0:
|
||||
Common.appendError("Encode {} with Non-Zero Return.".format(name))
|
||||
return False
|
||||
Common.modifyLastEncodeStatus("Encode >{}< Finished".format(name))
|
||||
uploadQueue.put(_new_name)
|
||||
isEncode=False
|
||||
isEncode = False
|
||||
|
||||
|
||||
loginBilibili(True)
|
||||
|
12
README.md
12
README.md
@ -1,15 +1,5 @@
|
||||
# XiguaLiveDanmakuHelper
|
||||
|
||||
### 因西瓜直播弹幕接口加密了,所以该项目会尽量保证录播(获取房间信息及搜索用户信息)可正常使用,其他的接口看西瓜视频的心情了
|
||||
|
||||
### 西瓜直播弹幕助手--控制台版
|
||||
|
||||
界面版:[q792602257/XiguaDanmakuHelperGUI](https://github.com/q792602257/XiguaDanmakuHelperGUI "C# ver")
|
||||
|
||||
### 西瓜直播弹幕接口```api.py```
|
||||
|
||||
> - 西瓜直播的弹幕接口已经加密,有大佬可以去尝试解析一下
|
||||
|
||||
### 西瓜直播弹幕助手--录播端```WebMain.py```
|
||||
|
||||
> - 能够自动进行ffmpeg转码
|
||||
@ -19,8 +9,6 @@
|
||||
> - 少部分错误包容机制
|
||||
> - 有一个简单的WEB页面,及简单的控制接口
|
||||
|
||||
### 西瓜直播弹幕助手--礼物端```WinMain.py```
|
||||
|
||||
### <s>计划更新</s>
|
||||
|
||||
### 并没有呢,这段时间太忙了
|
||||
|
@ -1,31 +0,0 @@
|
||||
from .User import User
|
||||
from .Lottery import Lottery
|
||||
|
||||
|
||||
class Chat:
|
||||
|
||||
content =""
|
||||
user=None
|
||||
filterString = ["",]
|
||||
isFiltered = False
|
||||
|
||||
def __init__(self, json=None, lottery:Lottery = None):
|
||||
if json:
|
||||
self.parse(json)
|
||||
if lottery:
|
||||
self.filterString.append(lottery.content)
|
||||
|
||||
def parse(self, json):
|
||||
self.user = User(json)
|
||||
if "extra" in json:
|
||||
if "content" in json["extra"]:
|
||||
self.content = json["extra"]['content']
|
||||
if self.content in self.filterString:
|
||||
self.isFiltered = True
|
||||
|
||||
def __str__(self):
|
||||
return "{} : {}".format(self.user,self.content)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.__str__()
|
||||
|
@ -1,61 +0,0 @@
|
||||
import requests
|
||||
from .User import User
|
||||
|
||||
|
||||
class Gift:
|
||||
roomID = 0
|
||||
giftList = {}
|
||||
|
||||
def __init__(self, json=None):
|
||||
self.ID = 0
|
||||
self.count = 0
|
||||
self.amount = 0
|
||||
self.user = None
|
||||
if json:
|
||||
self.parse(json)
|
||||
|
||||
def parse(self, json):
|
||||
self.user = User(json)
|
||||
if "common" in json and json["common"] is not None:
|
||||
if Gift.roomID != int(json["common"]["room_id"]):
|
||||
Gift.roomID = int(json["common"]["room_id"])
|
||||
self.update()
|
||||
if "extra" in json and json["extra"] is not None:
|
||||
if "present_info" in json["extra"] and json["extra"]['present_info'] is not None:
|
||||
self.ID = int(json["extra"]['present_info']['id'])
|
||||
self.count = json["extra"]['present_info']['repeat_count']
|
||||
elif "present_end_info" in json["extra"] and json["extra"]['present_end_info'] is not None:
|
||||
self.ID = int(json["extra"]['present_end_info']['id'])
|
||||
self.count = json["extra"]['present_end_info']['count']
|
||||
if self.ID != 0 and self.ID in self.giftList:
|
||||
self.amount = self.giftList[self.ID]["Price"] * self.count
|
||||
else:
|
||||
self.update()
|
||||
|
||||
def update(self):
|
||||
p = requests.get("https://i.snssdk.com/videolive/gift/get_gift_list?room_id={roomID}"
|
||||
"&version_code=800&device_platform=android".format(roomID=self.roomID))
|
||||
d = p.json()
|
||||
if "gift_info" not in d:
|
||||
print("错误:礼物更新失败")
|
||||
else:
|
||||
for i in d["gift_info"]:
|
||||
_id = int(i["id"])
|
||||
Gift.giftList[_id] = {"Name": i["name"], "Price": i["diamond_count"]}
|
||||
|
||||
def __str__(self):
|
||||
if self.ID in self.giftList:
|
||||
giftN = self.giftList[self.ID]["Name"]
|
||||
else:
|
||||
giftN = "未知礼物[{}]".format(self.ID)
|
||||
return "{user} 送出的 {count} 个 {name}".format(user=self.user, count=self.count, name=giftN)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.__str__()
|
||||
|
||||
def __repr__(self):
|
||||
if self.ID in self.giftList:
|
||||
giftN = self.giftList[self.ID]["Name"]
|
||||
else:
|
||||
giftN = "未知礼物"
|
||||
return "西瓜礼物【{}(ID:{})】".format(giftN, self.ID)
|
@ -1,71 +0,0 @@
|
||||
# coding=utf-8
|
||||
import requests
|
||||
import time
|
||||
from .LuckyUser import LuckyUser
|
||||
|
||||
|
||||
class Lottery:
|
||||
ID = 0
|
||||
isActive = False
|
||||
content = ""
|
||||
isFinished = False
|
||||
luckyUsers = []
|
||||
joinedUserCount = 0
|
||||
prizeName = ""
|
||||
finish = 0
|
||||
|
||||
def __init__(self, json=None):
|
||||
if json:
|
||||
self.parse(json)
|
||||
|
||||
def parse(self, json):
|
||||
if "lottery_info" in json and json["lottery_info"] is not None:
|
||||
self.isActive = int(json["lottery_info"]["status"]) > 0
|
||||
self.ID = json["lottery_info"]["lottery_id"]
|
||||
for i in json["lottery_info"]['conditions']:
|
||||
if i['type'] != 3:
|
||||
continue
|
||||
self.content = i["content"]
|
||||
self.joinedUserCount = int(json["lottery_info"]["candidate_num"])
|
||||
self.prizeName = json["lottery_info"]["prize_info"]["name"]
|
||||
_delta = int(json["lottery_info"]["draw_time"]) - int(json["lottery_info"]["current_time"])
|
||||
self.finish = time.time()+_delta+1
|
||||
elif "extra" in json and json["extra"] is not None:
|
||||
if "lottery_info" in json["extra"] and json["extra"]["lottery_info"] is not None:
|
||||
return self.parse(json["extra"])
|
||||
|
||||
def update(self):
|
||||
if self.isActive:
|
||||
if not self.isFinished and self.finish > time.time():
|
||||
self.checkFinished()
|
||||
return True
|
||||
return False
|
||||
|
||||
def checkFinished(self):
|
||||
p = requests.get("https://i.snssdk.com/videolive/lottery/check_user_right?lottery_id={}"
|
||||
"&version_code=730&device_platform=android".format(
|
||||
self.ID
|
||||
))
|
||||
d = p.json()
|
||||
if d["base_resp"]["status_code"] != 0:
|
||||
self.isActive = False
|
||||
self.isFinished = False
|
||||
return
|
||||
self.isActive = int(d["lottery_info"]["status"]) > 0
|
||||
self.isFinished = int(d["lottery_info"]["status"]) == 2
|
||||
self.joinedUserCount = int(d["lottery_info"]["candidate_num"])
|
||||
if self.isFinished:
|
||||
self.luckyUsers = [ LuckyUser(i) for i in d["lottery_info"]["lucky_users"] ]
|
||||
|
||||
def __str__(self):
|
||||
if self.isFinished:
|
||||
ret = "恭喜以下中奖用户:\n"
|
||||
for i in self.luckyUsers:
|
||||
ret += "> {} {}\n".format(i,self.prizeName)
|
||||
ret += "> 参与人数:{}".format(self.joinedUserCount)
|
||||
return ret
|
||||
elif self.isActive:
|
||||
return "正在抽奖中。。。\n" \
|
||||
"> 参与人数:{}".format(self.joinedUserCount)
|
||||
else:
|
||||
return "抽奖已失效"
|
@ -1,19 +0,0 @@
|
||||
from .User import User
|
||||
|
||||
class LuckyUser:
|
||||
|
||||
user = None
|
||||
count = 0
|
||||
|
||||
def __init__(self, json=None):
|
||||
if json:
|
||||
self.parse(json)
|
||||
|
||||
def parse(self, json):
|
||||
self.user = User()
|
||||
self.user.ID = json['user_id']
|
||||
self.user.name = json['user_name']
|
||||
self.count = int(json["grant_count"])
|
||||
|
||||
def __str__(self):
|
||||
return "用户 {} 获得了 {} 个".format(self.user,self.count)
|
@ -1,36 +0,0 @@
|
||||
from .User import User
|
||||
|
||||
|
||||
class MemberMsg:
|
||||
type = 0
|
||||
content = ""
|
||||
user = None
|
||||
|
||||
def __init__(self, json=None):
|
||||
if json:
|
||||
self.parse(json)
|
||||
|
||||
def parse(self, json):
|
||||
self.user = User(json)
|
||||
if "extra" in json:
|
||||
if "action" in json["extra"]:
|
||||
self.type = json["extra"]['action']
|
||||
elif "content" in json["extra"]:
|
||||
self.content = json["extra"]['content']
|
||||
|
||||
def __str__(self):
|
||||
if self.type == 3:
|
||||
return "{} 被禁言了".format(self.user)
|
||||
elif self.type == 4:
|
||||
return "{} 被取消禁言了".format(self.user)
|
||||
elif self.type == 5:
|
||||
return "{} 被任命为房管".format(self.user)
|
||||
elif self.type == 1:
|
||||
return "{} 进入了房间".format(self.user)
|
||||
else:
|
||||
if self.content == "":
|
||||
return "未知消息{} 关于用户 {}".format(self.type, self.user)
|
||||
return self.content.format(self.user)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.__str__()
|
218
WinMain.py
218
WinMain.py
@ -1,218 +0,0 @@
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
|
||||
import requests
|
||||
|
||||
from Struct.MemberMsg import MemberMsg
|
||||
from Struct.User import User
|
||||
from Struct.Gift import Gift
|
||||
from Struct.Chat import Chat
|
||||
from Struct.Lottery import Lottery
|
||||
from api import XiGuaLiveApi as Api
|
||||
import msvcrt
|
||||
import ctypes
|
||||
|
||||
SHOW_ALL = False
|
||||
|
||||
|
||||
def readInput(caption, default, timeout: int = 5):
|
||||
start_time = time.time()
|
||||
print('{}({})\r\n>'.format(caption, default), end="")
|
||||
input = ''
|
||||
while True:
|
||||
if msvcrt.kbhit():
|
||||
chr = msvcrt.getwche()
|
||||
if ord(chr) == 13: # enter_key
|
||||
break
|
||||
elif ord(chr) == 27:
|
||||
break
|
||||
elif ord(chr) == 8:
|
||||
if input != "":
|
||||
input = input[:-1]
|
||||
msvcrt.putch(b" ")
|
||||
msvcrt.putch(b" ")
|
||||
msvcrt.putch(b"\b")
|
||||
msvcrt.putch(b"\b")
|
||||
if len(input) == 0:
|
||||
start_time = time.time()
|
||||
elif 32 > ord(chr) or 255 > ord(chr) > 126: # space_char
|
||||
continue
|
||||
else:
|
||||
input += chr
|
||||
if len(input) == 0 and (time.time() - start_time) > timeout:
|
||||
break
|
||||
|
||||
if len(input) > 0:
|
||||
print()
|
||||
return input
|
||||
else:
|
||||
print("使用默认值")
|
||||
return default
|
||||
|
||||
|
||||
STD_INPUT_HANDLE = -10
|
||||
STD_OUTPUT_HANDLE = -11
|
||||
STD_ERROR_HANDLE = -12
|
||||
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
|
||||
# 字体颜色定义 ,关键在于颜色编码,由2位十六进制组成,分别取0~f,前一位指的是背景色,后一位指的是字体色
|
||||
# 由于该函数的限制,应该是只有这16种,可以前景色与背景色组合。也可以几种颜色通过或运算组合,组合后还是在这16种颜色中
|
||||
|
||||
# Windows CMD命令行 字体颜色定义 text colors
|
||||
FOREGROUND_BLACK = 0x00 # black.
|
||||
FOREGROUND_DARKBLUE = 0x01 # dark blue.
|
||||
FOREGROUND_DARKGREEN = 0x02 # dark green.
|
||||
FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.
|
||||
FOREGROUND_DARKRED = 0x04 # dark red.
|
||||
FOREGROUND_DARKPINK = 0x05 # dark pink.
|
||||
FOREGROUND_DARKYELLOW = 0x06 # dark yellow.
|
||||
FOREGROUND_DARKWHITE = 0x07 # dark white.
|
||||
FOREGROUND_DARKGRAY = 0x08 # dark gray.
|
||||
FOREGROUND_BLUE = 0x09 # blue.
|
||||
FOREGROUND_GREEN = 0x0a # green.
|
||||
FOREGROUND_SKYBLUE = 0x0b # skyblue.
|
||||
FOREGROUND_RED = 0x0c # red.
|
||||
FOREGROUND_PINK = 0x0d # pink.
|
||||
FOREGROUND_YELLOW = 0x0e # yellow.
|
||||
FOREGROUND_WHITE = 0x0f # white.
|
||||
|
||||
# Windows CMD命令行 背景颜色定义 background colors
|
||||
BACKGROUND_BLACK = 0x00 # dark blue.
|
||||
BACKGROUND_DARKBLUE = 0x10 # dark blue.
|
||||
BACKGROUND_DARKGREEN = 0x20 # dark green.
|
||||
BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue.
|
||||
BACKGROUND_DARKRED = 0x40 # dark red.
|
||||
BACKGROUND_DARKPINK = 0x50 # dark pink.
|
||||
BACKGROUND_DARKYELLOW = 0x60 # dark yellow.
|
||||
BACKGROUND_DARKWHITE = 0x70 # dark white.
|
||||
BACKGROUND_DARKGRAY = 0x80 # dark gray.
|
||||
BACKGROUND_BLUE = 0x90 # blue.
|
||||
BACKGROUND_GREEN = 0xa0 # green.
|
||||
BACKGROUND_SKYBLUE = 0xb0 # skyblue.
|
||||
BACKGROUND_RED = 0xc0 # red.
|
||||
BACKGROUND_PINK = 0xd0 # pink.
|
||||
BACKGROUND_YELLOW = 0xe0 # yellow.
|
||||
BACKGROUND_WHITE = 0xf0 # white.
|
||||
|
||||
|
||||
def set_cmd_text_color(color, handle=std_out_handle):
|
||||
Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
|
||||
return Bool
|
||||
|
||||
|
||||
def resetColor():
|
||||
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_WHITE)
|
||||
|
||||
|
||||
class WinMain(Api):
|
||||
_tmp = 0
|
||||
|
||||
def getTitle(self):
|
||||
self._tmp += 1
|
||||
if self._tmp > 10:
|
||||
self._tmp = 0
|
||||
if self._tmp < 5:
|
||||
return "{} 的直播间 --弹幕助手 by JerryYan".format(self.roomLiver)
|
||||
else:
|
||||
if self.roomPopularity == 0:
|
||||
self._tmp = 0
|
||||
return self.getTitle()
|
||||
else:
|
||||
return "人气:{} --弹幕助手 by JerryYan".format(self.roomPopularity)
|
||||
|
||||
def onMessage(self, msg: str):
|
||||
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
|
||||
print("消息 : ", msg)
|
||||
resetColor()
|
||||
|
||||
def onJoin(self, user: User):
|
||||
set_cmd_text_color(BACKGROUND_WHITE | FOREGROUND_BLACK)
|
||||
print("欢迎", user, "加入了粉丝团")
|
||||
resetColor()
|
||||
|
||||
def onSubscribe(self, user: User):
|
||||
if SHOW_ALL:
|
||||
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
|
||||
print("用户", user, "关注了主播")
|
||||
resetColor()
|
||||
|
||||
def onEnter(self, msg:MemberMsg):
|
||||
if SHOW_ALL:
|
||||
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
|
||||
print("提示 :", msg)
|
||||
resetColor()
|
||||
|
||||
def onChat(self, chat: Chat):
|
||||
if SHOW_ALL:
|
||||
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_WHITE)
|
||||
if not chat.isFiltered:
|
||||
print(chat)
|
||||
resetColor()
|
||||
|
||||
def onLottery(self, i:Lottery):
|
||||
set_cmd_text_color(FOREGROUND_WHITE | BACKGROUND_DARKGRAY)
|
||||
print(i)
|
||||
resetColor()
|
||||
|
||||
def onPresent(self, gift: Gift):
|
||||
if SHOW_ALL:
|
||||
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
|
||||
print("连击 :", gift)
|
||||
resetColor()
|
||||
|
||||
def onPresentEnd(self, gift: Gift):
|
||||
set_cmd_text_color(BACKGROUND_WHITE | FOREGROUND_BLACK)
|
||||
print("感谢", gift)
|
||||
resetColor()
|
||||
|
||||
def onLike(self, user: User):
|
||||
if SHOW_ALL:
|
||||
set_cmd_text_color(BACKGROUND_BLACK | FOREGROUND_DARKGRAY)
|
||||
print("用户", user, "点了喜欢")
|
||||
resetColor()
|
||||
|
||||
def onLeave(self, json: any):
|
||||
return
|
||||
|
||||
|
||||
def warning(*args):
|
||||
print(*args)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
name = "永恒de草薙"
|
||||
resetColor()
|
||||
print("西瓜直播弹幕助手 by JerryYan")
|
||||
if len(sys.argv) > 1:
|
||||
name = sys.argv[1]
|
||||
if len(sys.argv) > 2:
|
||||
SHOW_ALL = sys.argv[2] == "a"
|
||||
else:
|
||||
name = readInput("请输入主播用户名,默认为", name, 3)
|
||||
api = WinMain(name)
|
||||
while not api.isValidRoom:
|
||||
set_cmd_text_color(FOREGROUND_RED)
|
||||
print("未找到对应房间或未开播,等待1分钟后重试")
|
||||
resetColor()
|
||||
time.sleep(60)
|
||||
api.updRoomInfo()
|
||||
print("进入", api.roomLiver, "的直播间")
|
||||
os.system("title {}".format(api.getTitle()))
|
||||
print("=" * 30)
|
||||
while True:
|
||||
if api.isLive:
|
||||
os.system("title {}".format(api.getTitle()))
|
||||
try:
|
||||
api.getDanmaku()
|
||||
except requests.exceptions.BaseHTTPError:
|
||||
print("网络错误,请确认网络")
|
||||
time.sleep(5)
|
||||
except Exception as e:
|
||||
print(e.__str__())
|
||||
time.sleep(1)
|
||||
else:
|
||||
set_cmd_text_color(FOREGROUND_RED)
|
||||
print("主播未开播,等待1分钟后重试")
|
||||
resetColor()
|
||||
time.sleep(60)
|
||||
api.updRoomInfo()
|
@ -1,278 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: XiguaCommon.proto
|
||||
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
import XiguaUser_pb2 as XiguaUser__pb2
|
||||
import XiguaGift_pb2 as XiguaGift__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='XiguaCommon.proto',
|
||||
package='',
|
||||
syntax='proto2',
|
||||
serialized_options=None,
|
||||
serialized_pb=b'\n\x11XiguaCommon.proto\x1a\x0fXiguaUser.proto\x1a\x0fXiguaGift.proto\"*\n\x05Style\x12\r\n\x05\x63olor\x18\x01 \x01(\t\x12\x12\n\nfontWeight\x18\x04 \x01(\x05\"g\n\x06Params\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12\x15\n\x05style\x18\x02 \x01(\x0b\x32\x06.Style\x12\x0e\n\x06string\x18\x0b \x01(\t\x12\x13\n\x04user\x18\x15 \x01(\x0b\x32\x05.User\x12\x13\n\x04gift\x18\x16 \x01(\x0b\x32\x05.Gift\"_\n\x0b\x44isplayText\x12\x0e\n\x06method\x18\x01 \x02(\t\x12\x0e\n\x06\x66ormat\x18\x02 \x02(\t\x12\x17\n\x07\x62gStyle\x18\x03 \x01(\x0b\x32\x06.Style\x12\x17\n\x06params\x18\x04 \x01(\x0b\x32\x07.Params\"u\n\nCommonInfo\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0e\n\x06msg_id\x18\x02 \x01(\x05\x12\x0f\n\x07room_id\x18\x03 \x01(\x05\x12\x13\n\x0b\x63reate_time\x18\x04 \x01(\x05\x12!\n\x0b\x64isplayText\x18\x08 \x01(\x0b\x32\x0c.DisplayText'
|
||||
,
|
||||
dependencies=[XiguaUser__pb2.DESCRIPTOR,XiguaGift__pb2.DESCRIPTOR,])
|
||||
|
||||
|
||||
|
||||
|
||||
_STYLE = _descriptor.Descriptor(
|
||||
name='Style',
|
||||
full_name='Style',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='color', full_name='Style.color', 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='fontWeight', full_name='Style.fontWeight', index=1,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=55,
|
||||
serialized_end=97,
|
||||
)
|
||||
|
||||
|
||||
_PARAMS = _descriptor.Descriptor(
|
||||
name='Params',
|
||||
full_name='Params',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='type', full_name='Params.type', index=0,
|
||||
number=1, type=5, cpp_type=1, label=2,
|
||||
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='style', full_name='Params.style', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='string', full_name='Params.string', index=2,
|
||||
number=11, 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='Params.user', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='gift', full_name='Params.gift', index=4,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=99,
|
||||
serialized_end=202,
|
||||
)
|
||||
|
||||
|
||||
_DISPLAYTEXT = _descriptor.Descriptor(
|
||||
name='DisplayText',
|
||||
full_name='DisplayText',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='method', full_name='DisplayText.method', index=0,
|
||||
number=1, type=9, cpp_type=9, label=2,
|
||||
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='format', full_name='DisplayText.format', index=1,
|
||||
number=2, type=9, cpp_type=9, label=2,
|
||||
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='bgStyle', full_name='DisplayText.bgStyle', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='params', full_name='DisplayText.params', 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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=204,
|
||||
serialized_end=299,
|
||||
)
|
||||
|
||||
|
||||
_COMMONINFO = _descriptor.Descriptor(
|
||||
name='CommonInfo',
|
||||
full_name='CommonInfo',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='method', full_name='CommonInfo.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='msg_id', full_name='CommonInfo.msg_id', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='room_id', full_name='CommonInfo.room_id', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='create_time', full_name='CommonInfo.create_time', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='displayText', full_name='CommonInfo.displayText', index=4,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=301,
|
||||
serialized_end=418,
|
||||
)
|
||||
|
||||
_PARAMS.fields_by_name['style'].message_type = _STYLE
|
||||
_PARAMS.fields_by_name['user'].message_type = XiguaUser__pb2._USER
|
||||
_PARAMS.fields_by_name['gift'].message_type = XiguaGift__pb2._GIFT
|
||||
_DISPLAYTEXT.fields_by_name['bgStyle'].message_type = _STYLE
|
||||
_DISPLAYTEXT.fields_by_name['params'].message_type = _PARAMS
|
||||
_COMMONINFO.fields_by_name['displayText'].message_type = _DISPLAYTEXT
|
||||
DESCRIPTOR.message_types_by_name['Style'] = _STYLE
|
||||
DESCRIPTOR.message_types_by_name['Params'] = _PARAMS
|
||||
DESCRIPTOR.message_types_by_name['DisplayText'] = _DISPLAYTEXT
|
||||
DESCRIPTOR.message_types_by_name['CommonInfo'] = _COMMONINFO
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
Style = _reflection.GeneratedProtocolMessageType('Style', (_message.Message,), {
|
||||
'DESCRIPTOR' : _STYLE,
|
||||
'__module__' : 'XiguaCommon_pb2'
|
||||
# @@protoc_insertion_point(class_scope:Style)
|
||||
})
|
||||
_sym_db.RegisterMessage(Style)
|
||||
|
||||
Params = _reflection.GeneratedProtocolMessageType('Params', (_message.Message,), {
|
||||
'DESCRIPTOR' : _PARAMS,
|
||||
'__module__' : 'XiguaCommon_pb2'
|
||||
# @@protoc_insertion_point(class_scope:Params)
|
||||
})
|
||||
_sym_db.RegisterMessage(Params)
|
||||
|
||||
DisplayText = _reflection.GeneratedProtocolMessageType('DisplayText', (_message.Message,), {
|
||||
'DESCRIPTOR' : _DISPLAYTEXT,
|
||||
'__module__' : 'XiguaCommon_pb2'
|
||||
# @@protoc_insertion_point(class_scope:DisplayText)
|
||||
})
|
||||
_sym_db.RegisterMessage(DisplayText)
|
||||
|
||||
CommonInfo = _reflection.GeneratedProtocolMessageType('CommonInfo', (_message.Message,), {
|
||||
'DESCRIPTOR' : _COMMONINFO,
|
||||
'__module__' : 'XiguaCommon_pb2'
|
||||
# @@protoc_insertion_point(class_scope:CommonInfo)
|
||||
})
|
||||
_sym_db.RegisterMessage(CommonInfo)
|
||||
|
||||
|
||||
# @@protoc_insertion_point(module_scope)
|
122
XiguaGift_pb2.py
122
XiguaGift_pb2.py
@ -1,122 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: XiguaGift.proto
|
||||
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='XiguaGift.proto',
|
||||
package='',
|
||||
syntax='proto2',
|
||||
serialized_options=None,
|
||||
serialized_pb=b'\n\x0fXiguaGift.proto\"\\\n\x04Gift\x12\n\n\x02id\x18\x01 \x02(\x05\x12\x1a\n\x04gift\x18\x02 \x02(\x0b\x32\x0c.Gift.Detail\x1a,\n\x06\x44\x65tail\x12\x0f\n\x07gift_id\x18\x01 \x02(\t\x12\x11\n\tgift_name\x18\x02 \x02(\t'
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
_GIFT_DETAIL = _descriptor.Descriptor(
|
||||
name='Detail',
|
||||
full_name='Gift.Detail',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='gift_id', full_name='Gift.Detail.gift_id', index=0,
|
||||
number=1, type=9, cpp_type=9, label=2,
|
||||
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='gift_name', full_name='Gift.Detail.gift_name', index=1,
|
||||
number=2, type=9, cpp_type=9, label=2,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=67,
|
||||
serialized_end=111,
|
||||
)
|
||||
|
||||
_GIFT = _descriptor.Descriptor(
|
||||
name='Gift',
|
||||
full_name='Gift',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='id', full_name='Gift.id', index=0,
|
||||
number=1, type=5, cpp_type=1, label=2,
|
||||
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='gift', full_name='Gift.gift', index=1,
|
||||
number=2, type=11, cpp_type=10, label=2,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[_GIFT_DETAIL, ],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=19,
|
||||
serialized_end=111,
|
||||
)
|
||||
|
||||
_GIFT_DETAIL.containing_type = _GIFT
|
||||
_GIFT.fields_by_name['gift'].message_type = _GIFT_DETAIL
|
||||
DESCRIPTOR.message_types_by_name['Gift'] = _GIFT
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
Gift = _reflection.GeneratedProtocolMessageType('Gift', (_message.Message,), {
|
||||
|
||||
'Detail' : _reflection.GeneratedProtocolMessageType('Detail', (_message.Message,), {
|
||||
'DESCRIPTOR' : _GIFT_DETAIL,
|
||||
'__module__' : 'XiguaGift_pb2'
|
||||
# @@protoc_insertion_point(class_scope:Gift.Detail)
|
||||
})
|
||||
,
|
||||
'DESCRIPTOR' : _GIFT,
|
||||
'__module__' : 'XiguaGift_pb2'
|
||||
# @@protoc_insertion_point(class_scope:Gift)
|
||||
})
|
||||
_sym_db.RegisterMessage(Gift)
|
||||
_sym_db.RegisterMessage(Gift.Detail)
|
||||
|
||||
|
||||
# @@protoc_insertion_point(module_scope)
|
593
XiguaUser_pb2.py
593
XiguaUser_pb2.py
@ -1,593 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: XiguaUser.proto
|
||||
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='XiguaUser.proto',
|
||||
package='',
|
||||
syntax='proto2',
|
||||
serialized_options=None,
|
||||
serialized_pb=b'\n\x0fXiguaUser.proto\"\x96\x07\n\x04User\x12\n\n\x02id\x18\x01 \x02(\x05\x12\x10\n\x08nickname\x18\x03 \x02(\t\x12\x0e\n\x06gender\x18\x04 \x02(\x05\x12!\n\x0b\x61vatarThumb\x18\t \x02(\x0b\x32\x0c.User.Avatar\x12\"\n\x0c\x61vatarMedium\x18\n \x01(\x0b\x32\x0c.User.Avatar\x12!\n\x0b\x61vatarLarge\x18\x0b \x01(\x0b\x32\x0c.User.Avatar\x12\x1a\n\x05\x62\x61\x64ge\x18\x15 \x03(\x0b\x32\x0b.User.Badge\x12\x1c\n\x06\x66ollow\x18\x16 \x01(\x0b\x32\x0c.User.Follow\x12 \n\x08payGrade\x18\x17 \x02(\x0b\x32\x0e.User.PayGrade\x12\x11\n\ttotalPaid\x18\" \x02(\x05\x1a!\n\x06\x41vatar\x12\x0b\n\x03url\x18\x01 \x02(\t\x12\n\n\x02id\x18\x02 \x01(\t\x1a\xcd\x01\n\x05\x42\x61\x64ge\x12\x0b\n\x03url\x18\x01 \x03(\t\x12\x10\n\x08localUrl\x18\x02 \x01(\t\x12\x0e\n\x06height\x18\x03 \x01(\x05\x12\r\n\x05width\x18\x04 \x01(\x05\x12\x0c\n\x04type\x18\x06 \x01(\x05\x12\x0f\n\x07\x63lickTo\x18\x07 \x01(\t\x12,\n\x0b\x66\x61nClubText\x18\x08 \x01(\x0b\x32\x17.User.Badge.FanClubText\x1a\x39\n\x0b\x46\x61nClubText\x12\x0c\n\x04text\x18\x01 \x02(\t\x12\r\n\x05\x63olor\x18\x02 \x01(\t\x12\r\n\x05level\x18\x03 \x02(\x05\x1a\x33\n\x06\x46ollow\x12\x14\n\tfollowing\x18\x01 \x01(\x05:\x01\x30\x12\x13\n\x08\x66ollower\x18\x02 \x01(\x05:\x01\x30\x1a\xa1\x01\n\x08PayGrade\x12\x0f\n\x07\x63urrent\x18\x01 \x02(\x05\x12\r\n\x05level\x18\x06 \x02(\x05\x12\x18\n\x10\x63urrentLevelNeed\x18\n \x01(\x05\x12\x15\n\rnextLevelNeed\x18\x0b \x01(\x05\x12\x0f\n\x07\x63ontent\x18\r \x01(\t\x12\x1a\n\x05\x62\x61\x64ge\x18\x13 \x02(\x0b\x32\x0b.User.Badge\x12\x17\n\x0ftoNextLevelNeed\x18\x15 \x01(\x05\x1a(\n\nHonorLevel\x12\x1a\n\x05\x62\x61\x64ge\x18\x13 \x02(\x0b\x32\x0b.User.Badge\x1a\x90\x01\n\x05Noble\x12\x0f\n\x07\x63ontent\x18\x04 \x02(\t\x12)\n\x07\x62oarder\x18\x08 \x01(\x0b\x32\x18.User.Noble.NobleBoarder\x1aK\n\x0cNobleBoarder\x12\x0f\n\x07urlList\x18\x01 \x03(\t\x12\x0b\n\x03uri\x18\x02 \x02(\t\x12\x0e\n\x06height\x18\x03 \x01(\x05\x12\r\n\x05width\x18\x04 \x01(\x05'
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
_USER_AVATAR = _descriptor.Descriptor(
|
||||
name='Avatar',
|
||||
full_name='User.Avatar',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='url', full_name='User.Avatar.url', index=0,
|
||||
number=1, type=9, cpp_type=9, label=2,
|
||||
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='id', full_name='User.Avatar.id', index=1,
|
||||
number=2, 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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=291,
|
||||
serialized_end=324,
|
||||
)
|
||||
|
||||
_USER_BADGE_FANCLUBTEXT = _descriptor.Descriptor(
|
||||
name='FanClubText',
|
||||
full_name='User.Badge.FanClubText',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='text', full_name='User.Badge.FanClubText.text', index=0,
|
||||
number=1, type=9, cpp_type=9, label=2,
|
||||
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='color', full_name='User.Badge.FanClubText.color', index=1,
|
||||
number=2, 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='level', full_name='User.Badge.FanClubText.level', index=2,
|
||||
number=3, type=5, cpp_type=1, label=2,
|
||||
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='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=475,
|
||||
serialized_end=532,
|
||||
)
|
||||
|
||||
_USER_BADGE = _descriptor.Descriptor(
|
||||
name='Badge',
|
||||
full_name='User.Badge',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='url', full_name='User.Badge.url', index=0,
|
||||
number=1, 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='localUrl', full_name='User.Badge.localUrl', index=1,
|
||||
number=2, 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='height', full_name='User.Badge.height', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='width', full_name='User.Badge.width', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='type', full_name='User.Badge.type', index=4,
|
||||
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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='clickTo', full_name='User.Badge.clickTo', index=5,
|
||||
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='fanClubText', full_name='User.Badge.fanClubText', index=6,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[_USER_BADGE_FANCLUBTEXT, ],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=327,
|
||||
serialized_end=532,
|
||||
)
|
||||
|
||||
_USER_FOLLOW = _descriptor.Descriptor(
|
||||
name='Follow',
|
||||
full_name='User.Follow',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='following', full_name='User.Follow.following', index=0,
|
||||
number=1, type=5, cpp_type=1, label=1,
|
||||
has_default_value=True, 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='follower', full_name='User.Follow.follower', index=1,
|
||||
number=2, type=5, cpp_type=1, label=1,
|
||||
has_default_value=True, 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='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=534,
|
||||
serialized_end=585,
|
||||
)
|
||||
|
||||
_USER_PAYGRADE = _descriptor.Descriptor(
|
||||
name='PayGrade',
|
||||
full_name='User.PayGrade',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='current', full_name='User.PayGrade.current', index=0,
|
||||
number=1, type=5, cpp_type=1, label=2,
|
||||
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='level', full_name='User.PayGrade.level', index=1,
|
||||
number=6, type=5, cpp_type=1, label=2,
|
||||
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='currentLevelNeed', full_name='User.PayGrade.currentLevelNeed', index=2,
|
||||
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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='nextLevelNeed', full_name='User.PayGrade.nextLevelNeed', index=3,
|
||||
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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='content', full_name='User.PayGrade.content', index=4,
|
||||
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='badge', full_name='User.PayGrade.badge', index=5,
|
||||
number=19, type=11, cpp_type=10, label=2,
|
||||
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='toNextLevelNeed', full_name='User.PayGrade.toNextLevelNeed', index=6,
|
||||
number=21, 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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=588,
|
||||
serialized_end=749,
|
||||
)
|
||||
|
||||
_USER_HONORLEVEL = _descriptor.Descriptor(
|
||||
name='HonorLevel',
|
||||
full_name='User.HonorLevel',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='badge', full_name='User.HonorLevel.badge', index=0,
|
||||
number=19, type=11, cpp_type=10, label=2,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=751,
|
||||
serialized_end=791,
|
||||
)
|
||||
|
||||
_USER_NOBLE_NOBLEBOARDER = _descriptor.Descriptor(
|
||||
name='NobleBoarder',
|
||||
full_name='User.Noble.NobleBoarder',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='urlList', full_name='User.Noble.NobleBoarder.urlList', index=0,
|
||||
number=1, 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='uri', full_name='User.Noble.NobleBoarder.uri', index=1,
|
||||
number=2, type=9, cpp_type=9, label=2,
|
||||
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='height', full_name='User.Noble.NobleBoarder.height', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='width', full_name='User.Noble.NobleBoarder.width', 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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=863,
|
||||
serialized_end=938,
|
||||
)
|
||||
|
||||
_USER_NOBLE = _descriptor.Descriptor(
|
||||
name='Noble',
|
||||
full_name='User.Noble',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='content', full_name='User.Noble.content', index=0,
|
||||
number=4, type=9, cpp_type=9, label=2,
|
||||
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='boarder', full_name='User.Noble.boarder', index=1,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[_USER_NOBLE_NOBLEBOARDER, ],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=794,
|
||||
serialized_end=938,
|
||||
)
|
||||
|
||||
_USER = _descriptor.Descriptor(
|
||||
name='User',
|
||||
full_name='User',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='id', full_name='User.id', index=0,
|
||||
number=1, type=5, cpp_type=1, label=2,
|
||||
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='nickname', full_name='User.nickname', index=1,
|
||||
number=3, type=9, cpp_type=9, label=2,
|
||||
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='gender', full_name='User.gender', index=2,
|
||||
number=4, type=5, cpp_type=1, label=2,
|
||||
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='avatarThumb', full_name='User.avatarThumb', index=3,
|
||||
number=9, type=11, cpp_type=10, label=2,
|
||||
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='avatarMedium', full_name='User.avatarMedium', index=4,
|
||||
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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='avatarLarge', full_name='User.avatarLarge', index=5,
|
||||
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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='badge', full_name='User.badge', index=6,
|
||||
number=21, 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='follow', full_name='User.follow', index=7,
|
||||
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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='payGrade', full_name='User.payGrade', index=8,
|
||||
number=23, type=11, cpp_type=10, label=2,
|
||||
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='totalPaid', full_name='User.totalPaid', index=9,
|
||||
number=34, type=5, cpp_type=1, label=2,
|
||||
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=[_USER_AVATAR, _USER_BADGE, _USER_FOLLOW, _USER_PAYGRADE, _USER_HONORLEVEL, _USER_NOBLE, ],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=20,
|
||||
serialized_end=938,
|
||||
)
|
||||
|
||||
_USER_AVATAR.containing_type = _USER
|
||||
_USER_BADGE_FANCLUBTEXT.containing_type = _USER_BADGE
|
||||
_USER_BADGE.fields_by_name['fanClubText'].message_type = _USER_BADGE_FANCLUBTEXT
|
||||
_USER_BADGE.containing_type = _USER
|
||||
_USER_FOLLOW.containing_type = _USER
|
||||
_USER_PAYGRADE.fields_by_name['badge'].message_type = _USER_BADGE
|
||||
_USER_PAYGRADE.containing_type = _USER
|
||||
_USER_HONORLEVEL.fields_by_name['badge'].message_type = _USER_BADGE
|
||||
_USER_HONORLEVEL.containing_type = _USER
|
||||
_USER_NOBLE_NOBLEBOARDER.containing_type = _USER_NOBLE
|
||||
_USER_NOBLE.fields_by_name['boarder'].message_type = _USER_NOBLE_NOBLEBOARDER
|
||||
_USER_NOBLE.containing_type = _USER
|
||||
_USER.fields_by_name['avatarThumb'].message_type = _USER_AVATAR
|
||||
_USER.fields_by_name['avatarMedium'].message_type = _USER_AVATAR
|
||||
_USER.fields_by_name['avatarLarge'].message_type = _USER_AVATAR
|
||||
_USER.fields_by_name['badge'].message_type = _USER_BADGE
|
||||
_USER.fields_by_name['follow'].message_type = _USER_FOLLOW
|
||||
_USER.fields_by_name['payGrade'].message_type = _USER_PAYGRADE
|
||||
DESCRIPTOR.message_types_by_name['User'] = _USER
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
User = _reflection.GeneratedProtocolMessageType('User', (_message.Message,), {
|
||||
|
||||
'Avatar' : _reflection.GeneratedProtocolMessageType('Avatar', (_message.Message,), {
|
||||
'DESCRIPTOR' : _USER_AVATAR,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.Avatar)
|
||||
})
|
||||
,
|
||||
|
||||
'Badge' : _reflection.GeneratedProtocolMessageType('Badge', (_message.Message,), {
|
||||
|
||||
'FanClubText' : _reflection.GeneratedProtocolMessageType('FanClubText', (_message.Message,), {
|
||||
'DESCRIPTOR' : _USER_BADGE_FANCLUBTEXT,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.Badge.FanClubText)
|
||||
})
|
||||
,
|
||||
'DESCRIPTOR' : _USER_BADGE,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.Badge)
|
||||
})
|
||||
,
|
||||
|
||||
'Follow' : _reflection.GeneratedProtocolMessageType('Follow', (_message.Message,), {
|
||||
'DESCRIPTOR' : _USER_FOLLOW,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.Follow)
|
||||
})
|
||||
,
|
||||
|
||||
'PayGrade' : _reflection.GeneratedProtocolMessageType('PayGrade', (_message.Message,), {
|
||||
'DESCRIPTOR' : _USER_PAYGRADE,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.PayGrade)
|
||||
})
|
||||
,
|
||||
|
||||
'HonorLevel' : _reflection.GeneratedProtocolMessageType('HonorLevel', (_message.Message,), {
|
||||
'DESCRIPTOR' : _USER_HONORLEVEL,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.HonorLevel)
|
||||
})
|
||||
,
|
||||
|
||||
'Noble' : _reflection.GeneratedProtocolMessageType('Noble', (_message.Message,), {
|
||||
|
||||
'NobleBoarder' : _reflection.GeneratedProtocolMessageType('NobleBoarder', (_message.Message,), {
|
||||
'DESCRIPTOR' : _USER_NOBLE_NOBLEBOARDER,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.Noble.NobleBoarder)
|
||||
})
|
||||
,
|
||||
'DESCRIPTOR' : _USER_NOBLE,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User.Noble)
|
||||
})
|
||||
,
|
||||
'DESCRIPTOR' : _USER,
|
||||
'__module__' : 'XiguaUser_pb2'
|
||||
# @@protoc_insertion_point(class_scope:User)
|
||||
})
|
||||
_sym_db.RegisterMessage(User)
|
||||
_sym_db.RegisterMessage(User.Avatar)
|
||||
_sym_db.RegisterMessage(User.Badge)
|
||||
_sym_db.RegisterMessage(User.Badge.FanClubText)
|
||||
_sym_db.RegisterMessage(User.Follow)
|
||||
_sym_db.RegisterMessage(User.PayGrade)
|
||||
_sym_db.RegisterMessage(User.HonorLevel)
|
||||
_sym_db.RegisterMessage(User.Noble)
|
||||
_sym_db.RegisterMessage(User.Noble.NobleBoarder)
|
||||
|
||||
|
||||
# @@protoc_insertion_point(module_scope)
|
193
Xigua_pb2.py
193
Xigua_pb2.py
@ -1,193 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: Xigua.proto
|
||||
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
import XiguaCommon_pb2 as XiguaCommon__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='Xigua.proto',
|
||||
package='',
|
||||
syntax='proto2',
|
||||
serialized_options=None,
|
||||
serialized_pb=b'\n\x0bXigua.proto\x1a\x11XiguaCommon.proto\"\xf4\x01\n\tXiguaLive\x12\x1d\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x0f.XiguaLive.Data\x12\x0e\n\x06\x63ursor\x18\x02 \x02(\t\x12\x16\n\x0e\x66\x65tch_interval\x18\x03 \x01(\x05\x12\x0b\n\x03now\x18\x04 \x01(\x05\x12\x14\n\x0cinternal_ext\x18\x05 \x02(\t\x1a}\n\x04\x44\x61ta\x12\x0e\n\x06method\x18\x01 \x02(\t\x12(\n\x07message\x18\x02 \x02(\x0b\x32\x17.XiguaLive.Data.Message\x1a;\n\x07Message\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x0f\n\x07\x63ontent\x18\x03 \x01(\t'
|
||||
,
|
||||
dependencies=[XiguaCommon__pb2.DESCRIPTOR,])
|
||||
|
||||
|
||||
|
||||
|
||||
_XIGUALIVE_DATA_MESSAGE = _descriptor.Descriptor(
|
||||
name='Message',
|
||||
full_name='XiguaLive.Data.Message',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='commonInfo', full_name='XiguaLive.Data.Message.commonInfo', index=0,
|
||||
number=1, type=11, cpp_type=10, label=2,
|
||||
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='content', full_name='XiguaLive.Data.Message.content', index=1,
|
||||
number=3, 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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=220,
|
||||
serialized_end=279,
|
||||
)
|
||||
|
||||
_XIGUALIVE_DATA = _descriptor.Descriptor(
|
||||
name='Data',
|
||||
full_name='XiguaLive.Data',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='method', full_name='XiguaLive.Data.method', index=0,
|
||||
number=1, type=9, cpp_type=9, label=2,
|
||||
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='message', full_name='XiguaLive.Data.message', index=1,
|
||||
number=2, type=11, cpp_type=10, label=2,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[_XIGUALIVE_DATA_MESSAGE, ],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=154,
|
||||
serialized_end=279,
|
||||
)
|
||||
|
||||
_XIGUALIVE = _descriptor.Descriptor(
|
||||
name='XiguaLive',
|
||||
full_name='XiguaLive',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='data', full_name='XiguaLive.data', index=0,
|
||||
number=1, 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='cursor', full_name='XiguaLive.cursor', index=1,
|
||||
number=2, type=9, cpp_type=9, label=2,
|
||||
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='fetch_interval', full_name='XiguaLive.fetch_interval', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='now', full_name='XiguaLive.now', 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),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='internal_ext', full_name='XiguaLive.internal_ext', index=4,
|
||||
number=5, type=9, cpp_type=9, label=2,
|
||||
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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[_XIGUALIVE_DATA, ],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto2',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=35,
|
||||
serialized_end=279,
|
||||
)
|
||||
|
||||
_XIGUALIVE_DATA_MESSAGE.fields_by_name['commonInfo'].message_type = XiguaCommon__pb2._COMMONINFO
|
||||
_XIGUALIVE_DATA_MESSAGE.containing_type = _XIGUALIVE_DATA
|
||||
_XIGUALIVE_DATA.fields_by_name['message'].message_type = _XIGUALIVE_DATA_MESSAGE
|
||||
_XIGUALIVE_DATA.containing_type = _XIGUALIVE
|
||||
_XIGUALIVE.fields_by_name['data'].message_type = _XIGUALIVE_DATA
|
||||
DESCRIPTOR.message_types_by_name['XiguaLive'] = _XIGUALIVE
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
XiguaLive = _reflection.GeneratedProtocolMessageType('XiguaLive', (_message.Message,), {
|
||||
|
||||
'Data' : _reflection.GeneratedProtocolMessageType('Data', (_message.Message,), {
|
||||
|
||||
'Message' : _reflection.GeneratedProtocolMessageType('Message', (_message.Message,), {
|
||||
'DESCRIPTOR' : _XIGUALIVE_DATA_MESSAGE,
|
||||
'__module__' : 'Xigua_pb2'
|
||||
# @@protoc_insertion_point(class_scope:XiguaLive.Data.Message)
|
||||
})
|
||||
,
|
||||
'DESCRIPTOR' : _XIGUALIVE_DATA,
|
||||
'__module__' : 'Xigua_pb2'
|
||||
# @@protoc_insertion_point(class_scope:XiguaLive.Data)
|
||||
})
|
||||
,
|
||||
'DESCRIPTOR' : _XIGUALIVE,
|
||||
'__module__' : 'Xigua_pb2'
|
||||
# @@protoc_insertion_point(class_scope:XiguaLive)
|
||||
})
|
||||
_sym_db.RegisterMessage(XiguaLive)
|
||||
_sym_db.RegisterMessage(XiguaLive.Data)
|
||||
_sym_db.RegisterMessage(XiguaLive.Data.Message)
|
||||
|
||||
|
||||
# @@protoc_insertion_point(module_scope)
|
187
api.py
187
api.py
@ -3,11 +3,7 @@ import json
|
||||
import sys
|
||||
import random
|
||||
|
||||
from Struct.MemberMsg import MemberMsg
|
||||
from Struct.User import User
|
||||
from Struct.Gift import Gift
|
||||
from Struct.Chat import Chat
|
||||
from Struct.Lottery import Lottery
|
||||
import requests
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
@ -87,94 +83,6 @@ class XiGuaLiveApi:
|
||||
if DEBUG:
|
||||
print(*args)
|
||||
|
||||
def onPresent(self, gift: Gift):
|
||||
"""
|
||||
礼物连击中的消息
|
||||
Message On Sending Presents
|
||||
:param gift: Struct of Gift Message
|
||||
"""
|
||||
print("礼物连击 :", gift)
|
||||
|
||||
def onPresentEnd(self, gift: Gift):
|
||||
"""
|
||||
礼物送完了的提示信息
|
||||
Message On Finished Send Present
|
||||
:param gift: Struct of Gift Message
|
||||
"""
|
||||
print("感谢", gift)
|
||||
|
||||
def onAd(self, i):
|
||||
"""
|
||||
全局广播
|
||||
All Channel Broadcasting Message( Just An Ad )
|
||||
:param i: JSON DATA if you wanna using it
|
||||
"""
|
||||
# print(i)
|
||||
pass
|
||||
|
||||
def onChat(self, chat: Chat):
|
||||
"""
|
||||
聊天信息
|
||||
On Chatting
|
||||
:param chat: Struct of Chat Message
|
||||
"""
|
||||
if not chat.isFiltered:
|
||||
print(chat)
|
||||
|
||||
def onEnter(self, msg: MemberMsg):
|
||||
"""
|
||||
进入房间消息
|
||||
On Entering Room
|
||||
:param msg: Struct of Member Message
|
||||
"""
|
||||
print("提示 :", msg)
|
||||
|
||||
def onSubscribe(self, user: User):
|
||||
"""
|
||||
关注主播时的消息
|
||||
On Subscribe
|
||||
:param user: Struct of User Message
|
||||
"""
|
||||
print("消息 :", user, "关注了主播")
|
||||
|
||||
def onJoin(self, user: User):
|
||||
"""
|
||||
加入粉丝团消息
|
||||
:param user:
|
||||
"""
|
||||
print("欢迎", user, "加入了粉丝团")
|
||||
|
||||
def onMessage(self, msg: str):
|
||||
"""
|
||||
系统消息
|
||||
:param msg:
|
||||
"""
|
||||
print("消息 :", msg)
|
||||
|
||||
def onLike(self, user: User):
|
||||
"""
|
||||
点击喜欢的消息
|
||||
On Like
|
||||
:param user:
|
||||
"""
|
||||
print("用户", user, "点了喜欢")
|
||||
|
||||
def onLeave(self, json: any):
|
||||
"""
|
||||
下播消息
|
||||
On Liver Leave
|
||||
:param json:
|
||||
"""
|
||||
print("消息 :", "主播离开了")
|
||||
self.updRoomInfo()
|
||||
|
||||
def onLottery(self, i: Lottery):
|
||||
"""
|
||||
中奖的内容
|
||||
:param i:
|
||||
"""
|
||||
print("中奖消息 :", i)
|
||||
|
||||
def _checkUsernameIsMatched(self):
|
||||
"""
|
||||
验证主播名字是自己想要的那个
|
||||
@ -227,11 +135,6 @@ class XiGuaLiveApi:
|
||||
self._rawRoomInfo = d["user_info"]['live_info']
|
||||
if self.isLive:
|
||||
self.roomID = d["user_info"]['live_info']['room_id']
|
||||
# 处理抽奖事件
|
||||
l = Lottery(self._rawRoomInfo)
|
||||
if l.isActive:
|
||||
# 因为现在每个房间只能同时开启一个抽奖,所以放一个就行了
|
||||
self.lottery = l
|
||||
return True
|
||||
|
||||
def updRoomInfo(self, force=False):
|
||||
@ -293,93 +196,3 @@ class XiGuaLiveApi:
|
||||
for _j in i["cells"]:
|
||||
ret.append(User(_j))
|
||||
return ret
|
||||
|
||||
def getDanmaku(self):
|
||||
"""
|
||||
获取弹幕
|
||||
"""
|
||||
if not self.isValidRoom:
|
||||
self.updRoomInfo()
|
||||
return
|
||||
p = self.s.get("https://i.snssdk.com/videolive/im/get_msg?cursor={cursor}&room_id={roomID}"
|
||||
"&version_code=800&device_platform=android".format(
|
||||
roomID=self.roomID,
|
||||
cursor=self._cursor
|
||||
))
|
||||
d = p.json()
|
||||
if "data" not in d or "extra" not in d or "cursor" not in d["extra"]:
|
||||
if "base_resp" in d and d["base_resp"]["status_code"] != 10038:
|
||||
print(d["base_resp"]["status_message"])
|
||||
self.apiChangedError("接口数据返回错误", d)
|
||||
return
|
||||
else:
|
||||
self._cursor = d["extra"]["cursor"]
|
||||
if DEBUG:
|
||||
print("Cursor:\t", self._cursor)
|
||||
for i in d['data']:
|
||||
if DEBUG:
|
||||
print(i)
|
||||
if "common" not in i and "method" not in i["common"]:
|
||||
continue
|
||||
if i["common"]['method'] == "VideoLivePresentMessage":
|
||||
self.onPresent(Gift(i))
|
||||
elif i["common"]['method'] == "VideoLivePresentEndTipMessage":
|
||||
self.onPresentEnd(Gift(i))
|
||||
elif i["common"]['method'] == "VideoLiveRoomAdMessage":
|
||||
self.onAd(i)
|
||||
elif i["common"]['method'] == "VideoLiveChatMessage":
|
||||
self.onChat(Chat(i, self.lottery))
|
||||
elif i["common"]['method'] == "VideoLiveMemberMessage":
|
||||
self.onEnter(MemberMsg(i))
|
||||
self._updateRoomPopularity(i)
|
||||
elif i["common"]['method'] == "VideoLiveSocialMessage":
|
||||
self.onSubscribe(User(i))
|
||||
elif i["common"]['method'] == "VideoLiveJoinDiscipulusMessage":
|
||||
self.onJoin(User(i))
|
||||
elif i["common"]['method'] == "VideoLiveControlMessage":
|
||||
print("消息:", "主播离开一小会")
|
||||
# 这个消息代表主播下播了,直接更新房间信息
|
||||
self.updRoomInfo(True)
|
||||
elif i["common"]['method'] == "VideoLiveDiggMessage":
|
||||
self.onLike(User(i))
|
||||
else:
|
||||
pass
|
||||
if self.lottery is None or self.lottery.ID == 0:
|
||||
self.lottery = Lottery(i)
|
||||
# 更新抽奖信息
|
||||
if self.lottery is not None and self.lottery.ID != 0:
|
||||
self.lottery.update()
|
||||
if self.lottery.isFinished:
|
||||
self.onLottery(self.lottery)
|
||||
self.lottery = None
|
||||
# 2分钟自动更新下房间信息
|
||||
self.updRoomInfo(len(d['data']) == 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
name = "永恒de草薙"
|
||||
if len(sys.argv) > 2:
|
||||
if sys.argv[-1] == "d":
|
||||
DEBUG = True
|
||||
name = sys.argv[1]
|
||||
print("西瓜直播弹幕助手 by JerryYan")
|
||||
api = XiGuaLiveApi(name)
|
||||
if not api.isValidRoom:
|
||||
input("房间不存在")
|
||||
sys.exit()
|
||||
print("进入", api.roomLiver, "的直播间")
|
||||
print("=" * 30)
|
||||
while True:
|
||||
if api.isLive:
|
||||
try:
|
||||
api.getDanmaku()
|
||||
time.sleep(1)
|
||||
except requests.exceptions.BaseHTTPError:
|
||||
print("网络错误,请确认网络")
|
||||
time.sleep(5)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
else:
|
||||
print("主播未开播,等待2分钟后重试")
|
||||
time.sleep(60)
|
||||
api.updRoomInfo()
|
||||
|
Reference in New Issue
Block a user