#!/usr/bin/env php . */ require '../vendor/autoload.php'; $settings = []; $MadelineProto = false; try { $MadelineProto = \danog\MadelineProto\Serialization::deserialize('MadelineProto_bot.madeline'); } catch (\danog\MadelineProto\Exception $e) { } if (file_exists('token.php') && $MadelineProto === false) { include_once 'token.php'; $MadelineProto = new \danog\MadelineProto\API($settings); $authorization = $MadelineProto->bot_login($MadelineProto_token); \danog\MadelineProto\Logger::log([$authorization], \danog\MadelineProto\Logger::NOTICE); } $reply_markup = ['inline_keyboard' => [ [ // 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'], ], ], ]; $start = 'This bot can create inline text buttons. To use it, simply type an inline query with the following syntax: 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 This will create a keyboard exactly like the one used in this message (click the buttons ;D) Created by [Daniil Gentili](mention:@danogentili) (@daniilgentili) using the [MadelineProto PHP MTProto client](daniil.it/MadelineProto).'; 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 { if (preg_match('|/start|', $update['update']['message']['message'])) { $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]); } } 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 { if (preg_match('|/start|', $update['update']['message']['message'])) { $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]); } } 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 { $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; } $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']; } } if (empty($toset['results'])) { $toset['switch_pm'] = $sswitch; } else { array_walk($toset['results'], 'translate'); } $MadelineProto->messages->setInlineBotResults($toset); } } catch (\danog\MadelineProto\RPCErrorException $e) { $MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]); try { $MadelineProto->messages->sendMessage(['peer' => $update['update']['user_id'], 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]); } catch (\danog\MadelineProto\RPCErrorException $e) { } catch (\danog\MadelineProto\Exception $e) { } try { $toset['switch_pm'] = $sswitch; $MadelineProto->messages->setInlineBotResults($toset); } catch (\danog\MadelineProto\RPCErrorException $e) { } catch (\danog\MadelineProto\Exception $e) { } } catch (\danog\MadelineProto\Exception $e) { $MadelineProto->messages->sendMessage(['peer' => '@danogentili', 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]); try { $MadelineProto->messages->sendMessage(['peer' => $update['update']['user_id'], 'message' => $e->getCode().': '.$e->getMessage().PHP_EOL.$e->getTraceAsString()]); } catch (\danog\MadelineProto\RPCErrorException $e) { } catch (\danog\MadelineProto\Exception $e) { } try { $toset['switch_pm'] = $sswitch; $MadelineProto->messages->setInlineBotResults($toset); } catch (\danog\MadelineProto\RPCErrorException $e) { } catch (\danog\MadelineProto\Exception $e) { } } } } \danog\MadelineProto\Serialization::serialize('MadelineProto_bot.madeline', $MadelineProto); }