Как сделать Телеграмм бота js

Содержание

Как всем уже давно известно, в популярном клиенте для обмена мгновенными сообщениями Telegram появилась возможность создавать специальных ботов, которые могут оказаться весьма полезными, будучи добавленными в групповые чаты. Боты могут показывать участникам конференции различную полезную информацию, будь то последние новости какого-либо интересного сайта, погоду или курс валют. Функциональность программ для ботов практически не ограничена, например, можно реализовать бота, который будет отправлять в приватный или групповой чат фотографию с подключенной к компьютеру Web-камеры или мониторить температуру процессора на сервере. К примеру, запустив программу бота на домашнем компьютере, можно будет следить за какими-нибудь его показателями удалённо, просто отправляя команды боту с любого устройства, на котором установлен клиент Telegram. Однако, существует несколько ограничений, которые реализованы на уровне Telegram Bot API:

  • Во-первых, бот не может написать первым, он должен обязательно отозваться на команду пользователя;
  • Во-вторых, боты не могут отвечать на сообщения друг-друга.

Это сделано для того, чтобы усложнить жизнь различным мошенникам и спаммерам и предотвратить возможность неконтролируемого флуда множества ботов в чатах. Создавая программу, всегда нужно помнить об этих ограничениях.

Telegram БОТ на JavaScript за 15 минут. Деплой, База данных, node js telegram bot.

Для сообщества любителей мобильных гаджетов от Motorola — MotoFan.Ru существует весьма активная конференция в Telegram, участником которой я также являюсь. Мной было замечено, что для того, чтобы отметить значимое событие, произошедшее в течении дня, или какую-нибудь важную информацию, пользователи часто прибегают к использованию тега #digest.

Подобным тегом отмечаются сообщения, которые по мнению участников конференции необходимо добавить в сводку текущий событий. При этом посетители группового чата, которые появляются в конференции достаточно редко, могут не читать огромное количество оставленных ранее сообщений, а выделить с помощью тега #digest только основную информацию. Но для этого им нужно воспользоваться поиском тега по сообщениям и попрыгать по листингу чата, что достаточно неудобно. Поэтому возникла идея создания дайджест-бота, который будет накапливать и сохранять все сообщения участников конференции, отмеченные тегом #digest за какой-либо срок, например, за неделю, а потом выдавать их скопом по команде /digest в чат. Это весьма удобно, в отличие от ручного поиска необходимых сообщений.

1. Знакомьтесь, Гаечка :3

Из идеи, описанной выше, родилась Гаечка, программа, реализующая функциональность простейшего дайджест-бота.

Позже Гаечке были добавлены некоторые другие возможности, которые часто были нужны участникам конференции MotoFan.Ru: например, демонстрация различных финансовых графиков, валютные котировки и курс драгоценных металлов по ЦБ РФ. Команда /digest стала понимать аргументы, например, /digest 2 выводит сводку событий за два дня, а /digest 7 за неделю. Но реализация этого функционала — это уже другая история, которая не будет затронута в рамках этой статьи. Поскольку исходный код бота был выложен под лицензией MIT, любой желающий может посмотреть на то как и каким образом работает программа и, кроме того, поучаствовать в её разработке. Ссылку на исходный код можно найти в конце статьи.

2. Подготовка окружения к созданию бота на JavaScript и Node.js

Благодаря тому, что команда разработчиков Telegram реализовала простой и хорошо документированный API для работы с ботами, привязки к различным языкам программирования и популярным современным технологиям не заставили себя ждать. Для реализации задуманной идеи я выбрал связку языка программирования JavaScript и фреймворка Node.js, поскольку для Node.js был доступен хорошо документированный пакет node-telegram-bot-api, являющийся абстракцией и удобной надстройкой над официальным Telegram Bot API.

Еще по теме:  Opera gx боковая панель Телеграмм не грузит видео и гифки

С языком программирования JavaScript я уже сталкивался и немного знаком с ним вкупе с технологией QtQuick/QML. Именно поэтому мной и был выбран Qt Creator в качестве IDE для разработки. Эта среда предоставляет базовую поддержку JavaScript, которую с лихвой хватило для удобной навигации по коду проекта.

Кроме самого JavaScript’а меня прельстила простота установки необходимых зависимостей в Node.js с помощью специального менеджера пакетов, а также лёгкость разворачивания приложения на любом GNU/Linux-сервере. Реализация дайджест-бота на языке программирования Python отошла в «долгий ящик» и была написана лишь по просьбе одного из участников конференции, её можно будет посмотреть ниже. Выбор языка и технологии для имплементации вашего бота это дело вкуса, вы сами должны решить что для вас наиболее предпочтительно.

Итак, подготовим окружение, необходимое для запуска и написания бота. Предполагается, что вы работаете в любом deb-based дистрибутиве GNU/Linux и имеете навык работы с консолью. Пользователи дистрибутивов, отличных от deb-based могут самостоятельно найти аналоги устанавливаемых пакетов в своих репозиториях и инсталлировать их с помощью соответствующего системного пакетного менеджера. Пользователи MS Windows тоже могут произвести инсталляцию необходимых программ, но идеологически правильнее будет развернуть виртуальную машину с любым GNU/Linux дистрибутивом в специальной программе виртуализации, например, в бесплатном VMWare Player.

Установку Node.js и сопутствующего ему пакетного менеджера можно произвести следующими командами, введя их в терминале:

Затем, необходимо создать директорию, в которой можно будет ставить эксперименты и разворачивать бота и перейти в неё. Это тоже проще всего сделать из терминала:

Тильда (~) перед названием директории означает обращение к вашему домашнему каталогу. Вы можете создать директорию для экспериментов в любом удобном для вас месте. Теперь в свежесозданный каталог нужно установить необходимые пакеты с помощью пакетного менеджера Node.js:

Заметьте, что пакеты установятся локально в ту директорию, в которой вы находитесь. В нашем случае это ~/Deploy/. Вы можете установить их глобально в систему, для этого у npm install существует специальный ключ −−global.

Пакет node-telegram-bot-api, как было сказано выше, необходимая обёртка над официальным Telegram Bot API, связывающая его с Node.js, а пакет request может пригодиться нам для получения различных файлов из Интернета. В общем случае он не нужен и обычно уже идёт в стандартной поставке вместе с Node.js, но это зависит от дистрибутива. Скорее всего вам вовсе не потребуется эта зависимость, но на всякий случай установим и её.

Итак, окружение готово к работе. Теперь ваш компьютер является сервером для различных приложений на Node.js, частным случаем которых являются боты для Telegram. При желании бота можно будет перенести на какой-нибудь вменяемый хостинг, поддерживающий Node.js и запускать его оттуда. Для отладки Node.js приложений можно воспользоваться специальной облачной Web-платформой Cloud9 IDE.

И ещё нужно отметить кое-что важное, существует две разновидности ботов для Telegram: WebHook-боты с подписанным HTTPS-сертификатом и так называемые Polling-боты. Первых ботов дёргает главный сервер Telegram’а, а вторые сами постоянно ходят на сервер и сканируют чаты на предмет новых сообщений в них.

Для реализации ботов первого типа нужен специальный валидный HTTPS-сертификат, причём самоподписанный не годится, поэтому рассматривать в этой статье мы их не будем. Для экспериментов и для простеньких ботов с головой хватит и Polling-режима, задержка в полсекунды не слишком критична на мой взгляд. Эти режимы регламентируются официальным Telegram Bot API и имеют полную реализацию во всех популярных пакетах-обёртках, в node-telegram-bot-api в том числе. При желании и наличии подходящего сертификата вы можете переделать Polling-бота в WebHook-бота, использующего HTTPS-сертификат, следуя официальной документации.

На этом теоретическая часть закончена. Переходим к следующим действиям.

Для экспериментов нам потребуется «физическая сущность» бота в сети Telegram, его профиль, который можно добавлять в групповые чаты или просто начать с ним персональную беседу. Бот должен быть связан с запущенной на вашем компьютере программой посредством специального индивидуального и уникального токена. Заметьте, что этот токен предоставляет доступ к «физической сущности» вашего бота, а следовательно должен быть секретным. К счастью, если токен скомпрометирован, функционал Telegram позволяет его отозвать.

Разберёмся сначала с командой /setcommands; она устанавливает команды, которые будут отображены в чате по нажатию специальной пиктограммы быстрого доступа (см. изображение выше). Кроме того, пользователь может быстро выбрать необходимую ему команду бота во всплывающей подсказке, просто набрав в чате «/». Весьма важно заполнить эту информацию, пример формата заполнения следующий:

Рекомендую сохранить текст описания команд в какой-нибудь файл, так как при изменении этого списка вам придётся его отправлять заново.

Следующие команды, на которые надо обратить особое внимание, это /setjoingroups и /setprivacy. Первая команда даёт возможность пользователям добавлять вашего бота в групповые чаты (если мне не изменяет память, по дефолту эта возможность включена), а вторая запрещает боту просматривать все сообщения в группе, кроме команд. Обязательно отключите эту способность, так как для дайджест-бота критически важна возможность мониторинга всех сообщений пользователей на предмет присутствия в них тега #digest. В общем, выставите настройки так, чтобы пользователи могли добавлять бота в групповые чаты (/setjoingroups в ENABLED) и бот мог мониторить сообщения в них (/setprivacy в DISABLED).

Еще по теме:  Файлы ТГ на телефоне

Теперь у нас есть токен и настроенный профиль. Самое время взяться за написание Hello World!-бота!

4. Реализация простейшего Hello World!-бота на JavaScript

Перейдём в созданную ранее директорию ~/Deploy/, создадим там файл «HelloWorldBot.js» с помощью любого, удобного вам текстового редактора с поддержкой и подсветкой синтаксиса JavaScript. Вставим в этот файл следующий текст:

Источник: messagu.ru

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

Я начал погружение в мир IT лишь три недели назад. Серьезно, три недели назад я даже не понимал синтаксиса HTML, а знакомство с языками программирования заканчивалось школьной программой по Pascal 10-летней давности. Однако я решился поехать в IT-лагерь, для детей которого было бы неплохо сделать бота. Я решил, что это вряд ли так сложно.

С этого начался длинный путь, в рамках которого я:

  • развернул облачный сервер с Ubuntu,
  • зарегистрировался на GitHub,
  • выучил базовый синтаксис JavaScript,
  • прочитал тонну статей на английском и русском языках,
  • сделал, наконец, бота,
  • написал эту статью, наконец.

Выглядел итоговый результат примерно так:

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

Скажу сразу, это статья для начинающих — чтобы просто понять, как делать элементарные вещи с самой нулевой точки.

А еще — для продвинутых программистов — просто чтобы их немного посмешить.

1. Как писать код на JS?

Я понимал, что стоит для начала хотя бы разобраться в синтаксисе языка. Выбор пал на JavaScript, просто потому что следующим шагом для меня было создание приложения на ReactNative. Я начал с курса на Codecademy и остался в большом восторге. Первые 7 дней бесплатно. Реальные проекты. Рекомендую.

Прохождение его заняло порядка 25 часов. На самом деле далекоооо не все из него пригодилось. Вот так примерно выглядит структура курса и подробно первый блок.

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

2. Как зарегистрировать бота?

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

3. Как выглядит код бота?

После долгого изучения статей, я понял, что стоит использовать какую-то библиотеку (сторонний код в формате модуля), чтобы не мучаться с изучением API телеграма и созданием с нуля больших кусков кода. Я нашел фреймворк telegraf , который нужно было как-то подключить к чему-то при помощи npm или yarn. Примерно так я понимал тогда, из чего состоит развертывание бота. Смеяться здесь. Я не обижусь. Больше всего при последующем создании бота мне помогли примеры, указанные внизу страницы:

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

3. Как создать собственный облачный сервер за 100 рублей

После долгих поисков я понял, что команда ‘npm’ из картинки выше относится к командной строке. Командная строка есть везде, но чтобы получилось ее исполнить, нужно поставить NodePackageManager. Проблема была в том, что программировал я на PixelBook с ChromeOS. Я пропущу здесь большой блок про то, как я познавал Linux — для большинства это пустое и ненужное. Если у вас есть Windows или MacBook, у вас уже есть консоль.

Если в двух словах, я поставил Linux через Crostini.

Однако в процессе я понял, что для постоянной работы бота (а не только когда у меня включен компьютер) мне нужен облачный сервер. Я выбрал vscale.io Я закинул 100 рублей, купил самый дешевый сервер Ubuntu (см.картинку).

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

