Merge branch 'master' of https://github.com/danog/MadelineProto
This commit is contained in:
commit
e4c25653c7
@ -17,6 +17,4 @@ before_script:
|
|||||||
script:
|
script:
|
||||||
- "tests/testing.php"
|
- "tests/testing.php"
|
||||||
before_install:
|
before_install:
|
||||||
- openssl aes-256-cbc -K $encrypted_0b05103af24b_key -iv $encrypted_0b05103af24b_iv
|
|
||||||
-in enc.tar.xz.enc -out enc.tar.xz -d
|
|
||||||
- tar -xJpf enc.tar.xz
|
- tar -xJpf enc.tar.xz
|
||||||
|
9
bot.php
9
bot.php
@ -15,12 +15,14 @@ if (file_exists('token.php') && $MadelineProto === false) {
|
|||||||
$offset = 0;
|
$offset = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
$updates = $MadelineProto->API->get_updates(['offset' => $offset, 'limit' => 50, 'timeout' => 0]); // Just like in the bot API, you can specify an offset, a limit and a timeout
|
$updates = $MadelineProto->API->get_updates(['offset' => $offset, 'limit' => 50, 'timeout' => 0]); // Just like in the bot API, you can specify an offset, a limit and a timeout
|
||||||
|
var_dump($updates);
|
||||||
foreach ($updates as $update) {
|
foreach ($updates as $update) {
|
||||||
$offset = $update['update_id'] + 1; // Just like in the bot API, the offset must be set to the last update_id
|
$offset = $update['update_id'] + 1; // Just like in the bot API, the offset must be set to the last update_id
|
||||||
var_dump($update);
|
//var_dump($update);
|
||||||
switch ($update['update']['_']) {
|
switch ($update['update']['_']) {
|
||||||
case 'updateNewMessage':
|
case 'updateNewMessage':
|
||||||
if ($update['update']['message']['out']) {
|
case 'updateNewChannelMessage':
|
||||||
|
if (isset($update['update']['message']['out']) && $update['update']['message']['out']) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$res = json_encode($update, JSON_PRETTY_PRINT);
|
$res = json_encode($update, JSON_PRETTY_PRINT);
|
||||||
@ -28,7 +30,8 @@ while (true) {
|
|||||||
$res = var_export($update, true);
|
$res = var_export($update, true);
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
$MadelineProto->messages->sendMessage(['peer' => $update['update']['message']['from_id'], 'message' => $res, 'reply_to_msg_id' => $update['update']['message']['id'], 'entities' => [['_' => 'messageEntityPre', 'offset' => 0, 'length' => strlen($res), 'language' => 'json']]]);
|
//var_dump($update);
|
||||||
|
$MadelineProto->messages->sendMessage(['peer' => $update['update']['message']['to_id'], 'message' => $res, 'reply_to_msg_id' => $update['update']['message']['id'], 'entities' => [['_' => 'messageEntityPre', 'offset' => 0, 'length' => strlen($res), 'language' => 'json']]]);
|
||||||
} catch (\danog\MadelineProto\RPCErrorException $e) {
|
} catch (\danog\MadelineProto\RPCErrorException $e) {
|
||||||
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
|
$MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]);
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,9 @@ class Exception extends \Exception
|
|||||||
if (error_reporting() === 0) {
|
if (error_reporting() === 0) {
|
||||||
return true; // return true to continue through the others error handlers
|
return true; // return true to continue through the others error handlers
|
||||||
}
|
}
|
||||||
if (\danog\MadelineProto\Logger::$constructed) \danog\MadelineProto\Logger::log([$errstr], \danog\MadelineProto\Logger::FATAL_ERROR);
|
if (\danog\MadelineProto\Logger::$constructed) {
|
||||||
|
\danog\MadelineProto\Logger::log([$errstr], \danog\MadelineProto\Logger::FATAL_ERROR);
|
||||||
|
}
|
||||||
$e = new \danog\MadelineProto\Exception($errstr, $errno);
|
$e = new \danog\MadelineProto\Exception($errstr, $errno);
|
||||||
$e->file = $errfile;
|
$e->file = $errfile;
|
||||||
$e->line = $errline;
|
$e->line = $errline;
|
||||||
|
@ -66,6 +66,7 @@ trait UpdateHandler
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$this->updates[$this->updates_key++] = $update;
|
$this->updates[$this->updates_key++] = $update;
|
||||||
|
$this->should_serialize = true;
|
||||||
//\danog\MadelineProto\Logger::log(['Stored ', $update);
|
//\danog\MadelineProto\Logger::log(['Stored ', $update);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,8 +92,10 @@ trait UpdateHandler
|
|||||||
$params['offset'] = array_reverse(array_keys($this->updates))[abs($params['offset']) - 1];
|
$params['offset'] = array_reverse(array_keys($this->updates))[abs($params['offset']) - 1];
|
||||||
}
|
}
|
||||||
$updates = [];
|
$updates = [];
|
||||||
|
ksort($this->updates);
|
||||||
foreach ($this->updates as $key => $value) {
|
foreach ($this->updates as $key => $value) {
|
||||||
if ($params['offset'] > $key) {
|
if ($params['offset'] > $key) {
|
||||||
|
$this->should_serialize = true;
|
||||||
unset($this->updates[$key]);
|
unset($this->updates[$key]);
|
||||||
} elseif ($params['limit'] === null || count($updates) < $params['limit']) {
|
} elseif ($params['limit'] === null || count($updates) < $params['limit']) {
|
||||||
$updates[] = ['update_id' => $key, 'update' => $value];
|
$updates[] = ['update_id' => $key, 'update' => $value];
|
||||||
@ -113,7 +116,10 @@ trait UpdateHandler
|
|||||||
|
|
||||||
public function set_channel_state($channel, $data)
|
public function set_channel_state($channel, $data)
|
||||||
{
|
{
|
||||||
$this->get_channel_state($channel)['pts'] = (!isset($data['pts']) || $data['pts'] === 0) ? $this->get_channel_state($channel)['pts'] : $data['pts'];
|
if (isset($data['pts']) && $data['pts'] !== 0) {
|
||||||
|
$this->should_serialize = true;
|
||||||
|
$this->get_channel_state($channel)['pts'] = $data['pts'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function get_channel_difference($channel)
|
public function get_channel_difference($channel)
|
||||||
@ -147,8 +153,6 @@ trait UpdateHandler
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'updates.channelDifferenceTooLong':
|
case 'updates.channelDifferenceTooLong':
|
||||||
//unset($this->channels_state[$channel]);
|
|
||||||
//unset($this->chats[$this->get_info('channel#'.$channel)['bot_api_id']]);
|
|
||||||
$this->handle_update_messages($difference['messages'], $channel);
|
$this->handle_update_messages($difference['messages'], $channel);
|
||||||
$this->set_channel_state($channel, $difference);
|
$this->set_channel_state($channel, $difference);
|
||||||
unset($difference);
|
unset($difference);
|
||||||
@ -164,11 +168,18 @@ trait UpdateHandler
|
|||||||
|
|
||||||
public function set_update_state($data)
|
public function set_update_state($data)
|
||||||
{
|
{
|
||||||
$this->get_update_state()['pts'] = (!isset($data['pts']) || $data['pts'] === 0) ? $this->get_update_state()['pts'] : $data['pts'];
|
if (isset($data['pts']) && $data['pts'] !== 0) {
|
||||||
$this->get_update_state()['seq'] = (!isset($data['seq']) || $data['seq'] === 0) ? $this->get_update_state()['seq'] : $data['seq'];
|
$this->should_serialize = true;
|
||||||
$this->get_update_state()['date'] = (!isset($data['date']) || $data['date'] < $this->get_update_state()['date']) ? $this->get_update_state()['date'] : $data['date'];
|
$this->get_update_state()['pts'] = $data['pts'];
|
||||||
|
}
|
||||||
return $this->get_update_state();
|
if (isset($data['seq']) && $data['seq'] !== 0) {
|
||||||
|
$this->should_serialize = true;
|
||||||
|
$this->get_update_state()['seq'] = $data['seq'];
|
||||||
|
}
|
||||||
|
if (isset($data['date']) && $data['date'] > $this->get_update_state()['date']) {
|
||||||
|
$this->should_serialize = true;
|
||||||
|
$this->get_update_state()['date'] = $data['date'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function &get_update_state()
|
public function &get_update_state()
|
||||||
@ -325,6 +336,7 @@ trait UpdateHandler
|
|||||||
}
|
}
|
||||||
if ($update['pts'] > $cur_state['pts']) {
|
if ($update['pts'] > $cur_state['pts']) {
|
||||||
$cur_state['pts'] = $update['pts'];
|
$cur_state['pts'] = $update['pts'];
|
||||||
|
$this->should_serialize = true;
|
||||||
$pop_pts = true;
|
$pop_pts = true;
|
||||||
} elseif (isset($update['pts_count'])) {
|
} elseif (isset($update['pts_count'])) {
|
||||||
\danog\MadelineProto\Logger::log(['Duplicate update. current pts: '.$cur_state['pts'].' + pts count: '.(isset($update['pts_count']) ? $update['pts_count'] : 0).' = new pts: '.$new_pts.'. update pts: '.$update['pts'].' <= current pts '.$cur_state['pts'].', channel id: '.$channel_id], \danog\MadelineProto\Logger::ERROR);
|
\danog\MadelineProto\Logger::log(['Duplicate update. current pts: '.$cur_state['pts'].' + pts count: '.(isset($update['pts_count']) ? $update['pts_count'] : 0).' = new pts: '.$new_pts.'. update pts: '.$update['pts'].' <= current pts '.$cur_state['pts'].', channel id: '.$channel_id], \danog\MadelineProto\Logger::ERROR);
|
||||||
@ -333,6 +345,7 @@ trait UpdateHandler
|
|||||||
}
|
}
|
||||||
if ($channel_id !== false && isset($options['date']) && $this->get_update_state()['date'] < $options['date']) {
|
if ($channel_id !== false && isset($options['date']) && $this->get_update_state()['date'] < $options['date']) {
|
||||||
$this->get_update_state()['date'] = $options['date'];
|
$this->get_update_state()['date'] = $options['date'];
|
||||||
|
$this->should_serialize = true;
|
||||||
}
|
}
|
||||||
} elseif ($channel_id === false && isset($options['seq']) && $options['seq'] > 0) {
|
} elseif ($channel_id === false && isset($options['seq']) && $options['seq'] > 0) {
|
||||||
$seq = $options['seq'];
|
$seq = $options['seq'];
|
||||||
@ -350,6 +363,7 @@ trait UpdateHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($cur_state['seq'] != $seq) {
|
if ($cur_state['seq'] != $seq) {
|
||||||
|
$this->should_serialize = true;
|
||||||
$cur_state['seq'] = $seq;
|
$cur_state['seq'] = $seq;
|
||||||
if (isset($options['date']) && $cur_state['date'] < $options['date']) {
|
if (isset($options['date']) && $cur_state['date'] < $options['date']) {
|
||||||
$cur_state['date'] = $options['date'];
|
$cur_state['date'] = $options['date'];
|
||||||
@ -372,6 +386,7 @@ trait UpdateHandler
|
|||||||
if (!$this->settings['updates']['handle_updates']) {
|
if (!$this->settings['updates']['handle_updates']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
$this->should_serialize = true;
|
||||||
$next_seq = $this->get_update_state()['seq'] + 1;
|
$next_seq = $this->get_update_state()['seq'] + 1;
|
||||||
if (empty($this->get_update_state()['pending_seq_updates'][$next_seq]['updates'])) {
|
if (empty($this->get_update_state()['pending_seq_updates'][$next_seq]['updates'])) {
|
||||||
return false;
|
return false;
|
||||||
@ -394,6 +409,7 @@ trait UpdateHandler
|
|||||||
if (!$this->settings['updates']['handle_updates']) {
|
if (!$this->settings['updates']['handle_updates']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
$this->should_serialize = true;
|
||||||
if ($channel_id === false) {
|
if ($channel_id === false) {
|
||||||
$cur_state = &$this->get_update_state();
|
$cur_state = &$this->get_update_state();
|
||||||
} else {
|
} else {
|
||||||
@ -461,6 +477,9 @@ trait UpdateHandler
|
|||||||
if (!$this->settings['updates']['handle_updates']) {
|
if (!$this->settings['updates']['handle_updates']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (isset($update['message']['_']) && $update['message']['_'] === 'messageEmpty') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (isset($update['message']['from_id']) && $update['message']['from_id'] === $this->datacenter->authorization['user']['id']) {
|
if (isset($update['message']['from_id']) && $update['message']['from_id'] === $this->datacenter->authorization['user']['id']) {
|
||||||
$update['message']['out'] = true;
|
$update['message']['out'] = true;
|
||||||
}
|
}
|
||||||
|
@ -181,8 +181,7 @@ trait TL
|
|||||||
}
|
}
|
||||||
$auto = false;
|
$auto = false;
|
||||||
|
|
||||||
if (!is_array($object) && in_array($type['type'], ['User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputPeer'])) {
|
if ((!is_array($object) || (isset($object['_']) && $this->constructors->find_by_predicate($object['_'])['type'] !== $type['type'])) && in_array($type['type'], ['User', 'InputUser', 'Chat', 'InputChannel', 'Peer', 'InputPeer'])) {
|
||||||
//var_dump($this->get_info($object));
|
|
||||||
$object = $this->get_info($object)[$type['type']];
|
$object = $this->get_info($object)[$type['type']];
|
||||||
}
|
}
|
||||||
if (!isset($object['_'])) {
|
if (!isset($object['_'])) {
|
||||||
@ -197,7 +196,7 @@ trait TL
|
|||||||
|
|
||||||
$constructorData = $this->constructors->find_by_predicate($predicate);
|
$constructorData = $this->constructors->find_by_predicate($predicate);
|
||||||
if ($constructorData === false) {
|
if ($constructorData === false) {
|
||||||
\danog\MadelineProto\Logger::log([$object], \danog\MadelineProto\Logger::FATAL_WARNING);
|
\danog\MadelineProto\Logger::log([$object], \danog\MadelineProto\Logger::FATAL_ERROR);
|
||||||
throw new Exception('Could not extract type');
|
throw new Exception('Could not extract type');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,10 @@ trait Login
|
|||||||
$this->API->get_updates_state();
|
$this->API->get_updates_state();
|
||||||
$this->API->should_serialize = true;
|
$this->API->should_serialize = true;
|
||||||
if (!isset($this->API->settings['pwr']['pwr']) || !$this->API->settings['pwr']['pwr']) {
|
if (!isset($this->API->settings['pwr']['pwr']) || !$this->API->settings['pwr']['pwr']) {
|
||||||
file_get_contents('https://api.pwrtelegram.xyz/bot'.$token.'/getme');
|
try {
|
||||||
|
file_get_contents('https://api.pwrtelegram.xyz/bot'.$token.'/getme');
|
||||||
|
} catch (\danog\MadelineProto\Exception $e) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
\danog\MadelineProto\Logger::log(['Logged in successfully!'], \danog\MadelineProto\Logger::NOTICE);
|
\danog\MadelineProto\Logger::log(['Logged in successfully!'], \danog\MadelineProto\Logger::NOTICE);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user