Fix self-restart, avoid exceptions surfacing in the download bot
This commit is contained in:
parent
4de96f2e45
commit
f85f7bd8ba
@ -174,12 +174,12 @@ $settings = [
|
||||
|
||||
$MadelineProto = new \danog\MadelineProto\API('bot.madeline', $settings);
|
||||
$MadelineProto->async(true);
|
||||
$MadelineProto->loop(function () use ($MadelineProto) {
|
||||
yield $MadelineProto->start();
|
||||
yield $MadelineProto->setEventHandler('\EventHandler');
|
||||
});
|
||||
while (true) {
|
||||
try {
|
||||
$MadelineProto->loop(function () use ($MadelineProto) {
|
||||
yield $MadelineProto->start();
|
||||
yield $MadelineProto->setEventHandler('\EventHandler');
|
||||
});
|
||||
$MadelineProto->loop();
|
||||
} catch (\Throwable $e) {
|
||||
try {
|
||||
|
@ -28,14 +28,14 @@ namespace danog\MadelineProto\Async;
|
||||
class AsyncParameters
|
||||
{
|
||||
/**
|
||||
* Async callable
|
||||
* Async callable.
|
||||
*
|
||||
* @var callable
|
||||
*/
|
||||
private $callable;
|
||||
|
||||
/**
|
||||
* Create async parameters
|
||||
* Create async parameters.
|
||||
*
|
||||
* @param callable $callable Async callable that will return parameters
|
||||
*/
|
||||
@ -46,7 +46,7 @@ class AsyncParameters
|
||||
|
||||
|
||||
/**
|
||||
* Create async parameters
|
||||
* Create async parameters.
|
||||
*
|
||||
* @param callable $callable Async callable that will return parameters
|
||||
*/
|
||||
@ -56,7 +56,7 @@ class AsyncParameters
|
||||
}
|
||||
|
||||
/**
|
||||
* Get parameters asynchronously
|
||||
* Get parameters asynchronously.
|
||||
*
|
||||
* @return \Generator<array>|\Amp\Promise<array>
|
||||
*/
|
||||
|
@ -534,9 +534,13 @@ class DataCenterConnection implements JsonSerializable
|
||||
public function waitGetConnection(): Promise
|
||||
{
|
||||
if (empty($this->availableConnections)) {
|
||||
return $this->connectionsPromise->onResolve(function ($e, $v) {
|
||||
return $this->getConnection();
|
||||
});
|
||||
$deferred = new Deferred;
|
||||
$this->connectionsPromise->onResolve(
|
||||
function ($e, $v) use ($deferred) {
|
||||
$deferred->resolve($this->getConnection());
|
||||
}
|
||||
);
|
||||
return $deferred->promise();
|
||||
}
|
||||
return new Success($this->getConnection());
|
||||
}
|
||||
|
@ -19,22 +19,55 @@
|
||||
|
||||
namespace danog\MadelineProto;
|
||||
|
||||
/**
|
||||
* File callback interface.
|
||||
*/
|
||||
class FileCallback implements FileCallbackInterface
|
||||
{
|
||||
/**
|
||||
* File to download/upload.
|
||||
*
|
||||
* @var mixed
|
||||
*/
|
||||
private $file;
|
||||
/**
|
||||
* Callback.
|
||||
*
|
||||
* @var callable
|
||||
*/
|
||||
private $callback;
|
||||
|
||||
public function __construct($file, $callback)
|
||||
/**
|
||||
* Construct file callback.
|
||||
*
|
||||
* @param mixed $file File to download/upload
|
||||
* @param callable $callback Callback
|
||||
*/
|
||||
public function __construct($file, callable $callback)
|
||||
{
|
||||
$this->file = $file;
|
||||
$this->callback = $callback;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get file.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getFile()
|
||||
{
|
||||
return $this->file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoke callback.
|
||||
*
|
||||
* @param int $percent Percent
|
||||
* @param int $speed Speed in mbps
|
||||
* @param int $time Time
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __invoke($percent, $speed, $time)
|
||||
{
|
||||
$callback = $this->callback;
|
||||
|
@ -19,9 +19,26 @@
|
||||
|
||||
namespace danog\MadelineProto;
|
||||
|
||||
/**
|
||||
* File callback interface.
|
||||
*/
|
||||
interface FileCallbackInterface
|
||||
{
|
||||
/**
|
||||
* Get file.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getFile();
|
||||
|
||||
/**
|
||||
* Invoke callback.
|
||||
*
|
||||
* @param int $percent Percent
|
||||
* @param int $speed Speed in mbps
|
||||
* @param int $time Time
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __invoke($percent, $speed, $time);
|
||||
}
|
||||
|
@ -4403,30 +4403,30 @@ class InternalDoc extends APIFactory
|
||||
* Upload file.
|
||||
*
|
||||
* @param FileCallbackInterface|string|array $file File, URL or Telegram file to upload
|
||||
* @param string $file_name File name
|
||||
* @param string $fileName File name
|
||||
* @param callable $cb Callback (DEPRECATED, use FileCallbackInterface)
|
||||
* @param boolean $encrypted Whether to encrypt file for secret chats
|
||||
*
|
||||
* @return \Generator<array>
|
||||
*/
|
||||
public function upload($file, string $file_name = '', $cb = null, bool $encrypted = false, array $extra = [])
|
||||
public function upload($file, string $fileName = '', $cb = null, bool $encrypted = false, array $extra = [])
|
||||
{
|
||||
return $this->__call(__FUNCTION__, [$file, $file_name, $cb, $encrypted, $extra]);
|
||||
return $this->__call(__FUNCTION__, [$file, $fileName, $cb, $encrypted, $extra]);
|
||||
}
|
||||
/**
|
||||
* Upload file from URL.
|
||||
*
|
||||
* @param string|FileCallbackInterface $url URL of file
|
||||
* @param integer $size Size of file
|
||||
* @param string $file_name File name
|
||||
* @param string $fileName File name
|
||||
* @param callable $cb Callback (DEPRECATED, use FileCallbackInterface)
|
||||
* @param boolean $encrypted Whether to encrypt file for secret chats
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function uploadFromUrl($url, int $size = 0, string $file_name = '', $cb = null, bool $encrypted = false, array $extra = [])
|
||||
public function uploadFromUrl($url, int $size = 0, string $fileName = '', $cb = null, bool $encrypted = false, array $extra = [])
|
||||
{
|
||||
return $this->__call(__FUNCTION__, [$url, $size, $file_name, $cb, $encrypted, $extra]);
|
||||
return $this->__call(__FUNCTION__, [$url, $size, $fileName, $cb, $encrypted, $extra]);
|
||||
}
|
||||
/**
|
||||
* Upload file from stream.
|
||||
@ -4434,15 +4434,15 @@ class InternalDoc extends APIFactory
|
||||
* @param mixed $stream PHP resource or AMPHP async stream
|
||||
* @param integer $size File size
|
||||
* @param string $mime Mime type
|
||||
* @param string $file_name File name
|
||||
* @param string $fileName File name
|
||||
* @param callable $cb Callback (DEPRECATED, use FileCallbackInterface)
|
||||
* @param boolean $encrypted Whether to encrypt file for secret chats
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function uploadFromStream($stream, int $size, string $mime, string $file_name = '', $cb = null, bool $encrypted = false, array $extra = [])
|
||||
public function uploadFromStream($stream, int $size, string $mime, string $fileName = '', $cb = null, bool $encrypted = false, array $extra = [])
|
||||
{
|
||||
return $this->__call(__FUNCTION__, [$stream, $size, $mime, $file_name, $cb, $encrypted, $extra]);
|
||||
return $this->__call(__FUNCTION__, [$stream, $size, $mime, $fileName, $cb, $encrypted, $extra]);
|
||||
}
|
||||
/**
|
||||
* Upload file from callable.
|
||||
@ -4453,29 +4453,29 @@ class InternalDoc extends APIFactory
|
||||
* @param mixed $callable Callable
|
||||
* @param integer $size File size
|
||||
* @param string $mime Mime type
|
||||
* @param string $file_name File name
|
||||
* @param string $fileName File name
|
||||
* @param callable $cb Callback (DEPRECATED, use FileCallbackInterface)
|
||||
* @param boolean $seekable Whether chunks can be fetched out of order
|
||||
* @param boolean $encrypted Whether to encrypt file for secret chats
|
||||
*
|
||||
* @return \Generator<array>
|
||||
*/
|
||||
public function uploadFromCallable($callable, int $size, string $mime, string $file_name = '', $cb = null, bool $seekable = true, bool $encrypted = false, array $extra = [])
|
||||
public function uploadFromCallable($callable, int $size, string $mime, string $fileName = '', $cb = null, bool $seekable = true, bool $encrypted = false, array $extra = [])
|
||||
{
|
||||
return $this->__call(__FUNCTION__, [$callable, $size, $mime, $file_name, $cb, $seekable, $encrypted, $extra]);
|
||||
return $this->__call(__FUNCTION__, [$callable, $size, $mime, $fileName, $cb, $seekable, $encrypted, $extra]);
|
||||
}
|
||||
/**
|
||||
* Upload file to secret chat.
|
||||
*
|
||||
* @param FileCallbackInterface|string|array $file File, URL or Telegram file to upload
|
||||
* @param string $file_name File name
|
||||
* @param string $fileName File name
|
||||
* @param callable $cb Callback (DEPRECATED, use FileCallbackInterface)
|
||||
*
|
||||
* @return \Generator<array>
|
||||
*/
|
||||
public function uploadEncrypted($file, string $file_name = '', $cb = null, array $extra = [])
|
||||
public function uploadEncrypted($file, string $fileName = '', $cb = null, array $extra = [])
|
||||
{
|
||||
return $this->__call(__FUNCTION__, [$file, $file_name, $cb, $extra]);
|
||||
return $this->__call(__FUNCTION__, [$file, $fileName, $cb, $extra]);
|
||||
}
|
||||
/**
|
||||
* Reupload telegram file.
|
||||
|
@ -23,7 +23,6 @@ use Amp\Deferred;
|
||||
use Amp\Promise;
|
||||
use Amp\Success;
|
||||
use danog\MadelineProto\Async\AsyncParameters;
|
||||
use danog\MadelineProto\Async\Parameters;
|
||||
use danog\MadelineProto\Tools;
|
||||
|
||||
use function Amp\Promise\all;
|
||||
|
@ -412,7 +412,7 @@ trait Files
|
||||
*/
|
||||
private $partSize;
|
||||
/**
|
||||
* Offset for callback
|
||||
* Offset for callback.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
@ -460,7 +460,7 @@ trait Files
|
||||
return $this->read[$offset]->promise();
|
||||
}
|
||||
/**
|
||||
* Read callback, called when the chunk is read and fully resent
|
||||
* Read callback, called when the chunk is read and fully resent.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
|
@ -131,7 +131,7 @@ trait Loop
|
||||
$params = $_GET;
|
||||
$params['MadelineSelfRestart'] = Tools::randomInt();
|
||||
|
||||
$url = \explode($uri, '?', 2)[0] ?? '';
|
||||
$url = \explode('?', $uri, 2)[0] ?? '';
|
||||
|
||||
$query = \http_build_query($params);
|
||||
$uri = \implode('?', [$url, $query]);
|
||||
|
Loading…
Reference in New Issue
Block a user