- Доступ к linux серверу с помощью Telegram-бота на Python
- Регистрация бота
- Подготовка питона
- Запуск бота
- Повторение команд
- Простой Telegram-бот на Python за 30 минут
- Часть 1: Регистрация бота
- Часть 2: Подготовка к написанию кода
- Часть 3: Получаем сообщения и говорим «Привет»
- Часть 4: Кнопки и ветки сообщений
- Создание Python Telegram бота и его deploy на виртуальную машину
- Кому нужны чат-боты?
- Шаг 1. Создание бота в Telegram
- Шаг 2. Напишем простейшего чат-бота и протестируем его
- Шаг 3. Выбираем виртуальную машину!
- Что вообще такое эта виртуальная машина?
- Как выбрать виртуальную машину?
- Создание виртуальной машины.
- Настройка сети.
- Подключение к виртуальной машине
- Шаг 5. Настройка беспрерывной работы нашего бота.
- Телеграмм-бот, опрашивающий linux-сервер
Доступ к linux серверу с помощью Telegram-бота на Python
Довольно часто происходят ситуации, когда доступ к серверу нужен здесь и сейчас. Однако, не всегда подключение по SSH является наиболее удобным способом, потому что под рукой может не оказаться SSH клиента, адреса сервера или связки «пользователь/пароль». Конечно, есть Webmin, который упрощает администрирование, но он также не даёт моментальный доступ.
Поэтому я решил реализовать простое, но любопытное решение. А именно — написать Telegram-бота, который, запускаясь на самом сервере, будет выполнять присылаемые ему команды и возвращать результат. Изучив несколько статей на эту тему, я понял, что подобных реализаций ещё никто не описывал.
Данный проект я реализовывал на Ubuntu 16.04, но для беспроблемного запуска на других дистрибутивах я постарался сделать всё в общем виде.
Регистрация бота
Регистрируем нового бота у BotFather. Отправляем ему /newbot и далее по тексту. Нам понадобятся токен нового бота и ваш id (получить его можно, например, у @userinfobot).
Подготовка питона
Для запуска бота будем использовать библиотеку telebot ( pip install pytelegrambotapi ). С помощью библиотеки subprocess будем выполнять команды на сервере.
Запуск бота
На сервере создаем файл bot.py:
nano bot.py
И вставляем в него код:
Заменяем в нём токен бота на тот, который выдал BotFather, и user_id — на значение id вашего аккаунта. Проверка id юзера нужна для того, чтобы бот предоставлял доступ к вашему серверу только вам. Функция check_output() выполняет переданную команду и возвращает результат.
Осталось только запустить бота. Для запуска процессов на сервере я предпочитаю использовать screen ( sudo apt-get install screen ):
(где «ServerBot» — идентификатор процесса)
Процесс автоматически запустится в фоном режиме. Перейдем в диалог с ботом и проверим, что всё работает, как надо:
Сongratulations! Бот выполняет присылаемые ему команды. Теперь, чтобы получить доступ к серверу, вам достаточно открыть диалог с ботом.
Повторение команд
Зачастую, для мониторинга состояния сервера приходится выполнять одни и те же команды. Поэтому реализация повтора команд без их повторного отправления будет очень к месту.
Реализовывать будем при помощи inline кнопок под сообщениями:
Снова проверим, что всё работает корректно:
По нажатию кнопки под сообщением бот должен повторять команду, от которой было прислано данное сообщение.
Источник
Простой Telegram-бот на Python за 30 минут
На Хабре, да и не только, про ботов рассказано уже так много, что даже слишком. Но заинтересовавшись пару недель назад данной темой, найти нормальный материал у меня так и не вышло: все статьи были либо для совсем чайников и ограничивались отправкой сообщения в ответ на сообщение пользователя, либо были неактуальны. Это и подтолкнуло меня на написание статьи, которая бы объяснила такому же новичку, как я, как написать и запустить более-менее осмысленного бота (с возможностью расширения функциональности).
Часть 1: Регистрация бота
Самая простая и описанная часть. Очень коротко: нужно найти бота @BotFather, написать ему /start, или /newbot, заполнить поля, которые он спросит (название бота и его короткое имя), и получить сообщение с токеном бота и ссылкой на документацию. Токен нужно сохранить, желательно надёжно, так как это единственный ключ для авторизации бота и взаимодействия с ним.
Часть 2: Подготовка к написанию кода
Как уже было сказано в заголовке, писать бота мы будем на Python’е. В данной статье будет описана работа с библиотекой PyTelegramBotAPI (Telebot). Если у вас не установлен Python, то сперва нужно сделать это: в терминале Linux нужно ввести
Если же вы пользуетесь Windows, то нужно скачать Python с официального сайта .
После, в терминале Linux, или командной строке Windows вводим
Теперь все готово для написания кода.
Часть 3: Получаем сообщения и говорим «Привет»
Небольшое отступление. Телеграмм умеет сообщать боту о действиях пользователя двумя способами: через ответ на запрос сервера (Long Poll), и через Webhook, когда сервер Телеграмма сам присылает сообщение о том, что кто-то написал боту. Второй способ явно выглядит лучше, но требует выделенного IP-адреса, и установленного SSL на сервере. В этой статье я хочу рассказать о написании бота, а не настройке сервера, поэтому пользоваться мы будем Long Poll’ом.
Открывайте ваш любимый текстовый редактор, и давайте писать код бота!
Первое, что нужно сделать это импортировать нашу библиотеку и подключить токен бота:
Теперь объявим метод для получения текстовых сообщений:
В этом участке кода мы объявили слушателя для текстовых сообщений и метод их обработки. Поле content_types может принимать разные значения, и не только одно, например
Будет реагировать на текстовые сообщения, документы и аудио. Более подробно можно почитать в официальной документации
Теперь добавим в наш метод немного функционала: если пользователь напишет нам «Привет», то скажем ему «Привет, чем я могу помочь?», а если нам напишут команду «/help», то скажем пользователю написать «Привет»:
Данный участок кода не требует комментариев, как мне кажется. Теперь нужно добавить в наш код только одну строчку (вне всех методов).
Теперь наш бот будет постоянно спрашивать у сервера Телеграмма «Мне кто-нибудь написал?», и если мы напишем нашему боту, то Телеграмм передаст ему наше сообщение. Сохраняем весь файл, и пишем в консоли
Где bot.py – имя нашего файла.
Теперь можно написать боту и посмотреть на результат:
Часть 4: Кнопки и ветки сообщений
Отправлять сообщения это несомненно весело, но ещё веселее вести с пользователем диалог: задавать ему вопросы и получать на них ответы. Допустим, теперь наш бот будет спрашивать у пользователя по очереди его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
И так, данные пользователя мы записали. В этом примере показан очень упрощённый пример, по хорошему, хранить промежуточные данные и состояния пользователя нужно в БД, но мы сегодня работаем с ботом, а не с базами данных. Последний штрих – запросим у пользователей подтверждение того, что все введено верно, да не просто так, а с кнопками! Для этого немного отредактируем код метода get_age
И теперь наш бот отправляет клавиатуру, но если на нее нажать, то ничего не произойдёт. Потому что мы не написали метод-обработчик. Давайте напишем:
Остаётся только дописать в начало файла одну строку:
Вот и всё, сохраняем и запускаем нашего бота:
Источник
Создание Python Telegram бота и его deploy на виртуальную машину
Кому нужны чат-боты?
Рынок чат-ботов в России растет с бешеной скоростью и ожидается ежегодный прирост на 30% в течение ближайших трех лет. В 2020 г. количество запросов на чат-боты увеличилось на 17% по сравнению с 2019 г. Большим спросом стали пользоваться голосовые боты, количество запросов на них выросло в четыре раза. В 2021 г. ожидается рост числа запросов на чат-боты на 15-20% от организаций из госсектора, образования, медицины, логистики, ретейла и e-commerce, промышленных и добывающих компаний.
Создаём нашего telegram бота.
Пишем код под наши задачи и тестируем его работоспособность.
Выбираем надежный сервис виртуальных машин.
Переносим нашего бота на виртуальную машину для его дальнейшей работы.
Настраиваем беспрерывную работу бота.
Шаг 1. Создание бота в Telegram
Первые три шага опишу максимально кратко, так как статей на эту тему много и обычно это не вызовет у пользователей никаких трудностей. Для создания бота нам понадобится написать BotFather.
Шаг 2. Напишем простейшего чат-бота и протестируем его
Для работы будем использовать библиотеку telebot, которую можно установить при помощи следующей команды:
$ pip install pytelegrambotapi
Для установки других библиотек, в случае того, если вы не ограничиваетесь базовым функционалом вам поможет господь Google.
Напишем простого бота, который будет присылать нам в ответ на различные Emoji их размытые PNG копии:
Наш бот готов, теперь осталось его протестировать. Заходим по ссылке, которую прислал BotFather.
Поздравляю, наш бот теперь работает. И тут мы подходим к главной проблеме: как только мы выключим наш компьютер с запущенным кодом, бот мгновенно перестанет работать. Для решения этой проблемы нам-то и понадобится сервис предоставляющий виртуальные машины.
Шаг 3. Выбираем виртуальную машину!
Что вообще такое эта виртуальная машина?
Виртуальная машина (ВМ ) — это виртуальный компьютер, который использует выделенные ресурсы реального компьютера (процессор, диск, адаптер). Эти ресурсы хранятся в облаке и позволяют ВМ работать автономно. Простыми словами, виртуальная машина позволяет создать на одном компьютере ещё один компьютер, который будет использовать его ресурсы, но работать изолированно.
Именно виртуальная машина поможет нашему боту отвечать на все запросы и работать 24 на 7.
Как выбрать виртуальную машину?
ВМ выбирается исключительно отталкиваясь от ваших потребностей бюджета. Чем больше вам необходимо мощности и памяти, тем выше будет ее стоимость. В настоящее время есть множество хороших сервисов, предоставляющих пробный период с которым вы сможете определиться, подходит ли вам сервис.
Лично я могу рекомендовать следующие сервисы:
Mail cloud solutions — Предоставляют 3000 р. на два месяца тестового периода. (Именно его я и буду использовать в дальнейшей работе).
Yandex.Cloud — Представляют 2000 р. на два месяца тестового периода.
Google Cloud Platform — Предоставляют 300$ на три месяца тестового периода.
После выбора сервиса, пройдем регистрацию и создадим новую виртуальную машину.
Создание виртуальной машины.
Я выбрал минимальные параметры, так как нашему боты не нужны какие-то большие энергоресурсы.
Настройка сети.
Для подключения будем использовать протокол SSH. Для подключения к нашей виртуальной машине, нам необходимо будет выпустить новую связку ssh-ключей.
Для этого перейдем в терминал и пропишем следующую команду:
Затем пропишем имя нашего ключа и нажмем Enter. Наш ключ создан. Для подключения нам понадобится public-key с расширением .pub. Копируем содержимое нашего файла и вставляем его в соответствующее поле «Ключ виртуальной машины».
Переходим к следующему шагу.
Подключение к виртуальной машине
Для подключения к нашей виртуальной машине пропишем следующую команду:
/.ssh/ИмяВашегоКлюча ubuntu@ваш публичный IP-адрес
В случае удачного подключения вы увидите нечто подобное:
Мы подошли к самому сложному шагу, который я надеюсь, благодаря моей статье перестанет быть столь трудным для освоения.
Установим на наш сервер последнюю версию Python. Для этого последовательно вводите следующие команды:
Установим и создадим виртуально окружение:
Установим и запустим Redis-server:
Проверить, запущен ли наш Redis-server, необходимо прописать «ping»
Если в ответе вы получили PONG, поздравляю, все готово к дальнейшей работе!
Перенесем все необходимые файлы на наш виртуальный сервер. Для этого я буду использовать очень удобную программу CyberDuck
Выбираем новое подключение по SFTP, вводим IP-адрес вашей виртуальной машины, !ПРИВАТНЫЙ! ssh-ключ, логин и пароль от вашей виртуальной машины.
Мы попадаем фактически на наш сервер, с уже установленным Python, папкой с названием нашего бота и виртуальным окружением. Остается перенести все данные нашего бота. Для этого копируем ВСЕ необходимые файлы и вставляем их на сервер.
Поздравляю, мы на финишной прямой, остается запустить нашего бота на сервере и проверить его работоспособность.
Проверяем работу, если все в порядке, прописываем в терминале deactivate. Нам остается последний шаг. Настроить непрерывную работу нашего бота.
Шаг 5. Настройка беспрерывной работы нашего бота.
Пропишем следующую команду: nano /lib/systemd/system/НазваниеБота.service
Нажимаем CTRL+O → Enter → CTRL+X для сохранения. Эти настройки помогут запускать или перезапускать нашего бота.
Последний шаг: Снова запускаем нашего бота, но уже с беспрерывной работой.
ГОТОВО! Наш бот запущен и теперь работает 24/7, независимо от того, включен наш с вами компьютер или нет. Если что-то не работает, тщательно проверьте, правильно ли вы прописали путь к файлам. Если терминал выдает ошибку авторизации, попробуйте добавить перед командой «sudo» (Команда от имени администратора)
Источник
Телеграмм-бот, опрашивающий linux-сервер
В последнее время увлекаюсь Pythonом. Хотелось написать что-то более существенное, чем коды типа helloworld. Поскольку с интересом смотрел еще и в сторону ботов телеграмма, родилась идея создать бота, который бы запускал команды или скрипты на удаленном сервере (linux) и возвращал бы результат в телеграмм. Зачем? Удобно! Не надо логиниться на сервак, чтобы получить информацию о нагрузке на процессор, свободной памяти или объеме диска. Можно даже запускать скрипты.
И так изучаем python и api telegram bot, регистрируем своего бота в телеграмм, скачиваем готовые скрипты, запускаем их на своем серваке и меняем config.py под себя.
Поехали по порядку:
1) Регистрация бота телеграмм. Находим отца всех ботов – @BotFather. Пишем ему:
В ответ на его сообщение вводим имя вашего нового бота. Оно обязательно должно иметь на конце слово bot.
Если имя не занято и оно введено верно, то вы получите токкен – вам необходимо будет его скопировать в файл config.py скрипта:
2) Загружаем скрипт. Это первая тестовая версия скрипта – для того чтобы оценить возможности во-первых самого питона, во-вторых – бота telegram. Приветствуются любые пожелания и предложения – допилю. Можете сами что-то добавить – просьба тоже поделится. Каковы возможности программы (их можно посмотреть набрав в своем боте /help):
- посмотреть сетевые настройки (запускает на сервере команду ifconfig)
- получить информацию о дисковом пространстве (запускает на сервере команду df -h)
- получить информацию о памяти (запускает на сервере команду free -m)
- получить информацию о нагрузке на процессор (запускает на сервере команду mpstat)
- получить информацию о размере папки, заданной в config.py (запускает на сервере команду du -sh имя папки)
- проверяет наличие и размер файла в папке (запускает на сервере команду ls -lh файл). Делаю бэкап базы 1с в монтируемую сетевую папку с именем файла по дате – поэтому возникла такая необходимость.
Что еще планирую реализовать: запуск любого скрипта (возможно без вывода всего выполнения, а только конечного результата), улучшить вывод результата – более удобочитаемого, сбор статистики в базу данных и вывод графиков по нагрузкам и т.п.
Для запуска скрипта необходим python 3 и python-telegram-bot. У меня стоит centOS. Там уже стоит 2 версия питона. Ставим рядом 3 питон и библиотеку для работы бота:
bot – файл bash-скрипта запускающего python3 bot.py
bot.py – непосредственно сам скрипт бота. Тем кто знаком с питоном – добро пожаловать внутрь.
config.py – хранит настройки. Туда вписываете токкен, полученный в телеграмме. Затем запускаете скрипт.
В приложение телеграмма вводите:
Таким образом вы получаете ваш личный id. Его необходимо ввести в строку (вместо 123456789) admin = [‘123456789’]. Это сделано в целях безопасности, чтобы остальные команды могли вводить только пользователи с определенных аккаунтов телеграмма. Можно через запятую прописать несколько id: admin = [‘123456789’, ‘987654321’].
В строке dir1 прописываем путь к папке объем которого бы мы хотели контролировать (у меня это путь до папки с базами pgsql)
В строке dir_backup – путь к папке где лежит файл, объем (или наличие) которого необходимо контролировать. У меня это файл вида 20170218.tar.gz. По умолчанию именно вариант с названием файла годмесяцдата.tar.gz проверяется. Если вы хотите изменить маску проверяемого файла, то вам необходимо найти и отредактировать в файле bot.py строку
Имейте ввиду, что дальнейшем при исправлении файла config.py вам не нужно будет перезапускать скрипт. Все настройки перечитываются скриптом каждый раз заново.
Неплохо бы добавить этот скрипт в автозагрузку. Для CentOS 7:
Содержимое этого файла:
Стартуем новый сервис:
Добавляем его в автозагрузку:
Можем вводить команды. Начинаем с /help.
Источник