mirror of
https://github.com/danog/MadelineProto.git
synced 2024-11-30 06:39:01 +01:00
Download script improvements
This commit is contained in:
parent
0b56199466
commit
2f8c3016c0
@ -496,7 +496,7 @@ Want to add your own open-source project to this list? [Click here!](https://doc
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#getdhconfig-array" name="getDhConfig">Get diffie-hellman configuration: getDhConfig</a>
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#getdownloadinfo-mixed-messagemedia-array-ext-string-name-string-mime-string-size-int-inputfilelocation-array" name="getDownloadInfo">Get download info of file: getDownloadInfo</a>
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#getpropicinfo-mixed-data-array" name="getPropicInfo">Get download info of the propic of a user: getPropicInfo</a>
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#getdownloadlink-danog-madelineproto-eventhandler-message-danog-madelineproto-eventhandler-media-array-string-media-string-scripturl-null-string" name="getDownloadLink">Get download link of media file: getDownloadLink</a>
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#getdownloadlink-danog-madelineproto-eventhandler-message-danog-madelineproto-eventhandler-media-array-string-media-string-scripturl-null-int-size-null-string-name-null-string-mime-null-string" name="getDownloadLink">Get download link of media file: getDownloadLink</a>
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#geteventhandler-class-string-plugineventhandler-class-null-danog-madelineproto-eventhandler-danog-madelineproto-ipc-eventhandlerproxy-__php_incomplete_class-null" name="getEventHandler">Get event handler (or plugin instance): getEventHandler</a>
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#getextensionfromlocation-mixed-location-string-default-string" name="getExtensionFromLocation">Get extension from file location: getExtensionFromLocation</a>
|
||||
* <a href="https://docs.madelineproto.xyz/PHP/danog/MadelineProto/API.html#getextensionfrommime-string-mime-string" name="getExtensionFromMime">Get extension from mime type: getExtensionFromMime</a>
|
||||
|
2
docs
2
docs
@ -1 +1 @@
|
||||
Subproject commit 2bbdf1b074a607c666dd7f9fd71cc19a137deae2
|
||||
Subproject commit ceaadaca96b69220bc631c2e0f9c0f11db206ab2
|
@ -145,9 +145,8 @@
|
||||
"plugins_must_have_exactly_one_class": "a plugin must define exactly one class! To define multiple classes, interfaces or traits, create separate files, they will be autoloaded by MadelineProto automatically.",
|
||||
|
||||
"cli_need_dl.php_link": "Please specify a download script URL when using getDownloadLink via CLI!",
|
||||
"invalid_dl.php": "%s is not a valid download script (%s)",
|
||||
"invalid_dl.php_session": "%s is not a valid download script because its session ID is different (expected %s, got %s)",
|
||||
"need_dl.php": "Could not generate default download script (%s), please create a dl.php file with the following content: %s and pass its URL to the second parameter of getDownloadLink",
|
||||
|
||||
"dl.php_powered_by_madelineproto": "Telegram file download server (up to 4GB), powered by <a href=\"https://docs.madelineproto.xyz\" target=\"_blank\">MadelineProto</a>!<br>Click <a href=\"https://docs.madelineproto.xyz/docs/FILES.html#getting-a-download-link\" target=\"_blank\">here</a> for more info on how to setup your very own Telegram file download server!"
|
||||
|
||||
}
|
||||
|
@ -132,7 +132,7 @@
|
||||
"do_not_remove_MadelineProto.log_phar": "لطفا madeline.phar یا madeline.php را حذف نکنید، در غیراینصورت مدلینپروتو crash خواهد کرد. در صورت داشتن هرگونه مشکل با مدلینپروتو، آن را به https://github.com/danog/MadelineProto یا https://t.me/pwrtelegramgroup گزارش کنید",
|
||||
"do_not_use_deprecated_function": "تابع %s منسوخ شده، لطفا به جای آن از %s استفاده کنید",
|
||||
"mmapErrorPart3": "برای تداوم تغییر در طول راهاندازی دوباره: %s",
|
||||
"recommend_not_use_filesystem_function": "استفاده از تابع %s پیشنهاد نمیشود، چراکه دسترسی و کار با فایل های سیستمی موقع پردازش آپدیت باعث کم شدن سرعت ربات شما میشود، لطفا صفحه https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions را ببینید تا با راههای جایگزین برای ذخیره اطلاعات که باعث کاهش سرعت نمیشوند آشنا شوید!",
|
||||
"recommend_not_use_filesystem_function": "استفاده از تابع %s پیشنهاد نمیشود، چراکه دسترسی و کار با فایل های سیستمی موقع پردازش آپدیت باعث کم شدن سرعت ربات شما میشود، لطفا صفحه https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions را ببینید تا با راههای جایگزین برای ذخیره اطلاعات که باعث کاهش سرعت ربات شما نمیشوند آشنا شوید!",
|
||||
"do_not_use_blocking_function": "به دلایل عملکردی و اجرایی، ایونتهندلرها نباید از فانکشن %s که async نیست استفاده کنند، لطفا به جای آن از %s استفاده کنید",
|
||||
"do_not_use_blocking_class": "به دلایل عملکردی و اجرایی، هندلرها نباید از کلس %s که async نیست استفاده کنند، به جای آن از %s استفاده کنید",
|
||||
"do_not_use_non_root_require_in_event_handler": "به دلایل عملکردی و اجرایی، شما نباید از require یا include داخل کلس ایونتهندلر استفاده کنید، فقط require های سطح root مجاز هستند.",
|
||||
|
2
schemas
2
schemas
@ -1 +1 @@
|
||||
Subproject commit 2185331bb36565039fd1bcbe14ee7c25eeab2f51
|
||||
Subproject commit 5bac791635b33c1c978bacad22f65c0f11633eb6
|
@ -418,7 +418,9 @@ final class API extends AbstractAPI
|
||||
} else {
|
||||
Assert::notEmpty($eventHandler);
|
||||
Assert::allClassExists($eventHandler);
|
||||
foreach ($eventHandler as $c) { $c::cachePlugins($c); }
|
||||
foreach ($eventHandler as $c) {
|
||||
$c::cachePlugins($c);
|
||||
}
|
||||
}
|
||||
|
||||
$errors = [];
|
||||
|
@ -265,6 +265,15 @@ abstract class EventHandler extends AbstractAPI
|
||||
{
|
||||
return $this->periodicLoops[$name];
|
||||
}
|
||||
/**
|
||||
* Obtain all PeriodicLoop instances created by the Cron attribute.
|
||||
*
|
||||
* @return array<string, PeriodicLoop>
|
||||
*/
|
||||
final public function getPeriodicLoops(): array
|
||||
{
|
||||
return $this->periodicLoops;
|
||||
}
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
|
@ -16,9 +16,9 @@ final class FilterNot extends Filter
|
||||
public function __construct(private readonly Filter $filter)
|
||||
{
|
||||
}
|
||||
public function initialize(EventHandler $API): ?Filter
|
||||
public function initialize(EventHandler $API): Filter
|
||||
{
|
||||
$filter = $this->filter->initialize($API) ?? $this->filter;
|
||||
$filter = $this->filter->initialize($API);
|
||||
if ($filter instanceof self) {
|
||||
// The nested filter is a FilterNot, optimize !!A => A
|
||||
return $filter->filter;
|
||||
|
@ -26,7 +26,7 @@ final class FiltersAnd extends Filter
|
||||
{
|
||||
$final = [];
|
||||
foreach ($this->filters as $filter) {
|
||||
$filter = $filter->initialize($API) ?? $filter;
|
||||
$filter = $filter->initialize($API);
|
||||
if ($filter instanceof self) {
|
||||
$final = \array_merge($final, $filter->filters);
|
||||
} else {
|
||||
|
@ -26,7 +26,7 @@ final class FiltersOr extends Filter
|
||||
{
|
||||
$final = [];
|
||||
foreach ($this->filters as $filter) {
|
||||
$filter = $filter->initialize($API) ?? $filter;
|
||||
$filter = $filter->initialize($API);
|
||||
if ($filter instanceof self) {
|
||||
$final = \array_merge($final, $filter->filters);
|
||||
} else {
|
||||
|
@ -46,9 +46,9 @@ abstract class Filter
|
||||
{
|
||||
abstract public function apply(Update $update): bool;
|
||||
/** Run some initialization logic, optionally returning a new filter to replace the current one. */
|
||||
public function initialize(EventHandler $API): ?Filter
|
||||
public function initialize(EventHandler $API): Filter
|
||||
{
|
||||
return null;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public static function fromReflectionType(ReflectionType $type): Filter
|
||||
|
@ -14,10 +14,10 @@ use danog\MadelineProto\EventHandler\Update;
|
||||
final class FilterFromAdmin extends Filter
|
||||
{
|
||||
private readonly array $adminIds;
|
||||
public function initialize(EventHandler $API): ?Filter
|
||||
public function initialize(EventHandler $API): Filter
|
||||
{
|
||||
$this->adminIds = $API->getAdminIds();
|
||||
return null;
|
||||
return $this;
|
||||
}
|
||||
public function apply(Update $update): bool
|
||||
{
|
||||
|
@ -21,14 +21,14 @@ final class FilterFromSenders extends Filter
|
||||
{
|
||||
$this->peers = \array_unique($idOrUsername);
|
||||
}
|
||||
public function initialize(EventHandler $API): ?Filter
|
||||
public function initialize(EventHandler $API): Filter
|
||||
{
|
||||
$res = [];
|
||||
foreach ($this->peers as $peer) {
|
||||
$res []= $API->getId($peer);
|
||||
}
|
||||
$this->peersResolved = $res;
|
||||
return null;
|
||||
return $this;
|
||||
}
|
||||
public function apply(Update $update): bool
|
||||
{
|
||||
|
@ -17,10 +17,10 @@ final class FilterPeer extends Filter
|
||||
public function __construct(private readonly string|int $peer)
|
||||
{
|
||||
}
|
||||
public function initialize(EventHandler $API): ?Filter
|
||||
public function initialize(EventHandler $API): Filter
|
||||
{
|
||||
$this->peerResolved = $API->getId($this->peer);
|
||||
return null;
|
||||
return $this;
|
||||
}
|
||||
public function apply(Update $update): bool
|
||||
{
|
||||
|
@ -17,10 +17,10 @@ final class FilterSender extends Filter
|
||||
public function __construct(private readonly string|int $peer)
|
||||
{
|
||||
}
|
||||
public function initialize(EventHandler $API): ?Filter
|
||||
public function initialize(EventHandler $API): Filter
|
||||
{
|
||||
$this->peerResolved = $API->getId($this->peer);
|
||||
return null;
|
||||
return $this;
|
||||
}
|
||||
public function apply(Update $update): bool
|
||||
{
|
||||
|
@ -27,12 +27,6 @@ abstract class RunnerAbstract
|
||||
if (\defined('MADELINE_PHP')) {
|
||||
return \MADELINE_PHP;
|
||||
}
|
||||
/**
|
||||
* If using madeline.phar, simply return madeline.phar path.
|
||||
*/
|
||||
if (\defined('MADELINE_PHAR')) {
|
||||
return \MADELINE_PHAR;
|
||||
}
|
||||
// Write process runner to external file if inside a PHAR different from madeline.phar,
|
||||
// because PHP can't open files inside a PHAR directly except for the stub.
|
||||
if (\strpos(self::SCRIPT_PATH, 'phar://') === 0) {
|
||||
|
@ -65,6 +65,7 @@ final class WebRunner extends RunnerAbstract
|
||||
$params = [
|
||||
'argv' => ['madeline-ipc', $session, $startupId],
|
||||
'cwd' => Magic::getcwd(),
|
||||
'MadelineSelfRestart' => 1
|
||||
];
|
||||
if (\function_exists('memprof_enabled') && \memprof_enabled()) {
|
||||
$params['MEMPROF_PROFILE'] = '1';
|
||||
|
@ -441,7 +441,7 @@ final class Lang
|
||||
'plugins_do_not_use_require' => 'به دلایل عملکردی و اجرایی، پلاگینها فقط میتوانند فایل های دیگر را که در پوشه پلاگین هاست با استفاده از راهاندازی بارگذار خودکار PSR-4، به صورت خودکار include یا require کنند (بدون require کردن دستی آنها).',
|
||||
'plugins_must_have_exactly_one_class' => 'یک پلاگین باید دقیقا یک کلس را تعریف کند! برای تعریف چند کلس، اینترفیس یا تریت، فایلهای جداگانه بسازید، آنها توسط مدلینپروتو به صورت خودکار بارگذاری خواهند شد.',
|
||||
'predicate_not_set' => 'مستند (مقدار تحت _) تنظیم نشده!',
|
||||
'recommend_not_use_filesystem_function' => 'استفاده از تابع %s پیشنهاد نمیشود، چراکه دسترسی و کار با فایل های سیستمی موقع پردازش آپدیت باعث کم شدن سرعت ربات شما میشود، لطفا صفحه https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions را ببینید تا با راههای جایگزین برای ذخیره اطلاعات که باعث کاهش سرعت نمیشوند آشنا شوید!',
|
||||
'recommend_not_use_filesystem_function' => 'استفاده از تابع %s پیشنهاد نمیشود، چراکه دسترسی و کار با فایل های سیستمی موقع پردازش آپدیت باعث کم شدن سرعت ربات شما میشود، لطفا صفحه https://docs.madelineproto.xyz/docs/UPDATES.html#avoiding-the-use-of-filesystem-functions را ببینید تا با راههای جایگزین برای ذخیره اطلاعات که باعث کاهش سرعت ربات شما نمیشوند آشنا شوید!',
|
||||
'rpc_tg_error' => 'تلگرام یک خطای RPC برگرداند: %s (%s), ناشی از %s:%s%sTL رد:',
|
||||
'sec_peer_not_in_db' => 'این peer مخفی در پایگاه داده (دیتابیس) داخلی peer وجود ندارد',
|
||||
'secret_chat_skipping' => 'من چت مخفی (سکرت) %s را در پایگاه داده (دیتابیس) ندارم، درحال رد شدن از پیام...',
|
||||
|
@ -1654,6 +1654,7 @@ final class MTProto implements TLCallback, LoggerGetter
|
||||
}
|
||||
} catch (Throwable $e) {
|
||||
unset($userOrId[$k]);
|
||||
$peer = \json_encode($peer);
|
||||
$this->logger("Could not obtain info about report peer $peer: $e", Logger::FATAL_ERROR);
|
||||
}
|
||||
}
|
||||
|
@ -46,9 +46,11 @@ trait FileServer
|
||||
*/
|
||||
public static function downloadServer(string $session): void
|
||||
{
|
||||
if (isset($_GET['c'])) {
|
||||
if (isset($_GET['ping'])) {
|
||||
$API = new API($session);
|
||||
$API->processDownloadServerPing($_GET['c'], $_GET['i']);
|
||||
$id = (string) $API->getSelf()['id'];
|
||||
header("Content-length: ".strlen($id));
|
||||
echo $id;
|
||||
die;
|
||||
}
|
||||
if (!isset($_GET['f'])) {
|
||||
@ -110,7 +112,7 @@ trait FileServer
|
||||
$messageMedia['mime'] ??= $mime;
|
||||
$messageMedia['name'] ??= $name;
|
||||
|
||||
$f = is_string($media) ? $media : ($this->extractBotAPIFile($this->MTProtoToBotAPI($media))['file_id']);
|
||||
$f = \is_string($media) ? $media : ($this->extractBotAPIFile($this->MTProtoToBotAPI($media))['file_id']);
|
||||
[
|
||||
'name' => $name,
|
||||
'ext' => $ext,
|
||||
@ -208,25 +210,20 @@ trait FileServer
|
||||
if (isset(self::$checkedScripts[$scriptUrl])) {
|
||||
return;
|
||||
}
|
||||
$i = (string) \random_int(PHP_INT_MIN, PHP_INT_MAX);
|
||||
$scriptUrlNew = $scriptUrl.'?'.\http_build_query(['c' => $scriptUrl, 'i' => $i]);
|
||||
$scriptUrlNew = $scriptUrl.'?'.\http_build_query(['ping' => 1]);
|
||||
$this->logger->logger("Checking $scriptUrlNew...");
|
||||
$this->fileGetContents($scriptUrlNew);
|
||||
if (!isset(self::$checkedScripts[$scriptUrl])) {
|
||||
$result = $this->fileGetContents($scriptUrlNew);
|
||||
$expected = (string) $this->getSelf()['id'];
|
||||
if ($result !== $expected) {
|
||||
throw new AssertionError(\sprintf(
|
||||
Lang::$current_lang['invalid_dl.php'],
|
||||
Lang::$current_lang['invalid_dl.php_session'],
|
||||
$scriptUrl,
|
||||
"the check array wasn't populated"
|
||||
));
|
||||
}
|
||||
if (self::$checkedScripts[$scriptUrl] !== $i) {
|
||||
$v = self::$checkedScripts[$scriptUrl];
|
||||
throw new AssertionError(\sprintf(
|
||||
Lang::$current_lang['invalid_dl.php'],
|
||||
$scriptUrl,
|
||||
"the check array contains {$v} instead of $i"
|
||||
$expected,
|
||||
$result,
|
||||
));
|
||||
}
|
||||
|
||||
self::$checkedScripts[$scriptUrl] = true;
|
||||
} finally {
|
||||
$lock->release();
|
||||
}
|
||||
|
@ -534,9 +534,12 @@ trait Files
|
||||
}
|
||||
$info = $info[$method];
|
||||
if ($method === 'photo') {
|
||||
$info = array_values($info);
|
||||
$cur = $info[0];
|
||||
foreach ($info as $n) {
|
||||
if ($n['width'] * $n['height'] > $cur['width'] * $cur['height']) $cur = $n;
|
||||
if ($n['width'] * $n['height'] > $cur['width'] * $cur['height']) {
|
||||
$cur = $n;
|
||||
}
|
||||
}
|
||||
$info = $cur;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user