diff --git a/telethon/interactive_telegram_client.py b/telethon/interactive_telegram_client.py index 8097b348..f0a9f15c 100644 --- a/telethon/interactive_telegram_client.py +++ b/telethon/interactive_telegram_client.py @@ -27,11 +27,11 @@ def bytes_to_string(byte_count): class InteractiveTelegramClient(TelegramClient): - def __init__(self, session_user_id, user_phone, layer, api_id, api_hash): + def __init__(self, session_user_id, user_phone, api_id, api_hash): print_title('Initialization') print('Initializing interactive example...') - super().__init__(session_user_id, layer, api_id, api_hash) + super().__init__(session_user_id, api_id, api_hash) # Store all the found media in memory here, # so it can be downloaded if the user wants diff --git a/telethon/telegram_client.py b/telethon/telegram_client.py index c5e2b81d..854507af 100644 --- a/telethon/telegram_client.py +++ b/telethon/telegram_client.py @@ -29,21 +29,20 @@ import telethon.network.authenticator as authenticator from telethon.errors import * from telethon.network import MtProtoSender, TcpTransport from telethon.parser.markdown_parser import parse_message_entities +from telethon.tl.all_tlobjects import layer class TelegramClient: # region Initialization - def __init__(self, session_user_id, layer, api_id, api_hash): + def __init__(self, session_user_id, api_id, api_hash): if api_id is None or api_hash is None: raise PermissionError('Your API ID or Hash are invalid. Please read "Requirements" on README.md') self.api_id = api_id self.api_hash = api_hash - self.layer = layer - self.session = Session.try_load_or_create_new(session_user_id) self.transport = TcpTransport(self.session.server_address, self.session.port) @@ -78,7 +77,7 @@ class TelegramClient: lang_code='en', query=GetConfigRequest()) - result = self.invoke(InvokeWithLayerRequest(layer=self.layer, query=query)) + result = self.invoke(InvokeWithLayerRequest(layer=layer, query=query)) # We're only interested in the DC options, # although many other options are available! diff --git a/telethon_generator/parser/tl_parser.py b/telethon_generator/parser/tl_parser.py index 2e624a7c..18d328bc 100755 --- a/telethon_generator/parser/tl_parser.py +++ b/telethon_generator/parser/tl_parser.py @@ -29,3 +29,13 @@ class TLParser: else: yield TLObject.from_tl(line, is_function) + + @staticmethod + def find_layer(file_path): + """Finds the layer used on the specified scheme.tl file""" + layer_regex = re.compile(r'^//\s*LAYER\s*(\d+)$') + with open(file_path, encoding='utf-8') as file: + for line in file: + match = layer_regex.match(line) + if match: + return int(match.group(1)) diff --git a/telethon_generator/tl_generator.py b/telethon_generator/tl_generator.py index 98cfc6c5..c6bdc0e0 100755 --- a/telethon_generator/tl_generator.py +++ b/telethon_generator/tl_generator.py @@ -167,6 +167,10 @@ class TLGenerator: builder.writeln('import {}'.format(TLGenerator.get_full_file_name(tlobject))) builder.writeln() + # Create a variable to indicate which layer this is + builder.writeln('layer = {} # Current generated layer'.format(TLParser.find_layer(scheme_file))) + builder.writeln() + # Then create the dictionary containing constructor_id: class builder.writeln('tlobjects = {') builder.current_indent += 1 diff --git a/try_telethon.py b/try_telethon.py index 938a4414..ae7f79d2 100644 --- a/try_telethon.py +++ b/try_telethon.py @@ -25,7 +25,6 @@ if __name__ == '__main__': client = InteractiveTelegramClient( session_user_id=settings.get('session_name', 'anonymous'), user_phone=str(settings['user_phone']), - layer=55, api_id=settings['api_id'], api_hash=settings['api_hash'])