Пишем 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, как обрабатывать их и как управлять кнопками. Ставьте голос, подписывайтесь и Спасибо!