diff --git a/setup.py b/setup.py index 4769dbf7..2112dd6e 100755 --- a/setup.py +++ b/setup.py @@ -11,6 +11,7 @@ Extra supported commands are: """ import itertools +import json import os import re import shutil @@ -43,6 +44,8 @@ ERRORS_IN_JSON = os.path.join(GENERATOR_DIR, 'data', 'errors.json') ERRORS_IN_DESC = os.path.join(GENERATOR_DIR, 'data', 'error_descriptions') ERRORS_OUT = os.path.join(LIBRARY_DIR, 'errors', 'rpc_error_list.py') +INVALID_BM_IN = os.path.join(GENERATOR_DIR, 'data', 'invalid_bot_methods.json') + TLOBJECT_IN_CORE_TL = os.path.join(GENERATOR_DIR, 'data', 'mtproto_api.tl') TLOBJECT_IN_TL = os.path.join(GENERATOR_DIR, 'data', 'telegram_api.tl') TLOBJECT_OUT = os.path.join(LIBRARY_DIR, 'tl') @@ -57,11 +60,14 @@ def generate(which): from telethon_generator.generators import\ generate_errors, generate_tlobjects, generate_docs, clean_tlobjects + with open(INVALID_BM_IN) as f: + ib = set(json.load(f)) + layer = find_layer(TLOBJECT_IN_TL) errors = list(parse_errors(ERRORS_IN_JSON, ERRORS_IN_DESC)) tlobjects = list(itertools.chain( - parse_tl(TLOBJECT_IN_CORE_TL, layer=layer), - parse_tl(TLOBJECT_IN_TL, layer=layer))) + parse_tl(TLOBJECT_IN_CORE_TL, layer=layer, invalid_bot_methods=ib), + parse_tl(TLOBJECT_IN_TL, layer=layer, invalid_bot_methods=ib))) if not which: which.extend(('tl', 'errors')) diff --git a/telethon_generator/generators/docs.py b/telethon_generator/generators/docs.py index 745186b7..2d2546f3 100755 --- a/telethon_generator/generators/docs.py +++ b/telethon_generator/generators/docs.py @@ -266,6 +266,10 @@ def _write_html_pages(tlobjects, errors, layer, input_res, output_dir): # Create the page title docs.write_title(tlobject.class_name) + if tlobject.is_function: + docs.write_text('Bots can{} use this method.' + .format("" if tlobject.bot_usable else "'t")) + # Write the code definition for this TLObject docs.write_code(tlobject) docs.write_copy_button('Copy import to the clipboard', diff --git a/telethon_generator/parsers/tlobject.py b/telethon_generator/parsers/tlobject.py index b2ce65c2..d3e60f88 100644 --- a/telethon_generator/parsers/tlobject.py +++ b/telethon_generator/parsers/tlobject.py @@ -44,6 +44,7 @@ class TLObject: self.args = args self.result = result self.is_function = is_function + self.bot_usable = None self.id = None if object_id is None: self.id = self.infer_id() @@ -252,8 +253,11 @@ def _from_line(line, is_function, layer): ) -def parse_tl(file_path, layer, ignore_core=False): +def parse_tl(file_path, layer, ignore_core=False, invalid_bot_methods=None): """This method yields TLObjects from a given .tl file.""" + if invalid_bot_methods is None: + invalid_bot_methods = set() + with open(file_path, encoding='utf-8') as file: is_function = False for line in file: @@ -274,6 +278,9 @@ def parse_tl(file_path, layer, ignore_core=False): try: result = _from_line(line, is_function, layer=layer) if not ignore_core or result.id not in CORE_TYPES: + result.bot_usable =\ + result.fullname not in invalid_bot_methods + yield result except ValueError as e: if 'vector#1cb5c415' not in str(e):