Ви пишіть або збираєтеся писати гру на JavaScript, і вас мучать питання як бути з сервером гри, або як написати бота щоб опублікувати свою гру в Telegram або іншому месенджері? Поспішаю обрадувати, на JavaScript ви можете писати серверні додатки, в тому числі повноцінні сервер http/сокет з’єднанням і ботів для будь-яких месенджерів. Може бути в майбутньому я як небудь розповім як написати сокет-сервер, у цій же я покажу вам покроково як створити бота в Telegram, а в наступній як створити свою першу гру і опублікувати в месенджері Telegram. Стаття розділена на кілька частин:
Якщо ви знайомі з яким-небудь пунктом, можете відразу приступити до наступного. Погнали…
<=”” a=””>
Далі BotFather попросить відправити йому логін вашого бота, логін повинен бути унікальним:
Логін повинен закінчуватися на Bot або _bot. Після успішного содания бота, BotFather відправимо вам token, який необхідно зберегти де-небудь, він нам знадобиться для авторизації нашого бота.
<=”” a=””>
У командному рядку наберіть команду node –version, а потім npm –version, якщо ви встановили NodeJS правильно, ви повинні побачити щось на кшталт:
Далі зайдіть в терміналі в каталог, де буде розташований ваш проект. Нагадаю що для того щоб пройти в каталог в терміналі необхідно набрати команду cd CatalogName, щоб вийти в директорію вище: cd ../ . Для створення нашого додатка нам знадобляться додаткові пакети з npm-репозиторію:
Для установки пакета необхідно набрати в командному рядку npm install <package name>. В цьому випадку пакет буде встановлено в каталозі, з якого була викликана команда install, у цьому каталозі буде створений каталог з ім’ям node_modules/, можна туди не лестощі, нам це не знадобиться. Ви можете використовувати ключ -g щоб модуль встановився глобально в систему і був доступний з будь-якого місця, але для цього на вінді доведеться ще додати шлях до сховища в змінну PATH, ви можете зробити це, якщо вам так зручніше. Встановимо пакети в поточній робочій директорії:
На цьому підготовчі процеси завершені, приступаємо до написаню програми.
<=”” a=«”>
Щоб запустити додаток , наберіть у командному рядку node src/app.js і ви побачить в консолі рядок new bot app. Ура, ви вже вмієте запускати програму і виводити інформацію на екран, можна попрактиковатся і написати свою версію «HelloWorld!»… Йдемо далі:
Не забудьте заповнити змінну var token = “TOKEN” вашим токеном, отриманими від бота BotFather у першому пункті статті. Якщо запустити програму з командного рядка, ваш бот вже зможе отримувати повідомлення, наприклад, якщо в телеграме відправити боту повідомлення «ping», ви побачите в консолі запис виду:
Каки бачите ми отримали текст повідомлення(text), інформація про користувача(from) і чат(chat). В даному випадку інфа про користувача і чаті схожа, це тому, що повідомлення було відправлено у приватній бесіді. Якщо ж боту відправити повідомлення з групи, тоді в змінної chat буде інформація про цій групі. Давайте напишемо відповідь на повідомлення ping:
Щоб зміни набули чинності, вам слід перезапустити програму, для цього необхідно в консолі завершити поточний додаток поєднанням клавіш Ctrl+C (на вінді і на маці), і запустити додаток заново. Не турбуйтеся, в розділі Доповнення я покажу як це спростити. Після перезапуску програми, на команду ping в будь регістрі, бот відправить у відповідь pong. У методі tg.sendMessage третім параметром ви можете надіслати Object з параметрами, які описані в Telegram API. Наприклад, щоб надіслати текст з html-розміткою:
Давайте спробуємо відправити inline кнопку:
Тут для створення кнопок використовуються параметри text-отображемый текст і callback_data: це та інформація, яку ви отримаєте, коли користувач натисне на кнопку, майте на увазі що цей параметр повинен бути рядком, максимальний розмір якої не повинна перевищувати 64 байта. Тому використовувати слова helpCmd і gameCmd трохи не вдале рішення, краще поставити які-небудь константи і відправляти циферки, які потім можна пропарсить, можна використовувати JSON рядок, або ж просто відправити список параметрів розділених яким небудь символом, головне вкластися в 64 байти. У цьому прикладі не будемо ускладнювати і зробимо простіше. Ще зверніть увагу що options.reply_markup.inline_keyboard — це масив масивів, це потрібно для того щоб ви могли розміщувати кнопки в одному рядку або в різних:Наприклад ось так будуть виглядати кнопки якщо відправити їх як у прикладі вище:

А якщо відправити кнопки ось так:
Ви отримаєте ось таку картину:

При натисканні на кнопку, ви побачите в консолі:
Напишемо обробник цієї команди ( допишіть метод onCallbackQuery створений раніше):
Тепер при натисканні на кнопку Про грі ми отримаємо у відповідь якийсь текст. Але, зверніть увагу що на кнопці досі висить індикатор процесу:

Щоб його приховати, необхідно коректно відповісти на callback-повідомлення:
В метод answerCallbackQuery можна передати текст який побачить користувач у спливаючому вікні, подробиці у документації Telegram API.
<=”” a=””>
Встановіть модуль nodemon з репозиторію npm, який буде перезапускати вашу програму кожен раз коли ви пересохраняете будь-файл використовується в додатку. Встановлювати модуль nodemon необхідно глобально, використовуючи ключ -g:
Після установки, щоб запустити додаток використовуйте команду:
Тепер кожного разу після зміни файлу, ваша програма буде запускатися з самого початку, зручно на етапі розробки.
process
Властивість process.title ви можете використовувати для пошуку процесу в системі, наприклад на маке або лінуксі можна в консолі написати так ps -A | grep “MyTestBot”, і ви побачите: 4584 ttys002 0:00.47 MyTestBot, де 4584 це номер процесу, вбити який можна командою kill 4584. Як зробити щось подібне на вінді, на жаль не знаю.
forever
Для детального ознайомлення читайте документацію forever.
Що ще?
<=”” a=””>
<=”” a=””>
