Bugfix
This commit is contained in:
parent
3d203fc128
commit
aadd278c5a
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()]);
|
||||||
}
|
}
|
||||||
|
@ -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]);
|
||||||
} else if ($params['limit'] === null || count($updates) < $params['limit']) {
|
} else if ($params['limit'] === null || count($updates) < $params['limit']) {
|
||||||
$updates[] = ['update_id' => $key, 'update' => $value];
|
$updates[] = ['update_id' => $key, 'update' => $value];
|
||||||
@ -113,7 +116,7 @@ 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 +150,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 +165,9 @@ 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->should_serialize = true; $this->get_update_state()['pts'] = $data['pts']; };
|
||||||
$this->get_update_state()['seq'] = (!isset($data['seq']) || $data['seq'] === 0) ? $this->get_update_state()['seq'] : $data['seq'];
|
if (isset($data['seq']) && $data['seq'] !== 0) { $this->should_serialize = true; $this->get_update_state()['seq'] = $data['seq']; };
|
||||||
$this->get_update_state()['date'] = (!isset($data['date']) || $data['date'] < $this->get_update_state()['date']) ? $this->get_update_state()['date'] : $data['date'];
|
if (isset($data['date']) && $data['date'] > $this->get_update_state()['date']) { $this->should_serialize = true; $this->get_update_state()['date'] = $data['date']; };
|
||||||
|
|
||||||
return $this->get_update_state();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function &get_update_state()
|
public function &get_update_state()
|
||||||
@ -325,6 +324,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 +333,8 @@ 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 +352,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 +375,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 +398,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 +466,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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user