О созданном Telegram Bot

Здесь можно общаться на любые темы
Ответить
metalcalc
Сообщения: 2
Зарегистрирован: 30.07.2016, 14:20

О созданном Telegram Bot

Сообщение metalcalc » 30.07.2016, 14:25

Приветствую!

По вашему сайту про ботов Телеграм, создал бота и дальше написаного вами так и не ушел :(
Вопрос помогите дополнить inline кнопками ваш бот, хочу сделать типа выбора из двух ответов. Голову сломал, не разбираюсь я все! :| Все плохо но желание есть!

Аватара пользователя
Максим
Администратор
Сообщения: 59
Зарегистрирован: 05.03.2016, 00:20

Re: О созданном Telegram Bot

Сообщение Максим » 30.07.2016, 16:39

metalcalc писал(а):Приветствую!
По вашему сайту про ботов Телеграм, создал бота и дальше написаного вами так и не ушел :(
Вопрос помогите дополнить inline кнопками ваш бот, хочу сделать типа выбора из двух ответов. Голову сломал, не разбираюсь я все! :| Все плохо но желание есть!
Кнопки делаются путём создания специальных запросов из кода бота. Я делаю так:

Код: Выделить всё

/**
 * Emoji для лучшего визуального оформления.
 */
$emoji = array(
  'preload' => json_decode('"\uD83D\uDE03"'),   // Улыбочка.
  'translate' => json_decode('"\ud83c\udf10"'), // Земной шар.
  'confused' => json_decode('"\ud83d\ude15"'),  // Нет перевода.
  'back' => json_decode('"\ud83d\udd19"'),      // Назад.
  'question' => json_decode('"\u2753"'),        // Вопрос.
  'yum' => json_decode('"\ud83d\ude0b"'),       // Ням.
  'music' => json_decode('"\uD83C\uDFB8"'),     // Музыка.
  'prev' => json_decode('"\u2191"'),            // Листать
  'next' => json_decode('"\u2193"'),            // Листать  
  	
  'weather' => array(
    'clear' => json_decode('"\u2600"'),       // Солнце.
    'clouds' => json_decode('"\u2601"'),      // Облака.
    'rain' => json_decode('"\u2614"'),        // Дождь.
    'snow' => json_decode('"\u2744"'),        // Снег.
//    'mist' => json_decode('"\uD83C\uDF2B"'),  // Туман
    'mist' => json_decode('"\ud83c\udf01"'),  // Туманно
    	
  ),
);

// Основная клавиатура        
function kbd_main ($chat_id, $text_main_kbd='Вы в главном меню') {
  global $emoji;
  apiRequest("sendMessage", array('chat_id' => $chat_id, "parse_mode" => 'HTML', "text" => $text_main_kbd, 'reply_markup' => array(
    'keyboard' => array(
      array($emoji['preload'].'  Привет!', $emoji['question'].'  Помощь', $emoji['yum'].'  Спасибо!'),
      array($emoji['translate'].'  Перевод', $emoji['weather']['clear'].'  Погода', $emoji['music'].'  Музыка')
    ),
    'one_time_keyboard' => false,
    'resize_keyboard' => true )));
}  

/** 
 * 
 * Запрос к API-серверу (json)
*/
function apiRequest($method, $parameters, $contentType='application/json') {
  // if (!$contentType ) {$contentType = 'application/json'; }
  // Если метод не является строкой, выдадим ошибку
  if (!is_string($method)) {
    error_log("Имя метода должно быть строкой\n");
    return false;
  }
  // Если нет параметров, добавляем в них пустой массив
  if (!$parameters) {
    $parameters = array();
  // Если параметр есть, но не является массивом, выдаём ошибку
  } else if (!is_array($parameters)) {
    error_log("Параметры должны быть массивом\n");
    return false;
  }
  // Метод загоняем в параметры
  $parameters["method"] = $method;
  // Инициализируем сеанс соединения по заданному url
  $handle = curl_init(API_URL);
  // Задаём параметры соединения
  curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 5);
  curl_setopt($handle, CURLOPT_TIMEOUT, 60);
  // В зависимости от типа контента кодировать в json или нет
  if ($contentType == 'application/json') {
    curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($parameters));
  }
  elseif ($contentType == 'multipart/form-data') {
    curl_setopt($handle, CURLOPT_POSTFIELDS, $parameters);
  }
  curl_setopt($handle, CURLOPT_HTTPHEADER, array("Content-Type: $contentType"));
  // Делаем запрос и получаем ответ
  $response = curl_exec($handle);
  // Если ответ false, логгировать ошибку, закрыть сеанс и выйти
  if ($response === false) {
    $errno = curl_errno($handle);
    $error = curl_error($handle);
    error_log("Curl вернул ошибку $errno: $error\n");
    curl_close($handle);
    return false;
  }
  // Если ответ получен, найти последний полученный HTTP код
  $http_code = intval(curl_getinfo($handle, CURLINFO_HTTP_CODE));
  // Закрыть сеанс
  curl_close($handle);
  // Если код больше или равен 500, это ошибка сервера. Подождёи 10 сек и выйдем
  if ($http_code >= 500) {
    // do not wat to DDOS server if something goes wrong
    // не ждать, чтобы сервер заддосился, если что-то пойдёт не так
    sleep(10);
    return false;
  // Если код не равен 200, то результат неуспешный. Выведем в лог ошибки также содержимое ответа - код ошибки и её описание и выйдем.
  } else if ($http_code != 200) {
    $response = json_decode($response, true);
    error_log("Запрос вернул ошибку {$response['error_code']}: {$response['description']}\n");
    // Если код 401, создаём новое исключение о неверном маркере доступа
    if ($http_code == 401) {
      throw new Exception('Предоставлен неверный маркер доступа');
    }
    return false;
  // Если пока всё ОК, возьмём ответ, и выведем в лог его описание с сообщением об успехе, после чего возьмём результат ответа
  } else {
    $response = json_decode($response, true);
    if (isset($response['description'])) {
      error_log("Запрос завершился успешно: {$response['description']}\n");
    }
    $response = $response['result'];
  }
  // Вернём результат ответа
  return $response;
}

Ответить