mirror of
https://github.com/danog/MadelineProto.git
synced 2024-11-27 01:14:39 +01:00
Fixes
This commit is contained in:
parent
e4f9b657b7
commit
948a697ff5
2
docs
2
docs
@ -1 +1 @@
|
||||
Subproject commit cd0f06e07029bb18a69bf330d4c53f0b68005b21
|
||||
Subproject commit 774abcdbb214481cc7f00e25ca2b882b6957dc14
|
14
src/API.php
14
src/API.php
@ -28,7 +28,6 @@ use Amp\Ipc\Sync\ChannelledSocket;
|
||||
use Amp\SignalException;
|
||||
use Amp\TimeoutCancellation;
|
||||
use Amp\TimeoutException;
|
||||
use AssertionError;
|
||||
use danog\MadelineProto\ApiWrappers\Start;
|
||||
use danog\MadelineProto\ApiWrappers\Templates;
|
||||
use danog\MadelineProto\Ipc\Client;
|
||||
@ -112,12 +111,6 @@ final class API extends AbstractAPI
|
||||
*/
|
||||
private SessionPaths $session;
|
||||
|
||||
/**
|
||||
* Whether this is an old instance.
|
||||
*
|
||||
*/
|
||||
private bool $oldInstance = false;
|
||||
|
||||
/**
|
||||
* Unlock callback.
|
||||
*
|
||||
@ -317,11 +310,11 @@ final class API extends AbstractAPI
|
||||
*/
|
||||
public function __wakeup(): void
|
||||
{
|
||||
$this->oldInstance = true;
|
||||
$this->__construct($this->session->getSessionDirectoryPath());
|
||||
}
|
||||
public function __sleep(): array
|
||||
{
|
||||
throw new AssertionError("MadelineProto can't be serialized!");
|
||||
return ['session'];
|
||||
}
|
||||
/**
|
||||
* @var array<Future<null>>
|
||||
@ -343,9 +336,6 @@ final class API extends AbstractAPI
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
if ($this->oldInstance) {
|
||||
return;
|
||||
}
|
||||
$id = \count(self::$destructors);
|
||||
self::$destructors[$id] = async(function () use ($id): void {
|
||||
$this->wrapper->logger('Shutting down MadelineProto ('.static::class.')');
|
||||
|
@ -22,6 +22,7 @@ namespace danog\MadelineProto\Broadcast\Action;
|
||||
|
||||
use Amp\Cancellation;
|
||||
use danog\MadelineProto\Broadcast\Action;
|
||||
use danog\MadelineProto\Exception;
|
||||
use danog\MadelineProto\MTProto;
|
||||
use danog\MadelineProto\RPCErrorException;
|
||||
|
||||
@ -54,6 +55,9 @@ final class ActionForward implements Action
|
||||
if ($e->rpc === 'CHAT_WRITE_FORBIDDEN') {
|
||||
return;
|
||||
}
|
||||
if ($e->rpc === 'CHANNEL_PRIVATE') {
|
||||
return;
|
||||
}
|
||||
if ($e->rpc === 'USER_IS_BLOCKED') {
|
||||
return;
|
||||
}
|
||||
@ -61,6 +65,11 @@ final class ActionForward implements Action
|
||||
return;
|
||||
}
|
||||
throw $e;
|
||||
} catch (Exception $e) {
|
||||
if ($e->getMessage() === 'This peer is not present in the internal peer database') {
|
||||
return;
|
||||
}
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ namespace danog\MadelineProto\Broadcast\Action;
|
||||
|
||||
use Amp\Cancellation;
|
||||
use danog\MadelineProto\Broadcast\Action;
|
||||
use danog\MadelineProto\Exception;
|
||||
use danog\MadelineProto\MTProto;
|
||||
use danog\MadelineProto\RPCErrorException;
|
||||
|
||||
@ -43,7 +44,7 @@ final class ActionSend implements Action
|
||||
$message['media']['_'] !== 'messageMediaWebPage'
|
||||
? 'messages.sendMedia'
|
||||
: 'messages.sendMessage',
|
||||
\array_merge($message, ['to_peer' => $peer]),
|
||||
\array_merge($message, ['peer' => $peer]),
|
||||
['FloodWaitLimit' => 2*86400]
|
||||
);
|
||||
}
|
||||
@ -57,6 +58,9 @@ final class ActionSend implements Action
|
||||
if ($e->rpc === 'CHAT_WRITE_FORBIDDEN') {
|
||||
return;
|
||||
}
|
||||
if ($e->rpc === 'CHANNEL_PRIVATE') {
|
||||
return;
|
||||
}
|
||||
if ($e->rpc === 'USER_IS_BLOCKED') {
|
||||
return;
|
||||
}
|
||||
@ -64,6 +68,11 @@ final class ActionSend implements Action
|
||||
return;
|
||||
}
|
||||
throw $e;
|
||||
} catch (Exception $e) {
|
||||
if ($e->getMessage() === 'This peer is not present in the internal peer database') {
|
||||
return;
|
||||
}
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -112,16 +112,24 @@ final class InternalState
|
||||
$this->setStatus(StatusInternal::GATHERING_PEERS);
|
||||
async(function (): void {
|
||||
$peers = $this->API->getDialogIds();
|
||||
$peers = \array_filter($peers, fn (int $peer): bool => !(
|
||||
\in_array($peer, $this->filter->blacklist, true)
|
||||
|| !match ($this->API->getType($peer)) {
|
||||
'user' => $this->filter->allowUsers,
|
||||
'bot' => $this->filter->allowBots,
|
||||
'chat' => $this->filter->allowGroups,
|
||||
'supergroup' => $this->filter->allowGroups,
|
||||
'channel' => $this->filter->allowChannels,
|
||||
$peers = \array_filter($peers, function (int $peer): bool {
|
||||
if (\in_array($peer, $this->filter->blacklist, true)) {
|
||||
return false;
|
||||
}
|
||||
));
|
||||
try {
|
||||
if (!match ($this->API->getType($peer)) {
|
||||
'user' => $this->filter->allowUsers,
|
||||
'bot' => $this->filter->allowBots,
|
||||
'chat' => $this->filter->allowGroups,
|
||||
'supergroup' => $this->filter->allowGroups,
|
||||
'channel' => $this->filter->allowChannels,
|
||||
}) {
|
||||
return false;
|
||||
}
|
||||
} catch (Throwable) {
|
||||
}
|
||||
return true;
|
||||
});
|
||||
$this->peers = $peers;
|
||||
$this->pendingCount = \count($peers);
|
||||
$this->setStatus(StatusInternal::IDLING_BEFORE_BROADCASTING);
|
||||
|
Loading…
Reference in New Issue
Block a user