mirror of
https://github.com/danog/MadelineProto.git
synced 2024-11-26 21:34:41 +01:00
Improve peer handling logic
This commit is contained in:
parent
26e93def2f
commit
8cc9685433
@ -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اگر از قصد این حساب را حذف کردهاید، این پیام را نادیده بگیرید.",
|
||||
|
@ -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.
|
||||
*
|
||||
|
@ -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 است',
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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),
|
||||
],
|
||||
);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user