Как написать бота для telegram javascript
Перейти к содержимому

Как написать бота для telegram javascript

  • автор:

Начало работы

В первую очередь нужно зарегистрировать бота. Сделать это можно в приложении Telegram через BotFather.

Нажмите Start в чате и просмотрите доступные варианты. Вам понадобится выбрать название для бота и имя пользователя, а затем можно сохранять ключ.

После этого бот начнет отображаться в поиске Telegram — для этого просто введите @<bot-username> . Однако пока никаких действий выполнять он не будет.

Переходим к коду. Для работы с API Telegram воспользуемся пакетом NPM. Устанавливаем его с помощью команды yarn add node-telegram-bot-api .

Пакет готов к работе. Добавляем токен в переменную:

Теперь можно приступать к настройке бота. Ниже показан простой пример:

onText позволяет реагировать на сообщения, соответствующие регулярным выражениям. В этом варианте /\/echo (.+)/ означает, что вам нужно написать /echo , а следом за ним какой-либо текст.

Переменная chatId представляет ID пользователя, который используется для отправки сообщения. Чтобы бот мог самостоятельно выполнять эту функцию, ID должны где-то храниться.

bot.sendMessage применятся для отправки сообщений. Строка resp посылается после команды echo . Бот отправляет обратно то, что он получает.

Запускаем node app.js , открываем чат с ботом и отправляем ему следующее.

Автоматическая отправка сообщений

Как было сказано выше, чтобы отправлять пользователям сообщения, понадобится chatId , который нужно где-то хранить. В приложениях для этого стоит выбрать энергонезависимые хранилища, такие как MySQL, MongoDB и любые другие базы данных.

В этом примере мы будем хранить идентификаторы в массиве. Пользователь может зарегистрироваться в боте с помощью /register . После этого он будет получать сообщения.

Бот отправляет сообщение каждому пользователю один раз в секунду. Для этого достаточно пройтись по массиву с циклом for .

После отправки /register боту мы начинаем получать много спама.

Реакция на все сообщения

bot.onText позволяет реагировать на сообщения, соответствующие регулярному выражению. Чтобы обрабатывать любой входящий текст, нужно воспользоваться bot.on("message") — он запускается каждый раз, когда кто-то отправляет сообщение.

Вот простой пример. Бот реагирует на каждое сообщение, но отвечает, только когда пользователь присылает текст “dog”.

Отправка опросов

В Telegram можно обменивать не только стикерами, видео и текстом, но и опросами. Создавать их очень просто.

Сразу после ID мы передаем вопрос, а затем идет массив возможных вариантов ответов. Вы можете добавить больше опций по желанию.

Пишем Телеграм-бота на JavaScript

Сегодня будем делать бота — это отличное (и быстрое) занятие, которое развивает уставший мозг и даёт возможность отправить друзьям ссылочку со словами «Смотри, это моё».

  • Редактор кода, чтобы писать код. Если не знаете, какой выбрать — мы уже рассказывали. Если не умеете писать код, то вот инструкция, как его написать и запустить.
  • Node.js любой версии, выше 0.12. Нужно, чтобы библиотека для ботов заработала. Как установить Node.js.
  • Консоль. Или встроенный в систему вариант, или какой-нибудь другой.
  • VPN. Возможно но не факт, потому что Телеграм работает не везде.

Находим в поиске Телеграма бота @botFather — это главный инструмент для создания ботов. Набираем в нём /newbot .

Придумываем название и имя боту. Название — то, как он будет подписан в списке контактов. Имя — строка, по которой его можно будет найти. Обратите внимание, что имя должно оканчиваться на bot . В ответ мы получим токен — длинную последовательность символов, которая пригодится нам в будущем. Мы назвали бота echoKeksBot , но вам придётся придумать другое название, потому что это уже занято. Извините.

Создаем папку в любом месте и открываем её в консоли. Там пишем npm init -y — эта команда создаст файл package.json , который выглядит примерно так:

Теперь установим node-telegram-bot-api — это библиотека для создания телеграм-ботов на Node.js. Введём команду:

Создадим пустой файл index.js и напишем там самого простого бота, который будет отвечать на любое сообщение:

Тут всё просто, в консоли пишем node index.js , заходим к нашему боту в телеграм и начинаем с ним общаться. Не закрывайте консоль — бот работает только на вашем компьютере, и без консоли он не станет отвечать.

Как видим, бот успешно отвечает. Но бот-повторяха — не интересно, усложним задачу. Пусть бот присылает нам картинку.

Добавим картинку с Кексом в папку с проектом. Для отправки изображения используем метод .sendPhoto() — передадим в него id чата и путь до картинки. Получится такой код:

hosein2398/node-telegram-bot-api-tutorial

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

This is a beginners’ guide for node-telegram-bot-api .

Creating new bot with BotFather

The following steps describe how to create a new bot:

  • Contact @BotFather in your Telegram messenger
  • To get a token, send BotFather a message that says /newbot
  • When asked for a name for your new bot choose something that ends with the word bot . For example, my_test_bot
  • If your chosen name is available, BotFather will send you a token
  • Save the token

Once your bot is created, you can set a Description for it. Description is a message in middle of the page usually describing what the bot can do.

To set Description for your bot in BotFather do the following:

  • Send /setdescription to BotFather
  • Select the bot for which you are writing a Description
  • Change the description and send it to BotFather

There are some other useful methods in BotFather which we won’t cover in this tutorial like /setcommands and other.

Ok now you’re ready to go. Create a node project and install bot-api:

Create a file index.js (or any other name) and inside the file require node-telegram-bot-api:

Then you need to assign your token which you got from BotFather:

And now create a new bot :

Let’s try out our bot and do some real world things. We need to get messages that user sends us , to do so we would use following code:

Let’s create simple greeting here. Here’s big picture of our code :

We were trying to greet and we’ll do it here:

Ok , now open up your command prompt and type:

Go to your bot and hit on /start and then type «Hi» to it:

So now that you know how to send and receive messages in your bot you may want to put some salt on it:

This time we’re using «includes» method so if user sends us anything containing «bye» word we’ll send him back the message:

And definitely you can use any other string method that you want.

That’s really common to send user a message describing use of bot while he taps on «/start». (these are called commands) To do so :

Let’s create another command that will send a picture to user:

So now if you write «/sendpic» on your bot an image will be sent. Sending audios is same and simple you can use «sendAudio» method .

Now you might have seen some pictures containing caption with them like the following picture.

Well , How to to create these? Answer is really simple you can send a caption with option on photo like so :

So now you know how to create captions and how to go to new line in your messages by typing \n .

Let’s go a step further and start working with keyboards. keyboards are actually the ones shown in this picture:

Keyboards are nothing but an easy way to send fixed messages. It’s like you’re not forcing users to write something down and send it to bot, but instead you’re demonstrating them some options that they can tap on and send back as an answer. So let’s see how we can create Keyboards , we’ll send a Keyboard on «/start» message:

So now if you run you will see:

As I said in fact Keyboards are not nothing but automatic type and send for user. There is no difference if you write «I’m robot» and sending on your own or you click on Keyboard. Let’s do something simple when that «I’m robot» is received.So add this up to your previous on message:

So now if you go to your bot tap on start you see Keyboards and if you tap on I’m robot you’ll see the message. Note that there is no difference if you type it or you send it by Keyboards.

node-telegram-bot-api does not have any method to get users information but in case if you want to, you can get information like so:

And if you wanted to get user profile pictures you can use getUserProfilePhotos .

This section is under construction.

If you want to send messages with some style there, here is how it goes. parse_mode defines how you want you message to be rendered.You can define it inside in your options when sending message. Available option are HTML and Markdown.Let’s see how it works in action:

So you get idea where parse_mode is defined.Now if we run this:

So that’s how we do it with Html you can also write with Markdown.As mentioned in official api of Telegram only these tags are supported till now:

And for Markdown you can only use:

Location and Number

There are some methods that enable you to send users location. Here is an example:

And there is also sendVenue. To send a phone number you can use sendContact.

Interacting with groups and channels

One interesting use of bots is in groups and channels.You can use bots to manage groups , receiving users messages and sending group messages. You can even send keyboards to members so that they can use the bot easier. For better understanding of how bots can be useful in groups let’s create one and add it to a group. So we want to create a bot that says «Have a nice day Username» when any member of group said something containing «Bye» keyword. Before doing anything you have to know that a bot has no accessibility to users messages unless we add it as of a administrator. And if don’t do that bot will only has access to Commands that any user sends to group.And all of this is because of the privacy policy that Telegram messenger follows which I think is right. So let’s get back to creating that bot , actually we don’t have to do anything different than creating bot for a single user usage , everything is similar.

Now that we wrote codes go ahead and add this bot to a group , after adding it set it as of a administrator of the group so that it could get users messages. Now say something that includes «bye»:

Now let’s do another thing , write some codes that bot will remove a person from group if they say a specific word.For instance you can create a bot that will remove member if they curse in group. Here we will write codes that if someone says anything containing «idiot» bot will remove that person from group.

Here we have used kickChatMember method to remove a member it receives two parameters , first one is id of chat and second one is id of user which you want to remove.Now if you add this bot among admins of a group and somebody says something containing «idiot»:

We can’t cover all methods there are some other methods related to groups and channels: getChat , getChatAdministrators , getChatMembersCount , getChatMember , leaveChat

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

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

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

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

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

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

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

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

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

В начале мне очень помогла вот эта статья из блога некоего Арчакова. Он разжевывает самое начало. Но главное, что там есть — это инструкция по регистрации бота. Лучше я не напишу, и поскольку это самая легкая часть, просто напишу суть. Нужно создать бота и получить его API. Это делается через другого бота — @BotFather. Найдите его в telegram, напишите ему, пройдите простой путь и получите (сохраните!) API-ключ (это набор цифр и букв). Он пригодился мне позже.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *