diff --git a/src/danog/MadelineProto/Loop/Update/UpdateLoop.php b/src/danog/MadelineProto/Loop/Update/UpdateLoop.php index 36fd8c7c..31270670 100644 --- a/src/danog/MadelineProto/Loop/Update/UpdateLoop.php +++ b/src/danog/MadelineProto/Loop/Update/UpdateLoop.php @@ -19,9 +19,9 @@ namespace danog\MadelineProto\Loop\Update; use Amp\Loop; +use danog\MadelineProto\Exception; use danog\MadelineProto\Loop\Impl\ResumableSignalLoop; use danog\MadelineProto\RPCErrorException; -use danog\MadelineProto\Exception; /** * Update loop. @@ -148,13 +148,13 @@ class UpdateLoop extends ResumableSignalLoop $difference = yield $API->method_call_async_read('updates.getDifference', ['pts' => $state->pts(), 'date' => $state->date(), 'qts' => $state->qts()], ['datacenter' => $API->settings['connection_settings']['default_dc']]); $API->logger->logger('Got '.$difference['_'], \danog\MadelineProto\Logger::ULTRA_VERBOSE); - switch ($difference['_']) { case 'updates.differenceEmpty': $state->update($difference); unset($difference); break 2; case 'updates.difference': + $state->qts($difference['state']['qts']); foreach ($difference['new_encrypted_messages'] as &$encrypted) { $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; } @@ -165,6 +165,7 @@ class UpdateLoop extends ResumableSignalLoop unset($difference); break 2; case 'updates.differenceSlice': + $state->qts($difference['state']['qts']); foreach ($difference['new_encrypted_messages'] as &$encrypted) { $encrypted = ['_' => 'updateNewEncryptedMessage', 'message' => $encrypted]; } diff --git a/src/danog/MadelineProto/MTProtoTools/Files.php b/src/danog/MadelineProto/MTProtoTools/Files.php index 384748c1..b5c6b46f 100644 --- a/src/danog/MadelineProto/MTProtoTools/Files.php +++ b/src/danog/MadelineProto/MTProtoTools/Files.php @@ -120,9 +120,9 @@ trait Files } $result = yield all($promises); - foreach ($result as $key => $result) { + foreach ($result as $kkey => $result) { if (!$result) { - throw new \danog\MadelineProto\Exception('Upload of part '.$key.' failed'); + throw new \danog\MadelineProto\Exception('Upload of part '.$kkey.' failed'); } } diff --git a/src/danog/MadelineProto/MTProtoTools/PeerHandler.php b/src/danog/MadelineProto/MTProtoTools/PeerHandler.php index 3532d8be..8824fc2e 100644 --- a/src/danog/MadelineProto/MTProtoTools/PeerHandler.php +++ b/src/danog/MadelineProto/MTProtoTools/PeerHandler.php @@ -302,7 +302,6 @@ trait PeerHandler case 'updateNewChannelMessage': case 'updateEditMessage': case 'updateEditChannelMessage': - case 'updateNewEncryptedMessage': return $this->get_id($id['message']); default: throw new \danog\MadelineProto\Exception('Invalid constructor given '.var_export($id, true)); @@ -341,6 +340,8 @@ trait PeerHandler case 'updateEncryptedChatTyping': case 'updateEncryptedMessagesRead': return $this->get_secret_chat($id['chat_id']); + case 'updateNewEncryptedMessage': + $id = $id['message']; case 'encryptedMessage': case 'encryptedMessageService': $id = $id['chat_id']; diff --git a/src/danog/MadelineProto/RPCErrorException.php b/src/danog/MadelineProto/RPCErrorException.php index bd080960..50e257df 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, \danog\MadelineProto\Magic::$revision.PHP_EOL.PHP_EOL).PHP_EOL.$this->getTLTrace().PHP_EOL; + $result = sprintf(\danog\MadelineProto\Lang::$current_lang['rpc_tg_error'], $this->getMess()." ({$this->code})", $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); } diff --git a/src/danog/MadelineProto/TL/TL.php b/src/danog/MadelineProto/TL/TL.php index 11446bd1..5f8c6c7f 100644 --- a/src/danog/MadelineProto/TL/TL.php +++ b/src/danog/MadelineProto/TL/TL.php @@ -224,12 +224,12 @@ trait TL throw new Exception('Invalid callback object provided!'); } $new = [ - TLCallback::METHOD_BEFORE_CALLBACK => $object->getMethodBeforeCallbacks(), - TLCallback::METHOD_CALLBACK => $object->getMethodCallbacks(), - TLCallback::CONSTRUCTOR_BEFORE_CALLBACK => $object->getConstructorBeforeCallbacks(), - TLCallback::CONSTRUCTOR_CALLBACK => $object->getConstructorCallbacks(), + TLCallback::METHOD_BEFORE_CALLBACK => $object->getMethodBeforeCallbacks(), + TLCallback::METHOD_CALLBACK => $object->getMethodCallbacks(), + TLCallback::CONSTRUCTOR_BEFORE_CALLBACK => $object->getConstructorBeforeCallbacks(), + TLCallback::CONSTRUCTOR_CALLBACK => $object->getConstructorCallbacks(), TLCallback::CONSTRUCTOR_SERIALIZE_CALLBACK => $object->getConstructorSerializeCallbacks(), - TLCallback::TYPE_MISMATCH_CALLBACK => $object->getTypeMismatchCallbacks(), + TLCallback::TYPE_MISMATCH_CALLBACK => $object->getTypeMismatchCallbacks(), ]; foreach ($new as $type => $values) { foreach ($values as $match => $callback) { @@ -449,7 +449,7 @@ trait TL $method = 'messages.importChatInvite'; $arguments['hash'] = $matches[2]; } - } elseif ($method === 'messages.sendMessage' && isset($arguments['peer']['_']) && $arguments['peer']['_'] === 'inputEncryptedChat') { + } elseif ($method === 'messages.sendMessage' && isset($arguments['peer']['_']) && in_array($arguments['peer']['_'], ['inputEncryptedChat', 'updateEncryption', 'updateEncryptedChatTyping', 'updateEncryptedMessagesRead', 'updateNewEncryptedMessage', 'encryptedMessage', 'encryptedMessageService'])) { $method = 'messages.sendEncrypted'; $arguments = ['peer' => $arguments['peer'], 'message' => $arguments]; if (!isset($arguments['message']['_'])) {