В этой теме мы напишем небольшого Telegram-бота на Node.JS с Inline-модом, который будет показывать текущий курс валют. Для взаимодействия с Bot API на Node.JS есть несколько модулей, например:
- node-telegram-bot-api
- telegraf
- telegram-node-bot
- telegram-bot-api
Но в этой статье мы будем рассматривать разработку бота именно на telegraf .
Подготовка рабочей среды
Для начала нам необходимо установить саму Ноду. Для этого переходим на сайт https://nodejs.org/ru/ и скачиваем LTS-версию.
Установка стандартная, как и в других программах. Просто нажимаем на «Далее». Проблем с этим возникнуть не должно.
Шаг 0.2: Установка IDE
Не советую использовать Блокнот или Notepad++, так как для такого типа проектов они не сильно эффективны. Использование специальных редакторов кода намного уменьшит вам головную боль и упразднит ненужные вопросы по синтаксическим ошибкам.
Для удобного редактирования кода существует несколько хороших программ:
Вебинар: «Делаем Telegram бота на Node.js»
- Visual Studio Vode (VSC) — быстрый; поддерживает большое колличество языков; имеет встроенный терминал, что есть очень удобно; много плагинов. При написании кода на Ноде, я предпочитаю его.
- Atom — четкий и понятный интерфейс, легко ориентироваться; открытый исходный код; большое количество плагинов.
- Sublime Text — также популярный редактор, быстрый и понятный.
Шаг 0.3: Создание папки проекта
Как и любой проект, он должен находиться в своей папке. Для Ноды желательно называть проекты на латинице и без пробелов. (Неправильно: «мой бот», «my bot». Правильно: «mybot» или «my-bot»).
После того, как вы создали папку, необходимо открыть ее в выбранном редакторе.
Шаг 0.4: Использование терминала
Если вы используете VSC в качестве редактора кода, открыть терминал можно прямо в этой программе, используя сочетание клавиш Ctrl + ~ ( Ctrl + Shift + ~ ) или через верхную панель Terminal -> New Terminal .
После того, как вы открыли терминал, необходимо проверить, что установка Node.JS прошла успешно. Написав команду node -v , мы можем убедиться, что все стоит правильно. Если вы получили в ответ что-то по типу v14.15 .1 — значит все хорошо и можно приступать к следующему этапу. Если в ответ вы получаете ошибку, попробуйте перезапустить компьютер или попробовать переустановить Ноду.
Шаг 0.5: Инициализация NPM модуля
Далее нам необходимо создать файл package.json , где будет храниться информация о нашем проекте и список зависемостей для него. Сделать это можно таким образом:
# Если вы хотите пропустить вопросы
npm init —yes
После написания команды npm init , скрипт спросит вас информацию о проекте (название, ссылка на репозиторий, автор кода, версия). Вообще, это сделано для управлением модулей на npm, но т. к. мы не будем публиковать код в менеджере пакетов, это можно пропустить, используя аргумент —yes . Единственное, что нам надо будет изменить в будущем — это путь к главному файлу проекта, его мы будем хранить в папке src . Изменить это можно прямо в созданном package.json .
Building a Telegram Bot with Node.js in 10 minutes
Шаг 0.5: Установка nodemon
Во время разработки бота, нужно его постоянно перезагружать вручную (если что, команда node . ), чтобы видеть изменения. Но на самом деле, это не так удобно.. Что же люди придумали? — Программа, которая следит за изменением файлов и автоматически перезапускает скрипт. Она как раз nodemon и называется. Установить ее можно так:Код:
npm i nodemon —dev
Аргумент —dev означает, что эта зависимость создана только для удобства разработки и на работу бота не влияет. Когда мы заливаем код на продакшн, эти модули нам не нужны, по этому их нужно различать.
После этого заходим в package.json и создаем новый скрипт для запуска:
Теперь для запуска бота нам не нужно постоянно писать node . , а достаточно один раз написать npm run dev . Убить процесс — Ctrl + C .
Источник: dzen.ru
Node.js: разрабатываем бота для Telegram
В данном туториале мы разработаем простого бота для Telegram. Сначала зарегистрируем и кастомизируем бота с помощью BotFather, затем напишем для него сервер на Express, развернем сервер на Heroku и подключим бота к серверу с помощью веб-хука.
Функционал бота будет следующим:
- в ответ на сообщение joke возвращается программистская шутка, например: «Algorithm: a word used by programmers when they don’t want to explain how their code works.» (Алгоритм — это слово, используемое программистами, когда они не хотят объяснять, как работает их код));
- в ответ на сообщение, представляющее собой дату в формате ДД.ММ, возвращается либо список дел, запланированных на эту дату в таблице Google (массив объектов), либо фраза «You have nothing to do on this day.», если на эту дату не запланировано никаких дел;
- в ответ на любое другое сообщение возвращается фраза «I have nothing to say.».
При разработке бота я буду опираться в основном на официальную документацию.
Если вам это интересно, прошу под кат.
Регистрация и кастомизация бота
Для регистрации бота нужен только Telegram (я буду использовать десктопную версию). Находим в нем BotFather (BotFather):
Нажимаем на Start и получаем список команд:
Выполняем команду /newbot для создания бота, указываем имя и username бота (username должно быть уникальным в пределах Telegram), например: «Neo» и «aio350_reminder_bot».
Получаем токен доступа: 5372263544.
Выполняем команду /mybots для получения списка наших ботов, выбираем только что созданного бота и нажимаем Edit Bot:
Добавляем боту описание (Edit Description), характеристику (Edit About) и аватар (Edit Botpic):
Аватар (спасибо FlatIcon):
Отлично, мы зарегистрировали бота в Telegram и кастомизировали его. Поздороваемся с ним:
Бот молчит, потому что у него пока нет «мозгов») Давайте это исправим.
Разработка и деплой сервера для бота
Создаем директорию, переходим в нее и инициализируем Node.js-проект:
mkdir telegram-bot-server cd telegram-bot-server yarn init -yp # or npm init -y
# производственные зависимости yarn add axios dotenv express fs-extra google-spreadsheet # зависимость для разработки yarn add -D nodemon
- axios: клиент-серверная утилита для выполнения HTTP-запросов;
- dotenv: утилита для работы с переменными среды окружения;
- express: Node.js-фреймворк для разработки веб-серверов;
- fs-extra: расширенный Node.js-модуль fs;
- google-spreadsheet: пакет для работы с гугл-таблицами;
- nodemon: утилита для запуска сервера для разработки.
Определяем тип кода сервера (модуль) и команды для запуска сервера в производственном режиме (start) и режиме для разработки (dev) в файле package.json:
«type»: «module», «scripts»: < «start»: «node index.js», «dev»: «nodemon index.js» >,
Создаем файл .env и записываем туда токен доступа:
TELEGRAM_API_TOKEN=5348751300.
Прежде, чем приступать к разработке сервера, необходимо настроить гугл-таблицу, в которой будут храниться наши задачи.
Создаем таблицу в Google Spreadsheets следующего содержания:
Извлекаем идентификатор таблицы из адресной строки (набор символов между d/ и /edit) и записываем его в .env:
GOOGLE_SPREADSHEET_ID=1HG60.
Идем в Google Cloud Platform, переходим в раздел IAM Service Accounts и создаем сервис-аккаунт (Create Service Account), например: Telegram Bot Spreadsheet.
Выбираем созданный сервис-аккаунт, переходим в раздел Keys и генерируем ключ (Add Key -> Create new key) в формате JSON:
В скачанном JSON-файле нас интересуют поля client_email и private_key. Записываем значения этих полей в .env:
Переходим в раздел APIs Enabled APIs config >from ‘dotenv’ import express from ‘express’ import < GoogleSpreadsheet >from ‘google-spreadsheet’
Получаем доступ к переменным среды окружения, создаем экземпляр приложения Express и определяем пути к шуткам и телеграмму:
config() const app = express() const JOKE_API = ‘https://v2.jokeapi.dev/joke/Programming?type=single’ const TELEGRAM_URI = `https://api.telegram.org/bot$/sendMessage`
Подключаем посредников (middleware) Express и инициализируем таблицу:
app.use(express.json()) app.use( express.urlencoded(< extended: true >) ) const doc = new GoogleSpreadsheet(process.env.GOOGLE_SPREADSHEET_ID) await doc.useServiceAccountAuth(< client_email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL, private_key: process.env.GOOGLE_PRIVATE_KEY.replace(/\n/g, ‘n’) >)
Определяем роут для POST-запроса к /new-message:
app.post(‘/new-message’, async (req, res) => < // . >)
Извлекаем сообщение из тела запроса и проверяем, что сообщение содержит текст и идентификатор чата:
const < message >= req.body const messageText = message?.text?.toLowerCase()?.trim() const chatId = message?.chat?.id if (!messageText || !chatId)
Получаем данные из таблицы и формируем данные для ответа:
await doc.loadInfo() const sheet = doc.sheetsByIndex[0] const rows = await sheet.getRows() const dataFromSpreadsheet = rows.reduce((obj, row) => < if (row.date) < const todo = < text: row.text, done: row.done >obj[row.date] = obj[row.date] ? [. obj[row.date], todo] : [todo] > return obj >, <>)
Формируем текст ответа:
let responseText = ‘I have nothing to say.’ if (messageText === ‘joke’) < try < const response = await axios(JOKE_API) responseText = response.data.joke >catch (e) < console.log(e) res.send(e) >> else if (/dd.dd/.test(messageText))
И отправляет ответ:
try < await axios.post(TELEGRAM_URI, < chat_id: chatId, text: responseText >) res.send(‘Done’) > catch (e)
Наконец, определяем порт и запускаем сервер:
const PORT = process.env.PORT || 3000 app.listen(PORT, () => < console.log(`Server running on port $`) >)
Бот не сможет взаимодействовать с сервером, запущенным локально, поэтому сервер необходимо где-нибудь развернуть, например, на Heroku.
Создаем там новое приложение, например: my-telegram-bot-server (название должно быть уникальным в пределах Heroku):
Глобально устанавливаем Heroku CLI и авторизуемся:
yarn global add heroku heroku login # далее следуем инструкциям
Находясь в корневой директории проекта, выполняем инициализацию Git-репозитория, подключаемся к Heroku, добавляем и фиксируем изменения и отправляем их в Heroku (не забудьте создать файл .gitignore с node_modules и .env):
git init # у вас название проекта будет другим heroku git:remote -a my-telegram-bot-server git add . git commit -m «create app» git push heroku master
После деплоя получаем URL приложения, например: https://my-telegram-bot-server.herokuapp.com/ (он нам еще пригодится).
Открываем вкладку Settings на странице приложения и добавляем переменные среды окружения в разделе Config Vars (Reveal Config Vars):
Отлично, на этом с разработкой и деплоем сервера мы закончили.
Осталось подключить к нему бота.
Подключение бота к серверу
Существует несколько способов подключения бота к серверу, но самым простым является использование веб-хука.
Открываем терминал и выполняем следующую команду:
# в строке («url=. «) указываем `URL` проекта + `/new-message` # после `bot` указываем токен доступа из переменной `TELEGRAM_API_TOKEN` curl -F «url=https://my-telegram-bot-server.herokuapp.com/new-message» https://api.telegram.org/bot5372263544. /setWebhook
Получаем сообщение об успешной установке хука.
Возвращаемся к боту.
Нажимаем /start, получаем от бота сообщение «I have nothing to say.». Отправляем сообщение «joke», получаем шутку. Отправляем «11.05», получаем задачи в виде массива объектов. Отправляем «12.05», получаем «You have nothing to do on this day.».
Примечание: при разработке бота я немного опечатался (вместо «to do» написал «to to»), но уже исправился.
Пожалуй, это все, чем я хотел поделиться с вами в этой статье.
Надеюсь, вы нашли для себя что-то интересное и не зря потратили время.
Благодарю за внимание и happy coding!
Источник: temofeev.ru
progtask.ru
Руководство по написанию бота Telegram при помощи Node js
В данной статье мы создадим простого бота, который приветствует человека, который с ним взаимодействует.
Для начала нам необходимо зарегистрировать бота в Telegram. Для этого необходимо обратиться к специальному родительскому боту.
В поисковую строку клиента Telegram введите имя — «BotFather», а затем кнопку «Start».
После этого мы увидим список команд.
Введём команду /newbot, после чего впишем имя, а затем и логин нашего нового бота.
После этого он будет создан и мы получим ссылку на него, а также его уникальный токен.
Теперь нам необходимо создать проект.
Создайте новую папку, войдите в консоль и пропишите npm init . После этого в проекте появится файл package.json. Далее добавим в него фреймворк для работы с ботами Telegram. Для этого в консоли введём — npm install —save node-telegram-bot-api
Теперь создадим файл index.js, в котором реализуем логику работы.
Источник: progtask.ru