mirror of
https://github.com/danog/MadelineProto.git
synced 2024-11-26 19:24:42 +01:00
Remove internal details from API, remove getDialogs (use only getDialogIds now), remove useless getInfo fields
This commit is contained in:
parent
9dcfa24197
commit
f0cd35f039
@ -225,7 +225,6 @@ Want to add your own open-source project to this list? [Click here!](https://doc
|
||||
* [Just the chat ID (extremely fast)](https://docs.madelineproto.xyz/docs/CHAT_INFO.html#getId)
|
||||
* [Getting all chats (dialogs)](https://docs.madelineproto.xyz/docs/DIALOGS.html) - There are two ways to get a list of all chats, depending if you logged in as a user, or as a bot.
|
||||
* [Dialog ID list](https://docs.madelineproto.xyz/docs/DIALOGS.html#getDialogIds)
|
||||
* [Dialog list](https://docs.madelineproto.xyz/docs/DIALOGS.html#getDialogs)
|
||||
* [Full dialog info](https://docs.madelineproto.xyz/docs/DIALOGS.html#getFullDialogs)
|
||||
* [Inline buttons](https://docs.madelineproto.xyz/docs/INLINE_BUTTONS.html) - You can easily click inline buttons using MadelineProto, just access the correct button:
|
||||
* [Secret chats](https://docs.madelineproto.xyz/docs/SECRET_CHATS.html) - MadelineProto provides wrappers to work with secret chats.
|
||||
|
2
docs
2
docs
@ -1 +1 @@
|
||||
Subproject commit 55c803083f2f2d9b263d361148d30a44706c6780
|
||||
Subproject commit 742e2d91ab92fdc99304753d29335ed950b139f6
|
@ -1,25 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="dev-master@a75d26a3d425d183da8bef37cfc14976c8d817d6">
|
||||
<file src="examples/bot.php">
|
||||
<LessSpecificImplementedReturnType>
|
||||
<code>int|string|array</code>
|
||||
</LessSpecificImplementedReturnType>
|
||||
<MissingFile>
|
||||
<code><![CDATA[require_once 'madeline.php']]></code>
|
||||
</MissingFile>
|
||||
<PossiblyNullArrayAccess>
|
||||
<code><![CDATA[$message->matches[1]]]></code>
|
||||
</PossiblyNullArrayAccess>
|
||||
<PossiblyNullPropertyFetch>
|
||||
<code><![CDATA[$reply->media]]></code>
|
||||
</PossiblyNullPropertyFetch>
|
||||
<PossiblyNullReference>
|
||||
<code>addReaction</code>
|
||||
<code>delReaction</code>
|
||||
<code>getDownloadLink</code>
|
||||
<code>reply</code>
|
||||
</PossiblyNullReference>
|
||||
</file>
|
||||
<file src="src/API.php">
|
||||
<ArgumentTypeCoercion>
|
||||
<code>$settings</code>
|
||||
@ -1318,16 +1298,6 @@
|
||||
],
|
||||
$this->getInputConstructor(...),
|
||||
),
|
||||
array_fill_keys(
|
||||
[
|
||||
'User',
|
||||
'Chat',
|
||||
'Peer',
|
||||
'InputDialogPeer',
|
||||
'InputNotifyPeer',
|
||||
],
|
||||
$this->getInfo(...),
|
||||
),
|
||||
array_fill_keys(
|
||||
[
|
||||
'InputMedia',
|
||||
@ -1692,7 +1662,6 @@
|
||||
<code>$filter</code>
|
||||
<code>$filter</code>
|
||||
<code>$filter</code>
|
||||
<code>$folder_id</code>
|
||||
<code>$gres</code>
|
||||
<code>$limit</code>
|
||||
<code>$limit</code>
|
||||
@ -1808,9 +1777,6 @@
|
||||
<code><![CDATA[$this->authorization['user']['id']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']['id']]]></code>
|
||||
</PossiblyNullArrayAccess>
|
||||
<PossiblyNullArrayOffset>
|
||||
<code><![CDATA[$this->msg_ids]]></code>
|
||||
</PossiblyNullArrayOffset>
|
||||
<PossiblyNullReference>
|
||||
<code>addPendingWakeups</code>
|
||||
<code>waitForInternalStart</code>
|
||||
@ -2471,8 +2437,6 @@
|
||||
<code><![CDATA[$this->authorization['user']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']['bot']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']['bot']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']['bot']]]></code>
|
||||
<code><![CDATA[$this->authorization['user']['bot']]]></code>
|
||||
|
@ -28,7 +28,7 @@ use danog\MadelineProto\TL\TL;
|
||||
final class DocsBuilder
|
||||
{
|
||||
public const DEFAULT_TEMPLATES = [
|
||||
'User' => ['User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputDialogPeer', 'DialogPeer', 'InputPeer', 'NotifyPeer', 'InputNotifyPeer'],
|
||||
'User' => ['User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputPeer'],
|
||||
'ReplyMarkup' => ['ReplyMarkup'],
|
||||
'InputFile' => ['InputFile', 'InputEncryptedFile'],
|
||||
'InputEncryptedChat' => ['InputEncryptedChat'],
|
||||
|
@ -149,7 +149,7 @@ trait Constructors
|
||||
$ptype = 'Bool';
|
||||
}
|
||||
$human_ptype = $ptype;
|
||||
if (str_starts_with($type, 'Input') && \in_array($ptype, ['User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputDialogPeer', 'DialogPeer', 'NotifyPeer', 'InputNotifyPeer', 'InputPeer'], true) && !isset($this->settings['td'])) {
|
||||
if (str_starts_with($type, 'Input') && \in_array($ptype, ['User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputPeer'], true) && !isset($this->settings['td'])) {
|
||||
$human_ptype = 'Username, chat ID, Update, Message or '.$ptype;
|
||||
}
|
||||
if (str_starts_with($type, 'Input') && \in_array($ptype, ['InputMedia', 'InputDocument', 'InputPhoto'], true) && !isset($this->settings['td'])) {
|
||||
|
@ -169,7 +169,7 @@ trait Methods
|
||||
$ptype = 'Bool';
|
||||
}
|
||||
$human_ptype = $ptype;
|
||||
if (\in_array($ptype, ['InputDialogPeer', 'DialogPeer', 'NotifyPeer', 'InputNotifyPeer', 'User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputPeer'], true) && !isset($this->settings['td'])) {
|
||||
if (\in_array($ptype, ['User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputPeer'], true) && !isset($this->settings['td'])) {
|
||||
$human_ptype = 'Username, chat ID, Update, Message or '.$ptype;
|
||||
}
|
||||
if (\in_array($ptype, ['InputMedia', 'InputPhoto', 'InputDocument'], true) && !isset($this->settings['td'])) {
|
||||
|
@ -819,15 +819,6 @@ abstract class InternalDoc
|
||||
{
|
||||
return $this->wrapper->getAPI()->getFileInfo($constructor);
|
||||
}
|
||||
/**
|
||||
* Get folder ID from object.
|
||||
*
|
||||
* @param mixed $id Object
|
||||
*/
|
||||
public static function getFolderId(mixed $id): ?int
|
||||
{
|
||||
return \danog\MadelineProto\MTProto::getFolderId($id);
|
||||
}
|
||||
/**
|
||||
* Get full info of all dialogs.
|
||||
*
|
||||
@ -882,18 +873,12 @@ abstract class InternalDoc
|
||||
* @param \danog\MadelineProto\API::INFO_TYPE_* $type Whether to generate an Input*, an InputPeer or the full set of constructors
|
||||
* @see https://docs.madelineproto.xyz/Info.html
|
||||
* @return ($type is \danog\MadelineProto\API::INFO_TYPE_ALL ? array{
|
||||
* InputPeer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int},
|
||||
* Peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int},
|
||||
* DialogPeer: array{_: string, peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int}},
|
||||
* NotifyPeer: array{_: string, peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int}},
|
||||
* InputDialogPeer: array{_: string, peer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}},
|
||||
* InputNotifyPeer: array{_: string, peer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}},
|
||||
* User?: array,
|
||||
* Chat?: array,
|
||||
* bot_api_id: int,
|
||||
* user_id?: int,
|
||||
* chat_id?: int,
|
||||
* channel_id?: int,
|
||||
* InputUser?: array{_: string, user_id?: int, access_hash?: int, min?: bool},
|
||||
* InputChannel?: array{_: string, channel_id: int, access_hash: int, min: bool},
|
||||
* type: string
|
||||
* } : ($type is API::INFO_TYPE_TYPE ? string : ($type is \danog\MadelineProto\API::INFO_TYPE_ID ? int : array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}|array{_: string, user_id?: int, access_hash?: int, min?: bool}|array{_: string, channel_id: int, access_hash: int, min: bool})))
|
||||
*/
|
||||
|
@ -1825,16 +1825,6 @@ final class MTProto implements TLCallback, LoggerGetter, SettingsGetter
|
||||
],
|
||||
$this->getInputConstructor(...),
|
||||
),
|
||||
array_fill_keys(
|
||||
[
|
||||
'User',
|
||||
'Chat',
|
||||
'Peer',
|
||||
'InputDialogPeer',
|
||||
'InputNotifyPeer',
|
||||
],
|
||||
$this->getInfo(...),
|
||||
),
|
||||
array_fill_keys(
|
||||
[
|
||||
'InputMedia',
|
||||
|
@ -868,7 +868,7 @@ trait Files
|
||||
if (\is_array($messageMedia) && ($messageMedia['min'] ?? false) && isset($messageMedia['access_hash'])) {
|
||||
// bot API file ID
|
||||
$messageMedia['min'] = false;
|
||||
$peer = $this->genAll($messageMedia, null, \danog\MadelineProto\API::INFO_TYPE_PEER);
|
||||
$peer = $this->genAll($messageMedia, \danog\MadelineProto\API::INFO_TYPE_PEER);
|
||||
} else {
|
||||
$peer = $this->getInfo($messageMedia, \danog\MadelineProto\API::INFO_TYPE_PEER);
|
||||
}
|
||||
|
@ -144,21 +144,6 @@ trait PeerHandler
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Get folder ID from object.
|
||||
*
|
||||
* @param mixed $id Object
|
||||
*/
|
||||
public static function getFolderId(mixed $id): ?int
|
||||
{
|
||||
if (!\is_array($id)) {
|
||||
return null;
|
||||
}
|
||||
if (!isset($id['folder_id'])) {
|
||||
return null;
|
||||
}
|
||||
return $id['folder_id'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the bot API ID of a peer.
|
||||
@ -372,18 +357,12 @@ trait PeerHandler
|
||||
* @param \danog\MadelineProto\API::INFO_TYPE_* $type Whether to generate an Input*, an InputPeer or the full set of constructors
|
||||
* @see https://docs.madelineproto.xyz/Info.html
|
||||
* @return ($type is \danog\MadelineProto\API::INFO_TYPE_ALL ? array{
|
||||
* InputPeer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int},
|
||||
* Peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int},
|
||||
* DialogPeer: array{_: string, peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int}},
|
||||
* NotifyPeer: array{_: string, peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int}},
|
||||
* InputDialogPeer: array{_: string, peer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}},
|
||||
* InputNotifyPeer: array{_: string, peer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}},
|
||||
* User?: array,
|
||||
* Chat?: array,
|
||||
* bot_api_id: int,
|
||||
* user_id?: int,
|
||||
* chat_id?: int,
|
||||
* channel_id?: int,
|
||||
* InputUser?: array{_: string, user_id?: int, access_hash?: int, min?: bool},
|
||||
* InputChannel?: array{_: string, channel_id: int, access_hash: int, min: bool},
|
||||
* type: string
|
||||
* } : ($type is API::INFO_TYPE_TYPE ? string : ($type is \danog\MadelineProto\API::INFO_TYPE_ID ? int : array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}|array{_: string, user_id?: int, access_hash?: int, min?: bool}|array{_: string, channel_id: int, access_hash: int, min: bool})))
|
||||
*/
|
||||
@ -406,7 +385,6 @@ trait PeerHandler
|
||||
break;
|
||||
}
|
||||
}
|
||||
$folder_id = $this->getFolderId($id);
|
||||
$try_id = $this->getIdInternal($id);
|
||||
if ($try_id !== null) {
|
||||
$id = $try_id;
|
||||
@ -448,9 +426,9 @@ trait PeerHandler
|
||||
$this->logger->logger("Only have min peer for {$id} in database, trying to fetch full info");
|
||||
try {
|
||||
if ($id < 0) {
|
||||
$this->methodCallAsyncRead('channels.getChannels', ['id' => [$this->genAll($chat, $folder_id, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]);
|
||||
$this->methodCallAsyncRead('channels.getChannels', ['id' => [$this->genAll($chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]);
|
||||
} else {
|
||||
$this->methodCallAsyncRead('users.getUsers', ['id' => [$this->genAll($chat, $folder_id, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]);
|
||||
$this->methodCallAsyncRead('users.getUsers', ['id' => [$this->genAll($chat, \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR)]]);
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->logger->logger($e->getMessage(), Logger::WARNING);
|
||||
@ -461,7 +439,7 @@ trait PeerHandler
|
||||
}
|
||||
}
|
||||
try {
|
||||
return $this->genAll($chat, $folder_id, $type);
|
||||
return $this->genAll($chat, $type);
|
||||
} catch (PeerNotInDbException $e) {
|
||||
$this->peerDatabase->clear($id);
|
||||
throw $e;
|
||||
@ -504,22 +482,16 @@ trait PeerHandler
|
||||
* @param array $constructor
|
||||
* @param \danog\MadelineProto\API::INFO_TYPE_* $type
|
||||
* @return ($type is \danog\MadelineProto\API::INFO_TYPE_ALL ? (array{
|
||||
* InputPeer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int},
|
||||
* Peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int},
|
||||
* DialogPeer: array{_: string, peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int}},
|
||||
* NotifyPeer: array{_: string, peer: array{_: string, user_id?: int, chat_id?: int, channel_id?: int}},
|
||||
* InputDialogPeer: array{_: string, peer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}},
|
||||
* InputNotifyPeer: array{_: string, peer: array{_: string, user_id?: int, access_hash?: int, min?: bool, chat_id?: int, channel_id?: int}},
|
||||
* User?: array,
|
||||
* Chat?: array,
|
||||
* bot_api_id: int,
|
||||
* user_id?: int,
|
||||
* chat_id?: int,
|
||||
* channel_id?: int,
|
||||
* InputUser?: array{_: string, user_id?: int, access_hash?: int, min?: bool},
|
||||
* InputChannel?: array{_: string, channel_id: int, access_hash: int, min: bool},
|
||||
* type: string
|
||||
* }&array) : array|int)
|
||||
*/
|
||||
private function genAll($constructor, $folder_id, int $type): array|int|string
|
||||
private function genAll($constructor, int $type): array|int|string
|
||||
{
|
||||
if ($type === \danog\MadelineProto\API::INFO_TYPE_CONSTRUCTOR) {
|
||||
if ($constructor['_'] === 'user') {
|
||||
@ -568,27 +540,16 @@ trait PeerHandler
|
||||
$res = [$this->TL->getConstructors()->findByPredicate($constructor['_'])['type'] => $constructor];
|
||||
switch ($constructor['_']) {
|
||||
case 'user':
|
||||
if ($constructor['self'] ?? false) {
|
||||
$res['InputPeer'] = ['_' => 'inputPeerSelf'];
|
||||
$res['InputUser'] = ['_' => 'inputUserSelf'];
|
||||
} elseif (isset($constructor['access_hash'])) {
|
||||
$res['InputPeer'] = ['_' => 'inputPeerUser', 'user_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false];
|
||||
$res['InputUser'] = ['_' => 'inputUser', 'user_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false];
|
||||
} else {
|
||||
if (!isset($constructor['access_hash'])) {
|
||||
$this->cacheFullDialogs();
|
||||
throw new PeerNotInDbException();
|
||||
}
|
||||
$res['InputDialogPeer'] = ['_' => 'inputDialogPeer', 'peer' => $res['InputPeer']];
|
||||
$res['InputNotifyPeer'] = ['_' => 'inputNotifyPeer', 'peer' => $res['InputPeer']];
|
||||
$res['user_id'] = $constructor['id'];
|
||||
$res['bot_api_id'] = $constructor['id'];
|
||||
$res['type'] = $constructor['bot'] ?? false ? 'bot' : 'user';
|
||||
break;
|
||||
case 'chat':
|
||||
case 'chatForbidden':
|
||||
$res['InputPeer'] = ['_' => 'inputPeerChat', 'chat_id' => $constructor['id']];
|
||||
$res['InputDialogPeer'] = ['_' => 'inputDialogPeer', 'peer' => $res['InputPeer']];
|
||||
$res['InputNotifyPeer'] = ['_' => 'inputNotifyPeer', 'peer' => $res['InputPeer']];
|
||||
$res['chat_id'] = $constructor['id'];
|
||||
$res['bot_api_id'] = -$constructor['id'];
|
||||
$res['type'] = 'chat';
|
||||
@ -598,10 +559,6 @@ trait PeerHandler
|
||||
$this->cacheFullDialogs();
|
||||
throw new PeerNotInDbException();
|
||||
}
|
||||
$res['InputPeer'] = ['_' => 'inputPeerChannel', 'channel_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false];
|
||||
$res['InputDialogPeer'] = ['_' => 'inputDialogPeer', 'peer' => $res['InputPeer']];
|
||||
$res['InputNotifyPeer'] = ['_' => 'inputNotifyPeer', 'peer' => $res['InputPeer']];
|
||||
$res['InputChannel'] = ['_' => 'inputChannel', 'channel_id' => $constructor['id'], 'access_hash' => $constructor['access_hash'], 'min' => $constructor['min'] ?? false];
|
||||
$res['channel_id'] = $constructor['id'];
|
||||
$res['bot_api_id'] = DialogId::fromSupergroupOrChannel($constructor['id']);
|
||||
$res['type'] = $constructor['megagroup'] ?? false ? 'supergroup' : 'channel';
|
||||
@ -611,9 +568,6 @@ trait PeerHandler
|
||||
default:
|
||||
throw new Exception('Invalid constructor given '.$constructor['_']);
|
||||
}
|
||||
if ($folder_id) {
|
||||
$res['InputFolderPeer'] = ['_' => 'inputFolderPeer', 'peer' => $res['InputPeer'], 'folder_id' => $folder_id];
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
/**
|
||||
@ -715,14 +669,14 @@ trait PeerHandler
|
||||
switch ($partial['type']) {
|
||||
case 'user':
|
||||
case 'bot':
|
||||
$this->methodCallAsyncRead('users.getFullUser', ['id' => $partial['InputUser']]);
|
||||
$this->methodCallAsyncRead('users.getFullUser', ['id' => $partial['bot_api_id']]);
|
||||
break;
|
||||
case 'chat':
|
||||
$this->methodCallAsyncRead('messages.getFullChat', $partial);
|
||||
break;
|
||||
case 'channel':
|
||||
case 'supergroup':
|
||||
$this->methodCallAsyncRead('channels.getFullChannel', ['channel' => $partial['InputChannel']]);
|
||||
$this->methodCallAsyncRead('channels.getFullChannel', ['channel' => $partial['bot_api_id']]);
|
||||
break;
|
||||
}
|
||||
return array_merge($partial, $this->peerDatabase->getFull($partial['bot_api_id']));
|
||||
@ -853,8 +807,8 @@ trait PeerHandler
|
||||
$filters = ['channelParticipantsAdmins', 'channelParticipantsBots'];
|
||||
$promises = [];
|
||||
foreach ($filters as $filter) {
|
||||
$promises []= async(function () use ($full, $filter, $total_count, &$res): void {
|
||||
$this->fetchParticipants($full['InputChannel'], $filter, '', $total_count, $res);
|
||||
$promises []= async(function () use ($filter, $total_count, &$res): void {
|
||||
$this->fetchParticipants($res['id'], $filter, '', $total_count, $res);
|
||||
});
|
||||
}
|
||||
await($promises);
|
||||
@ -863,8 +817,8 @@ trait PeerHandler
|
||||
$filters = ['channelParticipantsSearch', 'channelParticipantsKicked', 'channelParticipantsBanned'];
|
||||
$promises = [];
|
||||
foreach ($filters as $filter) {
|
||||
$promises []= async(function () use ($full, $filter, $q, $total_count, &$res): void {
|
||||
$this->recurseAlphabetSearchParticipants($full['InputChannel'], $filter, $q, $total_count, $res, 0);
|
||||
$promises []= async(function () use ($filter, $q, $total_count, &$res): void {
|
||||
$this->recurseAlphabetSearchParticipants($res['id'], $filter, $q, $total_count, $res, 0);
|
||||
});
|
||||
}
|
||||
await($promises);
|
||||
|
@ -39,24 +39,24 @@ interface Account
|
||||
/**
|
||||
* Edits notification settings from a given user/group, from all users/all groups.
|
||||
*
|
||||
* @param array|int|string $peer Notification source @see https://docs.madelineproto.xyz/API_docs/types/InputNotifyPeer.html
|
||||
* @param array{_: 'inputNotifyPeer', peer?: array|int|string}|array{_: 'inputNotifyUsers'}|array{_: 'inputNotifyChats'}|array{_: 'inputNotifyBroadcasts'}|array{_: 'inputNotifyForumTopic', peer?: array|int|string, top_msg_id?: int} $peer Notification source @see https://docs.madelineproto.xyz/API_docs/types/InputNotifyPeer.html
|
||||
* @param array{_: 'inputPeerNotifySettings', show_previews?: bool, silent?: bool, mute_until?: int, sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title?: string, data?: string}|array{_: 'notificationSoundRingtone', id?: int}, stories_muted?: bool, stories_hide_sender?: bool, stories_sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title?: string, data?: string}|array{_: 'notificationSoundRingtone', id?: int}} $settings Notification settings @see https://docs.madelineproto.xyz/API_docs/types/InputPeerNotifySettings.html
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
*/
|
||||
public function updateNotifySettings(array|int|string $peer, array $settings, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): bool;
|
||||
public function updateNotifySettings(array $peer, array $settings, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): bool;
|
||||
|
||||
/**
|
||||
* Gets current notification settings for a given user/group, from all users/all groups.
|
||||
*
|
||||
* @param array|int|string $peer Notification source @see https://docs.madelineproto.xyz/API_docs/types/InputNotifyPeer.html
|
||||
* @param array{_: 'inputNotifyPeer', peer?: array|int|string}|array{_: 'inputNotifyUsers'}|array{_: 'inputNotifyChats'}|array{_: 'inputNotifyBroadcasts'}|array{_: 'inputNotifyForumTopic', peer?: array|int|string, top_msg_id?: int} $peer Notification source @see https://docs.madelineproto.xyz/API_docs/types/InputNotifyPeer.html
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
* @return array{_: 'peerNotifySettings', show_previews?: bool, silent?: bool, mute_until: int, ios_sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title: string, data: string}|array{_: 'notificationSoundRingtone', id: int}, android_sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title: string, data: string}|array{_: 'notificationSoundRingtone', id: int}, other_sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title: string, data: string}|array{_: 'notificationSoundRingtone', id: int}, stories_muted?: bool, stories_hide_sender?: bool, stories_ios_sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title: string, data: string}|array{_: 'notificationSoundRingtone', id: int}, stories_android_sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title: string, data: string}|array{_: 'notificationSoundRingtone', id: int}, stories_other_sound?: array{_: 'notificationSoundDefault'}|array{_: 'notificationSoundNone'}|array{_: 'notificationSoundLocal', title: string, data: string}|array{_: 'notificationSoundRingtone', id: int}} @see https://docs.madelineproto.xyz/API_docs/types/PeerNotifySettings.html
|
||||
*/
|
||||
public function getNotifySettings(array|int|string $peer, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): array;
|
||||
public function getNotifySettings(array $peer, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): array;
|
||||
|
||||
/**
|
||||
* Resets all notification settings from users and groups.
|
||||
@ -515,13 +515,13 @@ interface Account
|
||||
* Returns list of chats with non-default notification settings.
|
||||
*
|
||||
* @param bool $compare_sound If true, chats with non-default sound will also be returned
|
||||
* @param array|int|string $peer If specified, only chats of the specified category will be returned @see https://docs.madelineproto.xyz/API_docs/types/InputNotifyPeer.html
|
||||
* @param array{_: 'inputNotifyPeer', peer?: array|int|string}|array{_: 'inputNotifyUsers'}|array{_: 'inputNotifyChats'}|array{_: 'inputNotifyBroadcasts'}|array{_: 'inputNotifyForumTopic', peer?: array|int|string, top_msg_id?: int} $peer If specified, only chats of the specified category will be returned @see https://docs.madelineproto.xyz/API_docs/types/InputNotifyPeer.html
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
* @return array @see https://docs.madelineproto.xyz/API_docs/types/Updates.html
|
||||
*/
|
||||
public function getNotifyExceptions(bool|null $compare_sound = false, bool|null $compare_stories = false, array|int|string|null $peer = null, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): array;
|
||||
public function getNotifyExceptions(bool|null $compare_sound = false, bool|null $compare_stories = false, array|null $peer = null, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): array;
|
||||
|
||||
/**
|
||||
* Get info about a certain [wallpaper](https://core.telegram.org/api/wallpapers).
|
||||
|
@ -764,7 +764,7 @@ interface Messages
|
||||
/**
|
||||
* Get dialog info of specified peers.
|
||||
*
|
||||
* @param list<array|int|string>|array<never, never> $peers Array of Peers @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param list<array{_: 'inputDialogPeer', peer?: array|int|string}|array{_: 'inputDialogPeerFolder', folder_id?: int}>|array<never, never> $peers Array of Peers @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
@ -974,20 +974,20 @@ interface Messages
|
||||
/**
|
||||
* Pin/unpin a dialog.
|
||||
*
|
||||
* @param array|int|string $peer The dialog to pin @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param array{_: 'inputDialogPeer', peer?: array|int|string}|array{_: 'inputDialogPeerFolder', folder_id?: int} $peer The dialog to pin @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param bool $pinned Whether to pin or unpin the dialog
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
*/
|
||||
public function toggleDialogPin(array|int|string $peer, bool|null $pinned = false, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): bool;
|
||||
public function toggleDialogPin(array $peer, bool|null $pinned = false, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): bool;
|
||||
|
||||
/**
|
||||
* Reorder pinned dialogs.
|
||||
*
|
||||
* @param bool $force If set, dialogs pinned server-side but not present in the `order` field will be unpinned.
|
||||
* @param int $folder_id [Peer folder ID, for more info click here](https://core.telegram.org/api/folders#peer-folders)
|
||||
* @param list<array|int|string>|array<never, never> $order Array of New dialog order @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param list<array{_: 'inputDialogPeer', peer?: array|int|string}|array{_: 'inputDialogPeerFolder', folder_id?: int}>|array<never, never> $order Array of New dialog order @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
@ -1181,13 +1181,13 @@ interface Messages
|
||||
/**
|
||||
* Manually mark dialog as unread.
|
||||
*
|
||||
* @param array|int|string $peer Dialog @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param array{_: 'inputDialogPeer', peer?: array|int|string}|array{_: 'inputDialogPeerFolder', folder_id?: int} $peer Dialog @see https://docs.madelineproto.xyz/API_docs/types/InputDialogPeer.html
|
||||
* @param bool $unread Mark as unread/read
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
*/
|
||||
public function markDialogUnread(array|int|string $peer, bool|null $unread = false, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): bool;
|
||||
public function markDialogUnread(array $peer, bool|null $unread = false, ?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): bool;
|
||||
|
||||
/**
|
||||
* Get dialogs manually marked as unread.
|
||||
@ -1195,7 +1195,7 @@ interface Messages
|
||||
* @param ?int $floodWaitLimit Can be used to specify a custom flood wait limit: if a FLOOD_WAIT_ rate limiting error is received with a waiting period bigger than this integer, an RPCErrorException will be thrown; otherwise, MadelineProto will simply wait for the specified amount of time. Defaults to the value specified in the settings: https://docs.madelineproto.xyz/PHP/danog/MadelineProto/Settings/RPC.html#setfloodtimeout-int-floodtimeout-self
|
||||
* @param ?string $queueId If specified, ensures strict server-side execution order of concurrent calls with the same queue ID.
|
||||
* @param ?\Amp\Cancellation $cancellation Cancellation
|
||||
* @return list<array|int|string> Array of @see https://docs.madelineproto.xyz/API_docs/types/DialogPeer.html
|
||||
* @return list<array{_: 'dialogPeer', peer: array|int|string}|array{_: 'dialogPeerFolder', folder_id: int}> Array of @see https://docs.madelineproto.xyz/API_docs/types/DialogPeer.html
|
||||
*/
|
||||
public function getDialogUnreadMarks(?int $floodWaitLimit = null, ?string $queueId = null, ?\Amp\Cancellation $cancellation = null): array|null;
|
||||
|
||||
|
@ -27,7 +27,6 @@ use danog\MadelineProto\Logger;
|
||||
use danog\MadelineProto\Loop\Update\UpdateLoop;
|
||||
use danog\MadelineProto\MTProtoTools\Crypt;
|
||||
use danog\MadelineProto\MTProtoTools\DialogId;
|
||||
use danog\MadelineProto\PeerNotInDbException;
|
||||
use danog\MadelineProto\RPCErrorException;
|
||||
use danog\MadelineProto\SecretPeerNotInDbException;
|
||||
use danog\MadelineProto\SecurityException;
|
||||
@ -64,11 +63,10 @@ trait AuthKeyHandler
|
||||
*/
|
||||
public function requestSecretChat(mixed $user): int
|
||||
{
|
||||
$user = ($this->getInfo($user));
|
||||
if (!isset($user['InputUser'])) {
|
||||
throw new PeerNotInDbException();
|
||||
$user = $this->getInfo($user);
|
||||
if ($user['type'] !== 'user') {
|
||||
throw new AssertionError("Can only create a secret chat with a user!");
|
||||
}
|
||||
$user = $user['InputUser'];
|
||||
$this->logger->logger('Creating secret chat with '.$user['user_id'].'...', Logger::VERBOSE);
|
||||
$dh_config = ($this->getDhConfig());
|
||||
$this->logger->logger('Generating a...', Logger::VERBOSE);
|
||||
|
@ -28,7 +28,6 @@ use danog\MadelineProto\Logger;
|
||||
use danog\MadelineProto\Magic;
|
||||
use danog\MadelineProto\MTProtoTools\Crypt;
|
||||
use danog\MadelineProto\Ogg;
|
||||
use danog\MadelineProto\PeerNotInDbException;
|
||||
use danog\MadelineProto\RemoteUrl;
|
||||
use danog\MadelineProto\Tools;
|
||||
use danog\MadelineProto\VoIP;
|
||||
@ -61,8 +60,8 @@ trait AuthKeyHandler
|
||||
public function requestCall(mixed $user): VoIP
|
||||
{
|
||||
$user = ($this->getInfo($user));
|
||||
if (!isset($user['InputUser']) || $user['InputUser']['_'] === 'inputUserSelf') {
|
||||
throw new PeerNotInDbException();
|
||||
if ($user['type'] !== 'user') {
|
||||
throw new AssertionError("Can only create a call with a user!");
|
||||
}
|
||||
$user = $user['bot_api_id'];
|
||||
if (isset($this->pendingCalls[$user])) {
|
||||
|
Loading…
Reference in New Issue
Block a user