Пишем Telegram бота на JavaScript. Часть 2. Курс биткоина


Первый пост: Пишем Telegram бота на JavaScript. Вводная

Кнопки

Ладно, встретили не плохо, продолжаем.

Бот должен нести полезную нагрузку, так что наша следующая задача сделать что-то толковое.  Но для начала вот еще раз код нашей заготовки:

var TelegramBot = require('node-telegram-bot-api');
var TOKEN = '271342174:AAFY4-V7TY7Ux5V7liK_TpdmFM7W87TzTuM';
var botOptions = {
  polling: true
};
var bot = new TelegramBot(TOKEN, botOptions); // Создаём экземпляр объекта
 
 
bot.on('text', function(msg) {
var messageChatId = msg.chat.id;
var messageText = msg.text;
 
  if (messageText === '/start') {
bot.sendMessage(messageChatId, 'Добро пожаловать, ну hello world');
  }
});
 

Сразу после объявления botOptions запишем:

var opts = {
  reply_markup: JSON.stringify({
    keyboard: [
      ['??','??']
    ],
    resize_keyboard: true
  })
};

Данный код создает адаптивную клавиатуру. За адаптив отвечает параметр resize_keyboard, за сами кнопки keyboard. Нам нужно передавать по массиву на строку. То есть наши кнопки с флагами в одном массиве, идут друг за другом, а чтобы сделать второй ряд, просто запишем еще один [] массив. А теперь самое интересное, откуда брать emoji: на этом сайте копируете как текст из графы "Смайлик" и вставляете. Для флагов лучше использовать буквенное обозначение us\ru(не просто буквами), т.к. если флаги не отобразятся, то хотя бы будет понятно что имелось ввиду(например, в Web версии телеграма отсутствуют большинство флагов). По этой ссылке должны отображаться все, т.к., видимо, веб версия телеграма совместима с vk по набору.

Итак, пора вспомнить про третью опцию в sendMessage - это и есть наша opts. Перезапишем наш метод отправки сообщения на команду /start:

bot.sendMessage(messageChatId, 'Добро пожаловать, ну hello world', opts);

Супер, вы молодцы  &#_128077; Разберемся с получением курса валют. Использовать будем биржу BTC-E и её api(v3).  В самом начале нам нужно подключить require:

var request = require('request');

Это позволит нам делать AJAX запросы и обрабатывать ответ. 

if (messageText === 'btc usd' || messageText === 'бтц юсд' || messageText === '??') {
    var url = 'https://btc-e.nz/api/3/ticker/btc_usd';
    request(url, function (error, response, body) {
      if (!error && response.statusCode == 200) {
        var bodyJson = JSON.parse(body);
        var msg = 'Продажа 1 BTC: ' + bodyJson.btc_usd.sell + ' ?? \r\n';
        msg += 'Покупка 1 BTC: ' + bodyJson.btc_usd.buy + ' ??';
        bot.sendMessage(messageChatId, msg, opts);
      }
    })
  }

Итак, что мы здесь делаем: сравниваем наше сообщение (строку), можно добавить много проверок, но последняя обязательна, т.к. это сообщение будет отправлять кнопка. Затем мы запоминаем для удобства наш url запроса к api биржы и request делает запрос, в которой получает json ответ криптовалютной пары.  Если все прошло без ошибок и статус не 200, то мы специальным методом распарсим наш JSON в объект, далее просто составим текстовое сообщение ответа используя данные объекта и отправим сообщение в ответ боту, не забыв при этом отправить 3 параметр с кнопками, его нужно отправлять каждый раз, когда нужно показать кнопки. Составим еще один для рублёвой пары:

  if (messageText === 'btc usd' || messageText === 'бтц юсд' || messageText === '??') {
    var url = 'https://btc-e.nz/api/3/ticker/btc_usd';
    request(url, function (error, response, body) {
      if (!error && response.statusCode == 200) {
        var bodyJson = JSON.parse(body);
        var msg = 'Продажа 1 BTC: ' + bodyJson.btc_usd.sell + ' ?? \r\n';
        msg += 'Покупка 1 BTC: ' + bodyJson.btc_usd.buy + ' ??';
        bot.sendMessage(messageChatId, msg, opts);
      }
    })
  } else if (messageText === 'btc rub' || messageText === 'бтц руб' || messageText === '??') {
    var url = 'https://btc-e.nz/api/3/ticker/btc_rur';
    request(url, function (error, response, body) {
      if (!error && response.statusCode == 200) {
        var bodyJson = JSON.parse(body);
        var msg = 'Продажа 1 BTC: ' + bodyJson.btc_rur.sell + ' ??\r\n';
        msg += 'Покупка 1 BTC: ' + bodyJson.btc_rur.buy + ' ?? ';
        bot.sendMessage(messageChatId, msg, opts);
      }
    })
  }

Как можете заметить, конструкция if-else может выйти не самой удобной, потому для большого количества вариантов лучше использовать switch-case. На этом всё, резюмируя, мы теперь знаем где брать emoji, как делать запросы по api, как обрабатывать их и как управлять кнопками. Ставьте голос, подписывайтесь и Спасибо!


Comments 2