Apply fixes from StyleCI

This commit is contained in:
Daniil Gentili 2017-02-16 03:55:47 +00:00 committed by StyleCI Bot
parent 38d6ee07b3
commit d0f459c5c4
4 changed files with 222 additions and 104 deletions

View File

@ -13,19 +13,20 @@ If not, see <http://www.gnu.org/licenses/>.
require 'vendor/autoload.php';
$settings = [];
$token='';
$token = '';
try {
$MadelineProto = \danog\MadelineProto\Serialization::deserialize('b.madeline');
} catch (\danog\MadelineProto\Exception $e) {
$MadelineProto = new \danog\MadelineProto\API($settings);
$authorization = $MadelineProto->bot_login($token);
\danog\MadelineProto\Logger::log([$authorization], \danog\MadelineProto\Logger::NOTICE);
$MadelineProto = new \danog\MadelineProto\API($settings);
$authorization = $MadelineProto->bot_login($token);
\danog\MadelineProto\Logger::log([$authorization], \danog\MadelineProto\Logger::NOTICE);
}
function base64url_decode($data)
{
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
function rle_decode($string) {
function rle_decode($string)
{
$base256 = '';
$last = '';
foreach (str_split($string) as $cur) {
@ -38,12 +39,13 @@ function rle_decode($string) {
}
}
$string = $base256.$last;
return $string;
}
function foreach_offset_length($string)
{
/* $a = [];
/* $a = [];
$b = [];
foreach ([2, 3, 4] as $r) {
$a []= chr(0).chr($r);
@ -53,7 +55,7 @@ function foreach_offset_length($string)
$res = [];
$strlen = strlen($string);
for ($offset = 0; $offset < strlen($string); $offset++) {
// for ($length = $strlen - $offset; $length > 0; $length--) {
// for ($length = $strlen - $offset; $length > 0; $length--) {
foreach (['i' => 4, 'q' => 8] as $c => $length) {
$s = substr($string, $offset, $length);
if (strlen($s) === $length) {
@ -68,9 +70,10 @@ function foreach_offset_length($string)
}
$res = ['offset' => 0, 'files' => []];
function getfiles($token, &$params) {
function getfiles($token, &$params)
{
foreach (json_decode(file_get_contents('https://api.telegram.org/bot'.$token.'/getupdates?offset='.$params['offset']), true)['result'] as $update) {
$params['offset'] = $update['update_id']+1;
$params['offset'] = $update['update_id'] + 1;
if (isset($update['message']['audio'])) {
$params['files'][$update['message']['message_id']] = $update['message']['audio']['file_id'];
}
@ -89,8 +92,6 @@ function getfiles($token, &$params) {
if (isset($update['message']['photo'])) {
$params['files'][$update['message']['message_id']] = end($update['message']['photo'])['file_id'];
}
}
}
@ -126,16 +127,26 @@ while (true) {
$mtproto = $MadelineProto->get_download_info($update['update']['message']['media'])['InputFileLocation'];
$m = [];
unset($mtproto['_']);
if (isset($mtproto['version']))unset($mtproto['version']);
if (isset($update['update']['message']['media']['photo'])) $mtproto['id'] = $update['update']['message']['media']['photo']['id'];
if (isset($update['update']['message']['media']['photo'])) $mtproto['access_hash'] = $update['update']['message']['media']['photo']['access_hash'];
if (isset($update['update']['message']['media']['document'])) $mtproto['id'] = $update['update']['message']['media']['document']['id'];
if (isset($update['update']['message']['media']['document'])) $mtproto['access_hash'] = $update['update']['message']['media']['document']['access_hash'];
if (isset($mtproto['version'])) {
unset($mtproto['version']);
}
if (isset($update['update']['message']['media']['photo'])) {
$mtproto['id'] = $update['update']['message']['media']['photo']['id'];
}
if (isset($update['update']['message']['media']['photo'])) {
$mtproto['access_hash'] = $update['update']['message']['media']['photo']['access_hash'];
}
if (isset($update['update']['message']['media']['document'])) {
$mtproto['id'] = $update['update']['message']['media']['document']['id'];
}
if (isset($update['update']['message']['media']['document'])) {
$mtproto['access_hash'] = $update['update']['message']['media']['document']['access_hash'];
}
//var_dump($mtproto);
foreach ($mtproto as $key => $n) {
foreach ($bot_api as $bn) {
if ($bn['number'] === $n) {
$m [$bn['offset']+$bn['length']]= $key." (".$n."): ".$bn['offset'].'-'.($bn['offset']+$bn['length']).' ('.$bn['length'].')'.PHP_EOL;
$m[$bn['offset'] + $bn['length']] = $key.' ('.$n.'): '.$bn['offset'].'-'.($bn['offset'] + $bn['length']).' ('.$bn['length'].')'.PHP_EOL;
unset($mtproto[$key]);
}
}
@ -145,7 +156,7 @@ while (true) {
$message .= $bn;
}
foreach ($mtproto as $key => $n) {
$message .= $key." (".$n."): not found".PHP_EOL;
$message .= $key.' ('.$n.'): not found'.PHP_EOL;
}
$MadelineProto->messages->sendMessage(['peer' => $update['update']['message']['from_id'], 'message' => $message, 'reply_to_msg_id' => $update['update']['message']['id'], 'parse_mode' => 'html']);
}

View File

@ -13,7 +13,7 @@ If not, see <http://www.gnu.org/licenses/>.
namespace danog\MadelineProto\TL;
/**
* Manages serialization of file ids
* Manages serialization of file ids.
*/
trait Files
{
@ -448,6 +448,7 @@ trait Files
return '';
}
public function base64url_decode($data)
{
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
@ -458,7 +459,8 @@ trait Files
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function rle_decode($string) {
public function rle_decode($string)
{
$new = '';
$last = '';
$null = chr(0);
@ -472,10 +474,12 @@ trait Files
}
}
$string = $new.$last;
return $string;
}
function rle_encode($string) {
public function rle_encode($string)
{
$new = '';
$count = 0;
$null = chr(0);
@ -490,42 +494,50 @@ trait Files
$new .= $cur;
}
}
return $new;
}
public function photosize_to_botapi($photo, $message_media, $thumbnail = false) {
public function photosize_to_botapi($photo, $message_media, $thumbnail = false)
{
$ext = $this->get_extension_from_location(['_' => 'inputFileLocation', 'volume_id' => $photo['location']['volume_id'], 'local_id' => $photo['location']['local_id'], 'secret' => $photo['location']['secret'], 'dc_id' => $photo['location']['dc_id']], '.jpg');
$data = \danog\PHP\Struct::pack('<iiqqqqib', $thumbnail ? 0 : 2, $photo['location']['dc_id'], $thumbnail ? 0 : $message_media['id'], $thumbnail ? 0 : $message_media['access_hash'],$photo['location']['volume_id'],$photo['location']['secret'], $photo['location']['local_id'], 2);
$data = \danog\PHP\Struct::pack('<iiqqqqib', $thumbnail ? 0 : 2, $photo['location']['dc_id'], $thumbnail ? 0 : $message_media['id'], $thumbnail ? 0 : $message_media['access_hash'], $photo['location']['volume_id'], $photo['location']['secret'], $photo['location']['local_id'], 2);
return [
'file_id' => $this->base64url_encode($this->rle_encode($data)),
'width' => $photo['w'],
'height' => $photo['h'],
'file_id' => $this->base64url_encode($this->rle_encode($data)),
'width' => $photo['w'],
'height' => $photo['h'],
'file_size' => isset($photo['size']) ? $photo['size'] : strlen($photo['bytes']),
'mime_type' => 'image/jpeg',
'file_name' => $photo['location']['volume_id'].'_'.$photo['location']['local_id'].$ext
'file_name' => $photo['location']['volume_id'].'_'.$photo['location']['local_id'].$ext,
];
}
public function unpack_file_id($file_id) {
public function unpack_file_id($file_id)
{
$file_id = $this->rle_decode($this->base64url_decode($file_id));
$res = [];
$type = \danog\PHP\Struct::unpack('<i', substr($file_id, 0, 4))[0];
switch ($type) {
case 0:
$constructor = ['_' => 'photo', 'sizes' => []];
list($type, $constructor['sizes'][0]['location']['dc_id'], $constructor['id'], $constructor['access_hash'], $constructor['sizes'][0]['location']['volume_id'],$constructor['sizes'][0]['location']['secret'],$constructor['sizes'][0]['location']['local_id'], $verify) = \danog\PHP\Struct::unpack('<iiqqqqib', $file_id);
list($type, $constructor['sizes'][0]['location']['dc_id'], $constructor['id'], $constructor['access_hash'], $constructor['sizes'][0]['location']['volume_id'], $constructor['sizes'][0]['location']['secret'], $constructor['sizes'][0]['location']['local_id'], $verify) = \danog\PHP\Struct::unpack('<iiqqqqib', $file_id);
if ($verify !== 2) {
throw new Exception('Invalid last byte');
}
$res['type'] = 'photo';
$res['MessageMedia'] = ['_' => 'messageMediaPhoto', 'photo' => $constructor, 'caption' => ''];
return $res;
case 2:
$constructor = ['_' => 'photo', 'sizes' => []];
list($type, $constructor['sizes'][0]['location']['dc_id'], $constructor['id'], $constructor['access_hash'], $constructor['sizes'][0]['location']['volume_id'],$constructor['sizes'][0]['location']['secret'],$constructor['sizes'][0]['location']['local_id'], $verify) = \danog\PHP\Struct::unpack('<iiqqqqib', $file_id);
list($type, $constructor['sizes'][0]['location']['dc_id'], $constructor['id'], $constructor['access_hash'], $constructor['sizes'][0]['location']['volume_id'], $constructor['sizes'][0]['location']['secret'], $constructor['sizes'][0]['location']['local_id'], $verify) = \danog\PHP\Struct::unpack('<iiqqqqib', $file_id);
if ($verify !== 2) {
throw new Exception('Invalid last byte');
}
$res['type'] = 'photo';
$res['MessageMedia'] = ['_' => 'messageMediaPhoto', 'photo' => $constructor, 'caption' => ''];
return $res;
case 3:
$constructor = ['_' => 'document', 'mime_type' => '', 'attributes' => [['_' => 'documentAttributeAudio', 'voice' => true]]];
@ -535,6 +547,7 @@ trait Files
}
$res['type'] = 'voice';
$res['MessageMedia'] = ['_' => 'messageMediaDocument', 'document' => $constructor, 'caption' => ''];
return $res;
case 4:
$res['type'] = 'videos';
@ -544,6 +557,7 @@ trait Files
throw new Exception('Invalid last byte');
}
$res['MessageMedia'] = ['_' => 'messageMediaDocument', 'document' => $constructor, 'caption' => ''];
return $res;
case 5:
$res['type'] = 'document';
@ -553,14 +567,17 @@ trait Files
throw new Exception('Invalid last byte');
}
$res['MessageMedia'] = ['_' => 'messageMediaDocument', 'document' => $constructor, 'caption' => ''];
return $res;
default:
throw new Exception("Invalid file type detected (".$type.')');
throw new Exception('Invalid file type detected ('.$type.')');
}
}
public function get_extension_from_location($location, $default) {
public function get_extension_from_location($location, $default)
{
$this->switch_dc($location['dc_id']);
$res = $this->method_call('upload.getFile', ['location' => $location, 'offset' => 0, 'limit' => 1],['heavy' => true]);
$res = $this->method_call('upload.getFile', ['location' => $location, 'offset' => 0, 'limit' => 1], ['heavy' => true]);
switch ($res['type']['_']) {
case 'storage.fileJpeg': return '.jpg';
case 'storage.fileGif': return '.gif';
@ -573,6 +590,7 @@ trait Files
default: return $default;
}
}
public function get_download_info($message_media)
{
if (is_string($message_media)) {
@ -589,6 +607,7 @@ trait Files
$res['InputFileLocation'] = ['_' => 'inputFileLocation', 'volume_id' => $photo['location']['volume_id'], 'local_id' => $photo['location']['local_id'], 'secret' => $photo['location']['secret'], 'dc_id' => $photo['location']['dc_id']];
$res['ext'] = $this->get_extension_from_location($res['InputFileLocation'], '.jpg');
$res['mime'] = 'image/jpeg';
return $res;
case 'photoSize':
case 'photoCachedSize':
@ -596,13 +615,16 @@ trait Files
$res['InputFileLocation'] = ['_' => 'inputFileLocation', 'volume_id' => $message_media['location']['volume_id'], 'local_id' => $message_media['location']['local_id'], 'secret' => $message_media['location']['secret'], 'dc_id' => $message_media['location']['dc_id']];
$res['ext'] = $this->get_extension_from_location($res['InputFileLocation'], '.jpg');
$res['mime'] = 'image/jpeg';
return $res;
case 'messageMediaDocument':
foreach ($message_media['document']['attributes'] as $attribute) {
switch ($attribute['_']) {
case 'documentAttributeFilename':
$pathinfo = pathinfo($attribute['file_name']);
if (isset($pathinfo['extension'])) $res['ext'] = '.'.$pathinfo['extension'];
if (isset($pathinfo['extension'])) {
$res['ext'] = '.'.$pathinfo['extension'];
}
$res['name'] = $pathinfo['filename'];
break;
case 'documentAttributeAudio':
@ -616,7 +638,7 @@ trait Files
$res['name'] .= ' - '.$audio['performer'];
}
}
$res ['InputFileLocation'] = ['_' => 'inputDocumentFileLocation', 'id' => $message_media['document']['id'], 'access_hash' => $message_media['document']['access_hash'], 'version' => isset($message_media['document']['version']) ? $message_media['document']['version'] : 0, 'dc_id' => $message_media['document']['dc_id']];
$res['InputFileLocation'] = ['_' => 'inputDocumentFileLocation', 'id' => $message_media['document']['id'], 'access_hash' => $message_media['document']['access_hash'], 'version' => isset($message_media['document']['version']) ? $message_media['document']['version'] : 0, 'dc_id' => $message_media['document']['dc_id']];
if (!isset($res['ext'])) {
$res['ext'] = $this->get_extension_from_location($res['InputFileLocation'], $this->get_extension_from_mime($message_media['document']['mime_type']));
}
@ -625,6 +647,7 @@ trait Files
}
$res['name'] .= '_'.$message_media['document']['id'];
$res['mime'] = $message_media['document']['mime_type'];
return $res;
default:
throw new \danog\MadelineProto\Exception('Invalid constructor provided: '.$message_media['_']);
@ -642,7 +665,9 @@ trait Files
{
$file = str_replace('//', '/', $file);
$info = $this->get_download_info($message_media);
if (!file_exists($file)) touch ($file);
if (!file_exists($file)) {
touch($file);
}
$stream = fopen($file, 'r+b');
flock($stream, LOCK_EX);
$this->download_to_stream($info, $stream, $cb, filesize($file), -1);
@ -675,9 +700,13 @@ trait Files
while (true) {
//$real_part_size = (($offset + $part_size > $end) && $end !== -1) ? $part_size - (($offset + $part_size) - $end) : $part_size;
try {
$res = $this->method_call('upload.getFile', ['location' => $info['InputFileLocation'], 'offset' => $offset, 'limit' => $part_size],['heavy' => true]);
$res = $this->method_call('upload.getFile', ['location' => $info['InputFileLocation'], 'offset' => $offset, 'limit' => $part_size], ['heavy' => true]);
} catch (\danog\MadelineProto\RPCErrorException $e) {
if ($e->getMessage() === 'OFFSET_INVALID') break; else throw $e;
if ($e->getMessage() === 'OFFSET_INVALID') {
break;
} else {
throw $e;
}
}
while ($res['type']['_'] === 'storage.fileUnknown' && $res['bytes'] === '') {
$dc = 1;
@ -695,11 +724,18 @@ trait Files
$offset += strlen($res['bytes']);
$downloaded_size += strlen($res['bytes']);
\danog\MadelineProto\Logger::log([fwrite($stream, $res['bytes'])], \danog\MadelineProto\Logger::ULTRA_VERBOSE);
if ($end) break;
if ($end) {
break;
}
//\danog\MadelineProto\Logger::log([$offset, $size, ftell($stream)], \danog\MadelineProto\Logger::ULTRA_VERBOSE);
if ($end !== -1) $cb($percent = $downloaded_size * 100 / $size);
if ($end !== -1) {
$cb($percent = $downloaded_size * 100 / $size);
}
}
if ($end === -1) $cb(100);
if ($end === -1) {
$cb(100);
}
return true;
}
}

View File

@ -230,44 +230,48 @@ trait TL
{
return html_entity_decode(str_replace('<br />', "\n", $stuff));
}
public function parse_buttons($rows) {
public function parse_buttons($rows)
{
$newrows = [];
$key = 0;
$button_key = 0;
foreach ($rows as $row) {
$newrows[$key] = ['_' => 'keyboardButtonRow', 'buttons' => []];
foreach ($row as $button) {
$newrows[$key]['buttons'][$button_key] = ['_' => 'keyboardButton', 'text' => $button['text']];
if (isset($button['url'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonUrl';
$newrows[$key]['buttons'][$button_key]['url'] = $button['url'];
} else if (isset($button['callback_data'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonCallback';
$newrows[$key]['buttons'][$button_key]['data'] = $button['callback_data'];
} else if (isset($button['switch_inline_query'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonSwitchInline';
$newrows[$key]['buttons'][$button_key]['same_peer'] = false;
$newrows[$key]['buttons'][$button_key]['query'] = $button['switch_inline_query'];
} else if (isset($button['switch_inline_query_current_chat'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonSwitchInline';
$newrows[$key]['buttons'][$button_key]['same_peer'] = true;
$newrows[$key]['buttons'][$button_key]['query'] = $button['switch_inline_query_current_chat'];
} else if (isset($button['callback_game'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonGame';
$newrows[$key]['buttons'][$button_key]['text'] = $button['callback_game'];
} else if (isset($button['request_contact'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonRequestPhone';
} else if (isset($button['request_location'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonRequestGeoLocation';
}
$button_key++;
$newrows[$key]['buttons'][$button_key] = ['_' => 'keyboardButton', 'text' => $button['text']];
if (isset($button['url'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonUrl';
$newrows[$key]['buttons'][$button_key]['url'] = $button['url'];
} elseif (isset($button['callback_data'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonCallback';
$newrows[$key]['buttons'][$button_key]['data'] = $button['callback_data'];
} elseif (isset($button['switch_inline_query'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonSwitchInline';
$newrows[$key]['buttons'][$button_key]['same_peer'] = false;
$newrows[$key]['buttons'][$button_key]['query'] = $button['switch_inline_query'];
} elseif (isset($button['switch_inline_query_current_chat'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonSwitchInline';
$newrows[$key]['buttons'][$button_key]['same_peer'] = true;
$newrows[$key]['buttons'][$button_key]['query'] = $button['switch_inline_query_current_chat'];
} elseif (isset($button['callback_game'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonGame';
$newrows[$key]['buttons'][$button_key]['text'] = $button['callback_game'];
} elseif (isset($button['request_contact'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonRequestPhone';
} elseif (isset($button['request_location'])) {
$newrows[$key]['buttons'][$button_key]['_'] = 'keyboardButtonRequestGeoLocation';
}
$button_key++;
}
$key++;
}
return $newrows;
}
public function parse_reply_markup($markup) {
public function parse_reply_markup($markup)
{
if (isset($markup['force_reply']) && $markup['force_reply']) {
$markup['_'] = 'replyKeyboardForceReply';
unset($markup['force_reply']);
@ -294,14 +298,18 @@ trait TL
$markup['rows'] = $this->parse_buttons($markup['inline_keyboard']);
unset($markup['inline_keyboard']);
}
return $markup;
}
public function MTProto_to_botAPI($data, $sent_arguments = []) {
public function MTProto_to_botAPI($data, $sent_arguments = [])
{
$newd = [];
if (!isset($data['_'])) {
foreach ($data as $key => $element) {
$newd[$key] = $this->MTProto_to_botAPI($element, $sent_arguments);
}
return $newd;
}
switch ($data['_']) {
@ -309,10 +317,17 @@ trait TL
$newd['message_id'] = $data['id'];
$newd['date'] = $data['date'];
$newd['text'] = $sent_arguments['message'];
if ($data['out']) $newd['from'] = $this->get_pwr_chat($this->datacenter->authorization['user']);
if ($data['out']) {
$newd['from'] = $this->get_pwr_chat($this->datacenter->authorization['user']);
}
$newd['chat'] = $this->get_pwr_chat($sent_arguments['peer']);
if (isset($data['entities'])) $newd['entities'] = $this->MTProto_to_botAPI($data['entities'], $sent_arguments);
if (isset($data['media'])) $newd = array_merge($newd, $this->MTProto_to_botAPI($data['media'], $sent_arguments));
if (isset($data['entities'])) {
$newd['entities'] = $this->MTProto_to_botAPI($data['entities'], $sent_arguments);
}
if (isset($data['media'])) {
$newd = array_merge($newd, $this->MTProto_to_botAPI($data['media'], $sent_arguments));
}
return $newd;
case 'updateNewChannelMessage':
@ -325,68 +340,99 @@ trait TL
$newd['text'] = $data['message'];
$newd['post'] = $data['post'];
$newd['silent'] = $data['silent'];
if (isset($data['from_id'])) $newd['from'] = $this->get_pwr_chat($data['from_id']);
if (isset($data['from_id'])) {
$newd['from'] = $this->get_pwr_chat($data['from_id']);
}
$newd['chat'] = $this->get_pwr_chat($data['to_id']);
if (isset($data['entities'])) $newd['entities'] = $this->MTProto_to_botAPI($data['entities'], $sent_arguments);
if (isset($data['views'])) $newd['views'] = $data['views'];
if (isset($data['edit_date'])) $newd['edit_date'] = $data['edit_date'];
if (isset($data['via_bot_id'])) $newd['via_bot'] = $this->get_pwr_chat($data['via_bot_id']);
if (isset($data['fwd_from']['from_id'])) $newd['froward_from'] = $this->get_pwr_chat($data['fwd_from']['from_id']);
if (isset($data['fwd_from']['channel_id'])) $newd['forward_from_chat'] = $this->get_pwr_chat($data['fwd_from']['channel_id']);
if (isset($data['fwd_from']['date'])) $newd['forward_date'] = $data['fwd_from']['date'];
if (isset($data['fwd_from']['channel_post'])) $newd['forward_from_message_id'] = $data['fwd_from']['channel_post'];
if (isset($data['entities'])) {
$newd['entities'] = $this->MTProto_to_botAPI($data['entities'], $sent_arguments);
}
if (isset($data['views'])) {
$newd['views'] = $data['views'];
}
if (isset($data['edit_date'])) {
$newd['edit_date'] = $data['edit_date'];
}
if (isset($data['via_bot_id'])) {
$newd['via_bot'] = $this->get_pwr_chat($data['via_bot_id']);
}
if (isset($data['fwd_from']['from_id'])) {
$newd['froward_from'] = $this->get_pwr_chat($data['fwd_from']['from_id']);
}
if (isset($data['fwd_from']['channel_id'])) {
$newd['forward_from_chat'] = $this->get_pwr_chat($data['fwd_from']['channel_id']);
}
if (isset($data['fwd_from']['date'])) {
$newd['forward_date'] = $data['fwd_from']['date'];
}
if (isset($data['fwd_from']['channel_post'])) {
$newd['forward_from_message_id'] = $data['fwd_from']['channel_post'];
}
if (isset($data['media'])) {
$newd = array_merge($newd, $this->MTProto_to_botAPI($data['media'], $sent_arguments));
}
if (isset($data['media'])) $newd = array_merge($newd, $this->MTProto_to_botAPI($data['media'], $sent_arguments));
return $newd;
case 'messageEntityMention':
unset($data['_']);
$data['type'] = 'mention';
return $data;
case 'messageEntityHashtag':
unset($data['_']);
$data['type'] = 'hashtag';
return $data;
case 'messageEntityBotCommand':
unset($data['_']);
$data['type'] = 'bot_command';
return $data;
case 'messageEntityUrl':
unset($data['_']);
$data['type'] = 'url';
return $data;
case 'messageEntityEmail':
unset($data['_']);
$data['type'] = 'email';
return $data;
case 'messageEntityBold':
unset($data['_']);
$data['type'] = 'bold';
return $data;
case 'messageEntityItalic':
unset($data['_']);
$data['type'] = 'italic';
return $data;
case 'messageEntityCode':
unset($data['_']);
$data['type'] = 'code';
return $data;
case 'messageEntityPre':
unset($data['_']);
$data['type'] = 'pre';
return $data;
case 'messageEntityTextUrl':
unset($data['_']);
$data['type'] = 'text_url';
return $data;
case 'messageEntityMentionName':
@ -394,6 +440,7 @@ trait TL
$data['type'] = 'text_mention';
$data['user'] = $this->get_pwr_chat($data['user_id']);
unset($data['user_id']);
return $data;
case 'messageMediaPhoto':
@ -402,6 +449,7 @@ trait TL
foreach ($data['photo']['sizes'] as $key => $photo) {
$res['photo'][$key] = $this->photosize_to_botapi($photo, $data['photo']);
}
return $res;
case 'messageMediaEmpty':
return [];
@ -410,7 +458,9 @@ trait TL
$type = 5;
$type_name = 'document';
$res = [];
if ($data['document']['thumb']['_'] === 'photoSize') $res['thumb'] = $this->photosize_to_botapi($data['document']['thumb'], $data['document'], true);
if ($data['document']['thumb']['_'] === 'photoSize') {
$res['thumb'] = $this->photosize_to_botapi($data['document']['thumb'], $data['document'], true);
}
foreach ($data['document']['attributes'] as $attribute) {
switch ($attribute['_']) {
case 'documentAttributeFilename':
@ -427,9 +477,15 @@ trait TL
$type_name = 'voice';
}
$res['duration'] = $attribute['duration'];
if (isset($attribute['performer'])) $res['performer'] = $attribute['performer'];
if (isset($attribute['title'])) $res['title'] = $attribute['title'];
if (isset($attribute['waveform'])) $res['title'] = $attribute['waveform'];
if (isset($attribute['performer'])) {
$res['performer'] = $attribute['performer'];
}
if (isset($attribute['title'])) {
$res['title'] = $attribute['title'];
}
if (isset($attribute['waveform'])) {
$res['title'] = $attribute['waveform'];
}
break;
case 'documentAttributeVideo':
@ -458,7 +514,9 @@ trait TL
$res['mask'] = $attribute['mask'];
$res['emoji'] = $attribute['alt'];
$res['sticker_set'] = $attribute['stickerset'];
if (isset($attribute['mask_coords'])) $res['mask_coords'] = $attribute['mask_coords'];
if (isset($attribute['mask_coords'])) {
$res['mask_coords'] = $attribute['mask_coords'];
}
break;
}
@ -482,12 +540,15 @@ trait TL
$res['file_size'] = $data['document']['size'];
$res['mime_type'] = $data['document']['mime_type'];
$res['file_id'] = $this->base64url_encode($this->rle_encode(\danog\PHP\Struct::pack('<iiqqb', $type, $data['document']['dc_id'], $data['document']['id'], $data['document']['access_hash'], 2)));
return [$type_name => $res, 'caption' => $data['caption']];
default:
throw new Exception("Can't convert ".$data['_'].' to a bot API object');
}
}
public function botAPI_to_MTProto($arguments) {
public function botAPI_to_MTProto($arguments)
{
if (isset($arguments['disable_web_page_preview'])) {
$arguments['no_webpage'] = $arguments['disable_web_page_preview'];
}
@ -512,20 +573,22 @@ trait TL
return $arguments;
}
public function parse_mode($arguments) {
if (preg_match('/markdown/i', $arguments['parse_mode'])) {
$arguments['message'] = str_replace("\n", '', \Parsedown::instance()->line($arguments['message']));
$arguments['parse_mode'] = 'HTML';
public function parse_mode($arguments)
{
if (preg_match('/markdown/i', $arguments['parse_mode'])) {
$arguments['message'] = str_replace("\n", '', \Parsedown::instance()->line($arguments['message']));
$arguments['parse_mode'] = 'HTML';
}
if (preg_match('/html/i', $arguments['parse_mode'])) {
$dom = new \PHPHtmlParser\Dom();
$dom->loadStr(str_replace("\n", '<br>', $arguments['message']), []);
$nmessage = '';
if (!isset($arguments['entities'])) {
$arguments['entities'] = [];
}
if (preg_match('/html/i', $arguments['parse_mode'])) {
$dom = new \PHPHtmlParser\Dom();
$dom->loadStr(str_replace("\n", '<br>', $arguments['message']), []);
$nmessage = '';
if (!isset($arguments['entities'])) {
$arguments['entities'] = [];
}
foreach ($dom->find('') as $tag) {
switch ($tag->tag->name()) {
foreach ($dom->find('') as $tag) {
switch ($tag->tag->name()) {
case 'br':
$nmessage .= "\n";
break;
@ -575,12 +638,14 @@ trait TL
$nmessage .= $this->html_entity_decode($tag->outerHtml);
break;
}
}
$arguments['message'] = $nmessage;
unset($arguments['parse_mode']);
}
$arguments['message'] = $nmessage;
unset($arguments['parse_mode']);
}
return $arguments;
}
public function serialize_params($tl, $arguments)
{
$serialized = '';

View File

@ -17,25 +17,31 @@ namespace danog\MadelineProto\Wrappers;
*/
trait FilesHandler
{
public function upload($file, $file_name = '', $cb = null) {
public function upload($file, $file_name = '', $cb = null)
{
return $this->API->upload($file, $file_name, $cb);
}
public function get_extension_from_mime($mime)
{
return $this->API->get_extension_from_mime($mime);
}
public function get_download_info($message_media)
{
return $this->API->get_download_info($message_media);
}
public function download_to_dir($message_media, $dir, $cb = null)
{
return $this->API->download_to_dir($message_media, $dir, $cb);
}
public function download_to_file($message_media, $file, $cb = null)
{
return $this->API->download_to_file($message_media, $file, $cb);
}
public function download_to_stream($message_media, $stream, $cb = null, $offset = 0, $end = -1)
{
return $this->API->download_to_stream($message_media, $stream, $cb);