Improved error handling

This commit is contained in:
Daniil Gentili 2019-06-13 15:04:48 +00:00
parent c7bafaf564
commit 69ed0f733d
5 changed files with 16 additions and 18 deletions

2
docs

@ -1 +1 @@
Subproject commit 319f29dbb5d5729e02e246802d7cb5ba7d2c8815
Subproject commit dc05dc5cebfcec90ac7851928c522a4d635dbab6

View File

@ -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!',

View File

@ -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));
}

View File

@ -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;
}

View File

@ -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, '<br>'.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') {