Asyncify (3rd pass)

This commit is contained in:
Daniil Gentili 2019-05-11 17:16:13 +02:00
parent cacc792619
commit d17daf902a
7 changed files with 70 additions and 70 deletions

View File

@ -241,14 +241,14 @@ trait Files
case 'updateNewChannelMessage': case 'updateNewChannelMessage':
$message_media = $message_media['message']; $message_media = $message_media['message'];
case 'message': case 'message':
return $this->get_download_info($message_media['media']); return yield $this->get_download_info_async($message_media['media']);
case 'updateNewEncryptedMessage': case 'updateNewEncryptedMessage':
$message_media = $message_media['message']; $message_media = $message_media['message'];
// Secret media // Secret media
case 'encryptedMessage': case 'encryptedMessage':
if ($message_media['decrypted_message']['media']['_'] === 'decryptedMessageMediaExternalDocument') { if ($message_media['decrypted_message']['media']['_'] === 'decryptedMessageMediaExternalDocument') {
return $this->get_download_info($message_media['decrypted_message']['media']); return yield $this->get_download_info_async($message_media['decrypted_message']['media']);
} }
$res['InputFileLocation'] = ['_' => 'inputEncryptedFileLocation', 'id' => $message_media['file']['id'], 'access_hash' => $message_media['file']['access_hash'], 'dc_id' => $message_media['file']['dc_id']]; $res['InputFileLocation'] = ['_' => 'inputEncryptedFileLocation', 'id' => $message_media['file']['id'], 'access_hash' => $message_media['file']['access_hash'], 'dc_id' => $message_media['file']['dc_id']];
$res['size'] = $message_media['decrypted_message']['media']['size']; $res['size'] = $message_media['decrypted_message']['media']['size'];
@ -304,7 +304,7 @@ trait Files
case 'wallPaper': case 'wallPaper':
$photo = end($message_media['sizes']); $photo = end($message_media['sizes']);
return array_merge($res, $this->get_download_info($photo)); return array_merge($res, yield $this->get_download_info_async($photo));
// Photos // Photos
case 'photo': case 'photo':
case 'messageMediaPhoto': case 'messageMediaPhoto':
@ -316,11 +316,11 @@ trait Files
$photo = end($message_media['photo']['sizes']); $photo = end($message_media['photo']['sizes']);
} }
return array_merge($res, $this->get_download_info($photo)); return array_merge($res, yield $this->get_download_info_async($photo));
case 'userProfilePhoto': case 'userProfilePhoto':
case 'chatPhoto': case 'chatPhoto':
return array_merge($res, $this->get_download_info($message_media['photo_big'])); return array_merge($res, yield $this->get_download_info_async($message_media['photo_big']));
case 'photoCachedSize': case 'photoCachedSize':
$res['size'] = strlen($message_media['bytes']); $res['size'] = strlen($message_media['bytes']);
@ -331,12 +331,12 @@ trait Files
$res['mime'] = $this->get_mime_from_buffer($res['data']); $res['mime'] = $this->get_mime_from_buffer($res['data']);
$res['ext'] = $this->get_extension_from_mime($res['mime']); $res['ext'] = $this->get_extension_from_mime($res['mime']);
} else { } else {
$res = array_merge($res, $this->get_download_info($message_media['location'])); $res = array_merge($res, yield $this->get_download_info_async($message_media['location']));
} }
return $res; return $res;
case 'photoSize': case 'photoSize':
$res = $this->get_download_info($message_media['location']); $res = yield $this->get_download_info_async($message_media['location']);
if (isset($message_media['size'])) { if (isset($message_media['size'])) {
$res['size'] = $message_media['size']; $res['size'] = $message_media['size'];
} }
@ -399,16 +399,16 @@ trait Files
} }
} }
public function download_to_dir($message_media, $dir, $cb = null) public function download_to_dir_async($message_media, $dir, $cb = null)
{ {
if (is_object($dir) && class_implements($dir)['danog\MadelineProto\FileCallbackInterface']) { if (is_object($dir) && class_implements($dir)['danog\MadelineProto\FileCallbackInterface']) {
$cb = $dir; $cb = $dir;
$dir = $dir->getFile(); $dir = $dir->getFile();
} }
$message_media = $this->get_download_info($message_media); $message_media = yield $this->get_download_info_async($message_media);
return $this->download_to_file($message_media, $dir.'/'.$message_media['name'].$message_media['ext'], $cb); return yield $this->download_to_file_async($message_media, $dir.'/'.$message_media['name'].$message_media['ext'], $cb);
} }
public function download_to_file_async($message_media, $file, $cb = null) public function download_to_file_async($message_media, $file, $cb = null)
@ -422,7 +422,7 @@ trait Files
touch($file); touch($file);
} }
$file = realpath($file); $file = realpath($file);
$message_media = $this->get_download_info($message_media); $message_media = yield $this->get_download_info_async($message_media);
$stream = fopen($file, 'r+b'); $stream = fopen($file, 'r+b');
$size = fstat($stream)['size']; $size = fstat($stream)['size'];
$this->logger->logger('Waiting for lock of file to download...'); $this->logger->logger('Waiting for lock of file to download...');
@ -452,7 +452,7 @@ trait Files
}; };
} }
$message_media = $this->get_download_info($message_media); $message_media = yield $this->get_download_info_async($message_media);
try { try {
if (stream_get_meta_data($stream)['seekable']) { if (stream_get_meta_data($stream)['seekable']) {

View File

@ -141,7 +141,7 @@ trait PeerHandler
{ {
Loop::defer(function () use ($id, $full_fetch, $send) { Loop::defer(function () use ($id, $full_fetch, $send) {
try { try {
$this->get_pwr_chat($id, $full_fetch, $send); yield $this->get_pwr_chat_async($id, $full_fetch, $send);
} catch (\danog\MadelineProto\Exception $e) { } catch (\danog\MadelineProto\Exception $e) {
$this->logger->logger("While caching: ".$e->getMessage(), \danog\MadelineProto\Logger::WARNING); $this->logger->logger("While caching: ".$e->getMessage(), \danog\MadelineProto\Logger::WARNING);
} catch (\danog\MadelineProto\RPCErrorException $e) { } catch (\danog\MadelineProto\RPCErrorException $e) {
@ -168,12 +168,12 @@ trait PeerHandler
} }
} }
public function entities_peer_isset($entities) public function entities_peer_isset_async($entities)
{ {
try { try {
foreach ($entities as $entity) { foreach ($entities as $entity) {
if ($entity['_'] === 'messageEntityMentionName' || $entity['_'] === 'inputMessageEntityMentionName') { if ($entity['_'] === 'messageEntityMentionName' || $entity['_'] === 'inputMessageEntityMentionName') {
if (!$this->peer_isset($entity['user_id'])) { if (!yield $this->peer_isset_async($entity['user_id'])) {
return false; return false;
} }
} }
@ -185,13 +185,13 @@ trait PeerHandler
return true; return true;
} }
public function fwd_peer_isset($fwd) public function fwd_peer_isset_async($fwd)
{ {
try { try {
if (isset($fwd['user_id']) && !$this->peer_isset($fwd['user_id'])) { if (isset($fwd['user_id']) && !yield $this->peer_isset_async($fwd['user_id'])) {
return false; return false;
} }
if (isset($fwd['channel_id']) && !$this->peer_isset($this->to_supergroup($fwd['channel_id']))) { if (isset($fwd['channel_id']) && !yield $this->peer_isset_async($this->to_supergroup($fwd['channel_id']))) {
return false; return false;
} }
} catch (\danog\MadelineProto\Exception $e) { } catch (\danog\MadelineProto\Exception $e) {
@ -600,15 +600,15 @@ trait PeerHandler
if (isset($res['participants']) && $fullfetch) { if (isset($res['participants']) && $fullfetch) {
foreach ($res['participants'] as $key => $participant) { foreach ($res['participants'] as $key => $participant) {
$newres = []; $newres = [];
$newres['user'] = $this->get_pwr_chat($participant['user_id'], false, true); $newres['user'] = yield $this->get_pwr_chat_async($participant['user_id'], false, true);
if (isset($participant['inviter_id'])) { if (isset($participant['inviter_id'])) {
$newres['inviter'] = $this->get_pwr_chat($participant['inviter_id'], false, true); $newres['inviter'] = yield $this->get_pwr_chat_async($participant['inviter_id'], false, true);
} }
if (isset($participant['promoted_by'])) { if (isset($participant['promoted_by'])) {
$newres['promoted_by'] = $this->get_pwr_chat($participant['promoted_by'], false, true); $newres['promoted_by'] = yield $this->get_pwr_chat_async($participant['promoted_by'], false, true);
} }
if (isset($participant['kicked_by'])) { if (isset($participant['kicked_by'])) {
$newres['kicked_by'] = $this->get_pwr_chat($participant['kicked_by'], false, true); $newres['kicked_by'] = yield $this->get_pwr_chat_async($participant['kicked_by'], false, true);
} }
if (isset($participant['date'])) { if (isset($participant['date'])) {
$newres['date'] = $participant['date']; $newres['date'] = $participant['date'];
@ -651,7 +651,7 @@ trait PeerHandler
$filters = ['channelParticipantsSearch', 'channelParticipantsKicked', 'channelParticipantsBanned']; $filters = ['channelParticipantsSearch', 'channelParticipantsKicked', 'channelParticipantsBanned'];
foreach ($filters as $filter) { foreach ($filters as $filter) {
$this->recurse_alphabet_search_participants($full['InputChannel'], $filter, $q, $total_count, $res); yield $this->recurse_alphabet_search_participants_async($full['InputChannel'], $filter, $q, $total_count, $res);
} }
$this->logger->logger('Fetched '.count($res['participants'])." out of $total_count"); $this->logger->logger('Fetched '.count($res['participants'])." out of $total_count");
$res['participants'] = array_values($res['participants']); $res['participants'] = array_values($res['participants']);
@ -673,7 +673,7 @@ trait PeerHandler
} }
for ($x = 'a'; $x !== 'aa' && $total_count > count($res['participants']); $x++) { for ($x = 'a'; $x !== 'aa' && $total_count > count($res['participants']); $x++) {
$this->recurse_alphabet_search_participants($channel, $filter, $q.$x, $total_count, $res); yield $this->recurse_alphabet_search_participants_async($channel, $filter, $q.$x, $total_count, $res);
} }
} }
@ -710,15 +710,15 @@ trait PeerHandler
foreach ($gres['participants'] as $participant) { foreach ($gres['participants'] as $participant) {
$newres = []; $newres = [];
$newres['user'] = $this->get_pwr_chat($participant['user_id'], false, true); $newres['user'] = yield $this->get_pwr_chat_async($participant['user_id'], false, true);
if (isset($participant['inviter_id'])) { if (isset($participant['inviter_id'])) {
$newres['inviter'] = $this->get_pwr_chat($participant['inviter_id'], false, true); $newres['inviter'] = yield $this->get_pwr_chat_async($participant['inviter_id'], false, true);
} }
if (isset($participant['kicked_by'])) { if (isset($participant['kicked_by'])) {
$newres['kicked_by'] = $this->get_pwr_chat($participant['kicked_by'], false, true); $newres['kicked_by'] = yield $this->get_pwr_chat_async($participant['kicked_by'], false, true);
} }
if (isset($participant['promoted_by'])) { if (isset($participant['promoted_by'])) {
$newres['promoted_by'] = $this->get_pwr_chat($participant['promoted_by'], false, true); $newres['promoted_by'] = yield $this->get_pwr_chat_async($participant['promoted_by'], false, true);
} }
if (isset($participant['date'])) { if (isset($participant['date'])) {
$newres['date'] = $participant['date']; $newres['date'] = $participant['date'];

View File

@ -568,7 +568,7 @@ trait ResponseHandler
}); });
} }
public function handle_pending_updates() public function handle_pending_updates_async()
{ {
if ($this->postpone_updates) { if ($this->postpone_updates) {
return false; return false;
@ -579,7 +579,7 @@ trait ResponseHandler
if (isset($this->pending_updates[$key])) { if (isset($this->pending_updates[$key])) {
$updates = $this->pending_updates[$key]; $updates = $this->pending_updates[$key];
unset($this->pending_updates[$key]); unset($this->pending_updates[$key]);
$this->handle_updates($updates); yield $this->handle_updates_async($updates);
} }
} }
} }
@ -617,17 +617,17 @@ trait ResponseHandler
case 'updates': case 'updates':
case 'updatesCombined': case 'updatesCombined':
foreach ($updates['updates'] as $update) { foreach ($updates['updates'] as $update) {
$this->handle_update($update, $opts); yield $this->handle_update_async($update, $opts);
} }
break; break;
case 'updateShort': case 'updateShort':
$this->handle_update($updates['update'], $opts); yield $this->handle_update_async($updates['update'], $opts);
break; break;
case 'updateShortMessage': case 'updateShortMessage':
case 'updateShortChatMessage': case 'updateShortChatMessage':
$from_id = isset($updates['from_id']) ? $updates['from_id'] : ($updates['out'] ? $this->authorization['user']['id'] : $updates['user_id']); $from_id = isset($updates['from_id']) ? $updates['from_id'] : ($updates['out'] ? $this->authorization['user']['id'] : $updates['user_id']);
$to_id = isset($updates['chat_id']) ? -$updates['chat_id'] : ($updates['out'] ? $updates['user_id'] : $this->authorization['user']['id']); $to_id = isset($updates['chat_id']) ? -$updates['chat_id'] : ($updates['out'] ? $updates['user_id'] : $this->authorization['user']['id']);
if (!$this->peer_isset($from_id) || !$this->peer_isset($to_id) || isset($updates['via_bot_id']) && !$this->peer_isset($updates['via_bot_id']) || isset($updates['entities']) && !$this->entities_peer_isset($updates['entities']) || isset($updates['fwd_from']) && !$this->fwd_peer_isset($updates['fwd_from'])) { if (!yield $this->peer_isset_async($from_id) || !yield $this->peer_isset_async($to_id) || isset($updates['via_bot_id']) && !yield $this->peer_isset_async($updates['via_bot_id']) || isset($updates['entities']) && !$this->entities_peer_isset($updates['entities']) || isset($updates['fwd_from']) && !$this->fwd_peer_isset($updates['fwd_from'])) {
$this->logger->logger('getDifference: good - getting user for updateShortMessage', \danog\MadelineProto\Logger::VERBOSE); $this->logger->logger('getDifference: good - getting user for updateShortMessage', \danog\MadelineProto\Logger::VERBOSE);
yield $this->get_updates_difference_async(); yield $this->get_updates_difference_async();
} }
@ -647,10 +647,10 @@ trait ResponseHandler
break; break;
} }
$update = ['_' => 'updateNewMessage', 'message' => $message, 'pts' => $updates['pts'], 'pts_count' => $updates['pts_count']]; $update = ['_' => 'updateNewMessage', 'message' => $message, 'pts' => $updates['pts'], 'pts_count' => $updates['pts_count']];
$this->handle_update($update, $opts); yield $this->handle_update_async($update, $opts);
break; break;
case 'updateShortSentMessage': case 'updateShortSentMessage':
//$this->set_update_state(['date' => $updates['date']]); //yield $this->set_update_state_async(['date' => $updates['date']]);
break; break;
case 'updatesTooLong': case 'updatesTooLong':
yield $this->get_updates_difference_async(); yield $this->get_updates_difference_async();

View File

@ -262,7 +262,7 @@ trait UpdateHandler
} }
if (!$this->got_state) { if (!$this->got_state) {
$this->got_state = true; $this->got_state = true;
$this->set_update_state(yield $this->get_updates_state_async()); yield $this->set_update_state_async(yield $this->get_updates_state_async());
} }
return $this->updates_state; return $this->updates_state;
@ -301,22 +301,22 @@ trait UpdateHandler
try { try {
switch ($difference['_']) { switch ($difference['_']) {
case 'updates.differenceEmpty': case 'updates.differenceEmpty':
$this->set_update_state($difference); yield $this->set_update_state_async($difference);
break; break;
case 'updates.difference': case 'updates.difference':
$this->updates_state['sync_loading'] = true; $this->updates_state['sync_loading'] = true;
$this->handle_multiple_update($difference['other_updates']); $this->handle_multiple_update($difference['other_updates']);
foreach ($difference['new_encrypted_messages'] as $encrypted) { foreach ($difference['new_encrypted_messages'] as $encrypted) {
$this->handle_encrypted_update(['_' => 'updateNewEncryptedMessage', 'message' => $encrypted], true); yield $this->handle_encrypted_update_async(['_' => 'updateNewEncryptedMessage', 'message' => $encrypted], true);
} }
$this->handle_update_messages($difference['new_messages']); $this->handle_update_messages($difference['new_messages']);
$this->set_update_state($difference['state']); yield $this->set_update_state_async($difference['state']);
break; break;
case 'updates.differenceSlice': case 'updates.differenceSlice':
$this->updates_state['sync_loading'] = true; $this->updates_state['sync_loading'] = true;
$this->handle_multiple_update($difference['other_updates']); $this->handle_multiple_update($difference['other_updates']);
$this->handle_update_messages($difference['new_messages']); $this->handle_update_messages($difference['new_messages']);
$this->set_update_state($difference['intermediate_state']); yield $this->set_update_state_async($difference['intermediate_state']);
unset($difference); unset($difference);
$this->updates_state['sync_loading'] = false; $this->updates_state['sync_loading'] = false;
yield $this->get_updates_difference_async(); yield $this->get_updates_difference_async();
@ -411,9 +411,9 @@ trait UpdateHandler
$from = false; $from = false;
$via_bot = false; $via_bot = false;
$entities = false; $entities = false;
if (($from = isset($update['message']['from_id']) && !$this->peer_isset($update['message']['from_id'])) || if (($from = isset($update['message']['from_id']) && !yield $this->peer_isset_async($update['message']['from_id'])) ||
($to = !$this->peer_isset($update['message']['to_id'])) || ($to = !yield $this->peer_isset_async($update['message']['to_id'])) ||
($via_bot = isset($update['message']['via_bot_id']) && !$this->peer_isset($update['message']['via_bot_id'])) || ($via_bot = isset($update['message']['via_bot_id']) && !yield $this->peer_isset_async($update['message']['via_bot_id'])) ||
($entities = isset($update['message']['entities']) && !$this->entities_peer_isset($update['message']['entities'])) // || ($entities = isset($update['message']['entities']) && !$this->entities_peer_isset($update['message']['entities'])) // ||
//isset($update['message']['fwd_from']) && !$this->fwd_peer_isset($update['message']['fwd_from']) //isset($update['message']['fwd_from']) && !$this->fwd_peer_isset($update['message']['fwd_from'])
) { ) {
@ -423,7 +423,7 @@ trait UpdateHandler
if ($via_bot) $log .= "via_bot {$update['message']['via_bot_id']}, "; if ($via_bot) $log .= "via_bot {$update['message']['via_bot_id']}, ";
if ($entities) $log .= "entities ".json_encode($update['message']['entities']).", "; if ($entities) $log .= "entities ".json_encode($update['message']['entities']).", ";
$this->logger->logger("Not enough data: for message update $log, getting difference...", \danog\MadelineProto\Logger::VERBOSE); $this->logger->logger("Not enough data: for message update $log, getting difference...", \danog\MadelineProto\Logger::VERBOSE);
if ($channel_id !== false && $this->peer_isset($this->to_supergroup($channel_id))) { if ($channel_id !== false && yield $this->peer_isset_async($this->to_supergroup($channel_id))) {
yield $this->get_channel_difference_async($channel_id); yield $this->get_channel_difference_async($channel_id);
} else { } else {
yield $this->get_updates_difference_async(); yield $this->get_updates_difference_async();
@ -433,7 +433,7 @@ trait UpdateHandler
} }
break; break;
default: default:
if ($channel_id !== false && !$this->peer_isset($this->to_supergroup($channel_id))) { if ($channel_id !== false && !yield $this->peer_isset_async($this->to_supergroup($channel_id))) {
$this->logger->logger('Skipping update, I do not have the channel id '.$channel_id, \danog\MadelineProto\Logger::ERROR); $this->logger->logger('Skipping update, I do not have the channel id '.$channel_id, \danog\MadelineProto\Logger::ERROR);
return false; return false;
@ -455,7 +455,7 @@ trait UpdateHandler
} }
if ($cur_state['pts'] + (isset($update['pts_count']) ? $update['pts_count'] : 0) !== $update['pts']) { if ($cur_state['pts'] + (isset($update['pts_count']) ? $update['pts_count'] : 0) !== $update['pts']) {
$logger("PTS hole"); $logger("PTS hole");
if ($channel_id !== false && $this->peer_isset($this->to_supergroup($channel_id))) { if ($channel_id !== false && yield $this->peer_isset_async($this->to_supergroup($channel_id))) {
yield $this->get_channel_difference_async($channel_id); yield $this->get_channel_difference_async($channel_id);
} else { } else {
yield $this->get_updates_difference_async(); yield $this->get_updates_difference_async();
@ -497,29 +497,29 @@ trait UpdateHandler
yield $this->save_update_async($update); yield $this->save_update_async($update);
} }
public function handle_multiple_update($updates, $options = [], $channel = false) public function handle_multiple_update_async($updates, $options = [], $channel = false)
{ {
if (!$this->settings['updates']['handle_updates']) { if (!$this->settings['updates']['handle_updates']) {
return; return;
} }
if ($channel === false) { if ($channel === false) {
foreach ($updates as $update) { foreach ($updates as $update) {
$this->handle_update($update, $options); yield $this->handle_update_async($update, $options);
} }
} else { } else {
foreach ($updates as $update) { foreach ($updates as $update) {
$this->handle_update($update); yield $this->handle_update_async($update);
} }
} }
} }
public function handle_update_messages($messages, $channel = false) public function handle_update_messages_async($messages, $channel = false)
{ {
if (!$this->settings['updates']['handle_updates']) { if (!$this->settings['updates']['handle_updates']) {
return; return;
} }
foreach ($messages as $message) { foreach ($messages as $message) {
$this->handle_update(['_' => $channel === false ? 'updateNewMessage' : 'updateNewChannelMessage', 'message' => $message, 'pts' => $channel === false ? $this->load_update_state()['pts'] : $this->load_channel_state($channel)['pts'], 'pts_count' => 0]); yield $this->handle_update_async(['_' => $channel === false ? 'updateNewMessage' : 'updateNewChannelMessage', 'message' => $message, 'pts' => $channel === false ? $this->load_update_state()['pts'] : $this->load_channel_state($channel)['pts'], 'pts_count' => 0]);
} }
} }
@ -594,7 +594,7 @@ trait UpdateHandler
} }
$this->logger->logger('Applying qts: '.$update['qts'].' over current qts '.$cur_state['qts'].', chat id: '.$update['message']['chat_id'], \danog\MadelineProto\Logger::VERBOSE); $this->logger->logger('Applying qts: '.$update['qts'].' over current qts '.$cur_state['qts'].', chat id: '.$update['message']['chat_id'], \danog\MadelineProto\Logger::VERBOSE);
yield $this->method_call_async_read('messages.receivedQueue', ['max_qts' => $cur_state['qts'] = $update['qts']], ['datacenter' => $this->settings['connection_settings']['default_dc']]); yield $this->method_call_async_read('messages.receivedQueue', ['max_qts' => $cur_state['qts'] = $update['qts']], ['datacenter' => $this->settings['connection_settings']['default_dc']]);
$this->handle_encrypted_update($update); yield $this->handle_encrypted_update_async($update);
return; return;
} }

View File

@ -86,7 +86,7 @@ trait ResponseHandler
yield $this->save_update_async($update); yield $this->save_update_async($update);
break; break;
case 'decryptedMessageLayer': case 'decryptedMessageLayer':
if ($this->check_secret_out_seq_no($update['message']['chat_id'], $update['message']['decrypted_message']['out_seq_no']) && $this->check_secret_in_seq_no($update['message']['chat_id'], $update['message']['decrypted_message']['in_seq_no'])) { if (yield $this->check_secret_out_seq_no_async($update['message']['chat_id'], $update['message']['decrypted_message']['out_seq_no']) && yield $this->check_secret_in_seq_no_async($update['message']['chat_id'], $update['message']['decrypted_message']['in_seq_no'])) {
$this->secret_chats[$update['message']['chat_id']]['in_seq_no']++; $this->secret_chats[$update['message']['chat_id']]['in_seq_no']++;
if ($update['message']['decrypted_message']['layer'] >= 17) { if ($update['message']['decrypted_message']['layer'] >= 17) {
$this->secret_chats[$update['message']['chat_id']]['layer'] = $update['message']['decrypted_message']['layer']; $this->secret_chats[$update['message']['chat_id']]['layer'] = $update['message']['decrypted_message']['layer'];

View File

@ -171,9 +171,9 @@ trait BotAPI
$newd['date'] = $data['date']; $newd['date'] = $data['date'];
$newd['text'] = $sent_arguments['message']; $newd['text'] = $sent_arguments['message'];
if ($data['out']) { if ($data['out']) {
$newd['from'] = $this->get_pwr_chat($this->authorization['user']); $newd['from'] = yield $this->get_pwr_chat_async($this->authorization['user']);
} }
$newd['chat'] = $this->get_pwr_chat($sent_arguments['peer']); $newd['chat'] = yield $this->get_pwr_chat_async($sent_arguments['peer']);
if (isset($data['entities'])) { if (isset($data['entities'])) {
$newd['entities'] = yield $this->MTProto_to_botAPI_async($data['entities'], $sent_arguments); $newd['entities'] = yield $this->MTProto_to_botAPI_async($data['entities'], $sent_arguments);
} }
@ -192,9 +192,9 @@ trait BotAPI
$newd['post'] = $data['post']; $newd['post'] = $data['post'];
$newd['silent'] = $data['silent']; $newd['silent'] = $data['silent'];
if (isset($data['from_id'])) { if (isset($data['from_id'])) {
$newd['from'] = $this->get_pwr_chat($data['from_id']); $newd['from'] = yield $this->get_pwr_chat_async($data['from_id']);
} }
$newd['chat'] = $this->get_pwr_chat($data['to_id']); $newd['chat'] = yield $this->get_pwr_chat_async($data['to_id']);
if (isset($data['entities'])) { if (isset($data['entities'])) {
$newd['entities'] = yield $this->MTProto_to_botAPI_async($data['entities'], $sent_arguments); $newd['entities'] = yield $this->MTProto_to_botAPI_async($data['entities'], $sent_arguments);
} }
@ -205,13 +205,13 @@ trait BotAPI
$newd['edit_date'] = $data['edit_date']; $newd['edit_date'] = $data['edit_date'];
} }
if (isset($data['via_bot_id'])) { if (isset($data['via_bot_id'])) {
$newd['via_bot'] = $this->get_pwr_chat($data['via_bot_id']); $newd['via_bot'] = yield $this->get_pwr_chat_async($data['via_bot_id']);
} }
if (isset($data['fwd_from']['from_id'])) { if (isset($data['fwd_from']['from_id'])) {
$newd['froward_from'] = $this->get_pwr_chat($data['fwd_from']['from_id']); $newd['forward_from'] = yield $this->get_pwr_chat_async($data['fwd_from']['from_id']);
} }
if (isset($data['fwd_from']['channel_id'])) { if (isset($data['fwd_from']['channel_id'])) {
$newd['forward_from_chat'] = $this->get_pwr_chat($data['fwd_from']['channel_id']); $newd['forward_from_chat'] = yield $this->get_pwr_chat_async($data['fwd_from']['channel_id']);
} }
if (isset($data['fwd_from']['date'])) { if (isset($data['fwd_from']['date'])) {
$newd['forward_date'] = $data['fwd_from']['date']; $newd['forward_date'] = $data['fwd_from']['date'];
@ -277,7 +277,7 @@ trait BotAPI
case 'messageEntityMentionName': case 'messageEntityMentionName':
unset($data['_']); unset($data['_']);
$data['type'] = 'text_mention'; $data['type'] = 'text_mention';
$data['user'] = $this->get_pwr_chat($data['user_id']); $data['user'] = yield $this->get_pwr_chat_async($data['user_id']);
unset($data['user_id']); unset($data['user_id']);
return $data; return $data;
@ -447,7 +447,7 @@ trait BotAPI
break; break;
case 'p': case 'p':
foreach ($node->childNodes as $node) { foreach ($node->childNodes as $node) {
$this->parse_node($node, $entities, $new_message, $offset); yield $this->parse_node_async($node, $entities, $new_message, $offset);
} }
break; break;
case 'a': case 'a':
@ -485,7 +485,7 @@ trait BotAPI
} }
} }
public function parse_mode($arguments) public function parse_mode_async($arguments)
{ {
if ($arguments['message'] === '' || !isset($arguments['message']) || !isset($arguments['parse_mode'])) { if ($arguments['message'] === '' || !isset($arguments['message']) || !isset($arguments['parse_mode'])) {
return $arguments; return $arguments;
@ -511,7 +511,7 @@ trait BotAPI
} }
$offset = 0; $offset = 0;
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) { foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) {
$this->parse_node($node, $arguments['entities'], $new_message, $offset); yield $this->parse_node_async($node, $arguments['entities'], $new_message, $offset);
} }
if (isset($arguments['entities']['buttons'])) { if (isset($arguments['entities']['buttons'])) {
$arguments['reply_markup'] = $this->build_rows($arguments['entities']['buttons']); $arguments['reply_markup'] = $this->build_rows($arguments['entities']['buttons']);

View File

@ -44,7 +44,7 @@ trait TD
return $params; return $params;
} }
public function td_to_mtproto($params) public function td_to_mtproto_async($params)
{ {
$newparams = ['_' => self::REVERSE[$params['_']]]; $newparams = ['_' => self::REVERSE[$params['_']]];
foreach (self::TD_PARAMS_CONVERSION[$newparams['_']] as $td => $mtproto) { foreach (self::TD_PARAMS_CONVERSION[$newparams['_']] as $td => $mtproto) {
@ -66,7 +66,7 @@ trait TD
default: default:
$newparams[$mtproto[0]] = isset($params[$td]) ? $params[$td] : null; $newparams[$mtproto[0]] = isset($params[$td]) ? $params[$td] : null;
if (is_array($newparams[$mtproto[0]])) { if (is_array($newparams[$mtproto[0]])) {
$newparams[$mtproto[0]] = $this->mtproto_to_td($newparams[$mtproto[0]]); $newparams[$mtproto[0]] = yield $this->mtproto_to_td_async($newparams[$mtproto[0]]);
} }
} }
} }
@ -75,9 +75,9 @@ trait TD
return $newparams; return $newparams;
} }
public function mtproto_to_tdcli($params) public function mtproto_to_tdcli_async($params)
{ {
return $this->td_to_tdcli($this->mtproto_to_td($params)); return $this->td_to_tdcli(yield $this->mtproto_to_td_async($params));
} }
public function mtproto_to_td_async(&$params) public function mtproto_to_td_async(&$params)
@ -138,7 +138,7 @@ trait TD
if ($params['message'] !== '') { if ($params['message'] !== '') {
$newparams[$td] = ['_' => 'messageText', 'text' => $params['message']]; $newparams[$td] = ['_' => 'messageText', 'text' => $params['message']];
if (isset($params['media']['_']) && $params['media']['_'] === 'messageMediaWebPage') { if (isset($params['media']['_']) && $params['media']['_'] === 'messageMediaWebPage') {
$newparams[$td]['web_page'] = $this->mtproto_to_td($params['media']['webpage']); $newparams[$td]['web_page'] = yield $this->mtproto_to_td_async($params['media']['webpage']);
} }
if (isset($params['entities'])) { if (isset($params['entities'])) {
$newparams[$td]['entities'] = $params['entities']; $newparams[$td]['entities'] = $params['entities'];
@ -154,7 +154,7 @@ trait TD
$newparams[$td] = isset($params[$mtproto[0]]) ? $params[$mtproto[0]] : null; $newparams[$td] = isset($params[$mtproto[0]]) ? $params[$mtproto[0]] : null;
} }
if (is_array($newparams[$td])) { if (is_array($newparams[$td])) {
$newparams[$td] = $this->mtproto_to_td($newparams[$td]); $newparams[$td] = yield $this->mtproto_to_td_async($newparams[$td]);
} }
} }
} }