. */ require 'vendor/autoload.php'; $param = 1; \danog\MadelineProto\Logger::constructor($param); $logger = \danog\MadelineProto\Logger::$default; set_error_handler(['\danog\MadelineProto\Exception', 'ExceptionErrorHandler']); if ($argc !== 3) { die("Usage: {$argv[0]} layernumberold layernumbernew\n"); } /** * Get TL info of layer. * * @param int $layer Layer number * * @return void */ function getTL($layer) { $layer = __DIR__."/src/danog/MadelineProto/TL_telegram_v$layer.tl"; $layer = new class($layer) { use TL; public function __construct($layer) { $this->logger = Logger::$default; $this->construct_TL(['telegram' => $layer]); } }; return ['methods' => $layer->methods, 'constructors' => $layer->constructors]; } function getUrl($constructor, $type) { $changed = str_replace('.', '_', $constructor); return "[$constructor](https://github.com/danog/MadelineProtoDocs/blob/geochats/docs/API_docs/$type/$changed.md)"; return "[$constructor](https://docs.madelineproto.xyz/API_docs/$type/$changed.html)"; } $old = getTL($argv[1]); $new = getTL($argv[2]); $res = ''; foreach (['methods', 'constructors'] as $type) { $finder = $type === 'methods' ? 'find_by_method' : 'find_by_predicate'; $key = $type === 'methods' ? 'method' : 'predicate'; // New constructors $res .= "\n\nNew ".ucfirst($type)."\n"; foreach ($new[$type]->by_id as $constructor) { $name = $constructor[$key]; if (!$old[$type]->$finder($name)) { $name = getUrl($name, $type); $res .= "Added $name\n"; } } // Changed constructors $res .= "\n\nChanged ".ucfirst($type)."\n"; foreach ($new[$type]->by_id as $constructor) { $name = $constructor[$key]; $constructor['id'] = $new[$type]->$finder($name)['id']; if ($old[$type]->$finder($name)) { $new_args = $constructor['params']; $old_args = $old[$type]->$finder($name)['params']; $final_new_args = []; $final_old_args = []; foreach ($new_args as $arg) { $final_new_args[$arg['name']] = $arg['type']; } foreach ($old_args as $arg) { $final_old_args[$arg['name']] = $arg['type']; } $url = getUrl($name, $type); foreach ($final_new_args as $name => $ttype) { if (!isset($final_old_args[$name]) && $name !== 'flags') { $res .= "Added $name param to $url\n"; } } foreach ($final_old_args as $name => $ttype) { if (!isset($final_new_args[$name]) && $name !== 'flags') { $res .= "Removed $name param from $url\n"; } } } } // Deleted constructors $res .= "\n\nDeleted ".ucfirst($type)."\n"; foreach ($old[$type]->by_id as $constructor) { $name = $constructor[$key]; if (!$new[$type]->$finder($name)) { $res .= "Removed $name\n"; } } } echo $res;