Скрипт конструктора ботов телеграмм

Обновлено: 02.05.2024

Привет, хабрчане! Какой бы заезженной не была тема создания телеграм бота на python3, я не нашёл инструкций, где показан путь от первой строчки кода до деплоинга бота (по крайней мере все методы, что я видел, немного устарели). В этой статье я хочу показать процесс создания бота от написания BotFather-у до деплоинга бота на Heroku.

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

P.S. Пишите если нужна статья по созданию более сложного бота, т.е. с вебхуками, БД с настройками юзеров и т.д.


Для начала стоит определиться, что же будет делать наш бот. Я решил написать банального простого бота, кторый будет парсить и выдавать нам заголовки с Хабра.
И так, начнём же.

BotFather

Для начала нам надо зарегистрировать нашего бота в Telegram. Для этого:

В поиске вбиваем @BotFather и переходим в диалог с Отцом Ботов.

Пишем /newbot. Указываем имя бота (то, что отображается в диалогах). Указываем его логин, по которому его можно булет найти.

P.S. Оно должно заканчиваться на Bot/bot

Вот. Нам дали API ключ и ссылку на бота. Желательно сохранить API ключ и перейти в диалог с ботом, чтобы потом не копаться в переписке с BotFather

all - спарсить заголовки с вкладки "ВСЁ ПОДРЯД"
top - спарсить заголовки с вкладки "ЛУЧШЕЕ"

На этом работа с BotFather закончилась, перейдём к следующей части.

Установка и настройка pipenv. Первый запуск.

Для начала создадим файл, в котором будет основной код бота bot.py. Если бот большой, то сразу создавайте файлы, куда вы вынесете функции, классы и т.д, иначе читаемость кода стремится к нулю. Я добавлю parser.py

Установим pipenv, если его конечно ещё нет.


Установим pipenv в папку проекта.


Установим интересующие нас библиотеки. Я буду работать с PyTelegramBotAPI. Также для парсинга добавим BeautifulSoup4.


Начинаем писать код!

Открываем bot.py, импортируем библиотеки и создаём главные переменные.


Запустим бота. Посмотри наличие ошибок.

Если ошибок не появилось, то продолжим.

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

Основы взаимодействия. Ответ на команды

Начнём с самого простого: ответим на команды /start и /go

Теперь можно запустить бота и написать ему /start или /go и он ответит.

Добавим вот такой код.

Основы взаимодействия. Ответ на картинки, документы, аудио и прочие.

Для ответа на картинки, стикеры, документы, аудио и т.д. нужно всего лишь поменять content_types=['text'].

Рассмотрим пример с картинкой, добавив этот код.


Все типы контента:

text, audio, document, photo, sticker, video, video_note, voice, location, contact, new_chat_members, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, pinned_message

Но, есть тут проблема. Можно повторно вызвать команду /go или /start, и начнётся бардак.


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


С построением простых цепочек мы разобрались, пойдём дальше.

Добавляем парсер в цепочку.

Для начала нужен сам парсер. Обратим внимание на то, что во вкладках «Лучшее» и «Всё подряд» есть дополнительные фильтры: сутки, неделя, месяц и ≥10, ≥25, ≥50, ≥100 соответственно.
Парсер конечно можно написать и в 1 функцию, но я разобью на 2, так будет проще читать код.

По итогу парсер возвращает нам строку с заголовками статей, основываясь на наших запросах.
Пробуем, используя полученные знания, написать бота связанного с парсером. Я решил создать отдельный класс (это скорее всего неправильный метод, но это уже относится к питону, а не к основной теме статьи), и в объекте этого класса хранить изменяемые данные.

Теория. Методы взаимодействия с ботом.

Также в дополнительных материалах будут ссылки на всё, что использовалось и о чём говорилось.

Маркапы. Добавляем клавиатуры для быстрого ответа.

Наконец основной код дописан. Теперь можно передохнуть и написать маркапы. Я думаю вы неоднократно видели их, но всё же, приложу скриншот. [SCREENSHOT]

Я выведу маркапы в отдельный файл — markups.py.

В написании маркапов нет ничего сложного. Нужно лишь создать маркап, указать пару параметров, создать пару кнопок и добавить их в маркап, далее просто указываем reply_markup=markup в send_message .

В параметры маркапа указываем ширину строки и изменение размеров кнопок, иначе они огромны.

Применим полученные знания к нашему боту.

Ура! С кодом впринципе разобрались. Теперь самое важное — деплоинг бота не хероку.

Деплоим бота на Heroku.

Для начала надо зарегистрироваться на Хероку и на Гитхабе.

Теперь создаём репозиторий на гитхабе. (нажмите плюсик слева от вашего аватара)
Сейчас нам нужен Procfile (Procfile.windows для windows). Создаём его и записываем в него bot: python3 bot.py

Теперь удаляем TOKEN из bot.py, здесь он не нужен, ведь мы будем загружать этот файл на гитхаб. Через тот же терминале, что использовали для запуска бота, заливаем файлы на гитхаб. (Предворительно удалите папку __pycache__).


Гит просит логин и пароль, спокойно вводим и преступаем к деплоингу бота на хероку. Пишем всё в том же терминале.

Теперь возвращаем TOKEN в bot.py, здесь он нужен, ведь мы будем загружать этот файл на хероку.


Чтобы выключить бота
И, не забываем перед залитием на гитхаб и удалить TOKEN из нашего bot.py. Ведь нам не нужно, чтобы кто-то им пользовался. Можно конечно воспользоваться .gitignore и вынести токены в отдельный фай.

Поздравляю!

Работа окончена, бот работает удалённо.

Ссылки

Заключение

Если кому-то было интересно, то цель написания статьи выполнена. Если кому-то хочется увидеть статью про более сложного бота (с вебхуками, подключенной БД с настройками пользователей и т.д.) — пишите.

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

PHP Telegram Bot

A Telegram Bot based on the official Telegram Bot API

Table of Contents

This is a pure PHP Telegram Bot, fully extensible via plugins.

Telegram announced official support for a Bot API, allowing integrators of all sorts to bring automated interactions to the mobile platform. This Bot aims to provide a platform where one can simply write a bot and have interactions in a matter of minutes.

  • Retrieve updates with webhook and getUpdates methods.
  • Supports all types and methods according to Telegram Bot API 6.0 (April 2022).
  • Supports supergroups.
  • Handle commands in chat with other bots.
  • Manage Channel from the bot admin interface.
  • Full support for inline bots.
  • Inline keyboard.
  • Messages, InlineQuery and ChosenInlineQuery are stored in the Database.
  • Conversation feature.

This code is available on GitHub. Pull requests are welcome.

Create your first bot

Message @BotFather with the following text: /newbot

If you don't know how to message by username, click the search field on your Telegram app and type @BotFather , where you should be able to initiate a conversation. Be careful not to send it to the wrong contact, because some users have similar usernames to BotFather .

BotFather initial conversation

@BotFather replies with:

Type whatever name you want for your bot.

@BotFather replies with:

Type whatever username you want for your bot, minimum 5 characters, and must end with bot . For example: telesample_bot

@BotFather replies with:

Note down the 'token' mentioned above.

Optionally set the bot privacy:

Send /setprivacy to @BotFather .

BotFather later conversation

@BotFather replies with:

Type (or select) @telesample_bot (change to the username you set at step 5 above, but start it with @ )

@BotFather replies with:

Type (or select) Disable to let your bot receive all messages sent to a group.

@BotFather replies with:

Require this package with Composer

Install this package through Composer. Edit your project's composer.json file to require longman/telegram-bot .

Create composer.json file

and run composer update

or

run this command in your command line:

Choose how to retrieve Telegram updates

Webhook getUpdates
Description Telegram sends the updates directly to your host You have to fetch Telegram updates manually
Host with https Required Not required
MySQL Not required (Not) Required

Using a custom Bot API server

For advanced users only!

As from Telegram Bot API 5.0, users can run their own Bot API server to handle updates. This means, that the PHP Telegram Bot needs to be configured to serve that custom URI. Additionally, you can define the URI where uploaded files to the bot can be downloaded (note the placeholder).

Note: If you are running your bot in --local mode, you won't need the Request::downloadFile() method, since you can then access your files directly from the absolute path returned by Request::getFile() .

Note: For a more detailed explanation, head over to the example-bot repository and follow the instructions there.

Create set.php with the following contents:

Open your set.php via the browser to register the webhook with Telegram. You should see Webhook was set .

Now, create hook.php with the following contents:

Self Signed Certificate

Upload the certificate and add the path as a parameter in set.php:

Edit unset.php with your bot credentials and execute it.

For best performance, the MySQL database should be enabled for the getUpdates method!

Create getUpdatesCLI.php with the following contents:

Next, give the file permission to execute:

getUpdates without database

If you choose to / or are obliged to use the getUpdates method without a database, you can replace the $telegram->useMySQL(. ); line above with:

❗ Note that by default, Telegram will send any new update types that may be added in the future. This may cause commands that don't take this into account to break!

It is suggested that you specifically define which update types your bot can receive and handle correctly.

You can define which update types are sent to your bot by defining them when setting the webhook or passing an array of allowed types when using getUpdates.

Alternatively, Update processing can be allowed or denied by defining a custom update filter.

Let's say we only want to allow messages from a user with ID 428 , we can do the following before handling the request:

The reason for denying an update can be defined with the $reason parameter. This text gets written to the debug log.

All types are implemented according to Telegram API 6.0 (April 2022).

Full support for inline query according to Telegram API 6.0 (April 2022).

All methods are implemented according to Telegram API 6.0 (April 2022).

Messages longer than 4096 characters are split up into multiple messages.

To send a local photo, add it properly to the $data parameter using the file path:

If you know the file_id of a previously uploaded file, just use it directly in the data array:

To send a remote photo, use the direct URL instead:

sendAudio, sendDocument, sendAnimation, sendSticker, sendVideo, sendVoice and sendVideoNote all work in the same way, just check the API documentation for the exact usage. See the ImageCommand.php for a full example.

Send Chat Action

Retrieve the user photo. (see WhoamiCommand.php for a full example)

getFile and downloadFile

Get the file path and download it. (see WhoamiCommand.php for a full example)

Send message to all active chats

To do this you have to enable the MySQL connection. Here's an example of use (check DB::selectChats() for parameter usage):

You can also broadcast a message to users, from the private chat with your bot. Take a look at the admin commands below.

MySQL storage (Recommended)

If you want to save messages/users/chats for further usage in commands, create a new database ( utf8mb4_unicode_520_ci ), import structure.sql and enable MySQL support BEFORE handle() method:

You can set a custom prefix to all the tables while you are enabling MySQL:

You can also store inline query and chosen inline query data in the database.

External Database connection

It is possible to provide the library with an external MySQL PDO connection. Here's how to configure it:

All methods implemented can be used to manage channels. With admin commands you can manage your channels directly with your bot private chat.

The bot is able to recognise commands in a chat with multiple bots (/command@mybot).

It can also execute commands that get triggered by events, so-called Service Messages.

Maybe you would like to develop your own commands. There is a guide to help you create your own commands.

Also, be sure to have a look at the example commands to learn more about custom commands and how they work.

You can add your custom commands in different ways:

With this method you can set some command specific parameters, for example:

Enabling this feature, the bot admin can perform some super user commands like:

  • List all the chats started with the bot /chats
  • Clean up old database entries /cleanup
  • Show debug information about the bot /debug
  • Send message to all chats /sendtoall
  • Post any content to your channels /sendtochannel
  • Inspect a user or a chat with /whois

Take a look at all default admin commands stored in the src/Commands/AdminCommands/ folder.

You can specify one or more admins with this option:

Telegram user id can be retrieved with the /whoami command.

To enable this feature follow these steps:

  • Add your bot as channel administrator, this can be done with any Telegram client.
  • Enable admin interface for your user as explained in the admin section above.
  • Enter your channel name as a parameter for the /sendtochannel command:

Upload and Download directory path

To use the Upload and Download functionality, you need to set the paths with:

Take a look at the repo Wiki for further information and tutorials! Feel free to improve!

All project assets can be found in the assets repository.

We're busy working on a full A-Z example bot, to help get you started with this library and to show you how to use all its features. You can check the progress of the example-bot repository).

Projects with this library

Here's a list of projects that feats this library, feel free to add yours!

If you like living on the edge, please report any bugs you find on the PHP Telegram Bot issues page.

See CONTRIBUTING for more information.

See SECURITY for more information.

All work on this bot consists of many hours of coding during our free time, to provide you with a Telegram Bot library that is easy to use and extend. If you enjoy using this library and would like to say thank you, donations are a great way to show your support.

Donations are invested back into the project 👍

Thank you for keeping this project alive 🙏

Available as part of the Tidelift Subscription.

The maintainers of PHP Telegram Bot and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.

Please see the LICENSE included in this repository for a full copy of the MIT license, which this project is licensed under.


В этой статье мы реали­зуем прос­той, но край­не полез­ный про­ект на Python — бота для Telegram. Боты — это неболь­шие скрип­ты, которые могут вза­имо­дей­ство­вать с API, что­бы получать сооб­щения от поль­зовате­ля и отправ­лять информа­цию в раз­ные чаты и каналы.

Python для новичков

Ес­ли ты сов­сем не ори­енти­руешь­ся в Python, то отличным началом будет проч­тение трех ввод­ных ста­тей, которые я пуб­ликовал в «Хакере» этим летом, либо посеще­ние кур­са «Python для нович­ков», который я нач­ну вес­ти для читате­лей «Хакера» уже сов­сем ско­ро — 30 нояб­ря.

Что­бы соз­дать бота, нам нуж­но дать ему наз­вание, адрес и получить токен — стро­ку, которая будет однознач­но иден­тифици­ровать нашего бота для сер­веров Telegram. Зай­дем в Telegram под сво­им акка­унтом и откро­ем «отца всех ботов», BotFather.

Жмем кноп­ку «Запус­тить» (или отпра­вим / start ), в ответ BotFather приш­лет нам спи­сок дос­тупных команд:

  • / newbot — соз­дать нового бота;
  • / mybots — редак­тировать ваших ботов;
  • / setname — сме­нить имя бота;
  • / setdescription — изме­нить опи­сание бота;
  • / setabouttext — изме­нить информа­цию о боте;
  • / setuserpic — изме­нить фото ава­тар­ки бота;
  • / setcommands — изме­нить спи­сок команд бота;
  • / deletebot — уда­лить бота.

От­пра­вим бате‑боту коман­ду / newbot , что­бы соз­дать нового бота. В ответ он поп­росит ввес­ти имя будуще­го бота, его мож­но писать на рус­ском. Пос­ле вво­да име­ни нуж­но будет отпра­вить адрес бота, при­чем он дол­жен закан­чивать­ся на сло­во bot. Нап­ример, xakepbot или xakep_bot . Если адрес будет уже кем‑то занят, BotFather нач­нет изви­нять­ся и про­сить при­думать что‑нибудь дру­гое.

Для вза­имо­дей­ствия с Telegram API есть нес­коль­ко готовых модулей. Самый прос­той из них — Telebot. Что­бы уста­новить его, набери

В Linux, воз­можно, понадо­бит­ся написать pip3 вмес­то pip , что­бы ука­зать, что мы хотим работать с треть­ей вер­сией Python.

Эхо-бот

Для начала реали­зуем так называ­емо­го эхо‑бота. Он будет получать от поль­зовате­ля тек­сто­вое сооб­щение и воз­вра­щать его.

В последнее время я сделал настолько много ботов для телеграмма, что крайне преисполнился в том, как их писать, как хостить, да и в принципе выработал красивый шаблон для быстрого их создания.

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

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

А еще сразу скажу, что далее будет все на питоне. Вот. Сказал. Не буду больше ходить вокруг да около, у нас всего 5 минут (помните, да?). Приступим!

Пошаговая инструкция

1) Создаем репозиторий на гитхабе из моего шаблона


2) Регистрируемся на Heroku


3) Создаем новое приложение


4) Привязываем наш репозиторий к проекту на Heroku


5) Настраиваем автоматический deployment


6) Смотрим на адрес, где будет висеть наш бот


7) Настраиваем переменные среды

KEY

VALUE

Рандомная строка из букв для безопастности

Еще одна рандомная строка из букв для безопастности

Токен для бота, куда будут отправляться логи (оставьте пустым, если хотите отключить логирование в телеграм)

user_id, куда будут отправляться логи (получить в боте @userinfobot)


8) Собираем наше приложение и ждем пока оно запустится




Тестируем

Теперь, когда мы закончили все настраивать, пора посмотреть, что же мы "натворили".

Пример работы из коробки Пример работы логирования

Добавляем функционал

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

Думаю, дальше ограничивает вас только воображение. (ну почти)

Применение в проектах

Все любят, когда есть примеры работы. На основе этого шаблона я сделал бота wifi_qr_bot, который генерирует QR-коды для подключения к WiFi. Это упрощает жизнь, ведь пароль у вас длинный (безопасность, все дела), а вводить его на каждом новом устройстве вам лень.


Выводы

Вот мы и сделали нашего бота, который хостится в облаке. Он уже многое умеет в плане логирования. Для логирования я написал отдельную библиотеку, tg-logger. Если интересно, как она работает, то потыкайте в демо бота. Если все еще интересно, прочитайте мою статью. Такие пироги с котятками.

Например, если бот нужен срочно, а вы ещё не освоили Python.

Если вам показались сложными наши статьи о создании своего телеграм-бота и запуске его на сервере, то вот вам подборка конструкторов, где можно сделать почти то же самое.

В основе конструкторов лежит простой принцип: вы собираете из готовых кирпичиков то поведение, которое вам нужно. Если какого-то кирпичика нет, то варианта два: найти другой конструктор или придумать, как можно обойтись без него.

Manybot


Manybot — единственный сервис в нашей подборке, где нет визуального конструктора, а вся работа идёт через телеграм-чат. Сервис подойдёт тем, кому нужны простые и предсказуемые диалоги, выбор из небольшого числа вариантов и маленькое меню. Вряд ли он подойдёт для серьёзных проектов, потому что проще выучить Python, чем управлять сложным ботом через команды в чате.

Bottap

Стоимость: бесплатная версия с рекламой или 390 ₽ в месяц.


Мультиплатформенный конструктор помогает создать бота, который может работать одновременно в Телеграме, Вайбере и во ВКонтакте. В отличие от предыдущего сервиса, здесь есть блоки, которые можно перетягивать мышкой и настраивать связи между ними.

Botmother

Стоимость: бесплатно с ограничениями, но без рекламы, или 1249 ₽ в месяц.

Как сделать телеграм-бота без программирования

Хороший сервис для тех, кому нужно много функций и подробная документация. Это уже полноценный конструктор, где можно программировать сложную логику.

В сервисе есть встроенные шаблоны для типовых ситуаций и готовые боты, которые можно переделать под свои задачи. Ещё можно отследить каждый диалог с пользователем и вмешаться, если бот не справляется с общением.

PuzzleBot


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

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

Amylogic

Стоимость: бесплатно, но с ограничениями по возможностям, или от 990 ₽ в месяц.

Это самый крутой по возможностям сервис, который мы тестировали. Если в PuzzleBot и Botmother мы могли делать почти всё, то здесь мы можем делать всё. Без шуток, здесь есть переменные, объекты как в ООП, функции и прочие программистские штуки.

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

Что дальше

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

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Читайте также: