Avoided memory leak, Button now implements ArrayAccess, improved documentation
This commit is contained in:
parent
fc607f18b2
commit
983912f188
22
README.md
22
README.md
@ -65,6 +65,7 @@ This library can also be used to create lua telegram bots (like bot API bots, on
|
||||
|
||||
* PFS in secret chats
|
||||
|
||||
* [Clickable inline buttons](#inline-buttons)!
|
||||
|
||||
## PHP Requirements
|
||||
|
||||
@ -174,6 +175,27 @@ You can find examples for nearly every MadelineProto function in
|
||||
* [`userbots/MadelineProto_bot.php`](https://github.com/danog/MadelineProto/blob/master/userbots/MadelineProto_bot.php) - More fun shiz
|
||||
* [`userbots/pwrtelegram_debug_bot`](https://github.com/danog/MadelineProto/blob/master/userbots/pwrtelegram_debug_bot.php) - More fun shiz
|
||||
|
||||
### Inline buttons
|
||||
|
||||
You can easily click inline buttons using MadelineProto, just access the correct button:
|
||||
|
||||
```
|
||||
$button = $update['update']['message']['reply_markup']['rows'][0]['buttons'][0];
|
||||
```
|
||||
|
||||
You can then access properties (they vary depending on the [type of button](https://docs.madelineproto.xyz/API_docs/types/KeyboardButton.html)):
|
||||
|
||||
```
|
||||
$text = $button['text'];
|
||||
```
|
||||
|
||||
And click them:
|
||||
|
||||
```
|
||||
$button->click();
|
||||
```
|
||||
|
||||
|
||||
### Storing sessions
|
||||
|
||||
To store information about an account session, serialization must be done.
|
||||
|
@ -72,8 +72,6 @@ class API extends APIFactory
|
||||
$this->API = $unserialized->API;
|
||||
$this->APIFactory();
|
||||
}
|
||||
Serialization::$instances[spl_object_hash($unserialized)] = $unserialized;
|
||||
|
||||
return;
|
||||
}
|
||||
$this->API = new MTProto($params);
|
||||
@ -85,13 +83,11 @@ class API extends APIFactory
|
||||
//\danog\MadelineProto\Logger::log(['Getting future salts...'], Logger::ULTRA_VERBOSE);
|
||||
//$this->future_salts = $this->get_future_salts(['num' => 3]);
|
||||
\danog\MadelineProto\Logger::log([\danog\MadelineProto\Lang::$current_lang['madelineproto_ready']], Logger::NOTICE);
|
||||
Serialization::$instances[spl_object_hash($this)] = $this;
|
||||
}
|
||||
|
||||
public function __wakeup()
|
||||
{
|
||||
//if (method_exists($this->API, 'wakeup')) $this->API = $this->API->wakeup();
|
||||
Serialization::$instances[spl_object_hash($this)] = $this;
|
||||
$this->APIFactory();
|
||||
}
|
||||
|
||||
|
@ -143,7 +143,6 @@ class Connection
|
||||
break;
|
||||
case 'http':
|
||||
case 'https':
|
||||
case 'https_proxied':
|
||||
$this->parsed = parse_url($ip);
|
||||
if ($this->parsed['host'][0] === '[') {
|
||||
$this->parsed['host'] = substr($this->parsed['host'], 1, -1);
|
||||
@ -161,10 +160,6 @@ class Connection
|
||||
throw new Exception(\danog\MadelineProto\Lang::$current_lang['socket_con_error']);
|
||||
}
|
||||
$this->sock->setBlocking(true);
|
||||
if ($this->protocol === 'https_proxied') {
|
||||
$this->write("CONNECT {$this->parsed['host']}:$port HTTP/1.1\r\nHost: {$this->parsed['host']}:$port\r\n\r\n");
|
||||
$this->read_message();
|
||||
}
|
||||
break;
|
||||
case 'udp':
|
||||
throw new Exception(\danog\MadelineProto\Lang::$current_lang['protocol_not_implemented']);
|
||||
@ -182,7 +177,6 @@ class Connection
|
||||
case 'tcp_full':
|
||||
case 'http':
|
||||
case 'https':
|
||||
case 'https_proxied':
|
||||
case 'obfuscated2':
|
||||
try {
|
||||
unset($this->sock);
|
||||
@ -237,7 +231,6 @@ class Connection
|
||||
case 'tcp_full':
|
||||
case 'http':
|
||||
case 'https':
|
||||
case 'https_proxied':
|
||||
$wrote = 0;
|
||||
if (($wrote += $this->sock->write($what)) !== $length) {
|
||||
while (($wrote += $this->sock->write(substr($what, $wrote))) !== $length) {
|
||||
@ -282,7 +275,6 @@ class Connection
|
||||
case 'tcp_full':
|
||||
case 'http':
|
||||
case 'https':
|
||||
case 'https_proxied':
|
||||
$packet = '';
|
||||
while (strlen($packet) < $length) {
|
||||
$packet .= $this->sock->read($length - strlen($packet));
|
||||
@ -331,9 +323,9 @@ class Connection
|
||||
return $this->read($packet_length < 127 ? $packet_length << 2 : unpack('V', $this->read(3)."\0")[1] << 2);
|
||||
case 'http':
|
||||
case 'https':
|
||||
case 'https_proxied':
|
||||
$response = $this->read_http_payload();
|
||||
if ($response['code'] !== 200) {
|
||||
Logger::log([$response['body']]);
|
||||
throw new Exception($response['description'], $response['code']);
|
||||
}
|
||||
$close = $response['protocol'] === 'HTTP/1.0';
|
||||
@ -374,8 +366,7 @@ class Connection
|
||||
break;
|
||||
case 'http':
|
||||
case 'https':
|
||||
case 'https_proxied':
|
||||
$this->write('POST '.$this->parsed['path']." HTTP/1.1\r\nHost: ".$this->parsed['host']."\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: keep-alive\r\nKeep-Alive: timeout=100000, max=10000000\r\nContent-Length: ".strlen($message)."\r\n\r\n".$message);
|
||||
$this->write('POST '.$this->parsed['path']." HTTP/1.1\r\nHost: ".$this->parsed['host'].":$port\r\nContent-Type: application/x-www-form-urlencoded\r\nConnection: keep-alive\r\nKeep-Alive: timeout=100000, max=10000000\r\nContent-Length: ".strlen($message)."\r\n\r\n".$message);
|
||||
break;
|
||||
case 'udp':
|
||||
throw new Exception(\danog\MadelineProto\Lang::$current_lang['protocol_not_implemented']);
|
||||
|
@ -160,6 +160,7 @@ $result = $'.$type.'->click();
|
||||
* `false` - If the button is an unsupported button, like keyboardButtonRequestPhone, keyboardButtonRequestGeoLocation, keyboardButtonSwitchInlinekeyboardButtonBuy; you will have to parse data from these buttons manually
|
||||
|
||||
|
||||
You can also access the properties of the constructor as a normal array, for example $button[\'name\']
|
||||
';
|
||||
}
|
||||
}
|
||||
|
@ -18,8 +18,6 @@ namespace danog\MadelineProto;
|
||||
*/
|
||||
class Serialization
|
||||
{
|
||||
public static $instances = [];
|
||||
|
||||
public static function serialize_all($exception)
|
||||
{
|
||||
echo $exception.PHP_EOL;
|
||||
@ -134,7 +132,6 @@ class Serialization
|
||||
if ($unserialized instanceof \danog\MadelineProto\API) {
|
||||
$unserialized->session = $filename;
|
||||
}
|
||||
self::$instances[spl_object_hash($unserialized)] = $unserialized;
|
||||
|
||||
return $unserialized;
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
namespace danog\MadelineProto\TL\Types;
|
||||
|
||||
class Button extends \Volatile implements \JsonSerializable
|
||||
class Button implements \JsonSerializable, \ArrayAccess
|
||||
{
|
||||
use \danog\Serializable;
|
||||
private $info = [];
|
||||
@ -57,4 +57,20 @@ class Button extends \Volatile implements \JsonSerializable
|
||||
{
|
||||
return (array) $this->data;
|
||||
}
|
||||
public function offsetSet($name, $value) {
|
||||
if ($name === null) {
|
||||
$this->data []= $value;
|
||||
} else {
|
||||
$this->data[$name] = $value;
|
||||
}
|
||||
}
|
||||
public function offsetGet($name) {
|
||||
return $this->data[$name];
|
||||
}
|
||||
public function offsetUnset($name) {
|
||||
unset($this->data[$name]);
|
||||
}
|
||||
public function offsetExists($name) {
|
||||
return isset($this->data[$name]);
|
||||
}
|
||||
}
|
||||
|
@ -46,9 +46,9 @@ git add -A
|
||||
git commit -am "Release $TRAVIS_COMMIT"
|
||||
git push origin master
|
||||
cd ..
|
||||
echo "$TRAVIS_COMMIT_MESSAGE" | grep "Apply fixes from StyleCI" && exit
|
||||
|
||||
[ -d JSON.sh ] || git clone https://github.com/dominictarr/JSON.sh
|
||||
|
||||
for chat_id in $destinations;do
|
||||
ID=$(curl -s https://api.telegram.org/bot$token/sendMessage -F disable_web_page_preview=1 -F text=" <b>Recent Commits to MadelineProto:master</b>
|
||||
<a href=\"https://github.com/danog/MadelineProto/commit/$TRAVIS_COMMIT\">$TRAVIS_COMMIT_MESSAGE</a>
|
||||
|
Loading…
Reference in New Issue
Block a user