4. Как подготовить сервер для запуска бота

После этого я понял, что нужно сделать на сервере какую-то папку, в которую я положу файл с текстом кода. Для этого в консоли (запускать прямо на сайте через кнопку «Открыть консоль») я вбил

mkdir bot

bot — это стало название моей папки. После этого я установил npm и Node.js, что позволит запускать мне потом код из файликов с разрешением *.js

sudo apt update sudo apt install nodejs sudo apt install npm

Очень рекомендую на этом этапе настроить подключение к серверу через свою консоль. Вот инструкция Это позволит работать с сервером напрямую через консоль своего компьютера.

5. Как написать код первого бота.

А вот теперь просто открытие для меня. Любая программа — это просто строки текста. Их можно вбить куда угодно, сохранить с нужным расширением и все. Ты прекрасен. Я использовал Atom , но реально, можно просто в блокноте стандартном писать.

Главное — сохранить потом файл в нужном расширении. Это как написать текст в Word и сохранить.

Я сделал новый файл, в который вставил код из примера на странице telegraf и сохранил в файл index.js (вообще не обязательно называть файл так, но так принято). Важно — вместо BOT_TOKEN вставьте свой API-ключ из второго пункта.

const Telegraf = require(‘telegraf’) const bot = new Telegraf(process.env.BOT_TOKEN) bot.start((ctx) => ctx.reply(‘Welcome!’)) bot.help((ctx) => ctx.reply(‘Send me a sticker’)) bot.on(‘sticker’, (ctx) => ctx.reply(»)) bot.hears(‘hi’, (ctx) => ctx.reply(‘Hey there’)) bot.launch()

6. Как закинуть код на сервер через github

Теперь мне нужно было закинуть как-то этот код на сервер и запустить его. Для меня это стало челленджем. В итоге, после долгих мытарств я понял, что проще будет создать файл на github, который позовляет обновлять код при помощи команды в консоли. Я зарегал аккаунт на github и сделал новый проект , куда и загрузил файл. После этого мне нужно было понять, как же настроить загрузку файлов с моего аккаунта (открытого!) на сервер в папку bot (если вдруг вы вышли из нее — просто напишите cd bot).

7. Как загрузить файлы на сервер через github ч.2

Еще по теме:  Как создавать беседу в Телеграмме

Мне нужно было поставить на сервер программу, которая будет загружать файлы с git. Я поставил git на сервер, вбив в консоль

apt-get install git

После этого мне нужно было настроить загрузку файлов. Для этого я вбил в командную строку

git clone git://github.com/b0tank/bot.git bot

В итоге все из проекта загрузилось на сервер. Ошибкой на данном этапе было, что я, по сути, сделал вторую папку внутри уже существующей папки bot. Адрес до файла выглядел как */bot/bot/index.js

Я решил пренебречь этой проблемой.

И чтобы подгрузить библиотеку telegraf, которую мы запрашиваем в первой строке кода, вбейте в консоль команду.

npm install telegraf

8. Как запустить бота

Для этого, находясь в папке с файлом (чтобы переходить из папки в папку через консоль — выполняйте команду формата cd bot Чтобы убедиться, что вы там, где нужно можно вбить команду, которая отобразит в консоли все файлы и папки, которые там лежат ls -a

Для запуска я ввел в консоль

node index.js

Если нет никакой ошибки — все хорошо, бот работает. Ищите его в телеграме. Если ошибка есть — применяйте свои знания из 1 пункта.

9. Как запустить бота в фоновом режиме

Достаточно быстро вы поймете, что бот работает только тогда, когда вы сами сидите в консоли. Чтобы решить эту проблему я использовал команду

screen

После этого появится экран с каким-то текстом. Это значит, что все хорошо. Вы на виртуальном сервере на облачном сервере. Чтобы понять лучше, как это все работает — вот статья . Просто заходите в свою папку и вбивайте команду по запуску бота

node index.js

10. Как работает бот и как расширить его функционал

Что же умеет наш бот из примера? Он умеет

bot.start((ctx) => ctx.reply(‘Welcome!’))

говорить «Welcome!» в момент старта (попробуйте поменять текст)

bot.help((ctx) => ctx.reply(‘Send me a sticker’))

в ответ на стандартную команду /help отправлять сообщение «Send me a sticker»

bot.on(‘sticker’, (ctx) => ctx.reply(»))

в ответ на стикер отправлять одобрение

bot.hears(‘hi’, (ctx) => ctx.reply(‘Hey there’))

отвечать «Hey there», если ему пишут ‘hi’
bot.launch()

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

Если вы посмотрите код на github , то быстро поймете, что сильно далеко от этого функционала я не ушел. Что активно используется, так это функция ctx.replyWithPhoto Она позволяет отправлять заданное фото или gif в ответ на определенный текст.

Значимая часть кода была написана детьми 11-13 лет, которым я дал доступ к боту. Они ввели свои user-case. Думаю, легко определить, какая часть сделана была ими.

Например, на сообщение «джейк» приходит гифка с известным персонажем из мультика Adventure Time.

Руководство: как сделать простого бота для Телеграм на JS для новичка в программировании

Чтобы развивать бота дальше, подключать клавиатуру нужно смотреть примеры, например, отсюда

11. Как обновлять код и перезапускать бота

Не забывайте, что надо обновлять код не только на github, но и на сервере. Делать это просто — стопим бота (нажать ctrl+c),

— вводим в консоль, находясь в целевой папке, git pull
— вновь запускаем бота командой node index.js

Многие вещи, описанные в этом файле, будут супер очевидны для продвинутых программистов. Однако когда я сам пытался одним махом перепрыгнуть пропасть до мира ботов, мне очень не хватало подобного гайда. Гайда, в котором не пропускается очевидные и простые для любого IT-специалиста вещи.

В дальнейшем я планирую пост про то, как сделать свое первое приложение на ReactNative в таком же стиле, подписывайтесь!

Пишем телеграм бота на node.js

Сегодня мы будем разрабатывать телеграм бота на node js, который умеет выводить статистику зараженных коронавирусом по всем странам.

Вот и все, наш телеграмм бот готов и botfather поделился с нами API Token, благодаря которому мы сможем управлять ботом

Далее создадим новый проект, введем npm init и добавим файл bot.js в котором будет разрабатываться наш бот.

Затем я установлю telegraf это один из популярных фреймворков для создания телеграмм бота. Смотрим документацию телеграфа, копируем в наш проект первоначальную настройку бота и быстро пройдемся по всем методам, которые указаны в примере:

const < Telegraf >= require(‘telegraf’)const bot = new Telegraf(process.env.BOT_TOKEN) //сюда помещается токен, который дал botFatherbot.start((ctx) => ctx.reply(‘Welcome’)) //ответ бота на команду /startbot.help((ctx) => ctx.reply(‘Send me a sticker’)) //ответ бота на команду /helpbot.on(‘sticker’, (ctx) => ctx.reply(»)) //bot.on это обработчик введенного юзером сообщения, в данном случае он отслеживает стикер, можно использовать обработчик текста или голосового сообщенияbot.hears(‘hi’, (ctx) => ctx.reply(‘Hey there’)) // bot.hears это обработчик конкретного текста, данном случае это — «hi»bot.launch() // запуск бота

Поместим api token в наш пример и запуcтим бота.

node bot

Проверим работу нашего бота:

Теперь разберемся что лежит в ctx

Для этого после объявления константы bot мы можем использовать log:

ctx.message.from.first_name

Перезапустим наш проект, введем команду /start и в консоли мы получим объект, в котором мы сможем посмотреть необходимые данные о юзере:

< «update_id»: 375631294, «message»: < «message_id»: 11, «from»: < «id»: 222222, «is_bot»: false, «first_name»: «Женя», «username»: «Evgenii», «language_code»: «ru» >, «chat»: < «id»: 386342082, «first_name»: «Женя», «username»: «Evgenii», «type»: «private» >, «date»: 1593015188, «text»: «/start», «entities»: [ < «offset»: 0, «length»: 6, «type»: «bot_command» >] >>

Нас будет интересовать объект message, из которого мы сможем достать имя юзера

ctx.message.from.first_name

И текст, который он отправил боту:

ctx.message.text

Рейтинг
( Пока оценок нет )
Загрузка ...