Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Как сделать Telegram bot который выводит информацию из бд

niceserver
сообщение 18.3.2017, 21:02
Сообщение #1
Стаж: 9 лет

Сообщений: 257
Благодарностей: 21
Полезность: 83

Здравствуйте.Нужно чтобы при написании телеграм боту команды /raspisanie вылетало сообщение выберите группу.А после того как user выбрал группу вылетало ее расписание.Сейчас бот при написании команды выводит просто привет username!.
php код которым выводится расписание на сайт

Код
<?
foreach($dbh->query("SELECT DISTINCT(`kurs`) FROM `rasp` ORDER BY `kurs`") as $value) {
  echo '
  <div class="mdl-tabs__panel" id="tab'.$value[0].'"> <div class="demo-grid-1_1 mdl-grid">';

$day = (date('G') > 17) ? date('l', strtotime(' +1 day')) : date('l');

  foreach($dbh->query("SELECT * FROM `rasp` WHERE `kurs` = '{$value[0]}' AND `day_of_week` = '{$day}' AND `evening` = false") as $value2) {
    echo '

    <div class="win" id="win-'.$value2['id'].'" style="display:none;">
   <div class="overlay"></div>
      <div class="visible">
        <h2>Предметы</h2>
        <div class="content">
        '.$value2['text'].'
        </div>
        <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent" data-upgraded=",MaterialButton" type="button" onClick="getElementById(\'win-'.$value2['id'].'\').style.display=\'none\';">закрыть</button>
    </div>
</div>
    <div class="mdl-cell mdl-cell--2-col mdl-cell--5-col-phone"><button onClick="getElementById(\'win-'.$value2['id'].'\').removeAttribute(\'style\');" class="mdl-button mdl-js-button mdl-button--raised" data-upgraded=",MaterialButton">'.$value2['grup'].'</button></div>
    ';
  }
  echo '</div></div>
  '[/php];
}
?>


"Примерный код бота"

Код
<?php
тут данные от бд

try {
    $dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_db, $db_user, $db_pass);
    $dbh->query('SET NAMES utf8');
} catch (PDOException $e) { die('Подключение не удалось: ' . $e->getMessage()); }

/**
* URL-адрес бота и его маркер.
*/

$access_token = 'тут токен';

$api = 'https://api.telegram.org/bot' . $access_token;

/**
* Зададим основные переменные.
*/

$output = json_decode(file_get_contents('php://input'), TRUE); // Получим то, что передано скрипту ботом в POST-сообщении и распарсим

$chat_id = $output['message']['chat']['id']; // Выделим идентификатор чата

$first_name = $output['message']['chat']['first_name']; // Выделим имя собеседника

$message = $output['message']['text']; // Выделим сообщение собеседника

/**
* Получим команды от пользователя.
* Переведём их для удобства в нижний регистр
*/

switch(strtolower_ru($message))
{
        case '/raspisanie':
sendMessage($chat_id, 'Привет, '. $first_name . '! ' . $emoji['preload'] );
  break;
        break;
    default:
        if($message)
        {
            $predmeti = '';
            $day = (date('G') > 17) ? date('l', strtotime(' +1 day')) : date('l');
                
            foreach($dbh->query("SELECT * FROM `rasp` WHERE grup = '{$message}' AND `day_of_week` = '{$day}' AND `evening` = false") as $value2)
            {
                $predmeti .= $value2['text'] . ' ';    
            }
            echo $predmeti;
            // отправка юзеру
        }    
        else
        {
            // оправляем юзеру ошибку
        }
        break;
}

/**
* Функция отправки сообщения в чат sendMessage().
*/

function sendMessage($chat_id, $message) {

file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message));

}

/**
* Функция перевода символов в нижний регистр, учитывающая кириллицу
*/

function strtolower_ru($text) {

   $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');

     $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');

return str_replace($alfavitupper,$alfavitlover,strtol[/php]ower($text));

}
?>


Структура таблицы бд:
"Структура таблицы бд"
Прикрепленное изображение


Отредактировал: niceserver, - 18.3.2017, 21:06
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя sunrise
сообщение 18.3.2017, 21:34
Сообщение #2
Стаж: 9 лет 8 месяцев

Сообщений: 60
Благодарностей: 14
Полезность: 179

изи
Скрытый текст
Код
<?php
тут данные от бд

try {
    $dbh = new PDO('mysql:host='.$db_host.';dbname='.$db_db, $db_user, $db_pass);
    $dbh->query('SET NAMES utf8');
} catch (PDOException $e) { die('Подключение не удалось: ' . $e->getMessage()); }

/**
* URL-адрес бота и его маркер.
*/

$access_token = 'тут токен';

$api = 'https://api.telegram.org/bot' . $access_token;

/**
* Зададим основные переменные.
*/

$output = json_decode(file_get_contents('php://input'), TRUE); // Получим то, что передано скрипту ботом в POST-сообщении и распарсим

$chat_id = $output['message']['chat']['id']; // Выделим идентификатор чата

$first_name = $output['message']['chat']['first_name']; // Выделим имя собеседника

$message = $output['message']['text']; // Выделим сообщение собеседника

/**
* Получим команды от пользователя.
* Переведём их для удобства в нижний регистр
*/

switch(strtolower_ru($message))
{
        case '/raspisanie':
sendMessage($chat_id, 'выберите группу');
  break;
        break;
    default:
        if($message)
        {
            $predmeti = '';
            $day = (date('G') > 17) ? date('l', strtotime(' +1 day')) : date('l');
                
            foreach($dbh->query("SELECT * FROM `rasp` WHERE grup = '{$message}' AND `day_of_week` = '{$day}' AND `evening` = false") as $value2)
            {
                $predmeti .= $value2['text'] . ' ';    
            }
            echo $predmeti;
            // отправка юзеру
        }    
        else
        {
            // оправляем юзеру ошибку
        }
        break;
}

/**
* Функция отправки сообщения в чат sendMessage().
*/

function sendMessage($chat_id, $message) {

file_get_contents($GLOBALS['api'] . '/sendMessage?chat_id=' . $chat_id . '&text=' . urlencode($message));

}

/**
* Функция перевода символов в нижний регистр, учитывающая кириллицу
*/

function strtolower_ru($text) {

   $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');

     $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');

return str_replace($alfavitupper,$alfavitlover,strtol[/php]ower($text));

}
?>


ReplyKeyboardMarkup
посл. ответ на стаковерфлоу.

Отредактировал: sunrise, - 18.3.2017, 21:37


pick rylai pls
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
niceserver
сообщение 18.3.2017, 21:57
Сообщение #3
Стаж: 9 лет

Сообщений: 257
Благодарностей: 21
Полезность: 83

sunrise, так: $keyboard = array(array("[Destaques]","[Campinas e RMC]","[esportes]"));

$resp = array("keyboard" => $keyboard,"resize_keyboard" => true,"one_time_keyboard" => true);

$reply = json_encode($resp);

$url = $GLOBALS[website]."/sendmessage?chat_id=".$chatId."&text=oi&reply_markup=".$reply "&reply_markup=".json_encode($resp);?в самом case менять ничего не нужно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: