- Запускаем телеграм-бота на сервере
- Выбираем сервер
- Готовим программу и отправляем её на сервер
- Настраиваем сервер
- Что дальше
- Телеграм-бот на сервере: загрузка, настройка и запуск
- Шаг 1. Выбрать хостинг
- Шаг 2. Заказать хостинг
- Шаг 3. Загрузить бота
- Шаг 4. Зайти на сервер по SSH
- Шаг 5. Установить Node.js
- Возможные ошибки при установке, и как их решить
- Шаг 6. Запустить и проверить бота
- Шаг 7. Обеспечить автоматический перезапуск бота
- Как я писал telegram-бота и заливал его на удаленный сервер
- Вступление
- Первые шаги
- Какой язык программирования выбрать для написания бота?
- Где запустить Вашего бота?
- Как же подключаться к VDS?
- Как установить на сервер все необходимые Вам языки программирования и библиотеки?
- Как загрузить файлы с моего ПК на сервер?
- Как скачать файлы с сервера на ПК?
- Как запустить бота?
- БЛАГОДАРНОСТИ
- Простой Telegram-бот на Python за 30 минут
- Часть 1: Регистрация бота
- Часть 2: Подготовка к написанию кода
- Часть 3: Получаем сообщения и говорим «Привет»
- Часть 4: Кнопки и ветки сообщений
Запускаем телеграм-бота на сервере
Тогда он будет работать круглые сутки, а вы — отдыхать.
Не так давно мы создали телеграм-бота на Python: можно было написать ему свой знак зодиака, а он в ответ давал предсказание о долгой счастливой жизни. Но у бота есть недостаток: он работает, пока запущена программа на нашем компьютере. Если мы её остановим или выключим компьютер, бот тоже перестанет отвечать на сообщения.
Вот что мы сделаем, чтобы бот работал независимо от всего:
Выбираем сервер
Нам нужен сервер, который умеет работать с Python и запускать файлы программы автоматически. На самом деле он у нас уже есть — на нём крутится сайт mihailmaximov.ru. Если вы всё пропустили — держите подборку:
Тот хостинг, который мы выбрали для проектов, уже умеет запускать Python-файлы. Если вы пользуетесь другим сервисом, то проверьте, умеет ли он то же самое.
Готовим программу и отправляем её на сервер
Единственное, что нужно добавить в наш код телеграм-бота, — специальную команду интерпретатору, чтобы он знал, как работать с нашим файлом. Но перед этим нужно проверить, какая версия Python на нём установлена.
Чтобы это узнать, соединимся с сервером по протоколу SSH и спросим у него напрямую. Для этого используем программу Putty, а настройки подключения возьмём в личном кабинете хостинга:


Настраиваем сервер
Если у вас такого файла нет — создайте его и не забудьте про точку в самом начале названия.
Последнее, что осталось сделать, — настроить права доступа у файла с программой. Находим её среди файлов хостинга и выставляем права 755 или rwxrwxr-x:
Теперь с помощью Putty снова подключаемся к серверу и настраиваем рабочее окружение. Это как будто виртуальная песочница, где мы сможем ставить нужные модули для Python, чтобы не мешать остальным пользователям сервера.
Эти две команды создадут виртуальное пространство для запуска Python-файлов.
Теперь установим Python-модуль для работы с Телеграмом:
pip install pytelegrambotapi
Когда установка закончится, пишем такую команду:
nohup python3 /home/t/thecode/osebe/public_html/cgi-bin/telegoroskop.py
/home/t/thecode/osebe/ — это наш путь к папке cgi-bin, а у вас он будет другим. Поменяйте путь на свой и запускайте.
Результат проекта — бот @TheCode_Baboolya_bot.
Что дальше
Мы сделали самые базовые вещи — запустили скрипт на сервере и сделали так, чтобы он работал там постоянно. Но вот как можно это улучшить:
Телеграм-бот на сервере: загрузка, настройка и запуск
Автор статьи — Денис, специалист службы технической поддержки хостинга в ООО «REG.RU».
В предыдущей статье мы рассказали, как создать простого бота на Node.js, однако он работал только на локальном компьютере. Эта статья о том, как загрузить бота на сервер, запустить его и проверить, что всё работает.
Шаг 1. Выбрать хостинг
Как правило, на shared-хостинге отсутствует поддержка Node.js, поэтому нам понадобится как минимум виртуальный сервер. Существуют сервисы, предлагающие VPS бесплатно, но с заметными ограничениями: например на количество трафика или нагрузку на сервер. Можно выделить несколько известных зарубежных провайдеров (но стоит отметить, что для новичков они могут оказаться сложными):
Преимущество платных VPS в более высоких лимитах или их отсутствии, а также в гарантии стабильной работы сервера. Вместе с этим вы получаете активную поддержку и всегда можете рассчитывать на помощь хостинг-провайдера, если возникнут проблемы.
Для примера мы закажем облачный VPS в REG.RU, вы можете воспользоваться любым VPS-хостингом. Он удобен для тестового проекта тем, что оплата почасовая. При выборе тарифа мы рекомендуем ориентироваться на несколько параметров:
Так как наш бот использует только одну основную библиотеку и состоит из нескольких строк кода, мы выбираем самый младший тариф — Cloud-0. В будущем, если возникнет необходимость, можно перейти на более дорогой тариф.
Шаг 2. Заказать хостинг
Переходим по ссылке: https://www.reg.ru/vps/cloud/, выбираем тариф, операционную систему и шаблон «Чистая ОС». Если у вас нет особых предпочтений, рекомендуем выбрать Ubuntu 18.04. Хотя у REG.RU есть шаблон c Node.js, для чистоты эксперимента всё необходимое ПО мы установим сами. Нажимаем кнопку «Заказать»:
После заказа и оплаты дождёмся настройки сервера:
В течение минуты статус сервера сменится с «В процессе» на «Активен». После этого отобразятся реквизиты доступа к серверу, они также будут отправлены на почту:
Шаг 3. Загрузить бота
Приступим к загрузке бота на сервер. Это можно сделать разными способами — с помощью FTP, SFTP, панели управления или, к примеру, rsync. Мы выберем самый быстрый вариант — SFTP, так как для него нужна только возможность подключения к серверу по SSH, которая обычно присутствует на всех VPS сразу после заказа.
Мы подключимся к серверу с помощью FileZilla. Укажем IP-адрес сервера, а также логин root и пароль в настройках клиента:
При первом подключении появится окно с предупреждением:
Ставим галочку «Всегда доверять этому хосту» и нажимаем «Ок».
Переходим в созданную папку и загружаем файлы index.js и package.json :
Шаг 4. Зайти на сервер по SSH
Теперь нужно подключиться к серверу по SSH, чтобы установить Node.js и запустить бота. Для этого необходим SSH-клиент, например Putty, XShell, Bitvise SSH или любой другой. Функциональность программ может немного отличаться, но большой разницы в использовании между ними нет. Мы выбрали PuTTY как самый популярный и бесплатный SSH-клиент для Windows.
Открываем PuTTY, указываем IP-адрес сервера, порт 22 уже указан по умолчанию:
Нажимаем «Соединиться». Откроется окно с запросом логина:
Шаг 5. Установить Node.js
Теперь займёмся установкой. Обратите внимание, что команды для установки Node.js отличаются в зависимости от операционной системы. В наших примерах указаны команды для Ubuntu, Debian и CentOS — мы будем вводить их в консоли SSH-клиента.
Если вы не знаете, какая ОС установлена на сервере, можете проверить это командой:
Вывод будет примерно таким:
Помимо Node.js нам понадобится утилита Screen, чтобы бот продолжал работать, когда мы отключимся от сервера. Также нужен менеджер пакетов npm для установки зависимостей.
Подождём завершения установки и проверим, что Node.js работает:
Если в ответе отобразилась версия установленного пакета, то всё прошло успешно.
Теперь перейдём в папку с файлом бота и установим зависимости:
Возможные ошибки при установке, и как их решить
При установке могут появиться ошибки вида:
Обычно это связано с тем, что у пользователя недостаточно прав для установки пакетов на сервере, либо предыдущий процесс установки завершён некорректно.
В первом случае необходимо убедиться, что вы подключились к серверу под именем суперпользователя root — при необходимости зайдите на сервер заново.
После этого попробуйте заново запустить установку.
Шаг 6. Запустить и проверить бота
Пришло время запустить бота. Для начала запустим утилиту Screen простой командой:
Перейдём в каталог с файлом бота:
После этого можем запустить бота:
Заходим в Telegram, проверяем бота:
Отлично! Всё работает.
Теперь можно отключиться от сервера и закрыть окно PuTTY, бот продолжит работу.
Шаг 7. Обеспечить автоматический перезапуск бота
Из-за ошибок в коде бот может «упасть» в самый неожиданный момент. Чтобы этого не случилось, настроим автозапуск бота при старте сервера и его автоматический перезапуск при ошибках.
Это позволит боту стабильно работать даже в случае обнаружения багов. Вы сможете оперативно их исправить, а бот в это время продолжит отвечать на запросы.
Большинство современных Linux-систем используют systemd для управления службами, поэтому следующая инструкция подойдёт для последних версий Ubuntu, Debian и CentOS.
Для начала отключим бота командой:
Нам понадобится создать собственную службу, для этого в каталоге /lib/systemd/system создадим файл:
Текст в некоторых строках необходимо отредактировать относительно вашего проекта. Разберём строки, на которые нужно обратить внимание.
В поле Description указывается описание службы. Вы можете указать в ней краткую информацию о боте.
Команда для запуска бота.
Сохраняем файл. В примерах далее мы будем использовать имя службы keksbot — если вы указали другое имя, не забудьте поменять его. Для установки службы воспользуемся командами:
Теперь запустим бота командой:
Готово. Теперь бот будет автоматически запускаться при старте сервера или при возникновении ошибок. Можно проверить это, завершив процесс node:
Через пять секунд бот автоматически перезапустится.
Помимо запуска мы можем управлять ботом командами:
Как я писал telegram-бота и заливал его на удаленный сервер
Вступление
Как только на территории РФ вступил в силу запрет на анонимность в мессенджерах, у меня дошли руки написать пост про telegram-бота. По ходу создания бота столкнулся с большим количеством проблем, которые пришлось решать по отдельности, и буквально выцеживать крупинки информации со всего интернета. И вот после нескольких месяцев страданий и мучений (кодинг – не основное моё занятие) я наконец-то закончил с ботом, разобрался со всеми проблемами и готов поведать свою историю Вам.

Первые шаги
Для начала нужно установить telegram на ПК и зарегистрироваться в мессенджере. Найти в поиске @BotFather – это отец всех ботов в telegram, именно он их создаёт. Пишем ему /newbot и отвечаем на два простых вопросов: имя бота и его username. После чего @BotFather поздравит нас с успешным созданием бота и отправит нам его token — 523870826:AAF0O8T-e7riRi8m6qlRz4pBKKdh0OfHKj8.
Внимание: token – единственный идентификационный ключ к боту. Нигде не выкладывайте его, иначе другие люди смогут управлять Вашим ботом. Бот с данным token на момент выкладывания статьи удалён.
Какой язык программирования выбрать для написания бота?
Тут я долго не заморачивался и остановился на Python, так как знаю его достаточно хорошо, да и удобная библиотека тоже присутствует. Я решил использовать PyTelagramBotAPI (на момент написания этой статьи последняя доступная версия 3.5.1).
Перейдём к первому коду.
Импортируем библиотеку PyTelegramBotAPI.
Напишем простую обработку сообщений с помощью декоратора bot.message_handler.
Поставим бота в режим постоянной обработки информации, приходящей от серверов telegram.
В переменной message telegram передаёт словарь (map) такого вида:
Также существуют другие декораторы, которые могут принимать аудиофайлы, видео, картинки, документы, геолокацию и т.д.
Вообще, telegram позволяет ботам производить очень много прикольных операций от создания пользовательских клавиатур до проведения платежей. Ссылка на официальную документацию Telegram.
Для сохранения данных о пользователях решил воспользоваться базой данных sqlite3.
Параллельные процессы запускал с помощью библиотеки threading. Например: функция расчета битв.
Дальше всё зависит только от Вашей фантазии.
Где запустить Вашего бота?
Свой собственный ПК не хочется оставлять включенным 24/7, да и не практично это. Поэтому я решил воспользоваться бесплатным сервисом heroku, но меня постигла неудача из-за выбранной мною БД. Оказалось, что при каждом перезапуске бота, heroku удаляет все коммиты sqlite3 за последний сеанс без исключений. После чего, я решил купить VDS (Virtual Dedicated Server, виртуальный выделенный сервер) – удаленный ПК, на котором выделяется определенная мощность и память под Вас, и к командной строке которого Вам даётся доступ. Чаще всего операционной системой такой машинки будет linux. Плата небольшая – 400 руб./месяц, так что без особых моральных страданий оплатил VDS на основе Debian GNU/Linux и начал разбираться с тем, как мне включить бота на удалённом сервере.
Как же подключаться к VDS?
Есть разные методы, я решил по SSH-соединению через Putty. Скачиваем Putty через официальный сайт и открываем. Вводим IP-address VDS и нажимаем open.
Должно открыться такое окно, где нужно ввести логин и пароль от сервера.
Все вышеупомянутые данные выдаст компания, у которой Вы приобретёте VDS. Далее VDS – сервер.
Как установить на сервер все необходимые Вам языки программирования и библиотеки?
Тут все просто. Введя эти 5 команд в консоль сервера в данной последовательности, Вы установите на сервер python3, setuptools, pip3 и библиотеку pyTelegramBotAPI.
Все дополнительные библиотеки, которые не входят в основной пакет python3, также необходимо установить по принципу.
Как загрузить файлы с моего ПК на сервер?
Для начала создадим папку, в который будем заливать все необходимые файлы. На сервере пройдем в каталог /usr/local/bin и создадим папку bot.
У меня на ПК установлен windows, соответственно и команды будут для командной строки windows. Для начала необходимо пройти в каталог, где находится putty.exe.
Далее загружаем bot.py, который находится в каталоге C:\Users\Ilya\PycharmProjects\Bot (нужно подставить Ваш каталог) в каталог на сервере /usr/local/bin/bot.
Строчку root@123.123.12.12 нужно заменить на строчку вида login@IP_address, соответственно с Вашим логином и IP-адресом (упомянуты выше в разделе «Как же подключиться к VDS?»). Заменяя bot.py на названия других файлов, загрузите все необходимые.
Как скачать файлы с сервера на ПК?
Так же, как и при загрузке файлов на сервер в командной строке в каталог, где лежит putty.exe. И вводим эту команду, чтобы скачать файл database на рабочий стол Вашего ПК.
Как запустить бота?
Первый и самый простой вариант – зайти в каталог с исполняемым файлов и прописать python3 bot.py, но тогда при закрытии putty бот будет выключаться.
Второй вариант – запустить бота с помощью screen – модуль, который создаёт параллельные рабочие столы, но тогда бот не будет перезапускаться автоматически в случае падения, а это происходит часто – несколько раз в неделю из-за ночного перезапуска серверов telegram (в 3:00 по МСК).
Третий способ – systemd – cистемный менеджер, демон инициализации других демонов в Linux. Проще говоря, systemd запустит бота и будет перезапускать его в случае падения.
Создайте файл на Вашем ПК с именем bot.service с таким содержанием:
И загружаем его в нужный каталог:
Далее нужно прописать 4 команды в консоли сервера:
В моём случаи из-за определённых ошибок реализации, а конкретно многопоточности, пришлось переносить функцию для расчёта битв (battle_counter.py) в отдельного демона.
После чего должно появится сообщение примерно такого содержания:
Ваш бот запущен и готов к работе!
БЛАГОДАРНОСТИ
Это был мой первый относительно большой проект и я столкнулся с колоссальным количеством новых для меня проблем. Огромную благодарность хочу выразить Yurii Drake, который помог мне разобраться с ними!
Задача: Запустить бота Telegram на локальном компьютере под управлением Windows (в данном случае под Windows 7) и выполнять различные процессы с использованием PHP и Delphi.
Краткая инструкция для Лиги лени.
Самое главное запомнить token для получения доступа к Telegram API:
Далее выбираем локальный сервер, мой выбор пал на Open Server Panel, так как Denwer давно не обновляется, хотя для данной задачи и он бы подошёл. Далее я буду описывать все действия на примере Open Server.
Переходим в папку с установленным Open Server и исходя из какой разрядности ваша операционная система запускаем необходимый exe.
Переходим в папку «domains» и создаем новую папку, в моём случае это «pikabu-bot.ru«, именно в ней будут располагаться файлы бота.
Как говорит интернет его нужно запускать с параметрами:
Но сдается мне что это не совсем правильно так как устанавливается перенаправленние на «localhost» и приходится настраивать Алиасы (об этом в конце поста), если кто подскажет как правильно, будет круто. При его запуске становиться доступна страница статистики расположенная по адресу:
http://localhost:4040/status
На ней нас интересует только полученный адрес по которому наш локальный сервер доступен из вне, одно из ограничений бесплатной версии Ngrok заключается в том что при каждом новом запуске нам выдаётся новый адрес. В файле «webhook.php» мы парсим данное значение и устанавливаем webhook c новым адресом который ведет к файлу «bot.php» на нашем локальном сервере. И все наше содержимое будет общаться с Telegram по https как он и любит.
Содержимое всех файлов и их краткое описание:
index.php
По сути заглушка которая показывает информацию о боте.
lib.php
Функция перевода символов в нижний регистр, учитывающая кириллицу для удобного анализа. Ни чего интересного.
Имя должно быть без знака @, посмотреть его можете в своем профиле, если там его нет укажите его в настройках приложения мессенджера.
Консольное приложение которое принимает в качестве параметра путь для приложения которое нужно запустить, так как если напрямую запустить приложение командой из bot.php exec(‘calc.exe’);
то все остальные команды не будут выполняться пока запущенное приложение, в данном случае калькулятор не будет завершён, есть родной способ это обойти но решил исполнить именно в таком виде так как функционал по мере необходимости можно наращивать.
В файле bot.php видно как обращаться к данному приложению:
exec(‘run.exe C:\Windows\System32\calc.exe’);
Так как в Windows параметры\текст с пробелами считается разными параметрами, в цикле соединяю все параметры в одну строку и далее выполняем её, а после приложение закрывается, тем самым у нас остаётся свободный скрипт от выполнения приложения.
Еще немного о webhook.php
Для автоматического запуска приложения Ngrok и установки webhook’а, было написанно еще одно консольное приложение start.exe которое так же принимает параметры запуска.
Настроить start.exe можно через ярлык и засунуть в автозагрузку:
Про Алиасы:
Осталось дело за малым, настроить Open Server. После запуска в области уведомлений возле часов будет иконка с флажком, кликаем по нему и переходим в настройки во вкладку «Алиасы» и перенаправляем наш созданный домен на «localhost».
Очень удобно делать подобные манипуляции с ботом на домашней машине, чем каждое исправление заливать на хостинг\сервер.
Я осознано упускал очевидные, по крайней мере для меня, вещи, но несмотря на это надеюсь что изложил достаточно доходчиво.
Простой Telegram-бот на Python за 30 минут
На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).
Часть 1: Регистрация бота
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести
После, в терминале Linux, или командной строке Windows вводим
Теперь все готово для написания кода.
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации
Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:
Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).
Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли
Где bot.py – имя нашего файла.
Теперь можно написать боту и посмотреть на результат:
Часть 4: Кнопки и ветки сообщений
Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:
Остаётся только дописать в начало файла одну строку:
Вот и всё, сохраняем и запускаем нашего бота:
































