mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2024-11-14 05:26:36 +03:00
Prevent common pitfall when pulling new .tl files
This commit is contained in:
parent
2aa089f29c
commit
e852dccebf
|
@ -14,6 +14,26 @@ CORE_TYPES = {
|
||||||
0x56730bcc # null#56730bcc = Null;
|
0x56730bcc # null#56730bcc = Null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Telegram Desktop (C++) doesn't care about string/bytes, and the .tl files
|
||||||
|
# don't either. However in Python we *do*, and we want to deal with bytes
|
||||||
|
# for the authorization key process, not UTF-8 strings (they won't be).
|
||||||
|
#
|
||||||
|
# Every type with an ID that's in here should get their attribute types
|
||||||
|
# with string being replaced with bytes.
|
||||||
|
AUTH_KEY_TYPES = {
|
||||||
|
0x05162463, # resPQ,
|
||||||
|
0x83c95aec, # p_q_inner_data
|
||||||
|
0xa9f55f95, # p_q_inner_data_dc
|
||||||
|
0x3c6a84d4, # p_q_inner_data_temp
|
||||||
|
0x56fddf88, # p_q_inner_data_temp_dc
|
||||||
|
0xd0e8075c, # server_DH_params_ok
|
||||||
|
0xb5890dba, # server_DH_inner_data
|
||||||
|
0x6643b654, # client_DH_inner_data
|
||||||
|
0xd712e4be, # req_DH_params
|
||||||
|
0xf5045f1f, # set_client_DH_params
|
||||||
|
0x3072cfa1 # gzip_packed
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def _from_line(line, is_function, method_info, layer):
|
def _from_line(line, is_function, method_info, layer):
|
||||||
match = re.match(
|
match = re.match(
|
||||||
|
@ -101,6 +121,11 @@ def parse_tl(file_path, layer, methods=None, ignored_ids=CORE_TYPES):
|
||||||
# Once all objects have been parsed, replace the
|
# Once all objects have been parsed, replace the
|
||||||
# string type from the arguments with references
|
# string type from the arguments with references
|
||||||
for obj in obj_all:
|
for obj in obj_all:
|
||||||
|
if obj.id in AUTH_KEY_TYPES:
|
||||||
|
for arg in obj.args:
|
||||||
|
if arg.type == 'string':
|
||||||
|
arg.type = 'bytes'
|
||||||
|
|
||||||
for arg in obj.args:
|
for arg in obj.args:
|
||||||
arg.cls = obj_by_type.get(arg.type) or (
|
arg.cls = obj_by_type.get(arg.type) or (
|
||||||
[obj_by_name[arg.type]] if arg.type in obj_by_name else []
|
[obj_by_name[arg.type]] if arg.type in obj_by_name else []
|
||||||
|
|
Loading…
Reference in New Issue
Block a user