mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-25 10:53:44 +03:00
Added a .tl file tokenizer and parser
A TLObject class has been added, as well as a method for tokenizen .tl files. A TLObject can be created by simply calling `TLObject.from_tl(tl_line)`, this will tokenize the .tl line and return a new TLObject with all the required properties extracted. Also added another method to load .tl files and yield TLObjects, including a SourceBuilder that can be later used to generate Python code.
This commit is contained in:
parent
1dac866118
commit
1974569927
92
.gitignore
vendored
Normal file
92
.gitignore
vendored
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
.idea
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*,cover
|
||||||
|
.hypothesis/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
target/
|
||||||
|
|
||||||
|
# IPython Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
.python-version
|
||||||
|
|
||||||
|
# celery beat schedule file
|
||||||
|
celerybeat-schedule
|
||||||
|
|
||||||
|
# dotenv
|
||||||
|
.env
|
||||||
|
|
||||||
|
# virtualenv
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
7
main.py
7
main.py
|
@ -1,3 +1,8 @@
|
||||||
|
from parser.tl_parser import TLParser
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print('Hello worldz! Wooho... This is harder than it looks!')
|
|
||||||
|
parser = TLParser()
|
||||||
|
for tlobject in parser.parse_file('parser/scheme.tl'):
|
||||||
|
print(tlobject)
|
||||||
|
|
0
parser/__init__.py
Normal file
0
parser/__init__.py
Normal file
905
parser/scheme.tl
Normal file
905
parser/scheme.tl
Normal file
|
@ -0,0 +1,905 @@
|
||||||
|
// Core types (no need to gen)
|
||||||
|
|
||||||
|
//vector#1cb5c415 {t:Type} # [ t ] = Vector t;
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
/////////////////// Layer cons
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
//invokeAfterMsg#cb9f372d msg_id:long query:!X = X;
|
||||||
|
//invokeAfterMsgs#3dc4b4f0 msg_ids:Vector<long> query:!X = X;
|
||||||
|
//invokeWithLayer1#53835315 query:!X = X;
|
||||||
|
//invokeWithLayer2#289dd1f6 query:!X = X;
|
||||||
|
//invokeWithLayer3#b7475268 query:!X = X;
|
||||||
|
//invokeWithLayer4#dea0d430 query:!X = X;
|
||||||
|
//invokeWithLayer5#417a57ae query:!X = X;
|
||||||
|
//invokeWithLayer6#3a64d54d query:!X = X;
|
||||||
|
//invokeWithLayer7#a5be56d3 query:!X = X;
|
||||||
|
//invokeWithLayer8#e9abd9fd query:!X = X;
|
||||||
|
//invokeWithLayer9#76715a63 query:!X = X;
|
||||||
|
//invokeWithLayer10#39620c41 query:!X = X;
|
||||||
|
//invokeWithLayer11#a6b88fdf query:!X = X;
|
||||||
|
//invokeWithLayer12#dda60d3c query:!X = X;
|
||||||
|
//invokeWithLayer13#427c8ea2 query:!X = X;
|
||||||
|
//invokeWithLayer14#2b9b08fa query:!X = X;
|
||||||
|
//invokeWithLayer15#b4418b64 query:!X = X;
|
||||||
|
//invokeWithLayer16#cf5f0987 query:!X = X;
|
||||||
|
//invokeWithLayer17#50858a19 query:!X = X;
|
||||||
|
//invokeWithLayer18#1c900537 query:!X = X;
|
||||||
|
//invokeWithLayer#da9b0d0d layer:int query:!X = X; // after 18 layer
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
/// Authorization key creation
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
resPQ#05162463 nonce:int128 server_nonce:int128 pq:string server_public_key_fingerprints:Vector<long> = ResPQ;
|
||||||
|
|
||||||
|
p_q_inner_data#83c95aec pq:string p:string q:string nonce:int128 server_nonce:int128 new_nonce:int256 = P_Q_inner_data;
|
||||||
|
|
||||||
|
server_DH_params_fail#79cb045d nonce:int128 server_nonce:int128 new_nonce_hash:int128 = Server_DH_Params;
|
||||||
|
server_DH_params_ok#d0e8075c nonce:int128 server_nonce:int128 encrypted_answer:string = Server_DH_Params;
|
||||||
|
|
||||||
|
server_DH_inner_data#b5890dba nonce:int128 server_nonce:int128 g:int dh_prime:string g_a:string server_time:int = Server_DH_inner_data;
|
||||||
|
|
||||||
|
client_DH_inner_data#6643b654 nonce:int128 server_nonce:int128 retry_id:long g_b:string = Client_DH_Inner_Data;
|
||||||
|
|
||||||
|
dh_gen_ok#3bcbf734 nonce:int128 server_nonce:int128 new_nonce_hash1:int128 = Set_client_DH_params_answer;
|
||||||
|
dh_gen_retry#46dc1fb9 nonce:int128 server_nonce:int128 new_nonce_hash2:int128 = Set_client_DH_params_answer;
|
||||||
|
dh_gen_fail#a69dae02 nonce:int128 server_nonce:int128 new_nonce_hash3:int128 = Set_client_DH_params_answer;
|
||||||
|
|
||||||
|
---functions---
|
||||||
|
|
||||||
|
req_pq#60469778 nonce:int128 = ResPQ;
|
||||||
|
|
||||||
|
req_DH_params#d712e4be nonce:int128 server_nonce:int128 p:string q:string public_key_fingerprint:long encrypted_data:string = Server_DH_Params;
|
||||||
|
|
||||||
|
set_client_DH_params#f5045f1f nonce:int128 server_nonce:int128 encrypted_data:string = Set_client_DH_params_answer;
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
////////////// System messages
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
---types---
|
||||||
|
|
||||||
|
msgs_ack#62d6b459 msg_ids:Vector<long> = MsgsAck;
|
||||||
|
|
||||||
|
bad_msg_notification#a7eff811 bad_msg_id:long bad_msg_seqno:int error_code:int = BadMsgNotification;
|
||||||
|
bad_server_salt#edab447b bad_msg_id:long bad_msg_seqno:int error_code:int new_server_salt:long = BadMsgNotification;
|
||||||
|
|
||||||
|
msgs_state_req#da69fb52 msg_ids:Vector<long> = MsgsStateReq;
|
||||||
|
msgs_state_info#04deb57d req_msg_id:long info:string = MsgsStateInfo;
|
||||||
|
msgs_all_info#8cc0d131 msg_ids:Vector<long> info:string = MsgsAllInfo;
|
||||||
|
|
||||||
|
msg_detailed_info#276d3ec6 msg_id:long answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
|
||||||
|
msg_new_detailed_info#809db6df answer_msg_id:long bytes:int status:int = MsgDetailedInfo;
|
||||||
|
|
||||||
|
msg_resend_req#7d861a08 msg_ids:Vector<long> = MsgResendReq;
|
||||||
|
|
||||||
|
//rpc_result#f35c6d01 req_msg_id:long result:Object = RpcResult; // parsed manually
|
||||||
|
|
||||||
|
rpc_error#2144ca19 error_code:int error_message:string = RpcError;
|
||||||
|
|
||||||
|
rpc_answer_unknown#5e2ad36e = RpcDropAnswer;
|
||||||
|
rpc_answer_dropped_running#cd78e586 = RpcDropAnswer;
|
||||||
|
rpc_answer_dropped#a43ad8b7 msg_id:long seq_no:int bytes:int = RpcDropAnswer;
|
||||||
|
|
||||||
|
future_salt#0949d9dc valid_since:int valid_until:int salt:long = FutureSalt;
|
||||||
|
future_salts#ae500895 req_msg_id:long now:int salts:vector<future_salt> = FutureSalts;
|
||||||
|
|
||||||
|
pong#347773c5 msg_id:long ping_id:long = Pong;
|
||||||
|
|
||||||
|
destroy_session_ok#e22045fc session_id:long = DestroySessionRes;
|
||||||
|
destroy_session_none#62d350c9 session_id:long = DestroySessionRes;
|
||||||
|
|
||||||
|
new_session_created#9ec20908 first_msg_id:long unique_id:long server_salt:long = NewSession;
|
||||||
|
|
||||||
|
//message msg_id:long seqno:int bytes:int body:Object = Message; // parsed manually
|
||||||
|
//msg_container#73f1f8dc messages:vector<message> = MessageContainer; // parsed manually
|
||||||
|
//msg_copy#e06046b2 orig_message:Message = MessageCopy; // parsed manually, not used - use msg_container
|
||||||
|
//gzip_packed#3072cfa1 packed_data:string = Object; // parsed manually
|
||||||
|
|
||||||
|
http_wait#9299359f max_delay:int wait_after:int max_wait:int = HttpWait;
|
||||||
|
|
||||||
|
---functions---
|
||||||
|
|
||||||
|
rpc_drop_answer#58e4a740 req_msg_id:long = RpcDropAnswer;
|
||||||
|
|
||||||
|
get_future_salts#b921bd04 num:int = FutureSalts;
|
||||||
|
|
||||||
|
ping#7abe77ec ping_id:long = Pong;
|
||||||
|
ping_delay_disconnect#f3427b8c ping_id:long disconnect_delay:int = Pong;
|
||||||
|
|
||||||
|
destroy_session#e7512126 session_id:long = DestroySessionRes;
|
||||||
|
|
||||||
|
contest.saveDeveloperInfo#9a5f6e95 vk_id:int name:string phone_number:string age:int city:string = Bool;
|
||||||
|
|
||||||
|
///////////////////////////////
|
||||||
|
///////// Main application API
|
||||||
|
///////////////////////////////
|
||||||
|
|
||||||
|
---types---
|
||||||
|
|
||||||
|
boolFalse#bc799737 = Bool;
|
||||||
|
boolTrue#997275b5 = Bool;
|
||||||
|
|
||||||
|
true#3fedd339 = True;
|
||||||
|
|
||||||
|
error#c4b9f9bb code:int text:string = Error;
|
||||||
|
|
||||||
|
null#56730bcc = Null;
|
||||||
|
|
||||||
|
inputPeerEmpty#7f3b18ea = InputPeer;
|
||||||
|
inputPeerSelf#7da07ec9 = InputPeer;
|
||||||
|
inputPeerChat#179be863 chat_id:int = InputPeer;
|
||||||
|
inputPeerUser#7b8e7de6 user_id:int access_hash:long = InputPeer;
|
||||||
|
inputPeerChannel#20adaef8 channel_id:int access_hash:long = InputPeer;
|
||||||
|
|
||||||
|
inputUserEmpty#b98886cf = InputUser;
|
||||||
|
inputUserSelf#f7c1b13f = InputUser;
|
||||||
|
inputUser#d8292816 user_id:int access_hash:long = InputUser;
|
||||||
|
|
||||||
|
inputPhoneContact#f392b7f4 client_id:long phone:string first_name:string last_name:string = InputContact;
|
||||||
|
|
||||||
|
inputFile#f52ff27f id:long parts:int name:string md5_checksum:string = InputFile;
|
||||||
|
inputFileBig#fa4f0bb5 id:long parts:int name:string = InputFile;
|
||||||
|
|
||||||
|
inputMediaEmpty#9664f57f = InputMedia;
|
||||||
|
inputMediaUploadedPhoto#f7aff1c0 file:InputFile caption:string = InputMedia;
|
||||||
|
inputMediaPhoto#e9bfb4f3 id:InputPhoto caption:string = InputMedia;
|
||||||
|
inputMediaGeoPoint#f9c44144 geo_point:InputGeoPoint = InputMedia;
|
||||||
|
inputMediaContact#a6e45987 phone_number:string first_name:string last_name:string = InputMedia;
|
||||||
|
inputMediaUploadedDocument#1d89306d file:InputFile mime_type:string attributes:Vector<DocumentAttribute> caption:string = InputMedia;
|
||||||
|
inputMediaUploadedThumbDocument#ad613491 file:InputFile thumb:InputFile mime_type:string attributes:Vector<DocumentAttribute> caption:string = InputMedia;
|
||||||
|
inputMediaDocument#1a77f29c id:InputDocument caption:string = InputMedia;
|
||||||
|
inputMediaVenue#2827a81a geo_point:InputGeoPoint title:string address:string provider:string venue_id:string = InputMedia;
|
||||||
|
inputMediaGifExternal#4843b0fd url:string q:string = InputMedia;
|
||||||
|
|
||||||
|
inputChatPhotoEmpty#1ca48f57 = InputChatPhoto;
|
||||||
|
inputChatUploadedPhoto#94254732 file:InputFile crop:InputPhotoCrop = InputChatPhoto;
|
||||||
|
inputChatPhoto#b2e1bf08 id:InputPhoto crop:InputPhotoCrop = InputChatPhoto;
|
||||||
|
|
||||||
|
inputGeoPointEmpty#e4c123d6 = InputGeoPoint;
|
||||||
|
inputGeoPoint#f3b7acc9 lat:double long:double = InputGeoPoint;
|
||||||
|
|
||||||
|
inputPhotoEmpty#1cd7bf0d = InputPhoto;
|
||||||
|
inputPhoto#fb95c6c4 id:long access_hash:long = InputPhoto;
|
||||||
|
|
||||||
|
inputFileLocation#14637196 volume_id:long local_id:int secret:long = InputFileLocation;
|
||||||
|
inputEncryptedFileLocation#f5235d55 id:long access_hash:long = InputFileLocation;
|
||||||
|
inputDocumentFileLocation#430f0724 id:long access_hash:long version:int = InputFileLocation;
|
||||||
|
|
||||||
|
inputPhotoCropAuto#ade6b004 = InputPhotoCrop;
|
||||||
|
inputPhotoCrop#d9915325 crop_left:double crop_top:double crop_width:double = InputPhotoCrop;
|
||||||
|
|
||||||
|
inputAppEvent#770656a8 time:double type:string peer:long data:string = InputAppEvent;
|
||||||
|
|
||||||
|
peerUser#9db1bc6d user_id:int = Peer;
|
||||||
|
peerChat#bad0e5bb chat_id:int = Peer;
|
||||||
|
peerChannel#bddde532 channel_id:int = Peer;
|
||||||
|
|
||||||
|
storage.fileUnknown#aa963b05 = storage.FileType;
|
||||||
|
storage.fileJpeg#7efe0e = storage.FileType;
|
||||||
|
storage.fileGif#cae1aadf = storage.FileType;
|
||||||
|
storage.filePng#a4f63c0 = storage.FileType;
|
||||||
|
storage.filePdf#ae1e508d = storage.FileType;
|
||||||
|
storage.fileMp3#528a0677 = storage.FileType;
|
||||||
|
storage.fileMov#4b09ebbc = storage.FileType;
|
||||||
|
storage.filePartial#40bc6f52 = storage.FileType;
|
||||||
|
storage.fileMp4#b3cea0e4 = storage.FileType;
|
||||||
|
storage.fileWebp#1081464c = storage.FileType;
|
||||||
|
|
||||||
|
fileLocationUnavailable#7c596b46 volume_id:long local_id:int secret:long = FileLocation;
|
||||||
|
fileLocation#53d69076 dc_id:int volume_id:long local_id:int secret:long = FileLocation;
|
||||||
|
|
||||||
|
userEmpty#200250ba id:int = User;
|
||||||
|
user#d10d979a flags:# self:flags.10?true contact:flags.11?true mutual_contact:flags.12?true deleted:flags.13?true bot:flags.14?true bot_chat_history:flags.15?true bot_nochats:flags.16?true verified:flags.17?true restricted:flags.18?true min:flags.20?true bot_inline_geo:flags.21?true id:int access_hash:flags.0?long first_name:flags.1?string last_name:flags.2?string username:flags.3?string phone:flags.4?string photo:flags.5?UserProfilePhoto status:flags.6?UserStatus bot_info_version:flags.14?int restriction_reason:flags.18?string bot_inline_placeholder:flags.19?string = User;
|
||||||
|
|
||||||
|
userProfilePhotoEmpty#4f11bae1 = UserProfilePhoto;
|
||||||
|
userProfilePhoto#d559d8c8 photo_id:long photo_small:FileLocation photo_big:FileLocation = UserProfilePhoto;
|
||||||
|
|
||||||
|
userStatusEmpty#9d05049 = UserStatus;
|
||||||
|
userStatusOnline#edb93949 expires:int = UserStatus;
|
||||||
|
userStatusOffline#8c703f was_online:int = UserStatus;
|
||||||
|
userStatusRecently#e26f42f1 = UserStatus;
|
||||||
|
userStatusLastWeek#7bf09fc = UserStatus;
|
||||||
|
userStatusLastMonth#77ebc742 = UserStatus;
|
||||||
|
|
||||||
|
chatEmpty#9ba2d800 id:int = Chat;
|
||||||
|
chat#d91cdd54 flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true admins_enabled:flags.3?true admin:flags.4?true deactivated:flags.5?true id:int title:string photo:ChatPhoto participants_count:int date:int version:int migrated_to:flags.6?InputChannel = Chat;
|
||||||
|
chatForbidden#7328bdb id:int title:string = Chat;
|
||||||
|
channel#a14dca52 flags:# creator:flags.0?true kicked:flags.1?true left:flags.2?true editor:flags.3?true moderator:flags.4?true broadcast:flags.5?true verified:flags.7?true megagroup:flags.8?true restricted:flags.9?true democracy:flags.10?true signatures:flags.11?true min:flags.12?true id:int access_hash:flags.13?long title:string username:flags.6?string photo:ChatPhoto date:int version:int restriction_reason:flags.9?string = Chat;
|
||||||
|
channelForbidden#8537784f flags:# broadcast:flags.5?true megagroup:flags.8?true id:int access_hash:long title:string = Chat;
|
||||||
|
|
||||||
|
chatFull#2e02a614 id:int participants:ChatParticipants chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> = ChatFull;
|
||||||
|
channelFull#c3d5512f flags:# can_view_participants:flags.3?true can_set_username:flags.6?true id:int about:string participants_count:flags.0?int admins_count:flags.1?int kicked_count:flags.2?int read_inbox_max_id:int read_outbox_max_id:int unread_count:int chat_photo:Photo notify_settings:PeerNotifySettings exported_invite:ExportedChatInvite bot_info:Vector<BotInfo> migrated_from_chat_id:flags.4?int migrated_from_max_id:flags.4?int pinned_msg_id:flags.5?int = ChatFull;
|
||||||
|
|
||||||
|
chatParticipant#c8d7493e user_id:int inviter_id:int date:int = ChatParticipant;
|
||||||
|
chatParticipantCreator#da13538a user_id:int = ChatParticipant;
|
||||||
|
chatParticipantAdmin#e2d6e436 user_id:int inviter_id:int date:int = ChatParticipant;
|
||||||
|
|
||||||
|
chatParticipantsForbidden#fc900c2b flags:# chat_id:int self_participant:flags.0?ChatParticipant = ChatParticipants;
|
||||||
|
chatParticipants#3f460fed chat_id:int participants:Vector<ChatParticipant> version:int = ChatParticipants;
|
||||||
|
|
||||||
|
chatPhotoEmpty#37c1011c = ChatPhoto;
|
||||||
|
chatPhoto#6153276a photo_small:FileLocation photo_big:FileLocation = ChatPhoto;
|
||||||
|
|
||||||
|
messageEmpty#83e5de54 id:int = Message;
|
||||||
|
message#c09be45f flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int date:int message:string media:flags.9?MessageMedia reply_markup:flags.6?ReplyMarkup entities:flags.7?Vector<MessageEntity> views:flags.10?int edit_date:flags.15?int = Message;
|
||||||
|
messageService#9e19a1f6 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true post:flags.14?true id:int from_id:flags.8?int to_id:Peer reply_to_msg_id:flags.3?int date:int action:MessageAction = Message;
|
||||||
|
|
||||||
|
messageMediaEmpty#3ded6320 = MessageMedia;
|
||||||
|
messageMediaPhoto#3d8ce53d photo:Photo caption:string = MessageMedia;
|
||||||
|
messageMediaGeo#56e0d474 geo:GeoPoint = MessageMedia;
|
||||||
|
messageMediaContact#5e7d2f39 phone_number:string first_name:string last_name:string user_id:int = MessageMedia;
|
||||||
|
messageMediaUnsupported#9f84f49e = MessageMedia;
|
||||||
|
messageMediaDocument#f3e02ea8 document:Document caption:string = MessageMedia;
|
||||||
|
messageMediaWebPage#a32dd600 webpage:WebPage = MessageMedia;
|
||||||
|
messageMediaVenue#7912b71f geo:GeoPoint title:string address:string provider:string venue_id:string = MessageMedia;
|
||||||
|
|
||||||
|
messageActionEmpty#b6aef7b0 = MessageAction;
|
||||||
|
messageActionChatCreate#a6638b9a title:string users:Vector<int> = MessageAction;
|
||||||
|
messageActionChatEditTitle#b5a1ce5a title:string = MessageAction;
|
||||||
|
messageActionChatEditPhoto#7fcb13a8 photo:Photo = MessageAction;
|
||||||
|
messageActionChatDeletePhoto#95e3fbef = MessageAction;
|
||||||
|
messageActionChatAddUser#488a7337 users:Vector<int> = MessageAction;
|
||||||
|
messageActionChatDeleteUser#b2ae9b0c user_id:int = MessageAction;
|
||||||
|
messageActionChatJoinedByLink#f89cf5e8 inviter_id:int = MessageAction;
|
||||||
|
messageActionChannelCreate#95d2ac92 title:string = MessageAction;
|
||||||
|
messageActionChatMigrateTo#51bdb021 channel_id:int = MessageAction;
|
||||||
|
messageActionChannelMigrateFrom#b055eaee title:string chat_id:int = MessageAction;
|
||||||
|
messageActionPinMessage#94bd38ed = MessageAction;
|
||||||
|
messageActionHistoryClear#9fbab604 = MessageAction;
|
||||||
|
|
||||||
|
dialog#66ffba14 flags:# peer:Peer top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int notify_settings:PeerNotifySettings pts:flags.0?int draft:flags.1?DraftMessage = Dialog;
|
||||||
|
|
||||||
|
photoEmpty#2331b22d id:long = Photo;
|
||||||
|
photo#cded42fe id:long access_hash:long date:int sizes:Vector<PhotoSize> = Photo;
|
||||||
|
|
||||||
|
photoSizeEmpty#e17e23c type:string = PhotoSize;
|
||||||
|
photoSize#77bfb61b type:string location:FileLocation w:int h:int size:int = PhotoSize;
|
||||||
|
photoCachedSize#e9a734fa type:string location:FileLocation w:int h:int bytes:bytes = PhotoSize;
|
||||||
|
|
||||||
|
geoPointEmpty#1117dd5f = GeoPoint;
|
||||||
|
geoPoint#2049d70c long:double lat:double = GeoPoint;
|
||||||
|
|
||||||
|
auth.checkedPhone#811ea28e phone_registered:Bool = auth.CheckedPhone;
|
||||||
|
|
||||||
|
auth.sentCode#5e002502 flags:# phone_registered:flags.0?true type:auth.SentCodeType phone_code_hash:string next_type:flags.1?auth.CodeType timeout:flags.2?int = auth.SentCode;
|
||||||
|
|
||||||
|
auth.authorization#ff036af1 user:User = auth.Authorization;
|
||||||
|
|
||||||
|
auth.exportedAuthorization#df969c2d id:int bytes:bytes = auth.ExportedAuthorization;
|
||||||
|
|
||||||
|
inputNotifyPeer#b8bc5b0c peer:InputPeer = InputNotifyPeer;
|
||||||
|
inputNotifyUsers#193b4417 = InputNotifyPeer;
|
||||||
|
inputNotifyChats#4a95e84e = InputNotifyPeer;
|
||||||
|
inputNotifyAll#a429b886 = InputNotifyPeer;
|
||||||
|
|
||||||
|
inputPeerNotifyEventsEmpty#f03064d8 = InputPeerNotifyEvents;
|
||||||
|
inputPeerNotifyEventsAll#e86a2c74 = InputPeerNotifyEvents;
|
||||||
|
|
||||||
|
inputPeerNotifySettings#38935eb2 flags:# show_previews:flags.0?true silent:flags.1?true mute_until:int sound:string = InputPeerNotifySettings;
|
||||||
|
|
||||||
|
peerNotifyEventsEmpty#add53cb3 = PeerNotifyEvents;
|
||||||
|
peerNotifyEventsAll#6d1ded88 = PeerNotifyEvents;
|
||||||
|
|
||||||
|
peerNotifySettingsEmpty#70a68512 = PeerNotifySettings;
|
||||||
|
peerNotifySettings#9acda4c0 flags:# show_previews:flags.0?true silent:flags.1?true mute_until:int sound:string = PeerNotifySettings;
|
||||||
|
|
||||||
|
peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings;
|
||||||
|
|
||||||
|
wallPaper#ccb03657 id:int title:string sizes:Vector<PhotoSize> color:int = WallPaper;
|
||||||
|
wallPaperSolid#63117f24 id:int title:string bg_color:int color:int = WallPaper;
|
||||||
|
|
||||||
|
inputReportReasonSpam#58dbcab8 = ReportReason;
|
||||||
|
inputReportReasonViolence#1e22c78d = ReportReason;
|
||||||
|
inputReportReasonPornography#2e59d922 = ReportReason;
|
||||||
|
inputReportReasonOther#e1746d0a text:string = ReportReason;
|
||||||
|
|
||||||
|
userFull#5932fc03 flags:# blocked:flags.0?true user:User about:flags.1?string link:contacts.Link profile_photo:flags.2?Photo notify_settings:PeerNotifySettings bot_info:flags.3?BotInfo = UserFull;
|
||||||
|
|
||||||
|
contact#f911c994 user_id:int mutual:Bool = Contact;
|
||||||
|
|
||||||
|
importedContact#d0028438 user_id:int client_id:long = ImportedContact;
|
||||||
|
|
||||||
|
contactBlocked#561bc879 user_id:int date:int = ContactBlocked;
|
||||||
|
|
||||||
|
contactStatus#d3680c61 user_id:int status:UserStatus = ContactStatus;
|
||||||
|
|
||||||
|
contacts.link#3ace484c my_link:ContactLink foreign_link:ContactLink user:User = contacts.Link;
|
||||||
|
|
||||||
|
contacts.contactsNotModified#b74ba9d2 = contacts.Contacts;
|
||||||
|
contacts.contacts#6f8b8cb2 contacts:Vector<Contact> users:Vector<User> = contacts.Contacts;
|
||||||
|
|
||||||
|
contacts.importedContacts#ad524315 imported:Vector<ImportedContact> retry_contacts:Vector<long> users:Vector<User> = contacts.ImportedContacts;
|
||||||
|
|
||||||
|
contacts.blocked#1c138d15 blocked:Vector<ContactBlocked> users:Vector<User> = contacts.Blocked;
|
||||||
|
contacts.blockedSlice#900802a1 count:int blocked:Vector<ContactBlocked> users:Vector<User> = contacts.Blocked;
|
||||||
|
|
||||||
|
messages.dialogs#15ba6c40 dialogs:Vector<Dialog> messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Dialogs;
|
||||||
|
messages.dialogsSlice#71e094f3 count:int dialogs:Vector<Dialog> messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Dialogs;
|
||||||
|
|
||||||
|
messages.messages#8c718e87 messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
|
||||||
|
messages.messagesSlice#b446ae3 count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
|
||||||
|
messages.channelMessages#99262e37 flags:# pts:int count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = messages.Messages;
|
||||||
|
|
||||||
|
messages.chats#64ff9fd5 chats:Vector<Chat> = messages.Chats;
|
||||||
|
|
||||||
|
messages.chatFull#e5d7d19c full_chat:ChatFull chats:Vector<Chat> users:Vector<User> = messages.ChatFull;
|
||||||
|
|
||||||
|
messages.affectedHistory#b45c69d1 pts:int pts_count:int offset:int = messages.AffectedHistory;
|
||||||
|
|
||||||
|
inputMessagesFilterEmpty#57e2f66c = MessagesFilter;
|
||||||
|
inputMessagesFilterPhotos#9609a51c = MessagesFilter;
|
||||||
|
inputMessagesFilterVideo#9fc00e65 = MessagesFilter;
|
||||||
|
inputMessagesFilterPhotoVideo#56e9f0e4 = MessagesFilter;
|
||||||
|
inputMessagesFilterPhotoVideoDocuments#d95e73bb = MessagesFilter;
|
||||||
|
inputMessagesFilterDocument#9eddf188 = MessagesFilter;
|
||||||
|
inputMessagesFilterUrl#7ef0dd87 = MessagesFilter;
|
||||||
|
inputMessagesFilterGif#ffc86587 = MessagesFilter;
|
||||||
|
inputMessagesFilterVoice#50f5c392 = MessagesFilter;
|
||||||
|
inputMessagesFilterMusic#3751b49e = MessagesFilter;
|
||||||
|
inputMessagesFilterChatPhotos#3a20ecb8 = MessagesFilter;
|
||||||
|
|
||||||
|
updateNewMessage#1f2b0afd message:Message pts:int pts_count:int = Update;
|
||||||
|
updateMessageID#4e90bfd6 id:int random_id:long = Update;
|
||||||
|
updateDeleteMessages#a20db0e5 messages:Vector<int> pts:int pts_count:int = Update;
|
||||||
|
updateUserTyping#5c486927 user_id:int action:SendMessageAction = Update;
|
||||||
|
updateChatUserTyping#9a65ea1f chat_id:int user_id:int action:SendMessageAction = Update;
|
||||||
|
updateChatParticipants#7761198 participants:ChatParticipants = Update;
|
||||||
|
updateUserStatus#1bfbd823 user_id:int status:UserStatus = Update;
|
||||||
|
updateUserName#a7332b73 user_id:int first_name:string last_name:string username:string = Update;
|
||||||
|
updateUserPhoto#95313b0c user_id:int date:int photo:UserProfilePhoto previous:Bool = Update;
|
||||||
|
updateContactRegistered#2575bbb9 user_id:int date:int = Update;
|
||||||
|
updateContactLink#9d2e67c5 user_id:int my_link:ContactLink foreign_link:ContactLink = Update;
|
||||||
|
updateNewAuthorization#8f06529a auth_key_id:long date:int device:string location:string = Update;
|
||||||
|
updateNewEncryptedMessage#12bcbd9a message:EncryptedMessage qts:int = Update;
|
||||||
|
updateEncryptedChatTyping#1710f156 chat_id:int = Update;
|
||||||
|
updateEncryption#b4a2e88d chat:EncryptedChat date:int = Update;
|
||||||
|
updateEncryptedMessagesRead#38fe25b7 chat_id:int max_date:int date:int = Update;
|
||||||
|
updateChatParticipantAdd#ea4b0e5c chat_id:int user_id:int inviter_id:int date:int version:int = Update;
|
||||||
|
updateChatParticipantDelete#6e5f8c22 chat_id:int user_id:int version:int = Update;
|
||||||
|
updateDcOptions#8e5e9873 dc_options:Vector<DcOption> = Update;
|
||||||
|
updateUserBlocked#80ece81a user_id:int blocked:Bool = Update;
|
||||||
|
updateNotifySettings#bec268ef peer:NotifyPeer notify_settings:PeerNotifySettings = Update;
|
||||||
|
updateServiceNotification#382dd3e4 type:string message:string media:MessageMedia popup:Bool = Update;
|
||||||
|
updatePrivacy#ee3b272a key:PrivacyKey rules:Vector<PrivacyRule> = Update;
|
||||||
|
updateUserPhone#12b9417b user_id:int phone:string = Update;
|
||||||
|
updateReadHistoryInbox#9961fd5c peer:Peer max_id:int pts:int pts_count:int = Update;
|
||||||
|
updateReadHistoryOutbox#2f2f21bf peer:Peer max_id:int pts:int pts_count:int = Update;
|
||||||
|
updateWebPage#7f891213 webpage:WebPage pts:int pts_count:int = Update;
|
||||||
|
updateReadMessagesContents#68c13933 messages:Vector<int> pts:int pts_count:int = Update;
|
||||||
|
updateChannelTooLong#eb0467fb flags:# channel_id:int pts:flags.0?int = Update;
|
||||||
|
updateChannel#b6d45656 channel_id:int = Update;
|
||||||
|
updateNewChannelMessage#62ba04d9 message:Message pts:int pts_count:int = Update;
|
||||||
|
updateReadChannelInbox#4214f37f channel_id:int max_id:int = Update;
|
||||||
|
updateDeleteChannelMessages#c37521c9 channel_id:int messages:Vector<int> pts:int pts_count:int = Update;
|
||||||
|
updateChannelMessageViews#98a12b4b channel_id:int id:int views:int = Update;
|
||||||
|
updateChatAdmins#6e947941 chat_id:int enabled:Bool version:int = Update;
|
||||||
|
updateChatParticipantAdmin#b6901959 chat_id:int user_id:int is_admin:Bool version:int = Update;
|
||||||
|
updateNewStickerSet#688a30aa stickerset:messages.StickerSet = Update;
|
||||||
|
updateStickerSetsOrder#f0dfb451 order:Vector<long> = Update;
|
||||||
|
updateStickerSets#43ae3dec = Update;
|
||||||
|
updateSavedGifs#9375341e = Update;
|
||||||
|
updateBotInlineQuery#54826690 flags:# query_id:long user_id:int query:string geo:flags.0?GeoPoint offset:string = Update;
|
||||||
|
updateBotInlineSend#e48f964 flags:# user_id:int query:string geo:flags.0?GeoPoint id:string msg_id:flags.1?InputBotInlineMessageID = Update;
|
||||||
|
updateEditChannelMessage#1b3f4df7 message:Message pts:int pts_count:int = Update;
|
||||||
|
updateChannelPinnedMessage#98592475 channel_id:int id:int = Update;
|
||||||
|
updateBotCallbackQuery#a68c688c query_id:long user_id:int peer:Peer msg_id:int data:bytes = Update;
|
||||||
|
updateEditMessage#e40370a3 message:Message pts:int pts_count:int = Update;
|
||||||
|
updateInlineBotCallbackQuery#2cbd95af query_id:long user_id:int msg_id:InputBotInlineMessageID data:bytes = Update;
|
||||||
|
updateReadChannelOutbox#25d6c9c7 channel_id:int max_id:int = Update;
|
||||||
|
updateDraftMessage#ee2bb969 peer:Peer draft:DraftMessage = Update;
|
||||||
|
updateReadFeaturedStickers#571d2742 = Update;
|
||||||
|
updateRecentStickers#9a422c20 = Update;
|
||||||
|
|
||||||
|
updates.state#a56c2a3e pts:int qts:int date:int seq:int unread_count:int = updates.State;
|
||||||
|
|
||||||
|
updates.differenceEmpty#5d75a138 date:int seq:int = updates.Difference;
|
||||||
|
updates.difference#f49ca0 new_messages:Vector<Message> new_encrypted_messages:Vector<EncryptedMessage> other_updates:Vector<Update> chats:Vector<Chat> users:Vector<User> state:updates.State = updates.Difference;
|
||||||
|
updates.differenceSlice#a8fb1981 new_messages:Vector<Message> new_encrypted_messages:Vector<EncryptedMessage> other_updates:Vector<Update> chats:Vector<Chat> users:Vector<User> intermediate_state:updates.State = updates.Difference;
|
||||||
|
|
||||||
|
updatesTooLong#e317af7e = Updates;
|
||||||
|
updateShortMessage#914fbf11 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int user_id:int message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
|
||||||
|
updateShortChatMessage#16812688 flags:# out:flags.1?true mentioned:flags.4?true media_unread:flags.5?true silent:flags.13?true id:int from_id:int chat_id:int message:string pts:int pts_count:int date:int fwd_from:flags.2?MessageFwdHeader via_bot_id:flags.11?int reply_to_msg_id:flags.3?int entities:flags.7?Vector<MessageEntity> = Updates;
|
||||||
|
updateShort#78d4dec1 update:Update date:int = Updates;
|
||||||
|
updatesCombined#725b04c3 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq_start:int seq:int = Updates;
|
||||||
|
updates#74ae4240 updates:Vector<Update> users:Vector<User> chats:Vector<Chat> date:int seq:int = Updates;
|
||||||
|
updateShortSentMessage#11f1331c flags:# out:flags.1?true id:int pts:int pts_count:int date:int media:flags.9?MessageMedia entities:flags.7?Vector<MessageEntity> = Updates;
|
||||||
|
|
||||||
|
photos.photos#8dca6aa5 photos:Vector<Photo> users:Vector<User> = photos.Photos;
|
||||||
|
photos.photosSlice#15051f54 count:int photos:Vector<Photo> users:Vector<User> = photos.Photos;
|
||||||
|
|
||||||
|
photos.photo#20212ca8 photo:Photo users:Vector<User> = photos.Photo;
|
||||||
|
|
||||||
|
upload.file#96a18d5 type:storage.FileType mtime:int bytes:bytes = upload.File;
|
||||||
|
|
||||||
|
dcOption#5d8c6cc flags:# ipv6:flags.0?true media_only:flags.1?true tcpo_only:flags.2?true id:int ip_address:string port:int = DcOption;
|
||||||
|
|
||||||
|
config#f401a4bf date:int expires:int test_mode:Bool this_dc:int dc_options:Vector<DcOption> chat_size_max:int megagroup_size_max:int forwarded_count_max:int online_update_period_ms:int offline_blur_timeout_ms:int offline_idle_timeout_ms:int online_cloud_timeout_ms:int notify_cloud_delay_ms:int notify_default_delay_ms:int chat_big_size:int push_chat_period_ms:int push_chat_limit:int saved_gifs_limit:int edit_time_limit:int rating_e_decay:int stickers_recent_limit:int disabled_features:Vector<DisabledFeature> = Config;
|
||||||
|
|
||||||
|
nearestDc#8e1a1775 country:string this_dc:int nearest_dc:int = NearestDc;
|
||||||
|
|
||||||
|
help.appUpdate#8987f311 id:int critical:Bool url:string text:string = help.AppUpdate;
|
||||||
|
help.noAppUpdate#c45a6536 = help.AppUpdate;
|
||||||
|
|
||||||
|
help.inviteText#18cb9f78 message:string = help.InviteText;
|
||||||
|
|
||||||
|
encryptedChatEmpty#ab7ec0a0 id:int = EncryptedChat;
|
||||||
|
encryptedChatWaiting#3bf703dc id:int access_hash:long date:int admin_id:int participant_id:int = EncryptedChat;
|
||||||
|
encryptedChatRequested#c878527e id:int access_hash:long date:int admin_id:int participant_id:int g_a:bytes = EncryptedChat;
|
||||||
|
encryptedChat#fa56ce36 id:int access_hash:long date:int admin_id:int participant_id:int g_a_or_b:bytes key_fingerprint:long = EncryptedChat;
|
||||||
|
encryptedChatDiscarded#13d6dd27 id:int = EncryptedChat;
|
||||||
|
|
||||||
|
inputEncryptedChat#f141b5e1 chat_id:int access_hash:long = InputEncryptedChat;
|
||||||
|
|
||||||
|
encryptedFileEmpty#c21f497e = EncryptedFile;
|
||||||
|
encryptedFile#4a70994c id:long access_hash:long size:int dc_id:int key_fingerprint:int = EncryptedFile;
|
||||||
|
|
||||||
|
inputEncryptedFileEmpty#1837c364 = InputEncryptedFile;
|
||||||
|
inputEncryptedFileUploaded#64bd0306 id:long parts:int md5_checksum:string key_fingerprint:int = InputEncryptedFile;
|
||||||
|
inputEncryptedFile#5a17b5e5 id:long access_hash:long = InputEncryptedFile;
|
||||||
|
inputEncryptedFileBigUploaded#2dc173c8 id:long parts:int key_fingerprint:int = InputEncryptedFile;
|
||||||
|
|
||||||
|
encryptedMessage#ed18c118 random_id:long chat_id:int date:int bytes:bytes file:EncryptedFile = EncryptedMessage;
|
||||||
|
encryptedMessageService#23734b06 random_id:long chat_id:int date:int bytes:bytes = EncryptedMessage;
|
||||||
|
|
||||||
|
messages.dhConfigNotModified#c0e24635 random:bytes = messages.DhConfig;
|
||||||
|
messages.dhConfig#2c221edd g:int p:bytes version:int random:bytes = messages.DhConfig;
|
||||||
|
|
||||||
|
messages.sentEncryptedMessage#560f8935 date:int = messages.SentEncryptedMessage;
|
||||||
|
messages.sentEncryptedFile#9493ff32 date:int file:EncryptedFile = messages.SentEncryptedMessage;
|
||||||
|
|
||||||
|
inputDocumentEmpty#72f0eaae = InputDocument;
|
||||||
|
inputDocument#18798952 id:long access_hash:long = InputDocument;
|
||||||
|
|
||||||
|
documentEmpty#36f8c871 id:long = Document;
|
||||||
|
document#87232bc7 id:long access_hash:long date:int mime_type:string size:int thumb:PhotoSize dc_id:int version:int attributes:Vector<DocumentAttribute> = Document;
|
||||||
|
|
||||||
|
help.support#17c6b5f6 phone_number:string user:User = help.Support;
|
||||||
|
|
||||||
|
notifyPeer#9fd40bd8 peer:Peer = NotifyPeer;
|
||||||
|
notifyUsers#b4c83b4c = NotifyPeer;
|
||||||
|
notifyChats#c007cec3 = NotifyPeer;
|
||||||
|
notifyAll#74d07c60 = NotifyPeer;
|
||||||
|
|
||||||
|
sendMessageTypingAction#16bf744e = SendMessageAction;
|
||||||
|
sendMessageCancelAction#fd5ec8f5 = SendMessageAction;
|
||||||
|
sendMessageRecordVideoAction#a187d66f = SendMessageAction;
|
||||||
|
sendMessageUploadVideoAction#e9763aec progress:int = SendMessageAction;
|
||||||
|
sendMessageRecordAudioAction#d52f73f7 = SendMessageAction;
|
||||||
|
sendMessageUploadAudioAction#f351d7ab progress:int = SendMessageAction;
|
||||||
|
sendMessageUploadPhotoAction#d1d34a26 progress:int = SendMessageAction;
|
||||||
|
sendMessageUploadDocumentAction#aa0cd9e4 progress:int = SendMessageAction;
|
||||||
|
sendMessageGeoLocationAction#176f8ba1 = SendMessageAction;
|
||||||
|
sendMessageChooseContactAction#628cbc6f = SendMessageAction;
|
||||||
|
|
||||||
|
contacts.found#1aa1f784 results:Vector<Peer> chats:Vector<Chat> users:Vector<User> = contacts.Found;
|
||||||
|
|
||||||
|
inputPrivacyKeyStatusTimestamp#4f96cb18 = InputPrivacyKey;
|
||||||
|
inputPrivacyKeyChatInvite#bdfb0426 = InputPrivacyKey;
|
||||||
|
|
||||||
|
privacyKeyStatusTimestamp#bc2eab30 = PrivacyKey;
|
||||||
|
privacyKeyChatInvite#500e6dfa = PrivacyKey;
|
||||||
|
|
||||||
|
inputPrivacyValueAllowContacts#d09e07b = InputPrivacyRule;
|
||||||
|
inputPrivacyValueAllowAll#184b35ce = InputPrivacyRule;
|
||||||
|
inputPrivacyValueAllowUsers#131cc67f users:Vector<InputUser> = InputPrivacyRule;
|
||||||
|
inputPrivacyValueDisallowContacts#ba52007 = InputPrivacyRule;
|
||||||
|
inputPrivacyValueDisallowAll#d66b66c9 = InputPrivacyRule;
|
||||||
|
inputPrivacyValueDisallowUsers#90110467 users:Vector<InputUser> = InputPrivacyRule;
|
||||||
|
|
||||||
|
privacyValueAllowContacts#fffe1bac = PrivacyRule;
|
||||||
|
privacyValueAllowAll#65427b82 = PrivacyRule;
|
||||||
|
privacyValueAllowUsers#4d5bbe0c users:Vector<int> = PrivacyRule;
|
||||||
|
privacyValueDisallowContacts#f888fa1a = PrivacyRule;
|
||||||
|
privacyValueDisallowAll#8b73e763 = PrivacyRule;
|
||||||
|
privacyValueDisallowUsers#c7f49b7 users:Vector<int> = PrivacyRule;
|
||||||
|
|
||||||
|
account.privacyRules#554abb6f rules:Vector<PrivacyRule> users:Vector<User> = account.PrivacyRules;
|
||||||
|
|
||||||
|
accountDaysTTL#b8d0afdf days:int = AccountDaysTTL;
|
||||||
|
|
||||||
|
documentAttributeImageSize#6c37c15c w:int h:int = DocumentAttribute;
|
||||||
|
documentAttributeAnimated#11b58939 = DocumentAttribute;
|
||||||
|
documentAttributeSticker#3a556302 alt:string stickerset:InputStickerSet = DocumentAttribute;
|
||||||
|
documentAttributeVideo#5910cccb duration:int w:int h:int = DocumentAttribute;
|
||||||
|
documentAttributeAudio#9852f9c6 flags:# voice:flags.10?true duration:int title:flags.0?string performer:flags.1?string waveform:flags.2?bytes = DocumentAttribute;
|
||||||
|
documentAttributeFilename#15590068 file_name:string = DocumentAttribute;
|
||||||
|
|
||||||
|
messages.stickersNotModified#f1749a22 = messages.Stickers;
|
||||||
|
messages.stickers#8a8ecd32 hash:string stickers:Vector<Document> = messages.Stickers;
|
||||||
|
|
||||||
|
stickerPack#12b299d4 emoticon:string documents:Vector<long> = StickerPack;
|
||||||
|
|
||||||
|
messages.allStickersNotModified#e86602c3 = messages.AllStickers;
|
||||||
|
messages.allStickers#edfd405f hash:int sets:Vector<StickerSet> = messages.AllStickers;
|
||||||
|
|
||||||
|
disabledFeature#ae636f24 feature:string description:string = DisabledFeature;
|
||||||
|
|
||||||
|
messages.affectedMessages#84d19185 pts:int pts_count:int = messages.AffectedMessages;
|
||||||
|
|
||||||
|
contactLinkUnknown#5f4f9247 = ContactLink;
|
||||||
|
contactLinkNone#feedd3ad = ContactLink;
|
||||||
|
contactLinkHasPhone#268f3f59 = ContactLink;
|
||||||
|
contactLinkContact#d502c2d0 = ContactLink;
|
||||||
|
|
||||||
|
webPageEmpty#eb1477e8 id:long = WebPage;
|
||||||
|
webPagePending#c586da1c id:long date:int = WebPage;
|
||||||
|
webPage#ca820ed7 flags:# id:long url:string display_url:string type:flags.0?string site_name:flags.1?string title:flags.2?string description:flags.3?string photo:flags.4?Photo embed_url:flags.5?string embed_type:flags.5?string embed_width:flags.6?int embed_height:flags.6?int duration:flags.7?int author:flags.8?string document:flags.9?Document = WebPage;
|
||||||
|
|
||||||
|
authorization#7bf2e6f6 hash:long flags:int device_model:string platform:string system_version:string api_id:int app_name:string app_version:string date_created:int date_active:int ip:string country:string region:string = Authorization;
|
||||||
|
|
||||||
|
account.authorizations#1250abde authorizations:Vector<Authorization> = account.Authorizations;
|
||||||
|
|
||||||
|
account.noPassword#96dabc18 new_salt:bytes email_unconfirmed_pattern:string = account.Password;
|
||||||
|
account.password#7c18141c current_salt:bytes new_salt:bytes hint:string has_recovery:Bool email_unconfirmed_pattern:string = account.Password;
|
||||||
|
|
||||||
|
account.passwordSettings#b7b72ab3 email:string = account.PasswordSettings;
|
||||||
|
|
||||||
|
account.passwordInputSettings#86916deb flags:# new_salt:flags.0?bytes new_password_hash:flags.0?bytes hint:flags.0?string email:flags.1?string = account.PasswordInputSettings;
|
||||||
|
|
||||||
|
auth.passwordRecovery#137948a5 email_pattern:string = auth.PasswordRecovery;
|
||||||
|
|
||||||
|
receivedNotifyMessage#a384b779 id:int flags:int = ReceivedNotifyMessage;
|
||||||
|
|
||||||
|
chatInviteEmpty#69df3769 = ExportedChatInvite;
|
||||||
|
chatInviteExported#fc2e05bc link:string = ExportedChatInvite;
|
||||||
|
|
||||||
|
chatInviteAlready#5a686d7c chat:Chat = ChatInvite;
|
||||||
|
chatInvite#db74f558 flags:# channel:flags.0?true broadcast:flags.1?true public:flags.2?true megagroup:flags.3?true title:string photo:ChatPhoto participants_count:int participants:flags.4?Vector<User> = ChatInvite;
|
||||||
|
|
||||||
|
inputStickerSetEmpty#ffb62b95 = InputStickerSet;
|
||||||
|
inputStickerSetID#9de7a269 id:long access_hash:long = InputStickerSet;
|
||||||
|
inputStickerSetShortName#861cc8a0 short_name:string = InputStickerSet;
|
||||||
|
|
||||||
|
stickerSet#cd303b41 flags:# installed:flags.0?true archived:flags.1?true official:flags.2?true id:long access_hash:long title:string short_name:string count:int hash:int = StickerSet;
|
||||||
|
|
||||||
|
messages.stickerSet#b60a24a6 set:StickerSet packs:Vector<StickerPack> documents:Vector<Document> = messages.StickerSet;
|
||||||
|
|
||||||
|
botCommand#c27ac8c7 command:string description:string = BotCommand;
|
||||||
|
|
||||||
|
botInfo#98e81d3a user_id:int description:string commands:Vector<BotCommand> = BotInfo;
|
||||||
|
|
||||||
|
keyboardButton#a2fa4880 text:string = KeyboardButton;
|
||||||
|
keyboardButtonUrl#258aff05 text:string url:string = KeyboardButton;
|
||||||
|
keyboardButtonCallback#683a5e46 text:string data:bytes = KeyboardButton;
|
||||||
|
keyboardButtonRequestPhone#b16a6c29 text:string = KeyboardButton;
|
||||||
|
keyboardButtonRequestGeoLocation#fc796b3f text:string = KeyboardButton;
|
||||||
|
keyboardButtonSwitchInline#ea1b7a14 text:string query:string = KeyboardButton;
|
||||||
|
|
||||||
|
keyboardButtonRow#77608b83 buttons:Vector<KeyboardButton> = KeyboardButtonRow;
|
||||||
|
|
||||||
|
replyKeyboardHide#a03e5b85 flags:# selective:flags.2?true = ReplyMarkup;
|
||||||
|
replyKeyboardForceReply#f4108aa0 flags:# single_use:flags.1?true selective:flags.2?true = ReplyMarkup;
|
||||||
|
replyKeyboardMarkup#3502758c flags:# resize:flags.0?true single_use:flags.1?true selective:flags.2?true rows:Vector<KeyboardButtonRow> = ReplyMarkup;
|
||||||
|
replyInlineMarkup#48a30254 rows:Vector<KeyboardButtonRow> = ReplyMarkup;
|
||||||
|
|
||||||
|
help.appChangelogEmpty#af7e0394 = help.AppChangelog;
|
||||||
|
help.appChangelog#4668e6bd text:string = help.AppChangelog;
|
||||||
|
|
||||||
|
messageEntityUnknown#bb92ba95 offset:int length:int = MessageEntity;
|
||||||
|
messageEntityMention#fa04579d offset:int length:int = MessageEntity;
|
||||||
|
messageEntityHashtag#6f635b0d offset:int length:int = MessageEntity;
|
||||||
|
messageEntityBotCommand#6cef8ac7 offset:int length:int = MessageEntity;
|
||||||
|
messageEntityUrl#6ed02538 offset:int length:int = MessageEntity;
|
||||||
|
messageEntityEmail#64e475c2 offset:int length:int = MessageEntity;
|
||||||
|
messageEntityBold#bd610bc9 offset:int length:int = MessageEntity;
|
||||||
|
messageEntityItalic#826f8b60 offset:int length:int = MessageEntity;
|
||||||
|
messageEntityCode#28a20571 offset:int length:int = MessageEntity;
|
||||||
|
messageEntityPre#73924be0 offset:int length:int language:string = MessageEntity;
|
||||||
|
messageEntityTextUrl#76a6d327 offset:int length:int url:string = MessageEntity;
|
||||||
|
messageEntityMentionName#352dca58 offset:int length:int user_id:int = MessageEntity;
|
||||||
|
inputMessageEntityMentionName#208e68c9 offset:int length:int user_id:InputUser = MessageEntity;
|
||||||
|
|
||||||
|
inputChannelEmpty#ee8c1e86 = InputChannel;
|
||||||
|
inputChannel#afeb712e channel_id:int access_hash:long = InputChannel;
|
||||||
|
|
||||||
|
contacts.resolvedPeer#7f077ad9 peer:Peer chats:Vector<Chat> users:Vector<User> = contacts.ResolvedPeer;
|
||||||
|
|
||||||
|
messageRange#ae30253 min_id:int max_id:int = MessageRange;
|
||||||
|
|
||||||
|
updates.channelDifferenceEmpty#3e11affb flags:# final:flags.0?true pts:int timeout:flags.1?int = updates.ChannelDifference;
|
||||||
|
updates.channelDifferenceTooLong#410dee07 flags:# final:flags.0?true pts:int timeout:flags.1?int top_message:int read_inbox_max_id:int read_outbox_max_id:int unread_count:int messages:Vector<Message> chats:Vector<Chat> users:Vector<User> = updates.ChannelDifference;
|
||||||
|
updates.channelDifference#2064674e flags:# final:flags.0?true pts:int timeout:flags.1?int new_messages:Vector<Message> other_updates:Vector<Update> chats:Vector<Chat> users:Vector<User> = updates.ChannelDifference;
|
||||||
|
|
||||||
|
channelMessagesFilterEmpty#94d42ee7 = ChannelMessagesFilter;
|
||||||
|
channelMessagesFilter#cd77d957 flags:# exclude_new_messages:flags.1?true ranges:Vector<MessageRange> = ChannelMessagesFilter;
|
||||||
|
|
||||||
|
channelParticipant#15ebac1d user_id:int date:int = ChannelParticipant;
|
||||||
|
channelParticipantSelf#a3289a6d user_id:int inviter_id:int date:int = ChannelParticipant;
|
||||||
|
channelParticipantModerator#91057fef user_id:int inviter_id:int date:int = ChannelParticipant;
|
||||||
|
channelParticipantEditor#98192d61 user_id:int inviter_id:int date:int = ChannelParticipant;
|
||||||
|
channelParticipantKicked#8cc5e69a user_id:int kicked_by:int date:int = ChannelParticipant;
|
||||||
|
channelParticipantCreator#e3e2e1f9 user_id:int = ChannelParticipant;
|
||||||
|
|
||||||
|
channelParticipantsRecent#de3f3c79 = ChannelParticipantsFilter;
|
||||||
|
channelParticipantsAdmins#b4608969 = ChannelParticipantsFilter;
|
||||||
|
channelParticipantsKicked#3c37bb7a = ChannelParticipantsFilter;
|
||||||
|
channelParticipantsBots#b0d1865b = ChannelParticipantsFilter;
|
||||||
|
|
||||||
|
channelRoleEmpty#b285a0c6 = ChannelParticipantRole;
|
||||||
|
channelRoleModerator#9618d975 = ChannelParticipantRole;
|
||||||
|
channelRoleEditor#820bfe8c = ChannelParticipantRole;
|
||||||
|
|
||||||
|
channels.channelParticipants#f56ee2a8 count:int participants:Vector<ChannelParticipant> users:Vector<User> = channels.ChannelParticipants;
|
||||||
|
|
||||||
|
channels.channelParticipant#d0d9b163 participant:ChannelParticipant users:Vector<User> = channels.ChannelParticipant;
|
||||||
|
|
||||||
|
help.termsOfService#f1ee3e90 text:string = help.TermsOfService;
|
||||||
|
|
||||||
|
foundGif#162ecc1f url:string thumb_url:string content_url:string content_type:string w:int h:int = FoundGif;
|
||||||
|
foundGifCached#9c750409 url:string photo:Photo document:Document = FoundGif;
|
||||||
|
|
||||||
|
messages.foundGifs#450a1c0a next_offset:int results:Vector<FoundGif> = messages.FoundGifs;
|
||||||
|
|
||||||
|
messages.savedGifsNotModified#e8025ca2 = messages.SavedGifs;
|
||||||
|
messages.savedGifs#2e0709a5 hash:int gifs:Vector<Document> = messages.SavedGifs;
|
||||||
|
|
||||||
|
inputBotInlineMessageMediaAuto#292fed13 flags:# caption:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
|
inputBotInlineMessageText#3dcd7a87 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
|
inputBotInlineMessageMediaGeo#f4a59de1 flags:# geo_point:InputGeoPoint reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
|
inputBotInlineMessageMediaVenue#aaafadc8 flags:# geo_point:InputGeoPoint title:string address:string provider:string venue_id:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
|
inputBotInlineMessageMediaContact#2daf01a7 flags:# phone_number:string first_name:string last_name:string reply_markup:flags.2?ReplyMarkup = InputBotInlineMessage;
|
||||||
|
|
||||||
|
inputBotInlineResult#2cbbe15a flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb_url:flags.4?string content_url:flags.5?string content_type:flags.5?string w:flags.6?int h:flags.6?int duration:flags.7?int send_message:InputBotInlineMessage = InputBotInlineResult;
|
||||||
|
inputBotInlineResultPhoto#a8d864a7 id:string type:string photo:InputPhoto send_message:InputBotInlineMessage = InputBotInlineResult;
|
||||||
|
inputBotInlineResultDocument#fff8fdc4 flags:# id:string type:string title:flags.1?string description:flags.2?string document:InputDocument send_message:InputBotInlineMessage = InputBotInlineResult;
|
||||||
|
|
||||||
|
botInlineMessageMediaAuto#a74b15b flags:# caption:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
|
botInlineMessageText#8c7f65e2 flags:# no_webpage:flags.0?true message:string entities:flags.1?Vector<MessageEntity> reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
|
botInlineMessageMediaGeo#3a8fd8b8 flags:# geo:GeoPoint reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
|
botInlineMessageMediaVenue#4366232e flags:# geo:GeoPoint title:string address:string provider:string venue_id:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
|
botInlineMessageMediaContact#35edb4d4 flags:# phone_number:string first_name:string last_name:string reply_markup:flags.2?ReplyMarkup = BotInlineMessage;
|
||||||
|
|
||||||
|
botInlineResult#9bebaeb9 flags:# id:string type:string title:flags.1?string description:flags.2?string url:flags.3?string thumb_url:flags.4?string content_url:flags.5?string content_type:flags.5?string w:flags.6?int h:flags.6?int duration:flags.7?int send_message:BotInlineMessage = BotInlineResult;
|
||||||
|
botInlineMediaResult#17db940b flags:# id:string type:string photo:flags.0?Photo document:flags.1?Document title:flags.2?string description:flags.3?string send_message:BotInlineMessage = BotInlineResult;
|
||||||
|
|
||||||
|
messages.botResults#256709a6 flags:# gallery:flags.0?true query_id:long next_offset:flags.1?string switch_pm:flags.2?InlineBotSwitchPM results:Vector<BotInlineResult> = messages.BotResults;
|
||||||
|
|
||||||
|
exportedMessageLink#1f486803 link:string = ExportedMessageLink;
|
||||||
|
|
||||||
|
messageFwdHeader#c786ddcb flags:# from_id:flags.0?int date:int channel_id:flags.1?int channel_post:flags.2?int = MessageFwdHeader;
|
||||||
|
|
||||||
|
auth.codeTypeSms#72a3158c = auth.CodeType;
|
||||||
|
auth.codeTypeCall#741cd3e3 = auth.CodeType;
|
||||||
|
auth.codeTypeFlashCall#226ccefb = auth.CodeType;
|
||||||
|
|
||||||
|
auth.sentCodeTypeApp#3dbb5986 length:int = auth.SentCodeType;
|
||||||
|
auth.sentCodeTypeSms#c000bba2 length:int = auth.SentCodeType;
|
||||||
|
auth.sentCodeTypeCall#5353e5a7 length:int = auth.SentCodeType;
|
||||||
|
auth.sentCodeTypeFlashCall#ab03c6d9 pattern:string = auth.SentCodeType;
|
||||||
|
|
||||||
|
messages.botCallbackAnswer#b10df1fb flags:# alert:flags.1?true message:flags.0?string url:flags.2?string = messages.BotCallbackAnswer;
|
||||||
|
|
||||||
|
messages.messageEditData#26b5dde6 flags:# caption:flags.0?true = messages.MessageEditData;
|
||||||
|
|
||||||
|
inputBotInlineMessageID#890c3d89 dc_id:int id:long access_hash:long = InputBotInlineMessageID;
|
||||||
|
|
||||||
|
inlineBotSwitchPM#3c20629f text:string start_param:string = InlineBotSwitchPM;
|
||||||
|
|
||||||
|
messages.peerDialogs#3371c354 dialogs:Vector<Dialog> messages:Vector<Message> chats:Vector<Chat> users:Vector<User> state:updates.State = messages.PeerDialogs;
|
||||||
|
|
||||||
|
topPeer#edcdc05b peer:Peer rating:double = TopPeer;
|
||||||
|
|
||||||
|
topPeerCategoryBotsPM#ab661b5b = TopPeerCategory;
|
||||||
|
topPeerCategoryBotsInline#148677e2 = TopPeerCategory;
|
||||||
|
topPeerCategoryCorrespondents#637b7ed = TopPeerCategory;
|
||||||
|
topPeerCategoryGroups#bd17a14a = TopPeerCategory;
|
||||||
|
topPeerCategoryChannels#161d9628 = TopPeerCategory;
|
||||||
|
|
||||||
|
topPeerCategoryPeers#fb834291 category:TopPeerCategory count:int peers:Vector<TopPeer> = TopPeerCategoryPeers;
|
||||||
|
|
||||||
|
contacts.topPeersNotModified#de266ef5 = contacts.TopPeers;
|
||||||
|
contacts.topPeers#70b772a8 categories:Vector<TopPeerCategoryPeers> chats:Vector<Chat> users:Vector<User> = contacts.TopPeers;
|
||||||
|
|
||||||
|
draftMessageEmpty#ba4baec5 = DraftMessage;
|
||||||
|
draftMessage#fd8e711f flags:# no_webpage:flags.1?true reply_to_msg_id:flags.0?int message:string entities:flags.3?Vector<MessageEntity> date:int = DraftMessage;
|
||||||
|
|
||||||
|
messages.featuredStickersNotModified#4ede3cf = messages.FeaturedStickers;
|
||||||
|
messages.featuredStickers#f89d88e5 hash:int sets:Vector<StickerSetCovered> unread:Vector<long> = messages.FeaturedStickers;
|
||||||
|
|
||||||
|
messages.recentStickersNotModified#b17f890 = messages.RecentStickers;
|
||||||
|
messages.recentStickers#5ce20970 hash:int stickers:Vector<Document> = messages.RecentStickers;
|
||||||
|
|
||||||
|
messages.archivedStickers#4fcba9c8 count:int sets:Vector<StickerSetCovered> = messages.ArchivedStickers;
|
||||||
|
|
||||||
|
messages.stickerSetInstallResultSuccess#38641628 = messages.StickerSetInstallResult;
|
||||||
|
messages.stickerSetInstallResultArchive#35e410a8 sets:Vector<StickerSetCovered> = messages.StickerSetInstallResult;
|
||||||
|
|
||||||
|
stickerSetCovered#6410a5d2 set:StickerSet cover:Document = StickerSetCovered;
|
||||||
|
|
||||||
|
---functions---
|
||||||
|
|
||||||
|
invokeAfterMsg#cb9f372d {X:Type} msg_id:long query:!X = X;
|
||||||
|
invokeAfterMsgs#3dc4b4f0 {X:Type} msg_ids:Vector<long> query:!X = X;
|
||||||
|
initConnection#69796de9 {X:Type} api_id:int device_model:string system_version:string app_version:string lang_code:string query:!X = X;
|
||||||
|
invokeWithLayer#da9b0d0d {X:Type} layer:int query:!X = X;
|
||||||
|
invokeWithoutUpdates#bf9459b7 {X:Type} query:!X = X;
|
||||||
|
|
||||||
|
auth.checkPhone#6fe51dfb phone_number:string = auth.CheckedPhone;
|
||||||
|
auth.sendCode#86aef0ec flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool api_id:int api_hash:string = auth.SentCode;
|
||||||
|
auth.signUp#1b067634 phone_number:string phone_code_hash:string phone_code:string first_name:string last_name:string = auth.Authorization;
|
||||||
|
auth.signIn#bcd51581 phone_number:string phone_code_hash:string phone_code:string = auth.Authorization;
|
||||||
|
auth.logOut#5717da40 = Bool;
|
||||||
|
auth.resetAuthorizations#9fab0d1a = Bool;
|
||||||
|
auth.sendInvites#771c1d97 phone_numbers:Vector<string> message:string = Bool;
|
||||||
|
auth.exportAuthorization#e5bfffcd dc_id:int = auth.ExportedAuthorization;
|
||||||
|
auth.importAuthorization#e3ef9613 id:int bytes:bytes = auth.Authorization;
|
||||||
|
auth.bindTempAuthKey#cdd42a05 perm_auth_key_id:long nonce:long expires_at:int encrypted_message:bytes = Bool;
|
||||||
|
auth.importBotAuthorization#67a3ff2c flags:int api_id:int api_hash:string bot_auth_token:string = auth.Authorization;
|
||||||
|
auth.checkPassword#a63011e password_hash:bytes = auth.Authorization;
|
||||||
|
auth.requestPasswordRecovery#d897bc66 = auth.PasswordRecovery;
|
||||||
|
auth.recoverPassword#4ea56e92 code:string = auth.Authorization;
|
||||||
|
auth.resendCode#3ef1a9bf phone_number:string phone_code_hash:string = auth.SentCode;
|
||||||
|
auth.cancelCode#1f040578 phone_number:string phone_code_hash:string = Bool;
|
||||||
|
|
||||||
|
account.registerDevice#637ea878 token_type:int token:string = Bool;
|
||||||
|
account.unregisterDevice#65c55b40 token_type:int token:string = Bool;
|
||||||
|
account.updateNotifySettings#84be5b93 peer:InputNotifyPeer settings:InputPeerNotifySettings = Bool;
|
||||||
|
account.getNotifySettings#12b3ad31 peer:InputNotifyPeer = PeerNotifySettings;
|
||||||
|
account.resetNotifySettings#db7e1747 = Bool;
|
||||||
|
account.updateProfile#78515775 flags:# first_name:flags.0?string last_name:flags.1?string about:flags.2?string = User;
|
||||||
|
account.updateStatus#6628562c offline:Bool = Bool;
|
||||||
|
account.getWallPapers#c04cfac2 = Vector<WallPaper>;
|
||||||
|
account.reportPeer#ae189d5f peer:InputPeer reason:ReportReason = Bool;
|
||||||
|
account.checkUsername#2714d86c username:string = Bool;
|
||||||
|
account.updateUsername#3e0bdd7c username:string = User;
|
||||||
|
account.getPrivacy#dadbc950 key:InputPrivacyKey = account.PrivacyRules;
|
||||||
|
account.setPrivacy#c9f81ce8 key:InputPrivacyKey rules:Vector<InputPrivacyRule> = account.PrivacyRules;
|
||||||
|
account.deleteAccount#418d4e0b reason:string = Bool;
|
||||||
|
account.getAccountTTL#8fc711d = AccountDaysTTL;
|
||||||
|
account.setAccountTTL#2442485e ttl:AccountDaysTTL = Bool;
|
||||||
|
account.sendChangePhoneCode#8e57deb flags:# allow_flashcall:flags.0?true phone_number:string current_number:flags.0?Bool = auth.SentCode;
|
||||||
|
account.changePhone#70c32edb phone_number:string phone_code_hash:string phone_code:string = User;
|
||||||
|
account.updateDeviceLocked#38df3532 period:int = Bool;
|
||||||
|
account.getAuthorizations#e320c158 = account.Authorizations;
|
||||||
|
account.resetAuthorization#df77f3bc hash:long = Bool;
|
||||||
|
account.getPassword#548a30f5 = account.Password;
|
||||||
|
account.getPasswordSettings#bc8d11bb current_password_hash:bytes = account.PasswordSettings;
|
||||||
|
account.updatePasswordSettings#fa7c4b86 current_password_hash:bytes new_settings:account.PasswordInputSettings = Bool;
|
||||||
|
account.sendConfirmPhoneCode#1516d7bd flags:# allow_flashcall:flags.0?true hash:string current_number:flags.0?Bool = auth.SentCode;
|
||||||
|
account.confirmPhone#5f2178c3 phone_code_hash:string phone_code:string = Bool;
|
||||||
|
|
||||||
|
users.getUsers#d91a548 id:Vector<InputUser> = Vector<User>;
|
||||||
|
users.getFullUser#ca30a5b1 id:InputUser = UserFull;
|
||||||
|
|
||||||
|
contacts.getStatuses#c4a353ee = Vector<ContactStatus>;
|
||||||
|
contacts.getContacts#22c6aa08 hash:string = contacts.Contacts;
|
||||||
|
contacts.importContacts#da30b32d contacts:Vector<InputContact> replace:Bool = contacts.ImportedContacts;
|
||||||
|
contacts.deleteContact#8e953744 id:InputUser = contacts.Link;
|
||||||
|
contacts.deleteContacts#59ab389e id:Vector<InputUser> = Bool;
|
||||||
|
contacts.block#332b49fc id:InputUser = Bool;
|
||||||
|
contacts.unblock#e54100bd id:InputUser = Bool;
|
||||||
|
contacts.getBlocked#f57c350f offset:int limit:int = contacts.Blocked;
|
||||||
|
contacts.exportCard#84e53737 = Vector<int>;
|
||||||
|
contacts.importCard#4fe196fe export_card:Vector<int> = User;
|
||||||
|
contacts.search#11f812d8 q:string limit:int = contacts.Found;
|
||||||
|
contacts.resolveUsername#f93ccba3 username:string = contacts.ResolvedPeer;
|
||||||
|
contacts.getTopPeers#d4982db5 flags:# correspondents:flags.0?true bots_pm:flags.1?true bots_inline:flags.2?true groups:flags.10?true channels:flags.15?true offset:int limit:int hash:int = contacts.TopPeers;
|
||||||
|
contacts.resetTopPeerRating#1ae373ac category:TopPeerCategory peer:InputPeer = Bool;
|
||||||
|
|
||||||
|
messages.getMessages#4222fa74 id:Vector<int> = messages.Messages;
|
||||||
|
messages.getDialogs#6b47f94d offset_date:int offset_id:int offset_peer:InputPeer limit:int = messages.Dialogs;
|
||||||
|
messages.getHistory#afa92846 peer:InputPeer offset_id:int offset_date:int add_offset:int limit:int max_id:int min_id:int = messages.Messages;
|
||||||
|
messages.search#d4569248 flags:# peer:InputPeer q:string filter:MessagesFilter min_date:int max_date:int offset:int max_id:int limit:int = messages.Messages;
|
||||||
|
messages.readHistory#e306d3a peer:InputPeer max_id:int = messages.AffectedMessages;
|
||||||
|
messages.deleteHistory#1c015b09 flags:# just_clear:flags.0?true peer:InputPeer max_id:int = messages.AffectedHistory;
|
||||||
|
messages.deleteMessages#a5f18925 id:Vector<int> = messages.AffectedMessages;
|
||||||
|
messages.receivedMessages#5a954c0 max_id:int = Vector<ReceivedNotifyMessage>;
|
||||||
|
messages.setTyping#a3825e50 peer:InputPeer action:SendMessageAction = Bool;
|
||||||
|
messages.sendMessage#fa88427a flags:# no_webpage:flags.1?true silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int message:string random_id:long reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> = Updates;
|
||||||
|
messages.sendMedia#c8f16791 flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int media:InputMedia random_id:long reply_markup:flags.2?ReplyMarkup = Updates;
|
||||||
|
messages.forwardMessages#708e0195 flags:# silent:flags.5?true background:flags.6?true from_peer:InputPeer id:Vector<int> random_id:Vector<long> to_peer:InputPeer = Updates;
|
||||||
|
messages.reportSpam#cf1592db peer:InputPeer = Bool;
|
||||||
|
messages.hideReportSpam#a8f1709b peer:InputPeer = Bool;
|
||||||
|
messages.getPeerSettings#3672e09c peer:InputPeer = PeerSettings;
|
||||||
|
messages.getChats#3c6aa187 id:Vector<int> = messages.Chats;
|
||||||
|
messages.getFullChat#3b831c66 chat_id:int = messages.ChatFull;
|
||||||
|
messages.editChatTitle#dc452855 chat_id:int title:string = Updates;
|
||||||
|
messages.editChatPhoto#ca4c79d8 chat_id:int photo:InputChatPhoto = Updates;
|
||||||
|
messages.addChatUser#f9a0aa09 chat_id:int user_id:InputUser fwd_limit:int = Updates;
|
||||||
|
messages.deleteChatUser#e0611f16 chat_id:int user_id:InputUser = Updates;
|
||||||
|
messages.createChat#9cb126e users:Vector<InputUser> title:string = Updates;
|
||||||
|
messages.forwardMessage#33963bf9 peer:InputPeer id:int random_id:long = Updates;
|
||||||
|
messages.sendBroadcast#bf73f4da contacts:Vector<InputUser> random_id:Vector<long> message:string media:InputMedia = Updates;
|
||||||
|
messages.getDhConfig#26cf8950 version:int random_length:int = messages.DhConfig;
|
||||||
|
messages.requestEncryption#f64daf43 user_id:InputUser random_id:int g_a:bytes = EncryptedChat;
|
||||||
|
messages.acceptEncryption#3dbc0415 peer:InputEncryptedChat g_b:bytes key_fingerprint:long = EncryptedChat;
|
||||||
|
messages.discardEncryption#edd923c5 chat_id:int = Bool;
|
||||||
|
messages.setEncryptedTyping#791451ed peer:InputEncryptedChat typing:Bool = Bool;
|
||||||
|
messages.readEncryptedHistory#7f4b690a peer:InputEncryptedChat max_date:int = Bool;
|
||||||
|
messages.sendEncrypted#a9776773 peer:InputEncryptedChat random_id:long data:bytes = messages.SentEncryptedMessage;
|
||||||
|
messages.sendEncryptedFile#9a901b66 peer:InputEncryptedChat random_id:long data:bytes file:InputEncryptedFile = messages.SentEncryptedMessage;
|
||||||
|
messages.sendEncryptedService#32d439a4 peer:InputEncryptedChat random_id:long data:bytes = messages.SentEncryptedMessage;
|
||||||
|
messages.receivedQueue#55a5bb66 max_qts:int = Vector<long>;
|
||||||
|
messages.readMessageContents#36a73f77 id:Vector<int> = messages.AffectedMessages;
|
||||||
|
messages.getStickers#ae22e045 emoticon:string hash:string = messages.Stickers;
|
||||||
|
messages.getAllStickers#1c9618b1 hash:int = messages.AllStickers;
|
||||||
|
messages.getWebPagePreview#25223e24 message:string = MessageMedia;
|
||||||
|
messages.exportChatInvite#7d885289 chat_id:int = ExportedChatInvite;
|
||||||
|
messages.checkChatInvite#3eadb1bb hash:string = ChatInvite;
|
||||||
|
messages.importChatInvite#6c50051c hash:string = Updates;
|
||||||
|
messages.getStickerSet#2619a90e stickerset:InputStickerSet = messages.StickerSet;
|
||||||
|
messages.installStickerSet#c78fe460 stickerset:InputStickerSet archived:Bool = messages.StickerSetInstallResult;
|
||||||
|
messages.uninstallStickerSet#f96e55de stickerset:InputStickerSet = Bool;
|
||||||
|
messages.startBot#e6df7378 bot:InputUser peer:InputPeer random_id:long start_param:string = Updates;
|
||||||
|
messages.getMessagesViews#c4c8a55d peer:InputPeer id:Vector<int> increment:Bool = Vector<int>;
|
||||||
|
messages.toggleChatAdmins#ec8bd9e1 chat_id:int enabled:Bool = Updates;
|
||||||
|
messages.editChatAdmin#a9e69f2e chat_id:int user_id:InputUser is_admin:Bool = Bool;
|
||||||
|
messages.migrateChat#15a3b8e3 chat_id:int = Updates;
|
||||||
|
messages.searchGlobal#9e3cacb0 q:string offset_date:int offset_peer:InputPeer offset_id:int limit:int = messages.Messages;
|
||||||
|
messages.reorderStickerSets#9fcfbc30 order:Vector<long> = Bool;
|
||||||
|
messages.getDocumentByHash#338e2464 sha256:bytes size:int mime_type:string = Document;
|
||||||
|
messages.searchGifs#bf9a776b q:string offset:int = messages.FoundGifs;
|
||||||
|
messages.getSavedGifs#83bf3d52 hash:int = messages.SavedGifs;
|
||||||
|
messages.saveGif#327a30cb id:InputDocument unsave:Bool = Bool;
|
||||||
|
messages.getInlineBotResults#514e999d flags:# bot:InputUser peer:InputPeer geo_point:flags.0?InputGeoPoint query:string offset:string = messages.BotResults;
|
||||||
|
messages.setInlineBotResults#eb5ea206 flags:# gallery:flags.0?true private:flags.1?true query_id:long results:Vector<InputBotInlineResult> cache_time:int next_offset:flags.2?string switch_pm:flags.3?InlineBotSwitchPM = Bool;
|
||||||
|
messages.sendInlineBotResult#b16e06fe flags:# silent:flags.5?true background:flags.6?true clear_draft:flags.7?true peer:InputPeer reply_to_msg_id:flags.0?int random_id:long query_id:long id:string = Updates;
|
||||||
|
messages.getMessageEditData#fda68d36 peer:InputPeer id:int = messages.MessageEditData;
|
||||||
|
messages.editMessage#ce91e4ca flags:# no_webpage:flags.1?true peer:InputPeer id:int message:flags.11?string reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> = Updates;
|
||||||
|
messages.editInlineBotMessage#130c2c85 flags:# no_webpage:flags.1?true id:InputBotInlineMessageID message:flags.11?string reply_markup:flags.2?ReplyMarkup entities:flags.3?Vector<MessageEntity> = Bool;
|
||||||
|
messages.getBotCallbackAnswer#a6e94f04 peer:InputPeer msg_id:int data:bytes = messages.BotCallbackAnswer;
|
||||||
|
messages.setBotCallbackAnswer#c927d44b flags:# alert:flags.1?true query_id:long message:flags.0?string url:flags.2?string = Bool;
|
||||||
|
messages.getPeerDialogs#2d9776b9 peers:Vector<InputPeer> = messages.PeerDialogs;
|
||||||
|
messages.saveDraft#bc39e14b flags:# no_webpage:flags.1?true reply_to_msg_id:flags.0?int peer:InputPeer message:string entities:flags.3?Vector<MessageEntity> = Bool;
|
||||||
|
messages.getAllDrafts#6a3f8d65 = Updates;
|
||||||
|
messages.getFeaturedStickers#2dacca4f hash:int = messages.FeaturedStickers;
|
||||||
|
messages.readFeaturedStickers#e21cbb = Bool;
|
||||||
|
messages.getRecentStickers#99197c2c hash:int = messages.RecentStickers;
|
||||||
|
messages.saveRecentSticker#348e39bf id:InputDocument unsave:Bool = Bool;
|
||||||
|
messages.clearRecentStickers#ab02e5d2 = Bool;
|
||||||
|
messages.getUnusedStickers#4309d65b limit:int = Vector<StickerSetCovered>;
|
||||||
|
messages.getArchivedStickers#906e241f offset_id:long limit:int = messages.ArchivedStickers;
|
||||||
|
|
||||||
|
updates.getState#edd4882a = updates.State;
|
||||||
|
updates.getDifference#a041495 pts:int date:int qts:int = updates.Difference;
|
||||||
|
updates.getChannelDifference#bb32d7c0 channel:InputChannel filter:ChannelMessagesFilter pts:int limit:int = updates.ChannelDifference;
|
||||||
|
|
||||||
|
photos.updateProfilePhoto#eef579a0 id:InputPhoto crop:InputPhotoCrop = UserProfilePhoto;
|
||||||
|
photos.uploadProfilePhoto#d50f9c88 file:InputFile caption:string geo_point:InputGeoPoint crop:InputPhotoCrop = photos.Photo;
|
||||||
|
photos.deletePhotos#87cf7f2f id:Vector<InputPhoto> = Vector<long>;
|
||||||
|
photos.getUserPhotos#91cd32a8 user_id:InputUser offset:int max_id:long limit:int = photos.Photos;
|
||||||
|
|
||||||
|
upload.saveFilePart#b304a621 file_id:long file_part:int bytes:bytes = Bool;
|
||||||
|
upload.getFile#e3a6cfb5 location:InputFileLocation offset:int limit:int = upload.File;
|
||||||
|
upload.saveBigFilePart#de7b673d file_id:long file_part:int file_total_parts:int bytes:bytes = Bool;
|
||||||
|
|
||||||
|
help.getConfig#c4f9186b = Config;
|
||||||
|
help.getNearestDc#1fb33026 = NearestDc;
|
||||||
|
help.getAppUpdate#ae2de196 = help.AppUpdate;
|
||||||
|
help.saveAppLog#6f02f748 events:Vector<InputAppEvent> = Bool;
|
||||||
|
help.getInviteText#4d392343 = help.InviteText;
|
||||||
|
help.getSupport#9cdf08cd = help.Support;
|
||||||
|
help.getAppChangelog#b921197a = help.AppChangelog;
|
||||||
|
help.getTermsOfService#350170f3 = help.TermsOfService;
|
||||||
|
|
||||||
|
channels.readHistory#cc104937 channel:InputChannel max_id:int = Bool;
|
||||||
|
channels.deleteMessages#84c1fd4e channel:InputChannel id:Vector<int> = messages.AffectedMessages;
|
||||||
|
channels.deleteUserHistory#d10dd71b channel:InputChannel user_id:InputUser = messages.AffectedHistory;
|
||||||
|
channels.reportSpam#fe087810 channel:InputChannel user_id:InputUser id:Vector<int> = Bool;
|
||||||
|
channels.getMessages#93d7b347 channel:InputChannel id:Vector<int> = messages.Messages;
|
||||||
|
channels.getParticipants#24d98f92 channel:InputChannel filter:ChannelParticipantsFilter offset:int limit:int = channels.ChannelParticipants;
|
||||||
|
channels.getParticipant#546dd7a6 channel:InputChannel user_id:InputUser = channels.ChannelParticipant;
|
||||||
|
channels.getChannels#a7f6bbb id:Vector<InputChannel> = messages.Chats;
|
||||||
|
channels.getFullChannel#8736a09 channel:InputChannel = messages.ChatFull;
|
||||||
|
channels.createChannel#f4893d7f flags:# broadcast:flags.0?true megagroup:flags.1?true title:string about:string = Updates;
|
||||||
|
channels.editAbout#13e27f1e channel:InputChannel about:string = Bool;
|
||||||
|
channels.editAdmin#eb7611d0 channel:InputChannel user_id:InputUser role:ChannelParticipantRole = Updates;
|
||||||
|
channels.editTitle#566decd0 channel:InputChannel title:string = Updates;
|
||||||
|
channels.editPhoto#f12e57c9 channel:InputChannel photo:InputChatPhoto = Updates;
|
||||||
|
channels.checkUsername#10e6bd2c channel:InputChannel username:string = Bool;
|
||||||
|
channels.updateUsername#3514b3de channel:InputChannel username:string = Bool;
|
||||||
|
channels.joinChannel#24b524c5 channel:InputChannel = Updates;
|
||||||
|
channels.leaveChannel#f836aa95 channel:InputChannel = Updates;
|
||||||
|
channels.inviteToChannel#199f3a6c channel:InputChannel users:Vector<InputUser> = Updates;
|
||||||
|
channels.kickFromChannel#a672de14 channel:InputChannel user_id:InputUser kicked:Bool = Updates;
|
||||||
|
channels.exportInvite#c7560885 channel:InputChannel = ExportedChatInvite;
|
||||||
|
channels.deleteChannel#c0111fe3 channel:InputChannel = Updates;
|
||||||
|
channels.toggleInvites#49609307 channel:InputChannel enabled:Bool = Updates;
|
||||||
|
channels.exportMessageLink#c846d22d channel:InputChannel id:int = ExportedMessageLink;
|
||||||
|
channels.toggleSignatures#1f69b606 channel:InputChannel enabled:Bool = Updates;
|
||||||
|
channels.updatePinnedMessage#a72ded52 flags:# silent:flags.0?true channel:InputChannel id:int = Updates;
|
||||||
|
|
||||||
|
// LAYER 54
|
38
parser/source_builder.py
Normal file
38
parser/source_builder.py
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
|
||||||
|
class SourceBuilder:
|
||||||
|
"""This class should be used to build .py source files"""
|
||||||
|
|
||||||
|
def __init__(self, indent_size=4):
|
||||||
|
self.current_indent = 0
|
||||||
|
self.on_new_line = False
|
||||||
|
self.indent_size = indent_size
|
||||||
|
|
||||||
|
self.buffer = []
|
||||||
|
|
||||||
|
def indent(self):
|
||||||
|
self.write(' ' * (self.current_indent * self.indent_size))
|
||||||
|
|
||||||
|
def write(self, string):
|
||||||
|
if self.on_new_line:
|
||||||
|
self.on_new_line = False # We're not on a new line anymore
|
||||||
|
self.indent()
|
||||||
|
|
||||||
|
self.buffer += list(string)
|
||||||
|
|
||||||
|
def writeln(self, string=''):
|
||||||
|
self.write(string + '\n')
|
||||||
|
self.on_new_line = True
|
||||||
|
|
||||||
|
# If we're writing a block, increment indent for the next time
|
||||||
|
if string and string[-1] == ':':
|
||||||
|
self.current_indent += 1
|
||||||
|
|
||||||
|
def end_block(self):
|
||||||
|
self.current_indent -= 1
|
||||||
|
self.writeln()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
if self.buffer:
|
||||||
|
return ''.join(self.buffer)
|
||||||
|
else:
|
||||||
|
return ''
|
30
parser/tl_parser.py
Normal file
30
parser/tl_parser.py
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
import re
|
||||||
|
from tl.tlobject import TLObject
|
||||||
|
|
||||||
|
|
||||||
|
class TLParser:
|
||||||
|
"""Class used to parse .tl files"""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def parse_file(file_path):
|
||||||
|
"""This method yields TLObjects from a given .tl file"""
|
||||||
|
|
||||||
|
with open(file_path, encoding='utf-8') as file:
|
||||||
|
# Start by assuming that the next found line won't be a function (and will hence be a type)
|
||||||
|
is_function = False
|
||||||
|
|
||||||
|
# Read all the lines from the .tl file
|
||||||
|
for line in file:
|
||||||
|
line = line.strip()
|
||||||
|
|
||||||
|
# Ensure that the line is not a comment
|
||||||
|
if line and not line.startswith('//'):
|
||||||
|
|
||||||
|
# Check whether the line is a type change (types ⋄ functions) or not
|
||||||
|
match = re.match('---(\w+)---', line)
|
||||||
|
if match:
|
||||||
|
following_types = match.group(1)
|
||||||
|
is_function = following_types == 'functions'
|
||||||
|
|
||||||
|
else:
|
||||||
|
yield TLObject.from_tl(line, is_function)
|
0
tl/__init__.py
Normal file
0
tl/__init__.py
Normal file
133
tl/tlobject.py
Normal file
133
tl/tlobject.py
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
|
class TLObject:
|
||||||
|
def __init__(self, fullname, id, args, result, is_function):
|
||||||
|
"""
|
||||||
|
Initializes a new TLObject, given its properties.
|
||||||
|
Usually, this will be called from `from_tl` instead
|
||||||
|
:param fullname: The fullname of the TL object (namespace.name)
|
||||||
|
The namespace can be omitted
|
||||||
|
:param id: The hexadecimal string representing the object ID
|
||||||
|
:param args: The arguments, if any, of the TL object
|
||||||
|
:param result: The result type of the TL object
|
||||||
|
:param is_function: Is the object a function or a type?
|
||||||
|
"""
|
||||||
|
# The name can or not have a namespace
|
||||||
|
if '.' in fullname:
|
||||||
|
self.namespace = fullname.split('.')[0]
|
||||||
|
self.name = fullname.split('.')[1]
|
||||||
|
else:
|
||||||
|
self.namespace = None
|
||||||
|
self.name = fullname
|
||||||
|
|
||||||
|
# The ID should be an hexadecimal string
|
||||||
|
self.id = int(id, base=16)
|
||||||
|
self.args = args
|
||||||
|
self.result = result
|
||||||
|
self.is_function = is_function
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def from_tl(tl, is_function):
|
||||||
|
"""Returns a TL object from the given TL scheme line"""
|
||||||
|
|
||||||
|
# Regex to match the whole line
|
||||||
|
match = re.match(r'''
|
||||||
|
^ # We want to match from the beginning to the end
|
||||||
|
([\w.]+) # The .tl object can contain alpha_name or namespace.alpha_name
|
||||||
|
\# # After the name, comes the ID of the object
|
||||||
|
([0-9a-f]+) # The constructor ID is in hexadecimal form
|
||||||
|
|
||||||
|
(?:\s # After that, we want to match its arguments (name:type)
|
||||||
|
\{? # For handling the start of the «{X:Type}» case
|
||||||
|
\w+ # The argument name will always be an alpha-only name
|
||||||
|
: # Then comes the separator between name:type
|
||||||
|
[\w\d<>#.?!]+ # The type is slightly more complex, since it's alphanumeric and it can
|
||||||
|
# also have Vector<type>, flags:# and flags.0?default, plus :!X as type
|
||||||
|
\}? # For handling the end of the «{X:Type}» case
|
||||||
|
)* # Match 0 or more arguments
|
||||||
|
\s # Leave a space between the arguments and the equal
|
||||||
|
=
|
||||||
|
\s # Leave another space between the equal and the result
|
||||||
|
([\w\d<>#.?]+) # The result can again be as complex as any argument type
|
||||||
|
;$ # Finally, the line should always end with ;
|
||||||
|
''', tl, re.IGNORECASE | re.VERBOSE)
|
||||||
|
|
||||||
|
# Sub-regex to match the arguments (sadly, it cannot be embedded in the first regex)
|
||||||
|
args_match = re.findall(r'''
|
||||||
|
(\{)? # We may or may not capture the opening brace
|
||||||
|
(\w+) # First we capture any alpha name with length 1 or more
|
||||||
|
: # Which is separated from its type by a colon
|
||||||
|
([\w\d<>#.?!]+) # The type is slightly more complex, since it's alphanumeric and it can
|
||||||
|
# also have Vector<type>, flags:# and flags.0?default, plus :!X as type
|
||||||
|
(\})? # We may or not capture the closing brace
|
||||||
|
''', tl, re.IGNORECASE | re.VERBOSE)
|
||||||
|
|
||||||
|
# Retrieve the matched arguments
|
||||||
|
args = [TLArg(name, type, brace != '') for brace, name, type, _ in args_match]
|
||||||
|
|
||||||
|
# And initialize the TLObject
|
||||||
|
return TLObject(fullname=match.group(1),
|
||||||
|
id=match.group(2),
|
||||||
|
args=args,
|
||||||
|
result=match.group(3),
|
||||||
|
is_function=is_function)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
fullname = ('{}.{}'.format(self.namespace, self.name) if self.namespace is not None
|
||||||
|
else self.name)
|
||||||
|
|
||||||
|
hex_id = hex(self.id)[2:].rjust(8, '0') # Skip 0x and add 0's for padding
|
||||||
|
|
||||||
|
return '{}#{} {} = {}'.format(fullname,
|
||||||
|
hex_id,
|
||||||
|
' '.join([str(arg) for arg in self.args]),
|
||||||
|
self.result)
|
||||||
|
|
||||||
|
|
||||||
|
class TLArg:
|
||||||
|
def __init__(self, name, type, generic_definition):
|
||||||
|
"""
|
||||||
|
Initializes a new .tl argument
|
||||||
|
:param name: The name of the .tl argument
|
||||||
|
:param type: The type of the .tl argument
|
||||||
|
:param generic_definition: Is the argument a generic definition?
|
||||||
|
(i.e. {X:Type})
|
||||||
|
"""
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
# Default flag values
|
||||||
|
self.is_flag = False
|
||||||
|
self.flag_index = -1
|
||||||
|
|
||||||
|
# The type can be an indicator that other arguments will be flags
|
||||||
|
if type == '#':
|
||||||
|
self.flag_indicator = True
|
||||||
|
self.type = None
|
||||||
|
self.is_generic = False
|
||||||
|
else:
|
||||||
|
self.flag_indicator = False
|
||||||
|
self.type = type.lstrip('!') # Strip the exclamation mark always to have only the name
|
||||||
|
self.is_generic = type.startswith('!')
|
||||||
|
|
||||||
|
# The type may be a flag (flags.IDX?REAL_TYPE)
|
||||||
|
# Note that «flags» is NOT the flags name; this is determined by a previous argument
|
||||||
|
# However, we assume that the argument will always be called «flags»
|
||||||
|
flag_match = re.match(r'flags.(\d+)\?([\w<>.]+)', self.type)
|
||||||
|
if flag_match:
|
||||||
|
self.is_flag = True
|
||||||
|
self.flag_index = int(flag_match.group(1))
|
||||||
|
self.type = flag_match.group(2) # Update the type to match the exact type, not the "flagged" one
|
||||||
|
|
||||||
|
self.generic_definition = generic_definition
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
type = ('!{}'.format(self.type) if self.is_generic
|
||||||
|
else
|
||||||
|
('flags.{}?{}'.format(self.flag_index, self.type) if self.is_flag
|
||||||
|
else self.type))
|
||||||
|
|
||||||
|
if self.generic_definition:
|
||||||
|
return '{{{}:{}}}'.format(self.name, type)
|
||||||
|
else:
|
||||||
|
return '{}:{}'.format(self.name, type)
|
Loading…
Reference in New Issue
Block a user