1
0
mirror of https://github.com/danog/MadelineProto.git synced 2024-11-26 19:24:42 +01:00

Improve peer handling logic

This commit is contained in:
Daniil Gentili 2023-12-17 16:54:01 +01:00
parent 26e93def2f
commit 8cc9685433
8 changed files with 30 additions and 27 deletions

View File

@ -143,7 +143,7 @@
"cli_need_dl.php_link": "لطفا هنگام استفاده از getDownloadLink روی CLI (محیط ترمینال)، لینک اسکریپت دانلود را مشخص کنید!",
"need_dl.php": "اسکریپت دانلود پیشفرض تولید نشد (%s)، لطفا یک فایل dl.php بسیازید و این محتوا را در آن قرار دهید: %s سپس لینک آن فایل را به ورودی دوم getDownloadLink بدهید",
"dl.php_powered_by_madelineproto": "سرور دانلود فایل تلگرام (تا حداکثر 4 گیگابایت)، قدرت گرفته از <a href=\"https://docs.madelineproto.xyz\" target=\"_blank\">مدلین‌پروتو</a>!<br>برای اطلاعات بیشتر در مورد طریقه اجرای سرور دانلود تلگرام شخصی خود <a href=\"https://docs.madelineproto.xyz/docs/FILES.html#getting-a-download-link\" target=\"_blank\">اینجا</a> کلیک کنید!",
"update_madelineproto": "شما در حال اجرای یک نسخه قدیمی از مدلین هستید، یک به‌روزرسانی نیاز است!",
"update_madelineproto": "شما نسخه قدیمی MadelineProto را اجرا می‌کنید، سورس شما نیاز به بروزرسانی دارد: در حال حاضر %s در حال اجرا است، اما آخرین نسخه با چندین رفع اشکال و ویژگی‌های جدید %s است!",
"dl.php_check_logs_make_sure_session_running": "هم ربات ایونت‌هندلر مدلین‌پروتو مرتبط و هم سرور IPC مدلین‌پروتو آفلاین هستند، لطفا لاگ‌ها را بررسی کنید و مطمئن شوید حداقل یکی از آنها در حال اجراست!",
"invalid_dl.php_session": "%s یک اسکریپت دانلود درست و معتبر نیست چرا که سشن‌آیدی متفاوت است (انتظار این سشن‌آیدی وجود داشت: %s، اما این دریافت شد: %s)",
"account_banned": "!!!!!!! اخطار !!!!!!!\nسیستم جلوگیری از فلود تلگرام، این حساب را معلق کرده.\nبرای ادامه، تایید دستی نیاز است.\nیک ایمیل به recover@telegram.org بفرستید، و از آنها آزادسازی شماره %s را جویا باشید، و کوتاه توضیح دهید که چه کاری با این شماره انجام خواهید داد.\nسپس دوباره وارد شوید.\nاگر از قصد این حساب را حذف کرده‌اید، این پیام را نادیده بگیرید.",

View File

