random_ids are now computed automagically, added methods to ease working with peers and updated docs
This commit is contained in:
parent
1940195949
commit
884232aec3
15
README.md
15
README.md
@ -200,7 +200,7 @@ $sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message'
|
||||
var_dump($sentMessage);
|
||||
```
|
||||
|
||||
The API class also provides some wrapper methods for logging in as a bot or as a normal user:
|
||||
The API class also provides some wrapper methods for logging in as a bot or as a normal user, and for getting inputPeer constructors to use in sendMessage and other methods:
|
||||
|
||||
```
|
||||
$sentCode = $MadelineProto->phone_login($number); // Send code
|
||||
@ -213,6 +213,19 @@ for ($x = 0; $x < $sentCode['type']['length']; $x++) {
|
||||
$authorization = $MadelineProto->complete_phone_login($code); // Complete authorization
|
||||
var_dump($authorization);
|
||||
|
||||
var_dump($MadelineProto->API->resolve_username('@Palmas2012')); // Always use this method to resolve usernames, but you won't need to call this to get info about peers, as get_peer and get_input_peer will call it for you if needed
|
||||
|
||||
$mention = $MadelineProto->API->get_peer('@veetaw'); // Returns an object of type User or Chat
|
||||
$mention = $MadelineProto->API->constructor2inputpeer($mention); // Converts an object of type User or Chat to an object of type inputPeer
|
||||
|
||||
$message = "I've installed MadelineProto!";
|
||||
foreach (['@pwrtelegramgroup', '@pwrtelegramgroupita'] as $peer) {
|
||||
$peer = $MadelineProto->API->get_input_peer($peer);
|
||||
$sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message' => $message, 'entities' => [['_' => 'inputMessageEntityMentionName', 'offset' => 0, 'length' => strlen($message), 'user_id' => $mention]]]);
|
||||
var_dump($sentMessage);
|
||||
}
|
||||
|
||||
// The above works with bots too
|
||||
$authorization = $MadelineProto->bot_login($token); // Note that every time you login as a bot or as a user MadelineProto will logout first, so now MadelineProto is logged in as the bot with token $token, not as the user with number $number
|
||||
var_dump($authorization);
|
||||
```
|
||||
|
@ -72,7 +72,7 @@ foreach ($TL->methods->method as $key => $method) {
|
||||
|
||||
$params = '';
|
||||
foreach ($TL->methods->params[$key] as $param) {
|
||||
if ($param['name'] == 'flags') {
|
||||
if (in_array($param['name'], ['flags', 'random_id'])) {
|
||||
continue;
|
||||
}
|
||||
$stype = 'type';
|
||||
@ -110,7 +110,7 @@ foreach ($TL->methods->method as $key => $method) {
|
||||
|----------|:-------------:|---------:|
|
||||
';
|
||||
foreach ($TL->methods->params[$key] as $param) {
|
||||
if ($param['name'] == 'flags') {
|
||||
if (in_array($param['name'], ['flags', 'random_id'])) {
|
||||
continue;
|
||||
}
|
||||
$ptype = str_replace('.', '_', $param[isset($param['subtype']) ? 'subtype' : 'type']);
|
||||
@ -209,7 +209,7 @@ foreach ($TL->constructors->predicate as $key => $constructor) {
|
||||
|
||||
$params = '';
|
||||
foreach ($TL->constructors->params[$key] as $param) {
|
||||
if ($param['name'] == 'flags') {
|
||||
if (in_array($param['name'], ['flags', 'random_id'])) {
|
||||
continue;
|
||||
}
|
||||
$stype = 'type';
|
||||
@ -255,7 +255,7 @@ foreach ($TL->constructors->predicate as $key => $constructor) {
|
||||
';
|
||||
$params = '';
|
||||
foreach ($TL->constructors->params[$key] as $param) {
|
||||
if ($param['name'] == 'flags') {
|
||||
if (in_array($param['name'], ['flags', 'random_id'])) {
|
||||
continue;
|
||||
}
|
||||
$ptype = str_replace('.', '_', $param[isset($param['subtype']) ? 'subtype' : 'type']);
|
||||
|
@ -11,7 +11,6 @@ description: encryptedMessage attributes, type and example
|
||||
|
||||
| Name | Type | Required |
|
||||
|----------|:-------------:|---------:|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|chat\_id|[int](../types/int.md) | Required|
|
||||
|date|[int](../types/int.md) | Required|
|
||||
|bytes|[bytes](../types/bytes.md) | Required|
|
||||
@ -25,5 +24,5 @@ description: encryptedMessage attributes, type and example
|
||||
### Example:
|
||||
|
||||
```
|
||||
$encryptedMessage = ['_' => encryptedMessage', 'random_id' => long, 'chat_id' => int, 'date' => int, 'bytes' => bytes, 'file' => EncryptedFile, ];
|
||||
$encryptedMessage = ['_' => encryptedMessage', 'chat_id' => int, 'date' => int, 'bytes' => bytes, 'file' => EncryptedFile, ];
|
||||
```
|
@ -11,7 +11,6 @@ description: encryptedMessageService attributes, type and example
|
||||
|
||||
| Name | Type | Required |
|
||||
|----------|:-------------:|---------:|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|chat\_id|[int](../types/int.md) | Required|
|
||||
|date|[int](../types/int.md) | Required|
|
||||
|bytes|[bytes](../types/bytes.md) | Required|
|
||||
@ -24,5 +23,5 @@ description: encryptedMessageService attributes, type and example
|
||||
### Example:
|
||||
|
||||
```
|
||||
$encryptedMessageService = ['_' => encryptedMessageService', 'random_id' => long, 'chat_id' => int, 'date' => int, 'bytes' => bytes, ];
|
||||
$encryptedMessageService = ['_' => encryptedMessageService', 'chat_id' => int, 'date' => int, 'bytes' => bytes, ];
|
||||
```
|
@ -297,10 +297,10 @@ description: List of constructors
|
||||
<br><br>[$encryptedFileEmpty](../constructors/encryptedFileEmpty.md) = \[\];<a name="encryptedFileEmpty"></a>
|
||||
|
||||
***
|
||||
<br><br>[$encryptedMessage](../constructors/encryptedMessage.md) = \['random_id' => [long](../types/long.md), 'chat_id' => [int](../types/int.md), 'date' => [int](../types/int.md), 'bytes' => [bytes](../types/bytes.md), 'file' => [EncryptedFile](../types/EncryptedFile.md), \];<a name="encryptedMessage"></a>
|
||||
<br><br>[$encryptedMessage](../constructors/encryptedMessage.md) = \['chat_id' => [int](../types/int.md), 'date' => [int](../types/int.md), 'bytes' => [bytes](../types/bytes.md), 'file' => [EncryptedFile](../types/EncryptedFile.md), \];<a name="encryptedMessage"></a>
|
||||
|
||||
***
|
||||
<br><br>[$encryptedMessageService](../constructors/encryptedMessageService.md) = \['random_id' => [long](../types/long.md), 'chat_id' => [int](../types/int.md), 'date' => [int](../types/int.md), 'bytes' => [bytes](../types/bytes.md), \];<a name="encryptedMessageService"></a>
|
||||
<br><br>[$encryptedMessageService](../constructors/encryptedMessageService.md) = \['chat_id' => [int](../types/int.md), 'date' => [int](../types/int.md), 'bytes' => [bytes](../types/bytes.md), \];<a name="encryptedMessageService"></a>
|
||||
|
||||
***
|
||||
<br><br>[$error](../constructors/error.md) = \['code' => [int](../types/int.md), 'text' => [string](../types/string.md), \];<a name="error"></a>
|
||||
@ -1118,7 +1118,7 @@ description: List of constructors
|
||||
<br><br>[$updateInlineBotCallbackQuery](../constructors/updateInlineBotCallbackQuery.md) = \['query_id' => [long](../types/long.md), 'user_id' => [int](../types/int.md), 'msg_id' => [InputBotInlineMessageID](../types/InputBotInlineMessageID.md), 'chat_instance' => [long](../types/long.md), 'data' => [bytes](../types/bytes.md), 'game_short_name' => [string](../types/string.md), \];<a name="updateInlineBotCallbackQuery"></a>
|
||||
|
||||
***
|
||||
<br><br>[$updateMessageID](../constructors/updateMessageID.md) = \['id' => [int](../types/int.md), 'random_id' => [long](../types/long.md), \];<a name="updateMessageID"></a>
|
||||
<br><br>[$updateMessageID](../constructors/updateMessageID.md) = \['id' => [int](../types/int.md), \];<a name="updateMessageID"></a>
|
||||
|
||||
***
|
||||
<br><br>[$updateNewAuthorization](../constructors/updateNewAuthorization.md) = \['auth_key_id' => [long](../types/long.md), 'date' => [int](../types/int.md), 'device' => [string](../types/string.md), 'location' => [string](../types/string.md), \];<a name="updateNewAuthorization"></a>
|
||||
|
@ -12,7 +12,6 @@ description: updateMessageID attributes, type and example
|
||||
| Name | Type | Required |
|
||||
|----------|:-------------:|---------:|
|
||||
|id|[int](../types/int.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|
||||
|
||||
|
||||
@ -22,5 +21,5 @@ description: updateMessageID attributes, type and example
|
||||
### Example:
|
||||
|
||||
```
|
||||
$updateMessageID = ['_' => updateMessageID', 'id' => int, 'random_id' => long, ];
|
||||
$updateMessageID = ['_' => updateMessageID', 'id' => int, ];
|
||||
```
|
@ -242,9 +242,9 @@ $MadelineProto->[messages->editMessage](messages_editMessage.md)(\['no_webpage'
|
||||
|
||||
$MadelineProto->[messages->exportChatInvite](messages_exportChatInvite.md)(\['chat_id' => [int](../types/int.md), \]) == [$ExportedChatInvite](../types/ExportedChatInvite.md)<a name="messages_exportChatInvite"></a>
|
||||
|
||||
$MadelineProto->[messages->forwardMessage](messages_forwardMessage.md)(\['peer' => [InputPeer](../types/InputPeer.md), 'id' => [int](../types/int.md), 'random_id' => [long](../types/long.md), \]) == [$Updates](../types/Updates.md)<a name="messages_forwardMessage"></a>
|
||||
$MadelineProto->[messages->forwardMessage](messages_forwardMessage.md)(\['peer' => [InputPeer](../types/InputPeer.md), 'id' => [int](../types/int.md), \]) == [$Updates](../types/Updates.md)<a name="messages_forwardMessage"></a>
|
||||
|
||||
$MadelineProto->[messages->forwardMessages](messages_forwardMessages.md)(\['silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'with_my_score' => [Bool](../types/Bool.md), 'from_peer' => [InputPeer](../types/InputPeer.md), 'id' => \[[int](../types/int.md)\], 'random_id' => \[[long](../types/long.md)\], 'to_peer' => [InputPeer](../types/InputPeer.md), \]) == [$Updates](../types/Updates.md)<a name="messages_forwardMessages"></a>
|
||||
$MadelineProto->[messages->forwardMessages](messages_forwardMessages.md)(\['silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'with_my_score' => [Bool](../types/Bool.md), 'from_peer' => [InputPeer](../types/InputPeer.md), 'id' => \[[int](../types/int.md)\], 'to_peer' => [InputPeer](../types/InputPeer.md), \]) == [$Updates](../types/Updates.md)<a name="messages_forwardMessages"></a>
|
||||
|
||||
$MadelineProto->[messages->getAllDrafts](messages_getAllDrafts.md)(\[\]) == [$Updates](../types/Updates.md)<a name="messages_getAllDrafts"></a>
|
||||
|
||||
@ -320,7 +320,7 @@ $MadelineProto->[messages->reorderStickerSets](messages_reorderStickerSets.md)(\
|
||||
|
||||
$MadelineProto->[messages->reportSpam](messages_reportSpam.md)(\['peer' => [InputPeer](../types/InputPeer.md), \]) == [$Bool](../types/Bool.md)<a name="messages_reportSpam"></a>
|
||||
|
||||
$MadelineProto->[messages->requestEncryption](messages_requestEncryption.md)(\['user_id' => [InputUser](../types/InputUser.md), 'random_id' => [int](../types/int.md), 'g_a' => [bytes](../types/bytes.md), \]) == [$EncryptedChat](../types/EncryptedChat.md)<a name="messages_requestEncryption"></a>
|
||||
$MadelineProto->[messages->requestEncryption](messages_requestEncryption.md)(\['user_id' => [InputUser](../types/InputUser.md), 'g_a' => [bytes](../types/bytes.md), \]) == [$EncryptedChat](../types/EncryptedChat.md)<a name="messages_requestEncryption"></a>
|
||||
|
||||
$MadelineProto->[messages->saveDraft](messages_saveDraft.md)(\['no_webpage' => [Bool](../types/Bool.md), 'reply_to_msg_id' => [int](../types/int.md), 'peer' => [InputPeer](../types/InputPeer.md), 'message' => [string](../types/string.md), 'entities' => \[[MessageEntity](../types/MessageEntity.md)\], \]) == [$Bool](../types/Bool.md)<a name="messages_saveDraft"></a>
|
||||
|
||||
@ -334,17 +334,17 @@ $MadelineProto->[messages->searchGifs](messages_searchGifs.md)(\['q' => [string]
|
||||
|
||||
$MadelineProto->[messages->searchGlobal](messages_searchGlobal.md)(\['q' => [string](../types/string.md), 'offset_date' => [int](../types/int.md), 'offset_peer' => [InputPeer](../types/InputPeer.md), 'offset_id' => [int](../types/int.md), 'limit' => [int](../types/int.md), \]) == [$messages\_Messages](../types/messages_Messages.md)<a name="messages_searchGlobal"></a>
|
||||
|
||||
$MadelineProto->[messages->sendEncrypted](messages_sendEncrypted.md)(\['peer' => [InputEncryptedChat](../types/InputEncryptedChat.md), 'random_id' => [long](../types/long.md), 'data' => [bytes](../types/bytes.md), \]) == [$messages\_SentEncryptedMessage](../types/messages_SentEncryptedMessage.md)<a name="messages_sendEncrypted"></a>
|
||||
$MadelineProto->[messages->sendEncrypted](messages_sendEncrypted.md)(\['peer' => [InputEncryptedChat](../types/InputEncryptedChat.md), 'data' => [bytes](../types/bytes.md), \]) == [$messages\_SentEncryptedMessage](../types/messages_SentEncryptedMessage.md)<a name="messages_sendEncrypted"></a>
|
||||
|
||||
$MadelineProto->[messages->sendEncryptedFile](messages_sendEncryptedFile.md)(\['peer' => [InputEncryptedChat](../types/InputEncryptedChat.md), 'random_id' => [long](../types/long.md), 'data' => [bytes](../types/bytes.md), 'file' => [InputEncryptedFile](../types/InputEncryptedFile.md), \]) == [$messages\_SentEncryptedMessage](../types/messages_SentEncryptedMessage.md)<a name="messages_sendEncryptedFile"></a>
|
||||
$MadelineProto->[messages->sendEncryptedFile](messages_sendEncryptedFile.md)(\['peer' => [InputEncryptedChat](../types/InputEncryptedChat.md), 'data' => [bytes](../types/bytes.md), 'file' => [InputEncryptedFile](../types/InputEncryptedFile.md), \]) == [$messages\_SentEncryptedMessage](../types/messages_SentEncryptedMessage.md)<a name="messages_sendEncryptedFile"></a>
|
||||
|
||||
$MadelineProto->[messages->sendEncryptedService](messages_sendEncryptedService.md)(\['peer' => [InputEncryptedChat](../types/InputEncryptedChat.md), 'random_id' => [long](../types/long.md), 'data' => [bytes](../types/bytes.md), \]) == [$messages\_SentEncryptedMessage](../types/messages_SentEncryptedMessage.md)<a name="messages_sendEncryptedService"></a>
|
||||
$MadelineProto->[messages->sendEncryptedService](messages_sendEncryptedService.md)(\['peer' => [InputEncryptedChat](../types/InputEncryptedChat.md), 'data' => [bytes](../types/bytes.md), \]) == [$messages\_SentEncryptedMessage](../types/messages_SentEncryptedMessage.md)<a name="messages_sendEncryptedService"></a>
|
||||
|
||||
$MadelineProto->[messages->sendInlineBotResult](messages_sendInlineBotResult.md)(\['silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'clear_draft' => [Bool](../types/Bool.md), 'peer' => [InputPeer](../types/InputPeer.md), 'reply_to_msg_id' => [int](../types/int.md), 'random_id' => [long](../types/long.md), 'query_id' => [long](../types/long.md), 'id' => [string](../types/string.md), \]) == [$Updates](../types/Updates.md)<a name="messages_sendInlineBotResult"></a>
|
||||
$MadelineProto->[messages->sendInlineBotResult](messages_sendInlineBotResult.md)(\['silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'clear_draft' => [Bool](../types/Bool.md), 'peer' => [InputPeer](../types/InputPeer.md), 'reply_to_msg_id' => [int](../types/int.md), 'query_id' => [long](../types/long.md), 'id' => [string](../types/string.md), \]) == [$Updates](../types/Updates.md)<a name="messages_sendInlineBotResult"></a>
|
||||
|
||||
$MadelineProto->[messages->sendMedia](messages_sendMedia.md)(\['silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'clear_draft' => [Bool](../types/Bool.md), 'peer' => [InputPeer](../types/InputPeer.md), 'reply_to_msg_id' => [int](../types/int.md), 'media' => [InputMedia](../types/InputMedia.md), 'random_id' => [long](../types/long.md), 'reply_markup' => [ReplyMarkup](../types/ReplyMarkup.md), \]) == [$Updates](../types/Updates.md)<a name="messages_sendMedia"></a>
|
||||
$MadelineProto->[messages->sendMedia](messages_sendMedia.md)(\['silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'clear_draft' => [Bool](../types/Bool.md), 'peer' => [InputPeer](../types/InputPeer.md), 'reply_to_msg_id' => [int](../types/int.md), 'media' => [InputMedia](../types/InputMedia.md), 'reply_markup' => [ReplyMarkup](../types/ReplyMarkup.md), \]) == [$Updates](../types/Updates.md)<a name="messages_sendMedia"></a>
|
||||
|
||||
$MadelineProto->[messages->sendMessage](messages_sendMessage.md)(\['no_webpage' => [Bool](../types/Bool.md), 'silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'clear_draft' => [Bool](../types/Bool.md), 'peer' => [InputPeer](../types/InputPeer.md), 'reply_to_msg_id' => [int](../types/int.md), 'message' => [string](../types/string.md), 'random_id' => [long](../types/long.md), 'reply_markup' => [ReplyMarkup](../types/ReplyMarkup.md), 'entities' => \[[MessageEntity](../types/MessageEntity.md)\], \]) == [$Updates](../types/Updates.md)<a name="messages_sendMessage"></a>
|
||||
$MadelineProto->[messages->sendMessage](messages_sendMessage.md)(\['no_webpage' => [Bool](../types/Bool.md), 'silent' => [Bool](../types/Bool.md), 'background' => [Bool](../types/Bool.md), 'clear_draft' => [Bool](../types/Bool.md), 'peer' => [InputPeer](../types/InputPeer.md), 'reply_to_msg_id' => [int](../types/int.md), 'message' => [string](../types/string.md), 'reply_markup' => [ReplyMarkup](../types/ReplyMarkup.md), 'entities' => \[[MessageEntity](../types/MessageEntity.md)\], \]) == [$Updates](../types/Updates.md)<a name="messages_sendMessage"></a>
|
||||
|
||||
$MadelineProto->[messages->setBotCallbackAnswer](messages_setBotCallbackAnswer.md)(\['alert' => [Bool](../types/Bool.md), 'query_id' => [long](../types/long.md), 'message' => [string](../types/string.md), 'url' => [string](../types/string.md), \]) == [$Bool](../types/Bool.md)<a name="messages_setBotCallbackAnswer"></a>
|
||||
|
||||
@ -358,7 +358,7 @@ $MadelineProto->[messages->setInlineGameScore](messages_setInlineGameScore.md)(\
|
||||
|
||||
$MadelineProto->[messages->setTyping](messages_setTyping.md)(\['peer' => [InputPeer](../types/InputPeer.md), 'action' => [SendMessageAction](../types/SendMessageAction.md), \]) == [$Bool](../types/Bool.md)<a name="messages_setTyping"></a>
|
||||
|
||||
$MadelineProto->[messages->startBot](messages_startBot.md)(\['bot' => [InputUser](../types/InputUser.md), 'peer' => [InputPeer](../types/InputPeer.md), 'random_id' => [long](../types/long.md), 'start_param' => [string](../types/string.md), \]) == [$Updates](../types/Updates.md)<a name="messages_startBot"></a>
|
||||
$MadelineProto->[messages->startBot](messages_startBot.md)(\['bot' => [InputUser](../types/InputUser.md), 'peer' => [InputPeer](../types/InputPeer.md), 'start_param' => [string](../types/string.md), \]) == [$Updates](../types/Updates.md)<a name="messages_startBot"></a>
|
||||
|
||||
$MadelineProto->[messages->toggleChatAdmins](messages_toggleChatAdmins.md)(\['chat_id' => [int](../types/int.md), 'enabled' => [Bool](../types/Bool.md), \]) == [$Updates](../types/Updates.md)<a name="messages_toggleChatAdmins"></a>
|
||||
|
||||
|
@ -12,7 +12,6 @@ description: messages_forwardMessage parameters, return type and example
|
||||
|----------|:-------------:|---------:|
|
||||
|peer|[InputPeer](../types/InputPeer.md) | Required|
|
||||
|id|[int](../types/int.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|
||||
|
||||
### Return type: [Updates](../types/Updates.md)
|
||||
@ -35,5 +34,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$Updates = $MadelineProto->messages->forwardMessage(['peer' => InputPeer, 'id' => int, 'random_id' => long, ]);
|
||||
$Updates = $MadelineProto->messages->forwardMessage(['peer' => InputPeer, 'id' => int, ]);
|
||||
```
|
@ -15,7 +15,6 @@ description: messages_forwardMessages parameters, return type and example
|
||||
|with\_my\_score|[Bool](../types/Bool.md) | Optional|
|
||||
|from\_peer|[InputPeer](../types/InputPeer.md) | Required|
|
||||
|id|Array of [int](../types/int.md) | Required|
|
||||
|random\_id|Array of [long](../types/long.md) | Required|
|
||||
|to\_peer|[InputPeer](../types/InputPeer.md) | Required|
|
||||
|
||||
|
||||
@ -39,5 +38,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$Updates = $MadelineProto->messages->forwardMessages(['silent' => Bool, 'background' => Bool, 'with_my_score' => Bool, 'from_peer' => InputPeer, 'id' => [int], 'random_id' => [long], 'to_peer' => InputPeer, ]);
|
||||
$Updates = $MadelineProto->messages->forwardMessages(['silent' => Bool, 'background' => Bool, 'with_my_score' => Bool, 'from_peer' => InputPeer, 'id' => [int], 'to_peer' => InputPeer, ]);
|
||||
```
|
@ -11,7 +11,6 @@ description: messages_requestEncryption parameters, return type and example
|
||||
| Name | Type | Required |
|
||||
|----------|:-------------:|---------:|
|
||||
|user\_id|[InputUser](../types/InputUser.md) | Required|
|
||||
|random\_id|[int](../types/int.md) | Required|
|
||||
|g\_a|[bytes](../types/bytes.md) | Required|
|
||||
|
||||
|
||||
@ -35,5 +34,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$EncryptedChat = $MadelineProto->messages->requestEncryption(['user_id' => InputUser, 'random_id' => int, 'g_a' => bytes, ]);
|
||||
$EncryptedChat = $MadelineProto->messages->requestEncryption(['user_id' => InputUser, 'g_a' => bytes, ]);
|
||||
```
|
@ -11,7 +11,6 @@ description: messages_sendEncrypted parameters, return type and example
|
||||
| Name | Type | Required |
|
||||
|----------|:-------------:|---------:|
|
||||
|peer|[InputEncryptedChat](../types/InputEncryptedChat.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|data|[bytes](../types/bytes.md) | Required|
|
||||
|
||||
|
||||
@ -35,5 +34,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$messages_SentEncryptedMessage = $MadelineProto->messages->sendEncrypted(['peer' => InputEncryptedChat, 'random_id' => long, 'data' => bytes, ]);
|
||||
$messages_SentEncryptedMessage = $MadelineProto->messages->sendEncrypted(['peer' => InputEncryptedChat, 'data' => bytes, ]);
|
||||
```
|
@ -11,7 +11,6 @@ description: messages_sendEncryptedFile parameters, return type and example
|
||||
| Name | Type | Required |
|
||||
|----------|:-------------:|---------:|
|
||||
|peer|[InputEncryptedChat](../types/InputEncryptedChat.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|data|[bytes](../types/bytes.md) | Required|
|
||||
|file|[InputEncryptedFile](../types/InputEncryptedFile.md) | Required|
|
||||
|
||||
@ -36,5 +35,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$messages_SentEncryptedMessage = $MadelineProto->messages->sendEncryptedFile(['peer' => InputEncryptedChat, 'random_id' => long, 'data' => bytes, 'file' => InputEncryptedFile, ]);
|
||||
$messages_SentEncryptedMessage = $MadelineProto->messages->sendEncryptedFile(['peer' => InputEncryptedChat, 'data' => bytes, 'file' => InputEncryptedFile, ]);
|
||||
```
|
@ -11,7 +11,6 @@ description: messages_sendEncryptedService parameters, return type and example
|
||||
| Name | Type | Required |
|
||||
|----------|:-------------:|---------:|
|
||||
|peer|[InputEncryptedChat](../types/InputEncryptedChat.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|data|[bytes](../types/bytes.md) | Required|
|
||||
|
||||
|
||||
@ -35,5 +34,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$messages_SentEncryptedMessage = $MadelineProto->messages->sendEncryptedService(['peer' => InputEncryptedChat, 'random_id' => long, 'data' => bytes, ]);
|
||||
$messages_SentEncryptedMessage = $MadelineProto->messages->sendEncryptedService(['peer' => InputEncryptedChat, 'data' => bytes, ]);
|
||||
```
|
@ -15,7 +15,6 @@ description: messages_sendInlineBotResult parameters, return type and example
|
||||
|clear\_draft|[Bool](../types/Bool.md) | Optional|
|
||||
|peer|[InputPeer](../types/InputPeer.md) | Required|
|
||||
|reply\_to\_msg\_id|[int](../types/int.md) | Optional|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|query\_id|[long](../types/long.md) | Required|
|
||||
|id|[string](../types/string.md) | Required|
|
||||
|
||||
@ -40,5 +39,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$Updates = $MadelineProto->messages->sendInlineBotResult(['silent' => Bool, 'background' => Bool, 'clear_draft' => Bool, 'peer' => InputPeer, 'reply_to_msg_id' => int, 'random_id' => long, 'query_id' => long, 'id' => string, ]);
|
||||
$Updates = $MadelineProto->messages->sendInlineBotResult(['silent' => Bool, 'background' => Bool, 'clear_draft' => Bool, 'peer' => InputPeer, 'reply_to_msg_id' => int, 'query_id' => long, 'id' => string, ]);
|
||||
```
|
@ -16,7 +16,6 @@ description: messages_sendMedia parameters, return type and example
|
||||
|peer|[InputPeer](../types/InputPeer.md) | Required|
|
||||
|reply\_to\_msg\_id|[int](../types/int.md) | Optional|
|
||||
|media|[InputMedia](../types/InputMedia.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|reply\_markup|[ReplyMarkup](../types/ReplyMarkup.md) | Optional|
|
||||
|
||||
|
||||
@ -40,5 +39,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$Updates = $MadelineProto->messages->sendMedia(['silent' => Bool, 'background' => Bool, 'clear_draft' => Bool, 'peer' => InputPeer, 'reply_to_msg_id' => int, 'media' => InputMedia, 'random_id' => long, 'reply_markup' => ReplyMarkup, ]);
|
||||
$Updates = $MadelineProto->messages->sendMedia(['silent' => Bool, 'background' => Bool, 'clear_draft' => Bool, 'peer' => InputPeer, 'reply_to_msg_id' => int, 'media' => InputMedia, 'reply_markup' => ReplyMarkup, ]);
|
||||
```
|
@ -17,7 +17,6 @@ description: messages_sendMessage parameters, return type and example
|
||||
|peer|[InputPeer](../types/InputPeer.md) | Required|
|
||||
|reply\_to\_msg\_id|[int](../types/int.md) | Optional|
|
||||
|message|[string](../types/string.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|reply\_markup|[ReplyMarkup](../types/ReplyMarkup.md) | Optional|
|
||||
|entities|Array of [MessageEntity](../types/MessageEntity.md) | Optional|
|
||||
|
||||
@ -42,5 +41,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$Updates = $MadelineProto->messages->sendMessage(['no_webpage' => Bool, 'silent' => Bool, 'background' => Bool, 'clear_draft' => Bool, 'peer' => InputPeer, 'reply_to_msg_id' => int, 'message' => string, 'random_id' => long, 'reply_markup' => ReplyMarkup, 'entities' => [MessageEntity], ]);
|
||||
$Updates = $MadelineProto->messages->sendMessage(['no_webpage' => Bool, 'silent' => Bool, 'background' => Bool, 'clear_draft' => Bool, 'peer' => InputPeer, 'reply_to_msg_id' => int, 'message' => string, 'reply_markup' => ReplyMarkup, 'entities' => [MessageEntity], ]);
|
||||
```
|
@ -12,7 +12,6 @@ description: messages_startBot parameters, return type and example
|
||||
|----------|:-------------:|---------:|
|
||||
|bot|[InputUser](../types/InputUser.md) | Required|
|
||||
|peer|[InputPeer](../types/InputPeer.md) | Required|
|
||||
|random\_id|[long](../types/long.md) | Required|
|
||||
|start\_param|[string](../types/string.md) | Required|
|
||||
|
||||
|
||||
@ -36,5 +35,5 @@ if (isset($number)) {
|
||||
$MadelineProto->complete_phone_login($code);
|
||||
}
|
||||
|
||||
$Updates = $MadelineProto->messages->startBot(['bot' => InputUser, 'peer' => InputPeer, 'random_id' => long, 'start_param' => string, ]);
|
||||
$Updates = $MadelineProto->messages->startBot(['bot' => InputUser, 'peer' => InputPeer, 'start_param' => string, ]);
|
||||
```
|
@ -204,7 +204,7 @@ $sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message'
|
||||
var_dump($sentMessage);
|
||||
```
|
||||
|
||||
The API class also provides some wrapper methods for logging in as a bot or as a normal user:
|
||||
The API class also provides some wrapper methods for logging in as a bot or as a normal user, and for getting inputPeer constructors to use in sendMessage and other methods:
|
||||
|
||||
```
|
||||
$sentCode = $MadelineProto->phone_login($number); // Send code
|
||||
@ -217,6 +217,19 @@ for ($x = 0; $x < $sentCode['type']['length']; $x++) {
|
||||
$authorization = $MadelineProto->complete_phone_login($code); // Complete authorization
|
||||
var_dump($authorization);
|
||||
|
||||
var_dump($MadelineProto->API->resolve_username('@Palmas2012')); // Always use this method to resolve usernames, but you won't need to call this to get info about peers, as get_peer and get_input_peer will call it for you if needed
|
||||
|
||||
$mention = $MadelineProto->API->get_peer('@veetaw'); // Returns an object of type User or Chat
|
||||
$mention = $MadelineProto->API->constructor2inputpeer($mention); // Converts an object of type User or Chat to an object of type inputPeer
|
||||
|
||||
$message = "I've installed MadelineProto!";
|
||||
foreach (['@pwrtelegramgroup', '@pwrtelegramgroupita'] as $peer) {
|
||||
$peer = $MadelineProto->API->get_input_peer($peer);
|
||||
$sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message' => $message, 'entities' => [['_' => 'inputMessageEntityMentionName', 'offset' => 0, 'length' => strlen($message), 'user_id' => $mention]]]);
|
||||
var_dump($sentMessage);
|
||||
}
|
||||
|
||||
// The above works with bots too
|
||||
$authorization = $MadelineProto->bot_login($token); // Note that every time you login as a bot or as a user MadelineProto will logout first, so now MadelineProto is logged in as the bot with token $token, not as the user with number $number
|
||||
var_dump($authorization);
|
||||
```
|
||||
|
@ -18,15 +18,90 @@ namespace danog\MadelineProto\MTProtoTools;
|
||||
trait PeerHandler
|
||||
{
|
||||
public $chats = [];
|
||||
public $users = [];
|
||||
|
||||
public function add_users($users)
|
||||
{
|
||||
var_dump($users);
|
||||
foreach ($users as $key => $user) {
|
||||
switch ($user['_']) {
|
||||
case 'user':
|
||||
$this->chats[$user['id']] = $user;
|
||||
case 'userEmpty':
|
||||
break;
|
||||
default:
|
||||
throw new \danog\MadelineProto\Exception('Invalid user provided at key '.$key.': '.var_export($user, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function add_chats($chats)
|
||||
{
|
||||
var_dump($chats);
|
||||
foreach ($chats as $key => $chat) {
|
||||
switch ($chat['_']) {
|
||||
case 'chat':
|
||||
case 'chatEmpty':
|
||||
$this->chats[-$chat['id']] = $chat;
|
||||
case 'chatForbidden':
|
||||
case 'channelEmpty':
|
||||
break;
|
||||
case 'channel':
|
||||
$this->chats[(int)('-100'.$chat['id'])] = $chat;
|
||||
break;
|
||||
default:
|
||||
throw new \danog\MadelineProto\Exception('Invalid chat provided at key '.$key.': '.var_export($chat, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function get_peer($id, $recursive = true) {
|
||||
if (is_numeric($id)) {
|
||||
if (isset($this->chats[$id])) {
|
||||
return $this->chats[$id];
|
||||
}
|
||||
// if ($recursive) {
|
||||
// }
|
||||
throw new \danog\MadelineProto\Exception("Couldn't find peer by provided chat id ".$id);
|
||||
}
|
||||
$id = str_replace('@', '', $id);
|
||||
foreach ($this->chats as $chat) {
|
||||
if (isset($chat['username']) && $chat['username'] == $id) {
|
||||
return $chat;
|
||||
}
|
||||
}
|
||||
if ($recursive) {
|
||||
$this->resolve_username($id);
|
||||
return $this->get_peer($id, false);
|
||||
}
|
||||
throw new \danog\MadelineProto\Exception("Couldn't find peer by provided username ".$id);
|
||||
}
|
||||
|
||||
public function get_input_peer($id) {
|
||||
return $this->constructor2inputpeer($this->get_peer($id));
|
||||
}
|
||||
|
||||
public function constructor2inputpeer($peer) {
|
||||
switch ($peer['_']) {
|
||||
case 'user':
|
||||
return $peer['self'] ? ['_' => 'inputPeerSelf'] : ['_' => 'inputPeerUser', 'user_id' => $peer['id'], 'access_hash' => $peer['access_hash']];
|
||||
case 'chat':
|
||||
case 'chatEmpty':
|
||||
return ['_' => 'inputPeerChat', 'chat_id' => $peer['id']];
|
||||
case 'channel':
|
||||
return ['_' => 'inputPeerChannel', 'channel_id' => $peer['id'], 'access_hash' => $peer['access_hash']];
|
||||
default:
|
||||
throw new \danog\MadelineProto\Exception('Invalid constructor given');
|
||||
}
|
||||
}
|
||||
|
||||
public function resolve_username($username) {
|
||||
$res = $this->method_call('contacts.resolveUsername', ['username' => str_replace('@', '', $username)]);
|
||||
if ($res['_'] == 'contacts.resolvedPeer') {
|
||||
$this->add_users($res['users']);
|
||||
$this->add_chats($res['chats']);
|
||||
return $res;
|
||||
}
|
||||
throw new \danog\MadelineProto\Exception('resolve_username returned an unexpected constructor: '.var_export($username, true));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -207,6 +207,23 @@ class TL extends \danog\MadelineProto\Tools
|
||||
//\danog\MadelineProto\Logger::log('Skipping '.$current_argument['name'].' of type '.$current_argument['type'].'/'.$current_argument['subtype']);
|
||||
continue;
|
||||
}
|
||||
if ($current_argument['name'] == 'random_id') {
|
||||
switch ($current_argument['type']) {
|
||||
case 'long':
|
||||
$serialized .= \phpseclib\Crypt\Random::string(8);
|
||||
continue 2;
|
||||
case 'long':
|
||||
$serialized .= \phpseclib\Crypt\Random::string(4);
|
||||
continue 2;
|
||||
case 'Vector t':
|
||||
if ($method == 'messages.forwardMessages') {
|
||||
$serialized .= \danog\PHP\Struct::pack('<i', $this->constructors->find_by_predicate('vector')['id']);
|
||||
$serialized .= \danog\PHP\Struct::pack('<i', count($arguments['id']));
|
||||
$serialized .= \phpseclib\Crypt\Random::string(8*count($arguments['id']));
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
throw new Exception('Missing required parameter ('.$current_argument['name'].')');
|
||||
}
|
||||
//\danog\MadelineProto\Logger::log('Serializing '.$current_argument['name'].' of type '.$current_argument['type'].'/'.$current_argument['subtype']);
|
||||
|
27
testing.php
27
testing.php
@ -38,16 +38,18 @@ if (file_exists('number.php') && !file_exists('session.madeline')) {
|
||||
echo 'Deserializing MadelineProto from session.madeline...'.PHP_EOL;
|
||||
$MadelineProto = unserialize(file_get_contents('session.madeline'));
|
||||
|
||||
$message = (getenv('TRAVIS_COMMIT') == '') ? 'https://storage.pwrtelegram.xyz/pwrtelegrambot/document/file_6570.mp4' : ('Travis ci tests in progress: commit '.getenv('TRAVIS_COMMIT').', job '.getenv('TRAVIS_JOB_NUMBER').', PHP version: '.getenv('TRAVIS_PHP_VERSION'));
|
||||
$peers = [];
|
||||
foreach (['pwrtelegramgroup', 'pwrtelegramgroupita'] as $user) {
|
||||
$username = $MadelineProto->contacts->resolveUsername(['username' => $user]);
|
||||
var_dump($username);
|
||||
$peers[$user] = ['_' => 'inputPeerChannel', 'channel_id' => $username['peer']['channel_id'], 'access_hash' => $username['chats'][0]['access_hash']];
|
||||
}
|
||||
$message = (getenv('TRAVIS_COMMIT') == '') ? 'Message entities can be sent too (yay)' : ('Travis ci tests in progress: commit '.getenv('TRAVIS_COMMIT').', job '.getenv('TRAVIS_JOB_NUMBER').', PHP version: '.getenv('TRAVIS_PHP_VERSION'));
|
||||
|
||||
foreach ($peers as $peer) {
|
||||
$sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message' => $message, 'random_id' => \danog\PHP\Struct::unpack('<q', \phpseclib\Crypt\Random::string(8))[0]]);
|
||||
$flutter = 'https://storage.pwrtelegram.xyz/pwrtelegrambot/document/file_6570.mp4';
|
||||
|
||||
var_dump($MadelineProto->API->resolve_username('@Palmas2012')); // Always use this method to resolve usernames, but you won't need to call this to get info about peers, as get_peer and get_input_peer will call it for you if needed
|
||||
|
||||
$mention = $MadelineProto->API->get_peer('@veetaw'); // Returns an object of type User or Chat
|
||||
$mention = $MadelineProto->API->constructor2inputpeer($mention); // Converts an object of type User or Chat to an object of type inputPeer
|
||||
|
||||
foreach (['@pwrtelegramgroup', '@pwrtelegramgroupita'] as $peer) {
|
||||
$peer = $MadelineProto->API->get_input_peer($peer); // Returns directly an inputPeer object, basically does the same thing I've done manually above
|
||||
$sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message' => $message.' & pony', 'entities' => [['_' => 'messageEntityUrl', 'offset' => strlen($message)+1, 'length' => 6, 'url' => $flutter], ['_' => 'inputMessageEntityMentionName', 'offset' => 0, 'length' => strlen($message), 'user_id' => $mention]]]);
|
||||
var_dump($sentMessage);
|
||||
}
|
||||
|
||||
@ -58,9 +60,8 @@ if (file_exists('token.php')) {
|
||||
$authorization = $MadelineProto->bot_login($token);
|
||||
var_dump($authorization);
|
||||
}
|
||||
/*
|
||||
foreach ($peers as $peer) {
|
||||
$sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message' => $message, 'random_id' => \danog\PHP\Struct::unpack('<q', \phpseclib\Crypt\Random::string(8))[0]]);
|
||||
foreach (['@pwrtelegramgroup', '@pwrtelegramgroupita'] as $peer) {
|
||||
$peer = $MadelineProto->API->get_input_peer($peer);
|
||||
$sentMessage = $MadelineProto->messages->sendMessage(['peer' => $peer, 'message' => $message.' & pony', 'entities' => [['_' => 'messageEntityUrl', 'offset' => strlen($message)+1, 'length' => 6, 'url' => $flutter], ['_' => 'inputMessageEntityMentionName', 'offset' => 0, 'length' => strlen($message), 'user_id' => $mention]]]);
|
||||
var_dump($sentMessage);
|
||||
}
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user