From 69ed0f733d8735a0c1ebc5470ce0106b425619ff Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Thu, 13 Jun 2019 15:04:48 +0000 Subject: [PATCH] Improved error handling --- docs | 2 +- src/danog/MadelineProto/Lang.php | 6 +++--- .../MadelineProto/MTProtoTools/PeerHandler.php | 6 ++---- .../MadelineProto/MTProtoTools/ResponseHandler.php | 14 +++++++------- src/danog/MadelineProto/RPCErrorException.php | 6 +++--- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/docs b/docs index 319f29db..dc05dc5c 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 319f29dbb5d5729e02e246802d7cb5ba7d2c8815 +Subproject commit dc05dc5cebfcec90ac7851928c522a4d635dbab6 diff --git a/src/danog/MadelineProto/Lang.php b/src/danog/MadelineProto/Lang.php index a5989be6..d1f7e0fc 100644 --- a/src/danog/MadelineProto/Lang.php +++ b/src/danog/MadelineProto/Lang.php @@ -61,7 +61,7 @@ class Lang 'loading_key' => 'Caricamento della chiave in corso...', 'computing_fingerprint' => 'Calcolo del fingerprint in corso...', 'rsa_encrypting' => 'Criptando con chiave RSA...', - 'rpc_tg_error' => 'Telegram ha ritornato un errore RPC: %s (%s), causato da %s:%sTL trace:', + 'rpc_tg_error' => 'Telegram ha ritornato un errore RPC: %s (%s), causato da %s:%s%sTL trace:', 'v_error' => '506572206661766f726520616767696f726e612071756573746120696e7374616c6c617a696f6e65206469204d6164656c696e6550726f746f20636f6e206769742070756c6c206520636f6d706f73657220757064617465', 'v_tgerror' => '506572206661766f726520616767696f726e61207068702d6c69627467766f6970', 'no_mode_specified' => 'Nessuna modalità di logging è stata specificata!', @@ -208,7 +208,7 @@ class Lang 'loading_key' => 'Loading key...', 'computing_fingerprint' => 'Computing fingerprint...', 'rsa_encrypting' => 'Encrypting with rsa key...', - 'rpc_tg_error' => 'Telegram returned an RPC error: %s (%s), caused by %s:%sTL trace:', + 'rpc_tg_error' => 'Telegram ha ritornato un errore RPC: %s (%s), causato da %s:%s%sTL trace:', 'v_error' => '506c656173652075706461746520746f20746865206c61746573742076657273696f6e206f66204d6164656c696e6550726f746f2e', 'v_tgerror' => '506c6561736520757064617465207068702d6c69627467766f6970', 'no_mode_specified' => 'No mode was specified!', @@ -4955,7 +4955,7 @@ class Lang 'loading_key' => 'Loading key...', 'computing_fingerprint' => 'Computing fingerprint...', 'rsa_encrypting' => 'Encrypting with rsa key...', - 'rpc_tg_error' => 'Telegram returned an RPC error: %s (%s), caused by %s:%sTL trace:', + 'rpc_tg_error' => 'Telegram ha ritornato un errore RPC: %s (%s), causato da %s:%s%sTL trace:', 'v_error' => '506c656173652075706461746520746f20746865206c61746573742076657273696f6e206f66204d6164656c696e6550726f746f2e', 'v_tgerror' => '506c6561736520757064617465207068702d6c69627467766f6970', 'no_mode_specified' => 'No mode was specified!', diff --git a/src/danog/MadelineProto/MTProtoTools/PeerHandler.php b/src/danog/MadelineProto/MTProtoTools/PeerHandler.php index b8261297..3532d8be 100644 --- a/src/danog/MadelineProto/MTProtoTools/PeerHandler.php +++ b/src/danog/MadelineProto/MTProtoTools/PeerHandler.php @@ -235,11 +235,13 @@ trait PeerHandler case 'peerUser': return $id['user_id']; case 'chat': + case 'chatForbidden': case 'chatFull': return -$id['id']; case 'inputPeerChat': case 'peerChat': return -$id['chat_id']; + case 'channelForbidden': case 'channel': case 'channelFull': return $this->to_supergroup($id['id']); @@ -302,9 +304,6 @@ trait PeerHandler case 'updateEditChannelMessage': case 'updateNewEncryptedMessage': return $this->get_id($id['message']); - case 'chatForbidden': - case 'channelForbidden': - throw new \danog\MadelineProto\RPCErrorException('CHAT_FORBIDDEN'); default: throw new \danog\MadelineProto\Exception('Invalid constructor given '.var_export($id, true)); } @@ -508,7 +507,6 @@ trait PeerHandler break; case 'channelForbidden': throw new \danog\MadelineProto\Exception('This peer is not present in the internal peer database'); - throw new \danog\MadelineProto\RPCErrorException('CHAT_FORBIDDEN'); default: throw new \danog\MadelineProto\Exception('Invalid constructor given '.var_export($constructor, true)); } diff --git a/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php b/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php index 22c4ba49..f6bf7e81 100644 --- a/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php +++ b/src/danog/MadelineProto/MTProtoTools/ResponseHandler.php @@ -370,7 +370,7 @@ trait ResponseHandler } $this->got_response_for_outgoing_message_id($request_id, $datacenter); - $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'])); + $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'], isset($request['_']) ? $request['_'] : '')); return; case 303: @@ -420,7 +420,7 @@ trait ResponseHandler $this->callFork((function () use ($datacenter, &$request, &$response) { yield $this->init_authorization_async(); - $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'])); + $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'], isset($request['_']) ? $request['_'] : '')); })()); return; @@ -432,7 +432,7 @@ trait ResponseHandler $this->callFork((function () use ($datacenter, &$request, &$response) { yield $this->init_authorization_async(); - $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'])); + $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'], isset($request['_']) ? $request['_'] : '')); })()); return; @@ -467,7 +467,7 @@ trait ResponseHandler $this->callFork((function () use ($datacenter, &$request, &$response) { yield $this->init_authorization_async(); - $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'])); + $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'], isset($request['_']) ? $request['_'] : '')); })()); return; @@ -492,7 +492,7 @@ trait ResponseHandler } $this->got_response_for_outgoing_message_id($request_id, $datacenter); - $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'])); + $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'], isset($request['_']) ? $request['_'] : '')); return; case 420: @@ -511,7 +511,7 @@ trait ResponseHandler default: $this->got_response_for_outgoing_message_id($request_id, $datacenter); - $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'])); + $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException($response['error_message'], $response['error_code'], isset($request['_']) ? $request['_'] : '')); return; } @@ -544,7 +544,7 @@ trait ResponseHandler return; } $this->got_response_for_outgoing_message_id($request_id, $datacenter); - $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException('Received bad_msg_notification: '.self::BAD_MSG_ERROR_CODES[$response['error_code']], $response['error_code'])); + $this->handle_reject($datacenter, $request, new \danog\MadelineProto\RPCErrorException('Received bad_msg_notification: '.self::BAD_MSG_ERROR_CODES[$response['error_code']], $response['error_code'], isset($request['_']) ? $request['_'] : '')); return; } diff --git a/src/danog/MadelineProto/RPCErrorException.php b/src/danog/MadelineProto/RPCErrorException.php index 9e513840..bd080960 100644 --- a/src/danog/MadelineProto/RPCErrorException.php +++ b/src/danog/MadelineProto/RPCErrorException.php @@ -39,7 +39,7 @@ class RPCErrorException extends \Exception public function __toString() { - $result = sprintf(\danog\MadelineProto\Lang::$current_lang['rpc_tg_error'], $this->getMess(), $this->rpc, $this->file, $this->line.PHP_EOL.PHP_EOL).PHP_EOL.\danog\MadelineProto\Magic::$revision.PHP_EOL.$this->getTLTrace().PHP_EOL; + $result = sprintf(\danog\MadelineProto\Lang::$current_lang['rpc_tg_error'], $this->getMess(), $this->rpc, $this->file, $this->line.PHP_EOL, \danog\MadelineProto\Magic::$revision.PHP_EOL.PHP_EOL).PHP_EOL.$this->getTLTrace().PHP_EOL; if (php_sapi_name() !== 'cli') { $result = str_replace(PHP_EOL, '
'.PHP_EOL, $result); } @@ -47,7 +47,7 @@ class RPCErrorException extends \Exception return $result; } - public function __construct($message = null, $code = 0, Exception $previous = null) + public function __construct($message = null, $code = 0, $caller = '', Exception $previous = null) { $this->rpc = $message; switch ($message) { @@ -178,7 +178,7 @@ class RPCErrorException extends \Exception break; } parent::__construct($message, $code, $previous); - $this->prettify_tl(); + $this->prettify_tl($caller); $additional = []; foreach ($this->getTrace() as $level) { if (isset($level['function']) && $level['function'] === 'method_call') {