onmotion/yii2-telegram

кнопка в чате

alexeydg opened this issue · 6 comments

Добрый день, подскажите реально ли сделать такое с вашим плагином, чтобы бот в чате выводил кнопку которая бы ссылалась на выполнение команды бота с параметром. например у бота есть команда /search бот выводит 10 результатов поиска, а их всего 20, под результатами он выводит кнопку "искать еще", которая бы ссылалась на команду /search page:2 ???

Конечно можно, вы же все на стороне сервера обрабатываете. Например (вырвано из контекста, но суть ясна):

//...
} else {
    $res = $command->queryAll();
    if ($res) {
        $keyboard[] = ["Еще фото"];
        $dbUser->action = 'more_photos';
        $dbUser->param = $items[0]['ID'];
    }
    $description = str_replace('<hr>', "\n\n", $items[0]['descr']);
    $data['text'] =
        "\n\n" . $items[0]['fullname'] .
        "\n\nКатегория: " . $items[0]['podcat'] .
        $description .
        "\n\nГарантия: " . $items[0]['guarant'];

    if (file_exists(Yii::getAlias('@webroot') . '/catalog/' . $items[0]['photo'])) {
        $mainPhoto = Yii::getAlias('@webroot') . '/catalog/' . $items[0]['photo'];
    }
}
//...

2018-11-06_11-51-39
На сервере обрабатываете как вам нужно:

//...
case 'more_photos':
                    $command = $connection->createCommand("SELECT * FROM repo_photos WHERE item_id = :id");
                    $command->bindValues(['id' => $dbUser->param]);
                    $res = $command->queryAll();
                    if ($res) {
                        $photos = ArrayHelper::getColumn($res, 'photo');
                    }
                    $data['text'] = "Выберите действие";

                    $dbUser->param = null;
                    $dbUser->action = null;

                    if (!empty($photos)) {
                        foreach ($photos as $photo) {
                            $file = Yii::getAlias('@webroot') . '/catalog/' . $photo;
                            if (file_exists($file)) {
                                Request::sendPhoto(['chat_id' => $chatId], $file);
                            }
                        }
                    }
                    break;
//...

2018-11-06_11-52-11

спасибо за оперативность, про обработку на сервере понятно) я не про то, я про то как мне с помощью вашего плагина в чат послать кнопочку которая ведет на вызов команды с параметрами

Я же написал пример как слать

        $keyboard[] = ["Еще фото"];
        $dbUser->action = 'more_photos';
        $dbUser->param = $items[0]['ID'];

Почитайте доки https://github.com/php-telegram-bot/core

судя по докам надо юзать https://github.com/php-telegram-bot/core/blob/master/src/Entities/InlineKeyboard.php а при установке вашего пакета такого файла там нет

в общем проблема в том что ваш плагин тянет старую версию

  • Installation request for onmotion/yii2-telegram ^0.8.6 -> satisfiable by onmotion/yii2-telegram[v0.8.6].
    • onmotion/yii2-telegram v0.8.6 requires longman/telegram-bot ^0.35.0 -> satisfiable by longman/telegram-bot[0.35] but these conflict with your requirements or minimum-stability., текущая версия longman/telegram-bot (0.54.1) вы можете это поправить?

Это не проблема, а зависимость. Я это делал 2 года назад и тестировалось только на версии 0.35.0. Сделайте форк, модифицируйте как вам нужно.