2017-02-11 15:16:57 +01:00
#!/usr/bin/env php
< ? php
2017-02-11 15:30:37 +01:00
/*
Copyright 2016 - 2017 Daniil Gentili
( https :// daniil . it )
This file is part of MadelineProto .
MadelineProto is free software : you can redistribute it and / or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation , either version 3 of the License , or ( at your option ) any later version .
MadelineProto is distributed in the hope that it will be useful , but WITHOUT ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
See the GNU Affero General Public License for more details .
You should have received a copy of the GNU General Public License along with MadelineProto .
If not , see < http :// www . gnu . org / licenses />.
*/
2017-02-11 15:16:57 +01:00
require 'vendor/autoload.php' ;
$settings = [];
$MadelineProto = false ;
try {
2017-02-21 19:04:37 +01:00
$MadelineProto = \danog\MadelineProto\Serialization :: deserialize ( 'MadelineProto_bot.madeline' );
2017-02-11 15:16:57 +01:00
} catch ( \danog\MadelineProto\Exception $e ) {
}
2017-02-21 19:04:37 +01:00
2017-02-11 15:16:57 +01:00
if ( file_exists ( 'token.php' ) && $MadelineProto === false ) {
include_once 'token.php' ;
$MadelineProto = new \danog\MadelineProto\API ( $settings );
2017-02-21 19:04:37 +01:00
$authorization = $MadelineProto -> bot_login ( $MadelineProto_token );
2017-02-11 15:18:18 +01:00
\danog\MadelineProto\Logger :: log ([ $authorization ], \danog\MadelineProto\Logger :: NOTICE );
2017-02-11 15:16:57 +01:00
}
2017-02-21 21:05:09 +01:00
$reply_markup = [ 'inline_keyboard' => [
2017-02-21 19:04:37 +01:00
[ // Row 1
[ 'text' => 'Row 1 b1' ],
[ 'text' => 'Row 1 b2' ],
[ 'text' => 'Row 1 b3' ],
],
[ // Row 2
[ 'text' => 'Row 2 b1' ],
[ 'text' => 'Row 2 b2' ],
[ 'text' => 'Row 2 b3' ],
],
[ // Row 3
[ 'text' => 'Row 3 b1' ],
[ 'text' => 'Row 3 b2' ],
[ 'text' => 'Row 3 b3' ],
],
2017-02-21 21:05:09 +01:00
],
2017-02-21 19:04:37 +01:00
];
2017-02-21 21:05:09 +01:00
$start = ' This bot can create inline text buttons .
2017-02-11 15:16:57 +01:00
To use it , simply type an inline query with the following syntax :
2017-02-21 19:04:37 +01:00
Row 1 b1 | Row 1 b2 | Row 1 b3
Row 2 b1 | Row 2 b2 | Row 2 b3
Row 3 b1 | Row 3 b2 | Row 3 b3
2017-02-11 15:16:57 +01:00
2017-02-21 19:04:37 +01:00
This will create a keyboard exactly like the one used in this message ( click the buttons ; D )
2017-02-11 15:16:57 +01:00
2017-02-21 21:05:09 +01:00
Created by [ Daniil Gentili ]( mention :@ danogentili ) ( @ daniilgentili ) using the [ MadelineProto PHP MTProto client ]( daniil . it / MadelineProto ) . ' ;
2017-02-11 15:16:57 +01:00
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
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
switch ( $update [ 'update' ][ '_' ]) {
case 'updateNewMessage' :
if ( isset ( $update [ 'update' ][ 'message' ][ 'out' ]) && $update [ 'update' ][ 'message' ][ 'out' ]) {
continue ;
}
try {
2017-02-11 15:18:18 +01:00
if ( preg_match ( '|/start|' , $update [ 'update' ][ 'message' ][ 'message' ])) {
2017-02-21 19:04:37 +01:00
$MadelineProto -> messages -> sendMessage ([ 'peer' => $update [ 'update' ][ 'message' ][ 'from_id' ], 'message' => $start , 'reply_to_msg_id' => $update [ 'update' ][ 'message' ][ 'id' ], 'parse_mode' => 'markdown' , 'reply_markup' => $reply_markup ]);
2017-02-11 15:16:57 +01:00
}
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
$MadelineProto -> messages -> sendMessage ([ 'peer' => '@danogentili' , 'message' => $e -> getCode () . ': ' . $e -> getMessage () . PHP_EOL . $e -> getTraceAsString ()]);
}
break ;
case 'updateNewChannelMessage' :
if ( isset ( $update [ 'update' ][ 'message' ][ 'out' ]) && $update [ 'update' ][ 'message' ][ 'out' ]) {
continue ;
}
try {
2017-02-11 15:18:18 +01:00
if ( preg_match ( '|/start|' , $update [ 'update' ][ 'message' ][ 'message' ])) {
2017-02-21 19:04:37 +01:00
$MadelineProto -> messages -> sendMessage ([ 'peer' => $update [ 'update' ][ 'message' ][ 'to_id' ], 'message' => $start , 'reply_to_msg_id' => $update [ 'update' ][ 'message' ][ 'id' ], 'parse_mode' => 'markdown' , 'reply_markup' => $reply_markup ]);
2017-02-11 15:16:57 +01:00
}
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
$MadelineProto -> messages -> sendMessage ([ 'peer' => '@danogentili' , 'message' => $e -> getCode () . ': ' . $e -> getMessage () . PHP_EOL . $e -> getTraceAsString ()]);
} catch ( \danog\MadelineProto\Exception $e ) {
$MadelineProto -> messages -> sendMessage ([ 'peer' => '@danogentili' , 'message' => $e -> getCode () . ': ' . $e -> getMessage () . PHP_EOL . $e -> getTraceAsString ()]);
}
break ;
case 'updateBotInlineQuery' :
try {
2017-02-11 15:18:18 +01:00
$sswitch = [ '_' => 'inlineBotSwitchPM' , 'text' => 'FAQ' , 'start_param' => 'lel' ];
if ( $update [ 'update' ][ 'query' ] === '' ) {
$MadelineProto -> messages -> setInlineBotResults ([ 'query_id' => $update [ 'update' ][ 'query_id' ], 'results' => [], 'cache_time' => 0 , 'switch_pm' => $sswitch ]);
} else {
$toset = [ 'query_id' => $update [ 'update' ][ 'query_id' ], 'results' => [], 'cache_time' => 0 , 'private' => true ];
if ( preg_match ( '|\$\s*$|' , $update [ 'update' ][ 'query' ])) {
$exploded = explode ( '|' , preg_replace ( '/\$\s*$/' , '' , $update [ 'update' ][ 'query' ]));
array_walk ( $exploded , function ( & $value , $key ) {
$value = preg_replace ([ '/^\s+/' , '/\s+$/' ], '' , $value );
});
$query = array_shift ( $exploded );
foreach ( $exploded as $current => $botq ) {
$bot = preg_replace ( '|:.*|' , '' , $botq );
if ( $bot === '' || $uMadelineProto -> get_info ( $bot )[ 'bot_api_id' ] === $MadelineProto -> API -> datacenter -> authorization [ 'user' ][ 'id' ]) {
$toset [ 'switch_pm' ] = $sswitch ;
break ;
}
$select = preg_replace ( '|' . $bot . ':|' , '' , $botq );
$results = $uMadelineProto -> messages -> getInlineBotResults ([ 'bot' => $bot , 'peer' => $update [ 'update' ][ 'user_id' ], 'query' => $query , 'offset' => $offset ]);
if ( isset ( $results [ 'switch_pm' ])) {
$toset [ 'switch_pm' ] = $results [ 'switch_pm' ];
break ;
2017-02-11 15:16:57 +01:00
}
2017-02-11 15:18:18 +01:00
$toset [ 'gallery' ] = $results [ 'gallery' ];
$toset [ 'results' ] = [];
if ( is_numeric ( $select )) {
$toset [ 'results' ][ 0 ] = $results [ 'results' ][ $select - 1 ];
} elseif ( $select === '' ) {
$toset [ 'results' ] = $results [ 'results' ];
} else {
foreach ( $results [ 'results' ] as $result ) {
if ( isset ( $result [ 'send_message' ][ 'message' ]) && preg_match ( '|' . $select . '|' , $result [ 'send_message' ][ 'message' ])) {
$toset [ 'results' ][ 0 ] = $result ;
}
}
}
if ( ! isset ( $toset [ 'results' ][ 0 ])) {
$toset [ 'results' ] = $results [ 'results' ];
}
if ( count ( $exploded ) - 1 === $current || ! isset ( $toset [ 'results' ][ 0 ][ 'send_message' ][ 'message' ])) {
break ;
}
$query = $toset [ 'results' ][ 0 ][ 'send_message' ][ 'message' ];
2017-02-11 15:16:57 +01:00
}
}
2017-02-11 15:18:18 +01:00
if ( empty ( $toset [ 'results' ])) {
$toset [ 'switch_pm' ] = $sswitch ;
} else {
array_walk ( $toset [ 'results' ], 'translate' );
}
$MadelineProto -> messages -> setInlineBotResults ( $toset );
2017-02-11 15:16:57 +01:00
}
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
$MadelineProto -> messages -> sendMessage ([ 'peer' => '@danogentili' , 'message' => $e -> getCode () . ': ' . $e -> getMessage () . PHP_EOL . $e -> getTraceAsString ()]);
try {
2017-02-11 15:18:18 +01:00
$MadelineProto -> messages -> sendMessage ([ 'peer' => $update [ 'update' ][ 'user_id' ], 'message' => $e -> getCode () . ': ' . $e -> getMessage () . PHP_EOL . $e -> getTraceAsString ()]);
2017-02-11 15:16:57 +01:00
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
2017-02-11 15:18:18 +01:00
} catch ( \danog\MadelineProto\Exception $e ) {
}
2017-02-11 15:16:57 +01:00
try {
2017-02-11 15:18:18 +01:00
$toset [ 'switch_pm' ] = $sswitch ;
$MadelineProto -> messages -> setInlineBotResults ( $toset );
2017-02-11 15:16:57 +01:00
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
2017-02-11 15:18:18 +01:00
} catch ( \danog\MadelineProto\Exception $e ) {
}
2017-02-11 15:16:57 +01:00
} catch ( \danog\MadelineProto\Exception $e ) {
$MadelineProto -> messages -> sendMessage ([ 'peer' => '@danogentili' , 'message' => $e -> getCode () . ': ' . $e -> getMessage () . PHP_EOL . $e -> getTraceAsString ()]);
try {
2017-02-11 15:18:18 +01:00
$MadelineProto -> messages -> sendMessage ([ 'peer' => $update [ 'update' ][ 'user_id' ], 'message' => $e -> getCode () . ': ' . $e -> getMessage () . PHP_EOL . $e -> getTraceAsString ()]);
2017-02-11 15:16:57 +01:00
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
2017-02-11 15:18:18 +01:00
} catch ( \danog\MadelineProto\Exception $e ) {
}
2017-02-11 15:16:57 +01:00
try {
2017-02-11 15:18:18 +01:00
$toset [ 'switch_pm' ] = $sswitch ;
$MadelineProto -> messages -> setInlineBotResults ( $toset );
2017-02-11 15:16:57 +01:00
} catch ( \danog\MadelineProto\RPCErrorException $e ) {
2017-02-11 15:18:18 +01:00
} catch ( \danog\MadelineProto\Exception $e ) {
}
2017-02-11 15:16:57 +01:00
}
}
}
2017-02-21 19:04:37 +01:00
\danog\MadelineProto\Serialization :: serialize ( 'MadelineProto_bot.madeline' , $MadelineProto );
2017-02-11 15:16:57 +01:00
}