From 2850c5acfa4cff1ef85d0c0714db1231dbde994b Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Sat, 28 Dec 2019 17:11:08 +0100 Subject: [PATCH] Strictly typed API --- docs | 2 +- .../MadelineProto/AnnotationsBuilder.php | 2 + src/danog/MadelineProto/InternalDoc.php | 49 +++++++------------ .../MTProtoTools/AuthKeyHandler.php | 2 +- .../SecretChats/AuthKeyHandler.php | 22 ++++----- src/danog/MadelineProto/Tools.php | 8 +-- .../MadelineProto/VoIP/AuthKeyHandler.php | 22 ++++----- .../MadelineProto/Wrappers/DialogHandler.php | 4 +- src/danog/MadelineProto/Wrappers/Webhook.php | 2 +- 9 files changed, 52 insertions(+), 61 deletions(-) diff --git a/docs b/docs index 1979018e..757d12fb 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 1979018e600cdc12750fcc751661090e64a2b695 +Subproject commit 757d12fbdda97d22a20d565be8e0aea64ed34cad diff --git a/src/danog/MadelineProto/AnnotationsBuilder.php b/src/danog/MadelineProto/AnnotationsBuilder.php index 7eaaca24..b4226001 100644 --- a/src/danog/MadelineProto/AnnotationsBuilder.php +++ b/src/danog/MadelineProto/AnnotationsBuilder.php @@ -223,6 +223,8 @@ class AnnotationsBuilder } $doc .= $type->getName(); $doc .= ' '; + } else { + Logger::log($name.'.'.$param->getName()." has no type!", Logger::WARNING); } if ($param->isVariadic()) { $doc .= '...'; diff --git a/src/danog/MadelineProto/InternalDoc.php b/src/danog/MadelineProto/InternalDoc.php index 9157f632..dc97e0af 100644 --- a/src/danog/MadelineProto/InternalDoc.php +++ b/src/danog/MadelineProto/InternalDoc.php @@ -4291,17 +4291,6 @@ class InternalDoc extends APIFactory { return $this->__call(__FUNCTION__, [$expires_in, $datacenter, $extra]); } - /** - * Factorize number asynchronously using the wolfram API. - * - * @param string|integer $what Number to factorize - * - * @return \Generator - */ - public function wolframSingle($what, array $extra = []) - { - return $this->__call(__FUNCTION__, [$what, $extra]); - } /** * Asynchronously create, bind and check auth keys for all DCs. * @@ -4794,11 +4783,11 @@ class InternalDoc extends APIFactory /** * Rekey secret chat. * - * @param mixed $chat Secret chat to rekey + * @param int $chat Secret chat to rekey * * @return \Generator */ - public function rekey($chat, array $extra = []) + public function rekey(int $chat, array $extra = []) { return $this->__call(__FUNCTION__, [$chat, $extra]); } @@ -4838,11 +4827,11 @@ class InternalDoc extends APIFactory /** * Discard secret chat. * - * @param array|int $chat Secret chat ID + * @param int $chat Secret chat ID * * @return \Generator */ - public function discardSecretChat($chat, array $extra = []) + public function discardSecretChat(int $chat, array $extra = []) { return $this->__call(__FUNCTION__, [$chat, $extra]); } @@ -5059,7 +5048,7 @@ class InternalDoc extends APIFactory * * @return int */ - public function randomInt($modulus = false): int + public function randomInt(int $modulus = 0): int { return \danog\MadelineProto\MTProto::randomInt($modulus); } @@ -5094,7 +5083,7 @@ class InternalDoc extends APIFactory * * @return integer */ - public function unpackSignedInt($value): int + public function unpackSignedInt(string $value): int { return \danog\MadelineProto\MTProto::unpackSignedInt($value); } @@ -5105,7 +5094,7 @@ class InternalDoc extends APIFactory * * @return integer */ - public function unpackSignedLong($value): int + public function unpackSignedLong(string $value): int { return \danog\MadelineProto\MTProto::unpackSignedLong($value); } @@ -5505,8 +5494,8 @@ class InternalDoc extends APIFactory * * @return \Generator */ - public function discardCall($call, $reason, $rating = [ - ], $need_debug = true, array $extra = []) + public function discardCall(array $call, string $reason, array $rating = [ + ], bool $need_debug = true, array $extra = []) { return $this->__call(__FUNCTION__, [$call, $reason, $rating, $need_debug, $extra]); } @@ -5528,7 +5517,7 @@ class InternalDoc extends APIFactory * * @return \Generator */ - public function acceptCall($call, array $extra = []) + public function acceptCall(array $call, array $extra = []) { return $this->__call(__FUNCTION__, [$call, $extra]); } @@ -5539,7 +5528,7 @@ class InternalDoc extends APIFactory * * @return \Generator */ - public function confirmCall($params, array $extra = []) + public function confirmCall(array $params, array $extra = []) { return $this->__call(__FUNCTION__, [$params, $extra]); } @@ -5550,29 +5539,29 @@ class InternalDoc extends APIFactory * * @return \Generator */ - public function completeCall($params, array $extra = []) + public function completeCall(array $params, array $extra = []) { return $this->__call(__FUNCTION__, [$params, $extra]); } /** * Get call status. * - * @param array $id Call ID + * @param int $id Call ID * * @return integer */ - public function callStatus($id, array $extra = []): int + public function callStatus(int $id, array $extra = []): int { return $this->__call(__FUNCTION__, [$id, $extra]); } /** * Get call info. * - * @param mixed $call Call ID + * @param int $call Call ID * * @return array */ - public function getCall($call, array $extra = []): array + public function getCall(int $call, array $extra = []): array { return $this->__call(__FUNCTION__, [$call, $extra]); } @@ -5592,7 +5581,7 @@ class InternalDoc extends APIFactory * * @return \Generator> */ - public function getDialogs($force = true, array $extra = []) + public function getDialogs(bool $force = true, array $extra = []) { return $this->__call(__FUNCTION__, [$force, $extra]); } @@ -5603,7 +5592,7 @@ class InternalDoc extends APIFactory * * @return \Generator */ - public function getFullDialogs($force = true, array $extra = []) + public function getFullDialogs(bool $force = true, array $extra = []) { return $this->__call(__FUNCTION__, [$force, $extra]); } @@ -5635,7 +5624,7 @@ class InternalDoc extends APIFactory * * @return void */ - public function setWebhook($hook_url, $pem_path = null, array $extra = []): void + public function setWebhook(string $hook_url, string $pem_path = '', array $extra = []): void { $this->__call(__FUNCTION__, [$hook_url, $pem_path, $extra]); } diff --git a/src/danog/MadelineProto/MTProtoTools/AuthKeyHandler.php b/src/danog/MadelineProto/MTProtoTools/AuthKeyHandler.php index ed13b0ab..22707f39 100644 --- a/src/danog/MadelineProto/MTProtoTools/AuthKeyHandler.php +++ b/src/danog/MadelineProto/MTProtoTools/AuthKeyHandler.php @@ -589,7 +589,7 @@ trait AuthKeyHandler * * @return \Generator */ - public function wolframSingle($what): \Generator + private function wolframSingle($what): \Generator { $code = yield $this->datacenter->fileGetContents('http://www.wolframalpha.com/api/v1/code'); $query = 'Do prime factorization of '.$what; diff --git a/src/danog/MadelineProto/SecretChats/AuthKeyHandler.php b/src/danog/MadelineProto/SecretChats/AuthKeyHandler.php index e2077e66..8e15e455 100644 --- a/src/danog/MadelineProto/SecretChats/AuthKeyHandler.php +++ b/src/danog/MadelineProto/SecretChats/AuthKeyHandler.php @@ -111,7 +111,7 @@ trait AuthKeyHandler * * @return \Generator */ - private function completeSecretChat($params): \Generator + private function completeSecretChat(array $params): \Generator { if ($this->secretChatStatus($params['id']) !== 1) { //$this->logger->logger($this->secretChatStatus($params['id'])); @@ -153,11 +153,11 @@ trait AuthKeyHandler /** * Rekey secret chat. * - * @param mixed $chat Secret chat to rekey + * @param int $chat Secret chat to rekey * * @return \Generator */ - public function rekey($chat): \Generator + public function rekey(int $chat): \Generator { if ($this->secret_chats[$chat]['rekeying'][0] !== 0) { return; @@ -181,12 +181,12 @@ trait AuthKeyHandler /** * Accept rekeying. * - * @param mixed $chat Chat + * @param int $chat Chat * @param array $params Parameters * * @return \Generator */ - private function acceptRekey($chat, array $params): \Generator + private function acceptRekey(int $chat, array $params): \Generator { if ($this->secret_chats[$chat]['rekeying'][0] !== 0) { $my_exchange_id = new \tgseclib\Math\BigInteger($this->secret_chats[$chat]['rekeying'][1], -256); @@ -222,12 +222,12 @@ trait AuthKeyHandler /** * Commit rekeying of secret chat. * - * @param mixed $chat Chat + * @param int $chat Chat * @param array $params Parameters * * @return \Generator */ - private function commitRekey($chat, array $params): \Generator + private function commitRekey(int $chat, array $params): \Generator { if ($this->secret_chats[$chat]['rekeying'][0] !== 1 || !isset($this->temp_rekeyed_secret_chats[$params['exchange_id']])) { $this->secret_chats[$chat]['rekeying'] = [0]; @@ -260,12 +260,12 @@ trait AuthKeyHandler /** * Complete rekeying. * - * @param mixed $chat Chat + * @param int $chat Chat * @param array $params Parameters * * @return \Generator */ - private function completeRekey($chat, array $params): \Generator + private function completeRekey(int $chat, array $params): \Generator { if ($this->secret_chats[$chat]['rekeying'][0] !== 2 || !isset($this->temp_rekeyed_secret_chats['fingerprint'])) { return; @@ -334,11 +334,11 @@ trait AuthKeyHandler /** * Discard secret chat. * - * @param array|int $chat Secret chat ID + * @param int $chat Secret chat ID * * @return \Generator */ - public function discardSecretChat($chat): \Generator + public function discardSecretChat(int $chat): \Generator { $this->logger->logger('Discarding secret chat '.$chat.'...', \danog\MadelineProto\Logger::VERBOSE); if (isset($this->secret_chats[$chat])) { diff --git a/src/danog/MadelineProto/Tools.php b/src/danog/MadelineProto/Tools.php index 7b353f26..df32610e 100644 --- a/src/danog/MadelineProto/Tools.php +++ b/src/danog/MadelineProto/Tools.php @@ -95,9 +95,9 @@ trait Tools * * @return int */ - public static function randomInt($modulus = false): int + public static function randomInt(int $modulus = 0): int { - if ($modulus === false) { + if ($modulus === 0) { $modulus = PHP_INT_MAX; } @@ -158,7 +158,7 @@ trait Tools * * @return integer */ - public static function unpackSignedInt($value): int + public static function unpackSignedInt(string $value): int { if (\strlen($value) !== 4) { throw new TL\Exception(\danog\MadelineProto\Lang::$current_lang['length_not_4']); @@ -174,7 +174,7 @@ trait Tools * * @return integer */ - public static function unpackSignedLong($value): int + public static function unpackSignedLong(string $value): int { if (\strlen($value) !== 8) { throw new TL\Exception(\danog\MadelineProto\Lang::$current_lang['length_not_8']); diff --git a/src/danog/MadelineProto/VoIP/AuthKeyHandler.php b/src/danog/MadelineProto/VoIP/AuthKeyHandler.php index 1af0c2c7..04cca6b3 100644 --- a/src/danog/MadelineProto/VoIP/AuthKeyHandler.php +++ b/src/danog/MadelineProto/VoIP/AuthKeyHandler.php @@ -46,13 +46,13 @@ trait AuthKeyHandler /** * Accept call (synchronous). * - * @param mixed $user Accept call + * @param array $user Accept call * * @internal * * @return bool */ - public function acceptCall($user): bool + public function acceptCall(array $user): bool { return \danog\MadelineProto\Tools::wait($this->acceptCallAsync($user)); } @@ -67,7 +67,7 @@ trait AuthKeyHandler * * @return array */ - public function discardCall($call, $reason, $rating = [], $need_debug = true): void + public function discardCall(array $call, string $reason, array $rating = [], bool $need_debug = true): void { \danog\MadelineProto\Tools::wait($this->discardCallAsync($call, $reason, $rating, $need_debug)); } @@ -113,7 +113,7 @@ trait AuthKeyHandler * * @return \Generator */ - public function acceptCallAsync($call): \Generator + public function acceptCallAsync(array $call): \Generator { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw new \danog\MadelineProto\Exception(); @@ -160,7 +160,7 @@ trait AuthKeyHandler * * @return \Generator */ - public function confirmCall($params): \Generator + public function confirmCall(array $params): \Generator { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw \danog\MadelineProto\Exception::extension('libtgvoip'); @@ -216,7 +216,7 @@ trait AuthKeyHandler * * @return \Generator */ - public function completeCall($params): \Generator + public function completeCall(array $params): \Generator { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw \danog\MadelineProto\Exception::extension('libtgvoip'); @@ -254,11 +254,11 @@ trait AuthKeyHandler /** * Get call status. * - * @param array $id Call ID + * @param int $id Call ID * * @return integer */ - public function callStatus($id): int + public function callStatus(int $id): int { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw \danog\MadelineProto\Exception::extension('libtgvoip'); @@ -273,11 +273,11 @@ trait AuthKeyHandler /** * Get call info. * - * @param mixed $call Call ID + * @param int $call Call ID * * @return array */ - public function getCall($call): array + public function getCall(int $call): array { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw \danog\MadelineProto\Exception::extension('libtgvoip'); @@ -296,7 +296,7 @@ trait AuthKeyHandler * * @return \Generator */ - public function discardCallAsync($call, $reason, $rating = [], $need_debug = true): \Generator + public function discardCallAsync(array $call, string $reason, array $rating = [], bool $need_debug = true): \Generator { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw \danog\MadelineProto\Exception::extension('libtgvoip'); diff --git a/src/danog/MadelineProto/Wrappers/DialogHandler.php b/src/danog/MadelineProto/Wrappers/DialogHandler.php index 0b09a2d7..de1c505e 100644 --- a/src/danog/MadelineProto/Wrappers/DialogHandler.php +++ b/src/danog/MadelineProto/Wrappers/DialogHandler.php @@ -28,7 +28,7 @@ trait DialogHandler * * @return \Generator> */ - public function getDialogs($force = true): \Generator + public function getDialogs(bool $force = true): \Generator { if ($this->authorization['user']['bot']) { $res = []; @@ -53,7 +53,7 @@ trait DialogHandler * * @return \Generator */ - public function getFullDialogs($force = true): \Generator + public function getFullDialogs(bool $force = true): \Generator { if ($force || !isset($this->dialog_params['offset_date']) || \is_null($this->dialog_params['offset_date']) || !isset($this->dialog_params['offset_id']) || \is_null($this->dialog_params['offset_id']) || !isset($this->dialog_params['offset_peer']) || \is_null($this->dialog_params['offset_peer']) || !isset($this->dialog_params['count']) || \is_null($this->dialog_params['count'])) { $this->dialog_params = ['limit' => 100, 'offset_date' => 0, 'offset_id' => 0, 'offset_peer' => ['_' => 'inputPeerEmpty'], 'count' => 0, 'hash' => 0]; diff --git a/src/danog/MadelineProto/Wrappers/Webhook.php b/src/danog/MadelineProto/Wrappers/Webhook.php index 4512fc7f..61c911a7 100644 --- a/src/danog/MadelineProto/Wrappers/Webhook.php +++ b/src/danog/MadelineProto/Wrappers/Webhook.php @@ -32,7 +32,7 @@ trait Webhook * * @return void */ - public function setWebhook($hook_url, $pem_path = null): void + public function setWebhook(string $hook_url, string $pem_path = ''): void { $this->pem_path = $pem_path; $this->hook_url = $hook_url;