Як написати бота для Telegram — Створюємо бота для телеграм на nodejs

Ви пишіть або збираєтеся писати гру на JavaScript, і вас мучать питання як бути з сервером гри, або як написати бота щоб опублікувати свою гру в Telegram або іншому месенджері? Поспішаю обрадувати, на JavaScript ви можете писати серверні додатки, в тому числі повноцінні сервер http/сокет з’єднанням і ботів для будь-яких месенджерів. Може бути в майбутньому я як небудь розповім як написати сокет-сервер, у цій же я покажу вам покроково як створити бота в Telegram, а в наступній як створити свою першу гру і опублікувати в месенджері Telegram. Стаття розділена на кілька частин:

  • Реєструємо бота в Telegram
  • Установка NodeJS
  • Пишемо бота
  • Доповнення
  • Повний код програми
  • Що далі
  • Якщо ви знайомі з яким-небудь пунктом, можете відразу приступити до наступного. Погнали…

    <=”” a=””>

    Далі BotFather попросить відправити йому логін вашого бота, логін повинен бути унікальним:

    Логін повинен закінчуватися на Bot або _bot. Після успішного содания бота, BotFather відправимо вам token, який необхідно зберегти де-небудь, він нам знадобиться для авторизації нашого бота.

    <=”” a=””>

  • для windows: натискаємо комбінацію win+R, у вікні вводимо cmd і натискаємо Enter
  • в OSX: додаток Термінал знаходиться за адресою /Applications/Utilities/Terminal.app, запускаємо його.
  • У командному рядку наберіть команду node –version, а потім npm –version, якщо ви встановили NodeJS правильно, ви повинні побачити щось на кшталт:

    Далі зайдіть в терміналі в каталог, де буде розташований ваш проект. Нагадаю що для того щоб пройти в каталог в терміналі необхідно набрати команду cd CatalogName, щоб вийти в директорію вище: cd ../ . Для створення нашого додатка нам знадобляться додаткові пакети з npm-репозиторію:

  • http://npmjs.com/package/node-telegram-bot-api — власне авторизація і робота з телеграм
  • http://npmjs.com/package/mysql — робота з БД mysql
  • Для установки пакета необхідно набрати в командному рядку 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=””>

    Поділитися з друзями
    Корисні поради - Вказівка