diff --git a/composer.json b/composer.json index 49186771f..0562522c7 100644 --- a/composer.json +++ b/composer.json @@ -21,8 +21,6 @@ "ext-xml": "*", "amphp/amp": "^2.0", "amphp/socket": "^0.10.11", - "amphp/log": "^1.0", - "amphp/parser": "^1.0", "amphp/websocket": "dev-master", "amphp/websocket-client": "dev-master", "amphp/artax": "^3.0", diff --git a/layerdiff.php b/layerdiff.php new file mode 100644 index 000000000..8feefba2d --- /dev/null +++ b/layerdiff.php @@ -0,0 +1,111 @@ +. + */ + +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://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) && $old[$type]->$finder($name)['id'] !== $constructor['id']) { + $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])) { + $res .= "Added $name param to $url\n"; + } + } + foreach ($final_old_args as $name => $ttype) { + if (!isset($final_new_args[$name])) { + $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);