/** * @return Generator * @throws \Steelbot\TelegramBotApi\Exception\TelegramBotApiException */ function botCoroutine() : \Generator { $api = new Api(getenv('BOT_TOKEN')); $updateId = 1; printf("Waiting for updates ...\n"); while (true) { // waiting for updates from telegram server /** @var Update[] $updates */ $updates = (yield from $api->getUpdates($updateId)); foreach ($updates as $update) { $method = processUpdate($update); if (is_object($method)) { yield from $api->execute($method); } $updateId = $update->updateId; } } }
function iterate($offset) { $file = Api::getUpdates((string) $offset); for ($i = 0; $i < count($file); $i++) { $current = new Message($file[$i]); $offset = max($current->updateId, $offset) + 1; $cityLevel = [['Алматы'], ['Астана'], ['Шымкент'], ['Тараз'], ['Кызылорда'], ['Атырау'], ['Актау'], ['Караганда'], ['Павлодар'], ['Семипалатинск'], ['Костанай'], ['Петропавловск'], ['Талдыкорган'], ['Кокшетау']]; $firstLevel = [['Услуги'], ['Акции'], ['Проверить Баланс'], ['Адреса, контакты'], ['Отправить запрос о неполадках'], ['Приложения АЛМА-ТВ']]; $secondLevel = [['Телевидение'], ['Интернет'], ['Интернет + ТВ'], ['TV BOX']]; // $current->reply("Ima got your text with {$current->text()}"); if ($current->text() == '/start') { $current->replyCode('Добро пожаловать! Вас приветствует официальный бот АЛМА-ТВ' . '%0A' . 'Чтобы продолжить выберите ваш город:', $cityLevel); } if ($current->text() == 'Павлодар') { $current->replyDropDown("Выберите:", $firstLevel); } if ($current->text() == 'Алматы') { $current->replyDropDown("Выберите:", $firstLevel); } if ($current->text() == 'Шымкент') { $current->replyDropDown("Выберите:", $firstLevel); } if ($current->text() == 'Услуги') { $current->replyDropDown("Выберите:", $secondLevel); } if ($current->text() == 'Акции') { $current->reply('Уважаемые дамы и господа!' . '%0A' . 'АЛМА-ТВ запускает новогоднюю акцию, которая позволяет сэкономить до 10 000 тенге.' . '%0A' . 'При внесении предоплаты за 12 и более месяцев, предоставляются скидки:' . '%0A' . '- на пакеты «TV100+» и «Антенна80+» - скидка 18%' . '%0A' . '- на пакеты «TVMAX» и «AntennaMAX» -скидка в 24%.' . '%0A' . 'Специальное предложение, действует до 31 января 2016 года.'); } if ($current->text() == 'Адреса, контакты') { $current->replyDropDown("Выберите:", $secondLevel); } if ($current->text() == 'Отправить запрос о неполадках') { $current->replyDropDown("Выберите:", $secondLevel); } if ($current->text() == 'Приложения АЛМА-ТВ') { $current->reply('Приложение “Alma TV” позволяет получить мгновенный доступ к балансу Вашего счёта, телепрограмме и многому другому. Дополнительно, у пользователя есть возможность отправки заявок на подключение или ремонт в несколько простых шагов. Для проверки баланса требуется быть абонентом компании «АЛМА-ТВ», остальные функции доступны всем пользователям. Возможность управления Вашим счётом и множество иных функций появятся в следующих версиях приложения.' . '%0A' . 'Для скачивания приложения ALMA-TV на Android перейдите по ссылке: ' . '%0A' . 'Приложение "TV BOX". Смотрите любимые передачи, как на телевизоре, так и на мобильных устройствах. Сортируйте каналы по жанрам, ставьте видео на паузу и перематывайте, выбирайте звуковую дорожку и качество изображения. Подробнее об этих и других функциях TV Box на сайте tv-box.kz' . '%0A' . 'Для скачивания приложения TV BOX на Ваше мобильное устройство, пройдите по ссылкам:', $secondLevel); } echo "==> Message text {$current->text()} \n\r"; } echo "==> Setup new offset {$offset}\n\r"; return $offset; }
/** * Check updates * * @return void */ public function checkUpdates() { $updates = json_decode($this->_botApi->getUpdates($this->_lastUpdate->getBotUpdateId()), $assoc = true); $this->_updatesHandler->handleBotApiUpdates($updates); }
#!/usr/bin/env php <?php require dirname(__DIR__) . '/vendor/autoload.php'; use Icicle\Loop; use Steelbot\TelegramBotApi\{Api, InlineQueryResult\InlineQueryResultArticle, InputMessageContent\InputContactMessageContent, InputMessageContent\InputLocationMessageContent, InputMessageContent\InputTextMessageContent, InputMessageContent\InputVenueMessageContent, Type\Update}; if (!getenv('BOT_TOKEN')) { echo "Error: BOT_TOKEN environment variable not found\n"; printf("Usage:\n BOT_TOKEN=123:telegram_bot_token ./%s\n", basename(__FILE__)); exit(-1); } $generator = function () { $api = new Api(getenv('BOT_TOKEN')); while (true) { // waiting for updates from telegram server /** @var Update[] $updates */ $updates = (yield from $api->getUpdates()); foreach ($updates as $update) { if ($update->inlineQuery) { $inlineQuery = $update->inlineQuery; $results[] = new InlineQueryResultArticle(null, "Text result", new InputTextMessageContent("You entered 1: " . $inlineQuery->query)); $results[] = new InlineQueryResultArticle(null, "Location result", new InputLocationMessageContent(55.757, 37, 616)); $results[] = new InlineQueryResultArticle(null, "Venue result", new InputVenueMessageContent(55.757, 37.616, "Venue title", "Venue address")); $results[] = new InlineQueryResultArticle(null, "Contact result", new InputContactMessageContent('+0123456789', "First Name")); $method = new \Steelbot\TelegramBotApi\Method\AnswerInlineQuery($inlineQuery->id, $results); echo "Answering to #{$inlineQuery->id}\n"; yield from $api->execute($method); } } } }; $coroutine = new \Icicle\Coroutine\Coroutine($generator());