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