@ -51,7 +51,7 @@ final class API extends AbstractAPI
*
* @var string
*/
public const RELEASE = '8.0.0-beta180';
public const RELEASE = '8.0.0-beta181';
/**
* We're not logged in.
*

View File

@ -26,7 +26,7 @@ final class Lang
'he' => 74,
'it' => 100,
'ckb' => 74,
'fa' => 99,
'fa' => 100,
'ru' => 53,
'uz' => 74,
];
@ -524,7 +524,7 @@ If you intentionally deleted this account, ignore this message.',
'translate_madelineproto_web' => 'مدلین‌پروتو را می‌توان به زبان شما ترجمه کرد (پیشرفت ترجمه فعلی: %d%%)، برای مشارکت در ترجمه <a href="https://weblate.madelineproto.xyz" target="_blank">اینجا را کلیک کنید!</a >',
'type_extract_error' => 'نمی‌توان نوع (تایپ) "%s" را استخراج کرد، شما باید MadelineProto را به روز رسانی کنید!',
'type_extract_error_id' => 'نمی‌توان نوع: %s را با ایدی %s استخراج کرد، شما باید MadelineProto را به روز رسانی کنید!',
'update_madelineproto' => 'شما در حال اجرای یک نسخه قدیمی از مدلین هستید، یک به‌روزرسانی نیاز است!',
'update_madelineproto' => 'شما نسخه قدیمی MadelineProto را اجرا می‌کنید، سورس شما نیاز به بروزرسانی دارد: در حال حاضر %s در حال اجرا است، اما آخرین نسخه با چندین رفع اشکال و ویژگی‌های جدید %s است!',
'value_bigger_than_2147483647' => 'مقدار داده شده‌ی %s بیشتر از 2147483647 است',
'value_bigger_than_4294967296' => 'مقدار داده شده‌ی %s بیشتر از 4294967296 است',
'value_bigger_than_9223372036854775807' => 'مقدار داده شده‌ی %s بیشتر از 9223372036854775807 است',

View File

@ -106,7 +106,7 @@ final class FeedLoop extends Loop
{
foreach ($updates as $update) {
if ($update['_'] === 'updateChannelTooLong') {
$this->API->logger('Got channel too long update, getting difference...', Logger::VERBOSE);
$this->API->logger("Got channel too long update in $this, getting difference...", Logger::VERBOSE);
$this->updater->resume();
continue;
}
@ -116,7 +116,7 @@ final class FeedLoop extends Loop
$mid = $update['message']['id'] ?? '-';
$mypts = $this->state->pts();
$computed = $mypts + $pts_count;
$this->API->logger("{$msg}. My pts: {$mypts}, remote pts: {$update['pts']}, computed pts: {$computed}, msg id: {$mid}, channel id: {$this->channelId}", Logger::ULTRA_VERBOSE);
$this->API->logger("{$msg}. My pts: {$mypts}, remote pts: {$update['pts']}, computed pts: {$computed}, msg id: {$mid}, channel id: {$this->channelId}", Logger::VERBOSE);
};
$result = $this->state->checkPts($update);
if ($result < 0) {
@ -249,7 +249,7 @@ final class FeedLoop extends Loop
return $this->API->feeders[self::GENERIC]->feedSingle($update);
}
}
$this->API->logger('Was fed an update of type '.$update['_']." in {$this}...", Logger::ULTRA_VERBOSE);
$this->API->logger('Was fed an update of type '.$update['_']." in {$this}...", Logger::VERBOSE);
if ($update['_'] === 'updateLoginToken') {
$this->API->saveUpdate($update);
return $this->channelId;

View File

@ -74,7 +74,7 @@ final class SeqLoop extends Loop
}
$this->feeder = $this->API->feeders[FeedLoop::GENERIC];
$this->state = $this->API->loadUpdateState();
$this->API->logger("Resumed $this!", Logger::LEVEL_ULTRA_VERBOSE);
$this->API->logger("Resumed $this!", Logger::LEVEL_VERBOSE);
while (!$this->incomingUpdates->isEmpty()) {
$this->parse($this->incomingUpdates);

View File

@ -118,7 +118,7 @@ final class UpdateLoop extends Loop
$this->toPts = null;
while (true) {
if ($this->channelId) {
$this->API->logger('Resumed and fetching '.$this->channelId.' difference...', Logger::ULTRA_VERBOSE);
$this->API->logger('Resumed and fetching '.$this->channelId.' difference...', Logger::VERBOSE);
if ($state->pts() <= 1) {
$limit = 10;
} elseif ($this->API->authorization['user']['bot']) {
@ -156,7 +156,7 @@ final class UpdateLoop extends Loop
return self::STOP;
}
$timeout = min(self::DEFAULT_TIMEOUT, $difference['timeout'] ?? self::DEFAULT_TIMEOUT);
$this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE);
$this->API->logger('Got '.$difference['_'], Logger::VERBOSE);
switch ($difference['_']) {
case 'updates.channelDifferenceEmpty':
$state->update($difference);
@ -192,7 +192,7 @@ final class UpdateLoop extends Loop
throw new Exception('Unrecognized update difference received: '.var_export($difference, true));
}
} else {
$this->API->logger('Resumed and fetching normal difference...', Logger::ULTRA_VERBOSE);
$this->API->logger('Resumed and fetching normal difference...', Logger::VERBOSE);
do {
try {
$difference = $this->API->methodCallAsyncRead('updates.getDifference', ['pts' => $state->pts(), 'date' => $state->date(), 'qts' => $state->qts()], $this->API->authorized_dc);
@ -203,7 +203,7 @@ final class UpdateLoop extends Loop
}
}
} while (true);
$this->API->logger('Got '.$difference['_'], Logger::ULTRA_VERBOSE);
$this->API->logger('Got '.$difference['_'], Logger::VERBOSE);
$timeout = self::DEFAULT_TIMEOUT;
switch ($difference['_']) {
case 'updates.differenceEmpty':
@ -245,11 +245,11 @@ final class UpdateLoop extends Loop
}
}
}
$this->API->logger("Finished parsing updates in {$this}, now resuming feeders", Logger::ULTRA_VERBOSE);
$this->API->logger("Finished parsing updates in {$this}, now resuming feeders", Logger::VERBOSE);
foreach ($result as $channelId => $_) {
$this->API->feeders[$channelId]?->resume();
}
$this->API->logger("Finished parsing updates in {$this}, pausing for $timeout seconds", Logger::ULTRA_VERBOSE);
$this->API->logger("Finished parsing updates in {$this}, pausing for $timeout seconds", Logger::VERBOSE);
return $timeout;
}

View File

@ -1836,6 +1836,7 @@ final class MTProto implements TLCallback, LoggerGetter, SettingsGetter
[
'InputFileLocation' => $this->getDownloadInfo(...),
'InputPeer' => $this->getInputPeer(...),
'InputDialogPeer' => fn (mixed $id) => ['_' => 'inputDialogPeer', 'peer' => $this->getInputPeer($id)],
'InputCheckPasswordSRP' => fn (string $password): array => (new PasswordCalculator($this->methodCallAsyncRead('account.getPassword', [], $this->authorized_dc)))->getCheckPassword($password),
],
);

View File

@ -1056,20 +1056,22 @@ trait UpdateHandler
&& \in_array($update['message']['action']['_'], ['messageActionChatEditTitle', 'messageActionChatEditPhoto', 'messageActionChatDeletePhoto', 'messageActionChatMigrateTo', 'messageActionChannelMigrateFrom', 'messageActionGroupCall'], true)
)
) {
try {
$id = $this->getIdInternal($update);
\assert($id !== null);
$this->refreshPeerCache($id);
if ($this->getSettings()->getDb()->getEnableFullPeerDb()) {
$this->peerDatabase->expireFull($id);
$id = $this->getIdInternal($update);
\assert($id !== null);
EventLoop::queue(function () use ($id): void {
try {
$this->refreshPeerCache($id);
if ($this->getSettings()->getDb()->getEnableFullPeerDb()) {
$this->peerDatabase->expireFull($id);
}
} catch (PeerNotInDbException) {
} catch (FloodWaitError) {
} catch (RPCErrorException $e) {
if ($e->rpc !== 'CHANNEL_PRIVATE' && $e->rpc !== 'MSG_ID_INVALID') {
throw $e;
}
}
} catch (PeerNotInDbException) {
} catch (FloodWaitError) {
} catch (RPCErrorException $e) {
if ($e->rpc !== 'CHANNEL_PRIVATE' && $e->rpc !== 'MSG_ID_INVALID') {
throw $e;
}
}
});
}
if ($update['_'] === 'updateDcOptions') {
$this->logger->logger('Got new dc options', Logger::VERBOSE);