diff --git a/examples/bot.php b/examples/bot.php index b3038781..b424aa1a 100755 --- a/examples/bot.php +++ b/examples/bot.php @@ -22,7 +22,7 @@ /* * Various ways to load MadelineProto */ -if (\file_exists(__DIR__.'/vendor/autoload.php')) { +if (\file_exists('vendor/autoload.php')) { include 'vendor/autoload.php'; } else { if (!\file_exists('madeline.php')) { diff --git a/src/danog/MadelineProto/DataCenter.php b/src/danog/MadelineProto/DataCenter.php index 3ab84769..1414cc33 100644 --- a/src/danog/MadelineProto/DataCenter.php +++ b/src/danog/MadelineProto/DataCenter.php @@ -227,7 +227,7 @@ class DataCenter if ($reconnectAll || $changedSettings || !$this->CookieJar) { $this->CookieJar = $jar ?? new ArrayCookieJar; - $this->HTTPClient = new DefaultClient($this->CookieJar, new HttpSocketPool(new ProxySocketPool([$this, 'rawConnectAsync']))); + $this->HTTPClient = new DefaultClient($this->CookieJar, new HttpSocketPool(new ProxySocketPool([$this, 'rawConnect']))); $DoHHTTPClient = new DefaultClient( $this->CookieJar, @@ -433,7 +433,7 @@ class DataCenter } // The following hack looks like the only way to detect connection refused errors with PHP's stream sockets. - if (\stream_socket_getName($socket, true) === false) { + if (\stream_socket_get_name($socket, true) === false) { \fclose($socket); throw new ConnectException(\sprintf( "Connection to %s refused%s", diff --git a/src/danog/MadelineProto/Loop/Connection/ReadLoop.php b/src/danog/MadelineProto/Loop/Connection/ReadLoop.php index 513c60da..a2b35c41 100644 --- a/src/danog/MadelineProto/Loop/Connection/ReadLoop.php +++ b/src/danog/MadelineProto/Loop/Connection/ReadLoop.php @@ -241,7 +241,7 @@ class ReadLoop extends SignalLoop return -404; } - $deserialized = $API->deserialize($message_data, ['type' => '', 'connection' => $connection]); + $deserialized = $API->getTL()->deserialize($message_data, ['type' => '', 'connection' => $connection]); $API->referenceDatabase->reset(); $connection->incoming_messages[$message_id]['content'] = $deserialized; diff --git a/src/danog/MadelineProto/Loop/Connection/WriteLoop.php b/src/danog/MadelineProto/Loop/Connection/WriteLoop.php index f36d573b..32e5b68c 100644 --- a/src/danog/MadelineProto/Loop/Connection/WriteLoop.php +++ b/src/danog/MadelineProto/Loop/Connection/WriteLoop.php @@ -94,7 +94,7 @@ class WriteLoop extends ResumableSignalLoop $connection->writing(true); try { - $please_wait = yield $this->{$shared->hasTempAuthKey() ? 'encryptedWriteLoopAsync' : 'unencryptedWriteLoopAsync'}(); + $please_wait = yield $this->{$shared->hasTempAuthKey() ? 'encryptedWriteLoop' : 'unencryptedWriteLoop'}(); } catch (StreamException $e) { if ($connection->shouldReconnect()) { return; diff --git a/src/danog/MadelineProto/MTProtoSession/CallHandler.php b/src/danog/MadelineProto/MTProtoSession/CallHandler.php index 85e890f7..76272013 100644 --- a/src/danog/MadelineProto/MTProtoSession/CallHandler.php +++ b/src/danog/MadelineProto/MTProtoSession/CallHandler.php @@ -189,7 +189,7 @@ trait CallHandler $aargs, [ '_' => $method, - 'type' => $this->API->methods->findByMethod($method)['type'], + 'type' => $this->API->getTL()->getMethods()->findByMethod($method)['type'], 'contentRelated' => $this->contentRelated($method), 'promise' => $deferred, 'method' => true, diff --git a/src/danog/MadelineProto/MTProtoSession/ResponseHandler.php b/src/danog/MadelineProto/MTProtoSession/ResponseHandler.php index 2e4c0cca..de25dcb3 100644 --- a/src/danog/MadelineProto/MTProtoSession/ResponseHandler.php +++ b/src/danog/MadelineProto/MTProtoSession/ResponseHandler.php @@ -27,6 +27,7 @@ use danog\MadelineProto\MTProto; */ trait ResponseHandler { + public function sendMsgsStateInfo($req_msg_id, $msg_ids) { $this->logger->logger('Sending state info for '.\count($msg_ids).' message IDs'); @@ -258,7 +259,7 @@ trait ResponseHandler $this->checkInSeqNo($current_msg_id); $this->ackIncomingMessageId($current_msg_id); // Acknowledge that I received the server's response - $response_type = $this->API->constructors->findByPredicate($this->incoming_messages[$current_msg_id]['content']['_'])['type']; + $response_type = $this->API->getTL()->getConstructors()->findByPredicate($this->incoming_messages[$current_msg_id]['content']['_'])['type']; switch ($response_type) { case 'Updates': @@ -579,7 +580,7 @@ trait ResponseHandler return; } $botAPI = isset($request['botAPI']) && $request['botAPI']; - if (isset($response['_']) && !$this->isCdn() && $this->API->constructors->findByPredicate($response['_'])['type'] === 'Updates') { + if (isset($response['_']) && !$this->isCdn() && $this->API->getTL()->getConstructors()->findByPredicate($response['_'])['type'] === 'Updates') { $response['request'] = $request; \danog\MadelineProto\Tools::callForkDefer($this->API->handleUpdates($response)); } diff --git a/src/danog/MadelineProto/MTProtoTools/Files.php b/src/danog/MadelineProto/MTProtoTools/Files.php index e3a401b7..b3a19f62 100644 --- a/src/danog/MadelineProto/MTProtoTools/Files.php +++ b/src/danog/MadelineProto/MTProtoTools/Files.php @@ -378,7 +378,7 @@ trait Files public function genAllFile($media) { - $res = [$this->constructors->findByPredicate($media['_'])['type'] => $media]; + $res = [$this->TL->getConstructors()->findByPredicate($media['_'])['type'] => $media]; switch ($media['_']) { case 'messageMediaPoll': $res['Poll'] = $media['poll']; diff --git a/src/danog/MadelineProto/MTProtoTools/PeerHandler.php b/src/danog/MadelineProto/MTProtoTools/PeerHandler.php index bd5d847f..10cbecc9 100644 --- a/src/danog/MadelineProto/MTProtoTools/PeerHandler.php +++ b/src/danog/MadelineProto/MTProtoTools/PeerHandler.php @@ -543,7 +543,7 @@ trait PeerHandler public function genAll($constructor, $folder_id = null) { - $res = [$this->constructors->findByPredicate($constructor['_'])['type'] => $constructor]; + $res = [$this->TL->getConstructors()->findByPredicate($constructor['_'])['type'] => $constructor]; switch ($constructor['_']) { case 'user': if ($constructor['self']) { diff --git a/src/danog/MadelineProto/TL/TL.php b/src/danog/MadelineProto/TL/TL.php index 205e7526..19390300 100644 --- a/src/danog/MadelineProto/TL/TL.php +++ b/src/danog/MadelineProto/TL/TL.php @@ -31,7 +31,7 @@ class TL * * @var integer */ - private $encrypted_layer = -1; + private $secretLayer = -1; /** * Constructors. * @@ -49,25 +49,25 @@ class TL * * @var TLConstructors */ - private $td_constructors; + private $tdConstructors; /** * TD Methods. * * @var TLMethods */ - private $td_methods; + private $tdMethods; /** * Descriptions. * * @var array */ - private $td_descriptions; + private $tdDescriptions; /** * TL callbacks. * * @var array */ - private $tl_callbacks = []; + private $callbacks = []; /** * API instance. * @@ -91,7 +91,7 @@ class TL */ public function getSecretLayer(): int { - return $this->encrypted_layer; + return $this->secretLayer; } /** @@ -103,7 +103,7 @@ class TL */ public function getConstructors(bool $td = false): TLConstructors { - return $td ? $this->td_constructors : $this->constructors; + return $td ? $this->tdConstructors : $this->constructors; } /** @@ -115,7 +115,7 @@ class TL */ public function getMethods(bool $td = false): TLMethods { - return $td ? $this->td_methods : $this->methods; + return $td ? $this->tdMethods : $this->methods; } /** @@ -125,7 +125,7 @@ class TL */ public function getDescriptions(): array { - return $this->td_descriptions; + return $this->tdDescriptions; } /** @@ -142,9 +142,9 @@ class TL $this->updateCallbacks($objects); $this->constructors = new TLConstructors(); $this->methods = new TLMethods(); - $this->td_constructors = new TLConstructors(); - $this->td_methods = new TLMethods(); - $this->td_descriptions = ['types' => [], 'constructors' => [], 'methods' => []]; + $this->tdConstructors = new TLConstructors(); + $this->tdMethods = new TLMethods(); + $this->tdDescriptions = ['types' => [], 'constructors' => [], 'methods' => []]; foreach ($files as $scheme_type => $file) { $this->API->logger->logger(\sprintf(\danog\MadelineProto\Lang::$current_lang['file_parsing'], \basename($file)), \danog\MadelineProto\Logger::VERBOSE); $filec = \file_get_contents(\danog\MadelineProto\Absolute::absolute($file)); @@ -174,7 +174,7 @@ class TL } if ($elem[0] === 'description') { if (!\is_null($class)) { - $this->td_descriptions['types'][$class] = $elem[1]; + $this->tdDescriptions['types'][$class] = $elem[1]; $class = null; } else { $e = $elem[1]; @@ -224,7 +224,7 @@ class TL $id = $nid; } if (!\is_null($e)) { - $this->td_descriptions[$type][$name] = ['description' => $e, 'params' => $dparams]; + $this->tdDescriptions[$type][$name] = ['description' => $e, 'params' => $dparams]; $e = null; $dparams = []; } @@ -267,7 +267,7 @@ class TL $this->API->logger->logger(\danog\MadelineProto\Lang::$current_lang['translating_obj'], \danog\MadelineProto\Logger::ULTRA_VERBOSE); foreach ($TL_dict['constructors'] as $elem) { if ($scheme_type === 'secret') { - $this->encrypted_layer = \max($this->encrypted_layer, $elem['layer']); + $this->secretLayer = \max($this->secretLayer, $elem['layer']); } $this->{($scheme_type === 'td' ? 'td_' : '').'constructors'}->add($elem, $scheme_type); } @@ -275,31 +275,31 @@ class TL foreach ($TL_dict['methods'] as $elem) { $this->{($scheme_type === 'td' ? 'td_' : '').'methods'}->add($elem); if ($scheme_type === 'secret') { - $this->encrypted_layer = \max($this->encrypted_layer, $elem['layer']); + $this->secretLayer = \max($this->secretLayer, $elem['layer']); } } } if (isset($files['td']) && isset($files['telegram'])) { - foreach ($this->td_constructors->by_id as $id => $data) { + foreach ($this->tdConstructors->by_id as $id => $data) { $name = $data['predicate']; if ($this->constructors->findById($id) === false) { - unset($this->td_descriptions['constructors'][$name]); + unset($this->tdDescriptions['constructors'][$name]); } else { - if (!\count($this->td_descriptions['constructors'][$name]['params'])) { + if (!\count($this->tdDescriptions['constructors'][$name]['params'])) { continue; } - foreach ($this->td_descriptions['constructors'][$name]['params'] as $k => $param) { - $this->td_descriptions['constructors'][$name]['params'][$k] = \str_replace('nullable', 'optional', $param); + foreach ($this->tdDescriptions['constructors'][$name]['params'] as $k => $param) { + $this->tdDescriptions['constructors'][$name]['params'][$k] = \str_replace('nullable', 'optional', $param); } } } - foreach ($this->td_methods->by_id as $id => $data) { + foreach ($this->tdMethods->by_id as $id => $data) { $name = $data['method']; if ($this->methods->findById($id) === false) { - unset($this->td_descriptions['methods'][$name]); + unset($this->tdDescriptions['methods'][$name]); } else { - foreach ($this->td_descriptions['methods'][$name]['params'] as $k => $param) { - $this->td_descriptions['constructors'][$name]['params'][$k] = \str_replace('nullable', 'optional', $param); + foreach ($this->tdDescriptions['methods'][$name]['params'] as $k => $param) { + $this->tdDescriptions['constructors'][$name]['params'][$k] = \str_replace('nullable', 'optional', $param); } } } @@ -341,7 +341,7 @@ class TL */ public function updateCallbacks(array $objects) { - $this->tl_callbacks = []; + $this->callbacks = []; foreach ($objects as $object) { if (!isset(\class_implements(\get_class($object))[TLCallback::class])) { throw new Exception('Invalid callback object provided!'); @@ -356,13 +356,13 @@ class TL ]; foreach ($new as $type => $values) { foreach ($values as $match => $callback) { - if (!isset($this->tl_callbacks[$type][$match])) { - $this->tl_callbacks[$type][$match] = []; + if (!isset($this->callbacks[$type][$match])) { + $this->callbacks[$type][$match] = []; } if (\in_array($type, [TLCallback::TYPE_MISMATCH_CALLBACK, TLCallback::CONSTRUCTOR_SERIALIZE_CALLBACK])) { - $this->tl_callbacks[$type][$match] = $callback; + $this->callbacks[$type][$match] = $callback; } else { - $this->tl_callbacks[$type][$match] = \array_merge($callback, $this->tl_callbacks[$type][$match]); + $this->callbacks[$type][$match] = \array_merge($callback, $this->callbacks[$type][$match]); } } } @@ -528,8 +528,8 @@ class TL if ($type['type'] === 'InputMessage' && !\is_array($object)) { $object = ['_' => 'inputMessageID', 'id' => $object]; - } elseif (isset($this->tl_callbacks[TLCallback::TYPE_MISMATCH_CALLBACK][$type['type']]) && (!\is_array($object) || isset($object['_']) && $this->constructors->findByPredicate($object['_'])['type'] !== $type['type'])) { - $object = yield $this->tl_callbacks[TLCallback::TYPE_MISMATCH_CALLBACK][$type['type']]($object); + } elseif (isset($this->callbacks[TLCallback::TYPE_MISMATCH_CALLBACK][$type['type']]) && (!\is_array($object) || isset($object['_']) && $this->constructors->findByPredicate($object['_'])['type'] !== $type['type'])) { + $object = yield $this->callbacks[TLCallback::TYPE_MISMATCH_CALLBACK][$type['type']]($object); if (!isset($object[$type['type']])) { throw new \danog\MadelineProto\Exception("Could not convert {$type['type']} object"); } @@ -543,8 +543,8 @@ class TL $auto = true; $object['_'] = $constructorData['predicate']; } - if (isset($this->tl_callbacks[TLCallback::CONSTRUCTOR_SERIALIZE_CALLBACK][$object['_']])) { - $object = yield $this->tl_callbacks[TLCallback::CONSTRUCTOR_SERIALIZE_CALLBACK][$object['_']]($object); + if (isset($this->callbacks[TLCallback::CONSTRUCTOR_SERIALIZE_CALLBACK][$object['_']])) { + $object = yield $this->callbacks[TLCallback::CONSTRUCTOR_SERIALIZE_CALLBACK][$object['_']]($object); } $predicate = $object['_']; @@ -973,8 +973,8 @@ class TL return false; } $x = ['_' => $constructorData['predicate']]; - if (isset($this->tl_callbacks[TLCallback::CONSTRUCTOR_BEFORE_CALLBACK][$x['_']])) { - foreach ($this->tl_callbacks[TLCallback::CONSTRUCTOR_BEFORE_CALLBACK][$x['_']] as $callback) { + if (isset($this->callbacks[TLCallback::CONSTRUCTOR_BEFORE_CALLBACK][$x['_']])) { + foreach ($this->callbacks[TLCallback::CONSTRUCTOR_BEFORE_CALLBACK][$x['_']] as $callback) { $callback($x['_']); } } @@ -1008,9 +1008,9 @@ class TL } if ($x['_'] === 'rpc_result' && $arg['name'] === 'result') { if (isset($type['connection']->outgoing_messages[$x['req_msg_id']]['_']) - && isset($this->tl_callbacks[TLCallback::METHOD_BEFORE_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']]) + && isset($this->callbacks[TLCallback::METHOD_BEFORE_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']]) ) { - foreach ($this->tl_callbacks[TLCallback::METHOD_BEFORE_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']] as $callback) { + foreach ($this->callbacks[TLCallback::METHOD_BEFORE_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']] as $callback) { $callback($type['connection']->outgoing_messages[$x['req_msg_id']]['_']); } } @@ -1054,15 +1054,15 @@ class TL } } - if (isset($this->tl_callbacks[TLCallback::CONSTRUCTOR_CALLBACK][$x['_']])) { - foreach ($this->tl_callbacks[TLCallback::CONSTRUCTOR_CALLBACK][$x['_']] as $callback) { + if (isset($this->callbacks[TLCallback::CONSTRUCTOR_CALLBACK][$x['_']])) { + foreach ($this->callbacks[TLCallback::CONSTRUCTOR_CALLBACK][$x['_']] as $callback) { \danog\MadelineProto\Tools::callFork($callback($x)); } } elseif ($x['_'] === 'rpc_result' && isset($type['connection']->outgoing_messages[$x['req_msg_id']]['_']) - && isset($this->tl_callbacks[TLCallback::METHOD_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']]) + && isset($this->callbacks[TLCallback::METHOD_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']]) ) { - foreach ($this->tl_callbacks[TLCallback::METHOD_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']] as $callback) { + foreach ($this->callbacks[TLCallback::METHOD_CALLBACK][$type['connection']->outgoing_messages[$x['req_msg_id']]['_']] as $callback) { $callback($type['connection']->outgoing_messages[$x['req_msg_id']], $x['result']); } } diff --git a/src/danog/MadelineProto/Tools.php b/src/danog/MadelineProto/Tools.php index bf6efb53..9ef587f4 100644 --- a/src/danog/MadelineProto/Tools.php +++ b/src/danog/MadelineProto/Tools.php @@ -244,11 +244,11 @@ trait Tools /** * Convert double to binary version. * - * @param double $value Value to convert + * @param float $value Value to convert * * @return string */ - public static function packDouble(double $value): string + public static function packDouble(float $value): string { $res = \pack('d', $value); if (\strlen($res) !== 8) { @@ -263,9 +263,9 @@ trait Tools * * @param string $value Value to unpack * - * @return double + * @return float */ - public static function unpackDouble(string $value): double + public static function unpackDouble(string $value): float { if (\strlen($value) !== 8) { throw new TL\Exception(\danog\MadelineProto\Lang::$current_lang['length_not_8']); @@ -419,9 +419,9 @@ trait Tools * @param ?\Generator|Promise $actual Promise to resolve instead of $promise * @param string $file File * - * @return void + * @return Promise */ - public static function callFork($promise, $actual = null, $file = '') + public static function callFork($promise, $actual = null, $file = ''): Promise { if ($actual) { $promise = $actual; @@ -558,11 +558,11 @@ trait Tools * * @param string $file File to lock * @param integer $operation Locking mode - * @param integer $polling Polling interval + * @param float $polling Polling interval * * @return Promise */ - public static function flock(string $file, int $operation, $polling = 0.1): Promise + public static function flock(string $file, int $operation, float $polling = 0.1): Promise { return self::call(self::flockGenerator($file, $operation, $polling)); } @@ -571,11 +571,11 @@ trait Tools * * @param string $file File to lock * @param integer $operation Locking mode - * @param integer $polling Polling interval + * @param float $polling Polling interval * - * @return void + * @return \Generator */ - private static function flockGenerator(string $file, int $operation, $polling) + private static function flockGenerator(string $file, int $operation, float $polling): \Generator { if (!yield exists($file)) { yield \touch($file); @@ -626,9 +626,9 @@ trait Tools * * @param string $prompt Prompt * - * @return void + * @return \Generator */ - private static function readLineGenerator(string $prompt = '') + private static function readLineGenerator(string $prompt = ''): \Generator { $stdin = getStdin(); $stdout = getStdout(); @@ -662,7 +662,7 @@ trait Tools * * @return boolean */ - public static function isArrayOrAlike($var) + public static function isArrayOrAlike($var): bool { return \is_array($var) || ($var instanceof ArrayAccess &&