diff --git a/Demo/Xigua.proto b/Demo/Xigua.proto index 3b3212e..11e2b3c 100755 --- a/Demo/Xigua.proto +++ b/Demo/Xigua.proto @@ -1,13 +1,11 @@ syntax = "proto2"; -import "XiguaCommon.proto"; - message XiguaLive { message Data { // WebcastChatMessage 聊天 // WebcastGiftMessage 礼物 required string method = 1; - required Message message = 2; + required bytes raw = 2; } repeated Data data = 1; required string cursor = 2; diff --git a/Demo/XiguaCommon.proto b/Demo/XiguaCommon.proto deleted file mode 100644 index 264fe59..0000000 --- a/Demo/XiguaCommon.proto +++ /dev/null @@ -1,42 +0,0 @@ -syntax = "proto2"; -import "XiguaUser.proto"; -import "XiguaGift.proto"; -message Message { - required CommonInfo commonInfo = 1; - required bytes content2 = 2; - required bytes content3 = 3; - required bytes content4 = 4; - optional bool isFinished = 9 [ default = false ]; -} -// 样式 -message Style { - optional string color = 1; - optional int32 fontWeight = 4; -} -// 参数 -message Params { - // 1 字符串 - // 11 用户 - // 12 礼物 - required int32 type = 1; - optional Style style = 2; - optional string string = 11; - optional UserPack users = 21; - optional GiftPack gifts = 22; -} -// 自定义显示信息 -message DisplayText { - // 参数 - required string method = 1; - required string format = 2; - optional Style bgStyle = 3; - required Params params = 4; -} -// 通用定义 -message CommonInfo { - optional string method = 1; - optional int32 msg_id = 2; - optional int32 room_id = 3; - optional int32 create_time = 4; - optional DisplayText displayText = 8; -} \ No newline at end of file diff --git a/Demo/XiguaMessage.proto b/Demo/XiguaMessage.proto new file mode 100644 index 0000000..dee3acb --- /dev/null +++ b/Demo/XiguaMessage.proto @@ -0,0 +1,79 @@ +syntax = "proto2"; +import "XiguaUser.proto"; +import "XiguaGift.proto"; +message Message { + required CommonInfo commonInfo = 1; + required bytes content2 = 2; + required bytes content3 = 3; + required bytes content4 = 4; +} +message FansClubMessage { + required CommonInfo commonInfo = 1; + required int32 someEnum = 2; + required int32 someInt3 = 3; + required User user = 4; +} +message UserSeqMessage { + required CommonInfo commonInfo = 1; + required string popularityText = 4; + required int32 popularity = 6; +} +message DailyRankMessage { + required CommonInfo commonInfo = 1; + required int32 ranking = 10; +} +message ChatMessage { + required CommonInfo commonInfo = 1; + required User user = 2; + required string content = 3; +} +message MemberMessage { + required CommonInfo commonInfo = 1; + required User user = 2; + required string popularityText = 14; +} +message GiftMessage { + required CommonInfo commonInfo = 1; + required int32 giftId = 2; + // 可能是GroupId之类的东西 +// required int32 UNKNOWN_INT = 3; + required int32 content4 = 4; + // 5,6 顺序可能不对 + required int32 repeated = 5; + required int32 combo = 6; + required User user = 7; + optional bool isFinished = 9 [ default = false ]; +} +// 样式 +message Style { + optional string color = 1; + optional int32 fontWeight = 4; +} +// 参数 +message Params { + // 1 字符串 + // 11 用户 + // 12 礼物 + required int32 type = 1; + optional Style style = 2; + optional string string = 11; + optional UserPack users = 21; + optional GiftPack gifts = 22; +} +// 自定义显示信息 +message DisplayText { + // 参数 + required string method = 1; + required string format = 2; + optional Style bgStyle = 3; + required Params params = 4; +} +// 通用定义 +message CommonInfo { + required string method = 1; + required int32 msg_id = 2; + required int32 room_id = 3; + required int32 create_time = 4; + optional int32 someEnum = 6; + optional DisplayText displayText = 8; +} \ No newline at end of file diff --git a/Demo/XiguaUser.proto b/Demo/XiguaUser.proto index 9d57d31..852d746 100644 --- a/Demo/XiguaUser.proto +++ b/Demo/XiguaUser.proto @@ -3,6 +3,36 @@ syntax = "proto2"; message UserPack { required User user = 1; } +// 头衔 +message Badge { + message FanClubText { + required string text = 1; + optional string color = 2; + required int32 level = 3; + } + repeated string url = 1; + optional string localUrl = 2; + optional int32 height = 3; + optional int32 width = 4; + // 3 房管 + // 6 贵族 + // 7 粉丝团 + optional int32 type = 6; + optional string clickTo = 7; + optional FanClubText fanClubText = 8; +} +message FansClubBadgePack { + required Badge badge = 1; + required string title = 2; +} +message FansClubPack { + message FansClub { + required string text = 1; + required int32 level = 2; + optional int32 someEnum = 3; + required FansClubBadgePack fansClubs = 4; + } +} // 用户信息 message User { // 头像 @@ -10,24 +40,6 @@ message User { required string url = 1; optional string id = 2; } - // 头衔 - message Badge { - message FanClubText { - required string text = 1; - optional string color = 2; - required int32 level = 3; - } - repeated string url = 1; - optional string localUrl = 2; - optional int32 height = 3; - optional int32 width = 4; - // 3 房管 - // 6 贵族 - // 7 粉丝团 - optional int32 type = 6; - optional string clickTo = 7; - optional FanClubText fanClubText = 8; - } // 粉丝和粉 message Follow { optional int32 following = 1 [default = 0]; diff --git a/XiguaCommon_pb2.py b/XiguaCommon_pb2.py deleted file mode 100644 index effb16a..0000000 --- a/XiguaCommon_pb2.py +++ /dev/null @@ -1,346 +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\x07Message\x12\x1f\n\ncommonInfo\x18\x01 \x02(\x0b\x32\x0b.CommonInfo\x12\x10\n\x08\x63ontent2\x18\x02 \x02(\x0c\x12\x10\n\x08\x63ontent3\x18\x03 \x02(\x0c\x12\x10\n\x08\x63ontent4\x18\x04 \x02(\x0c\x12\x19\n\nisFinished\x18\t \x01(\x08:\x05\x66\x61lse\"*\n\x05Style\x12\r\n\x05\x63olor\x18\x01 \x01(\t\x12\x12\n\nfontWeight\x18\x04 \x01(\x05\"q\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\x18\n\x05users\x18\x15 \x01(\x0b\x32\t.UserPack\x12\x18\n\x05gifts\x18\x16 \x01(\x0b\x32\t.GiftPack\"_\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 \x02(\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,]) - - - - -_MESSAGE = _descriptor.Descriptor( - name='Message', - full_name='Message', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='commonInfo', full_name='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='content2', full_name='Message.content2', index=1, - number=2, type=12, cpp_type=9, label=2, - 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), - _descriptor.FieldDescriptor( - name='content3', full_name='Message.content3', index=2, - number=3, type=12, cpp_type=9, label=2, - 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), - _descriptor.FieldDescriptor( - name='content4', full_name='Message.content4', index=3, - number=4, type=12, cpp_type=9, label=2, - 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), - _descriptor.FieldDescriptor( - name='isFinished', full_name='Message.isFinished', index=4, - number=9, type=8, cpp_type=7, label=1, - has_default_value=True, default_value=False, - 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=178, -) - - -_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=180, - serialized_end=222, -) - - -_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='users', full_name='Params.users', 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='gifts', full_name='Params.gifts', 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=224, - serialized_end=337, -) - - -_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=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=339, - serialized_end=434, -) - - -_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=436, - serialized_end=553, -) - -_MESSAGE.fields_by_name['commonInfo'].message_type = _COMMONINFO -_PARAMS.fields_by_name['style'].message_type = _STYLE -_PARAMS.fields_by_name['users'].message_type = XiguaUser__pb2._USERPACK -_PARAMS.fields_by_name['gifts'].message_type = XiguaGift__pb2._GIFTPACK -_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['Message'] = _MESSAGE -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) - -Message = _reflection.GeneratedProtocolMessageType('Message', (_message.Message,), { - 'DESCRIPTOR' : _MESSAGE, - '__module__' : 'XiguaCommon_pb2' - # @@protoc_insertion_point(class_scope:Message) - }) -_sym_db.RegisterMessage(Message) - -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) diff --git a/Xigua_pb2.py b/Xigua_pb2.py index 72c6214..7344782 100644 --- a/Xigua_pb2.py +++ b/Xigua_pb2.py @@ -11,7 +11,6 @@ from google.protobuf import symbol_database as _symbol_database _sym_db = _symbol_database.Default() -import XiguaCommon_pb2 as XiguaCommon__pb2 DESCRIPTOR = _descriptor.FileDescriptor( @@ -19,9 +18,8 @@ DESCRIPTOR = _descriptor.FileDescriptor( package='', syntax='proto2', serialized_options=None, - serialized_pb=b'\n\x0bXigua.proto\x1a\x11XiguaCommon.proto\"\xa8\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\x31\n\x04\x44\x61ta\x12\x0e\n\x06method\x18\x01 \x02(\t\x12\x19\n\x07message\x18\x02 \x02(\x0b\x32\x08.Message' - , - dependencies=[XiguaCommon__pb2.DESCRIPTOR,]) + serialized_pb=b'\n\x0bXigua.proto\"\x9a\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\x0b\n\x03raw\x18\x02 \x02(\x0c' +) @@ -41,9 +39,9 @@ _XIGUALIVE_DATA = _descriptor.Descriptor( 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, + name='raw', full_name='XiguaLive.Data.raw', index=1, + number=2, type=12, cpp_type=9, label=2, + 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), @@ -59,8 +57,8 @@ _XIGUALIVE_DATA = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=154, - serialized_end=203, + serialized_start=135, + serialized_end=170, ) _XIGUALIVE = _descriptor.Descriptor( @@ -117,11 +115,10 @@ _XIGUALIVE = _descriptor.Descriptor( extension_ranges=[], oneofs=[ ], - serialized_start=35, - serialized_end=203, + serialized_start=16, + serialized_end=170, ) -_XIGUALIVE_DATA.fields_by_name['message'].message_type = XiguaCommon__pb2._MESSAGE _XIGUALIVE_DATA.containing_type = _XIGUALIVE _XIGUALIVE.fields_by_name['data'].message_type = _XIGUALIVE_DATA DESCRIPTOR.message_types_by_name['XiguaLive'] = _XIGUALIVE diff --git a/api.py b/api.py index f4e76d7..048da67 100644 --- a/api.py +++ b/api.py @@ -12,7 +12,7 @@ import requests import time from datetime import datetime, timedelta from Xigua_pb2 import XiguaLive -from XiguaUser_pb2 import User as UserPb +from XiguaMessage_pb2 import GiftMessage, UserSeqMessage, ChatMessage, MemberMessage, FansClubMessage DEBUG = False COMMON_GET_PARAM = ( @@ -350,13 +350,15 @@ class XiGuaLiveApi: self._ext = data.internal_ext for _each in data.data: if _each.method == "WebcastGiftMessage": + _giftMessage = GiftMessage() + _giftMessage.ParseFromString(_each.raw) _gift = Gift() - _gift.ID = _each.message.commonInfo.displayText.params.gifts.id - _gift.count = _each.message.commonInfo.displayText.params.string - if _gift.isAnimate() or _each.message.isFinished: + _gift.ID = _giftMessage.giftId + _gift.count = _giftMessage.combo + if _gift.isAnimate() or _giftMessage.isFinished: _user = User() - _user.ID = _each.message.commonInfo.displayText.params.users.user.id - _user.name = _each.message.commonInfo.displayText.params.users.user.nickname + _user.ID = _giftMessage.user.id + _user.name = _giftMessage.user.nickname _gift.user = _user _gift.backupName = _each.message.commonInfo.displayText.params.gifts.gift.name self.onPresentEnd(_gift) @@ -380,6 +382,7 @@ class XiGuaLiveApi: self.onLottery(self.lottery) self.lottery = None + if __name__ == "__main__": name = "永恒de草薙" if len(sys.argv) > 2: