Bash telegram bot: topkecleon/telegram-bot-bash: Telegram bot written in bash

Telegram bot для Linux сервера: мониторинг, уведомления, управление

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

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

Создание чат-бота в Telegram

Для создания чат-бота в Telegram используется бот @BotFather. Чтобы создать своего бота, нужно найти @BotFather у себя в Telegram и перейти в чат с ним:

Нажмите START. Чтобы создать нового бота, выберете в меню /newbot, введите имя бота в формате “имя_bot». После создания бота, вы получите API токен бота, который нужен будет в дальнейшей настройке.

Теперь нужно узнать user_id — это ID часа с ботом, в который он будет отправлять уведомления. Перейдите в ваш с ним чат и нажмите старт и отправить любой символ. После этого в браузере перейдите по адресу:

https://api.telegram.org/bot<token>/getUpdates — где <token> это API который выдал BotFather.

На скриншоте выделен ваш ID.

Итак, мы создали бота в Telegram и получили авторизационные данные.

Отправка в чат Telegram уведомлений с сервера

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

Для отправки сообщения в чат, нужно использовать следующий URL:

https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat_id>&text=<text>
Где:

<token> — это API который выдал @BotFather
<chat_id> — это ID вашего чата с ботом.

Например:

# curl -s -X POST https://api.telegram.org/bot944496485:AAEtGaGCVrQ7d26Rc3r_cqXPIhrKVokh8e4/sendMessage -d chat_id=336116180 -d text="Доброе утро, страна"

Для чего можно использовать такие Telegram уведомления? Например, при создании резервной копии вы можете отправлять уведомления о ее создании или же отправлять ссылку на скачивание копии в чат с ботом. Вы можете отправлять себе в Telegram уведомления с информацией о сбоях в системе. Можно добавить в крон выполнение каких-либо проверок с последующей отправкой в Telegram.

Еще пример использования подобных уведомлений:

# curl -s -X POST https://api.telegram.org/bot944496485:AAEtGaGCVrQ7d26Rc3r_cqXPIhrKVokh8e4/sendMessage -d chat_id=336116180 -d text=" User $(whoami) logged into $(hostname) on $(date) from $(echo $SSH_CLIENT | awk '{ print $1}')" &>/dev/null 2>&1

Добавьте этот код в /etc/profile и будете получать уведомления в Telegram при каждом входе пользователей на сервер:

Хочу напомнить, что во всех командах, нужно указывать именно своей token(API) и ID чата.

Управление Linux сервером в чат-боте Telegram

Есть набор скриптов, которые позволяет управлять сервером Linux из Telegram чата, отправляя различные команды в чат с ботом. Для этого нужно установить Python, ряд инструментов и загрузить на сервер скрипты.

# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
# yum install xz -y
# tar -xpJf Python-3.6.0.tar.xz
# cd Python-3.6.0
# yum groupinstall "Development tools" -y
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel -y

# ./configure
# make
# make install

Создайте симлинк для Python:

# ln -s /usr/local/bin/python3 /usr/bin/python3

И установите ПО для самого бота:

# pip3 install python-telegram-bot --upgrade

Теперь скачайте и распакуйте к себе на сервер в каталог root/admin три файла из архива telegram_bot.zip:

Рассмотрим файл config.py. В нем нам нужно указать token(API) и ID вашего чата с ботом, а также путь до директорий с бэкапами и директории, размер которой вы будете в дальнейшем проверять:

Файл bot.sh не требует настройки, в нем лишь указываем путь до bot.py:

И самый основной файл, который собственно и позволит нам управлять сервером, это

bot.py. В нем описаны функции, которые будут доступны в чате с ботом и собственно туда, мы можем добавлять свой собственный функционал. Например, в первом блоке описываются доступные команды бота в чате:

Тут описываются все функции, которые будут доступны, после ввода команды /help.

Ниже описывается сама функция, например,

#функция команады ifconfig
def ifconfig(bot, update):
reload(config)
user = str(update.message.from_user.id)
if user in config.admin: #если пользовательский id в списке admin то команда выполняется
run_command("ifconfig")
bot.sendMessage(chat_id=update.message.chat_id, text=textoutput)

И эту функцию, нужно описать как команду:

ifconfig_handler = CommandHandler('ifconfig', ifconfig)
dispatcher.add_handler(ifconfig_handler)

То есть как видим, это выполнение стандартной функции проверки сетевых настроек ifconfig.

При знакомстве с ботом я попытался добавить собственную команду, например для проверки Apache:

# service httpd status

Но только через настройку данного файла это не сработало. Как я понял, здесь можно выполнить только команду описанную одним словом или символами. Я решил проблему создав файл apache_status.sh с содержимым:

#!/bin/bash
service httpd status

И создал на него симлинк:

# ln -s /root/admin/apache_status.sh /usr/local/sbin/apachestatus

Теперь при вызове команды apachestatus, у меня выводит статус веб-сервера apache:

В файле bot.py я заполнил все три блока, согласно других функций. Чтобы bot заработал, нужно запустить файл bot.sh. Для удобства, создадим отдельный сервис для Telegram бота. Создаем нужный файл и выставляем права:

# touch /etc/systemd/system/telegram-bot.service
# chmod 664 /etc/systemd/system/telegram-bot.service

После чего заходим в файл сервиса:

# nano /etc/systemd/system/telegram-bot.service

И добавляем содержимое:

[Unit]
Description=Telegram bot
After=network.target
[Service]
ExecStart=/root/admin/bot.sh
[Install]
WantedBy=multi-user.target

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

# systemctl start telegram-bot.service
# systemctl enable telegram-bot.service
# systemctl status telegram-bot.service

Теперь, если в чате с вашим ботом ввести /help, вы получите список доступных команд.

Например, в данный момент у меня на сервере остановлен веб-сервер Apache:

Запустим его на сервере и проверим статус через Telegram:

Еще несколько примеров выполнения команд:

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

Так же хотел бы заметить, что авторизация сервера с ботом происходит именно по ID и token(API) (любой другой человек, не зная ваших данных, подключиться не сможет).

На момент выпуска статьи, тестовый бот удален.

Telegram API: Отправка Сообщений — Бот Для Уведомлений

Как насчет получения push-уведомления о завершении какого-либо долгого процесса в Linux?

Или как насчет скрипта, запускаемого из crontab, который собирает какие-либо данные и периодически отправляет отчеты на ваш мобильный телефон?

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

Telegram Messenger

Скачайте и установите telegram messenger для вашей платформы.

Запустите Telegram и пройдите процесс регистрации.

Дельный Совет: Массовая отправка писем с помощью Bash-скрипта в Linux! Читать далее →

Создание Бота в Telegram

Начните диалог с BotFather:

🔍 ПОИСК -> BotFather

BotFather: Бот по имени BotFather рулит всеми ботами. Используйте его для создания новых ботов и для управления уже существующими.

Создайте нового бота:

/newbot

Придумайте удобное имя для вашего бота, например:

Notifier

Придумайте уникальной идентификатор (должен оканчиваться на «bot»), например:

notifier_bot

Как только бот будет создан, вы получите токен для подключения к Telegram API.

ТОКЕН: Это строка необходимая для авторизации бота и отправки запросов к Telegram API. Пример токена:4334584910:AAEPmjlh84N62Lv3jGWEgOftlxxAfMhB1gs

Получение Chat ID

CHAT ID: Чтобы отправить сообщение через Telegram API, боту необходимо указать ID чата в который он будет писать. ID чата будет сгенерирован в момент отправки первого сообщения вашему боту.

Начните чат с ботом:

🔍 ПОИСК -> ИМЯ_ВАШЕГО_БОТА -> СТАРТ
Отправьте команду /start:
/start

Чтобы узнать ID чата, откройте следующую ссылку в браузере: https://api.telegram.org/bot<ТОКЕН>/getUpdates (замените <ТОКЕН> на токен вашего бота).

Если вы работаете под Linux и предпочитаете консоль, можно быстро выполнить данный запрос из командной строки с помощью

curl, например:

$ curl https://api.telegram.org/bot4334584910:AAEPmjlh84N62Lv/getUpdates
..."chat":{"id":123456789,"first_name":"my_first_name","type":"private"}...

Дельный Совет: Отправляйте почту через SMTP-сервер с помощью telnet из командной строки в Linux! Читать далее →

Telegram Bot API: Отправка Сообщения

Теперь я приведу несколько примеров того, как отправить сообщение через Telegram API через браузер, с помощью curl и из Bash-скрипта.

Браузер

Чтобы отправить сообщение «Hello World» через браузер, просто откройте URL:

https://api.telegram.org/bot<ТОКЕН>/sendMessage?chat_id=<ID_ЧАТА>&text=Hello%20World

Терминал в Linux

Отправить сообщение из командной строки в Linux, с помощью

curl:

$ curl -s -X POST https://api.telegram.org/bot<ТОКЕН>/sendMessage -d chat_id=<ID_ЧАТА> -d text="Hello World"

Bash-Скрипт

Простой Bash-скрипт для отправки сообщения «Hello World» через Telegram API:

#!/bin/bash

TOKEN=<ТОКЕН>
CHAT_ID=<ID_ЧАТА>
MESSAGE="Hello World"
URL="https://api.telegram.org/bot$TOKEN/sendMessage"

curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MESSAGE"

Телеграмм-бот, опрашивающий linux-сервер / Хабр

В последнее время увлекаюсь Pythonом. Хотелось написать что-то более существенное, чем коды типа helloworld. Поскольку с интересом смотрел еще и в сторону ботов телеграмма, родилась идея создать бота, который бы запускал команды или скрипты на удаленном сервере (linux) и возвращал бы результат в телеграмм. Зачем? Удобно! Не надо логиниться на сервак, чтобы получить информацию о нагрузке на процессор, свободной памяти или объеме диска. Можно даже запускать скрипты.

И так изучаем python и api telegram bot, регистрируем своего бота в телеграмм, скачиваем готовые скрипты, запускаем их на своем серваке и меняем config.py под себя.

Поехали по порядку:

1) Регистрация бота телеграмм. Находим отца всех ботов – @BotFather. Пишем ему:

/newbot

В ответ на его сообщение вводим имя вашего нового бота. Оно обязательно должно иметь на конце слово bot.
moi_novii_bot

Если имя не занято и оно введено верно, то вы получите токкен – вам необходимо будет его скопировать в файл config.py скрипта:
token = ' '

2) Загружаем скрипт. Это первая тестовая версия скрипта – для того чтобы оценить возможности во-первых самого питона, во-вторых – бота telegram. Приветствуются любые пожелания и предложения – допилю. Можете сами что-то добавить – просьба тоже поделится. Каковы возможности программы (их можно посмотреть набрав в своем боте /help):
  • посмотреть сетевые настройки (запускает на сервере команду ifconfig)
  • получить информацию о дисковом пространстве (запускает на сервере команду df -h)
  • получить информацию о памяти (запускает на сервере команду free -m)
  • получить информацию о нагрузке на процессор (запускает на сервере команду mpstat)
  • получить информацию о размере папки, заданной в config.py (запускает на сервере команду du -sh имя папки)
  • проверяет наличие и размер файла в папке (запускает на сервере команду ls -lh файл). Делаю бэкап базы 1с в монтируемую сетевую папку с именем файла по дате – поэтому возникла такая необходимость.

Что еще планирую реализовать: запуск любого скрипта (возможно без вывода всего выполнения, а только конечного результата), улучшить вывод результата – более удобочитаемого, сбор статистики в базу данных и вывод графиков по нагрузкам и т.п.

Для запуска скрипта необходим python 3 и python-telegram-bot. У меня стоит centOS. Там уже стоит 2 версия питона. Ставим рядом 3 питон и библиотеку для работы бота:

wget http://www.python.org/ftp/python/3.3.2/Python-3.6.0.tar.xz
yum install xz
tar -xpJf Python-3.6.0.tar.xz
cd Python-3.6.0
yum groupinstall "Development tools"
./configure
make
make install
ln -s /usr/local/bin/python3 /usr/bin/python3
pip3 install python-telegram-bot --upgrade

Состав скрипта:
bot – файл bash-скрипта запускающего python3 bot.py
bot.py – непосредственно сам скрипт бота. Тем кто знаком с питоном – добро пожаловать внутрь.
config.py – хранит настройки. Туда вписываете токкен, полученный в телеграмме. Затем запускаете скрипт.

В приложение телеграмма вводите:
/id

Таким образом вы получаете ваш личный id. Его необходимо ввести в строку (вместо 123456789) admin = [‘123456789’]. Это сделано в целях безопасности, чтобы остальные команды могли вводить только пользователи с определенных аккаунтов телеграмма. Можно через запятую прописать несколько id: admin = [‘123456789’, ‘987654321’].

В строке dir1 прописываем путь к папке объем которого бы мы хотели контролировать (у меня это путь до папки с базами pgsql)

В строке dir_backup – путь к папке где лежит файл, объем (или наличие) которого необходимо контролировать. У меня это файл вида 20170218.tar.gz. По умолчанию именно вариант с названием файла годмесяцдата.tar.gz проверяется. Если вы хотите изменить маску проверяемого файла, то вам необходимо найти и отредактировать в файле bot.py строку

filebackup = config.dir_backup + cur_year + cur_month + cur_day + '.tar.gz'  #формируем имя файла для поиска

Имейте ввиду, что дальнейшем при исправлении файла config.py вам не нужно будет перезапускать скрипт. Все настройки перечитываются скриптом каждый раз заново.

Неплохо бы добавить этот скрипт в автозагрузку. Для CentOS 7:

touch /etc/systemd/system/telegram-bot.service
chmod 664 /etc/systemd/system/telegram-bot.service

Содержимое этого файла:
[Unit]
Description=Telegram bot
After=network.target

[Service]
Type=simple
User= от имени кого запускать
ExecStart=путь к файлу bot.sh (в этом файле тогда надо прописать полный путь до bot.py)

[Install]
WantedBy=multi-user.target

Стартуем новый сервис:
systemctl start telegram-bot.service

Добавляем его в автозагрузку:
systemctl enable telegram-bot.service

Проверяем статус:
systemctl status telegram-bot.service

Можем вводить команды. Начинаем с /help.

→ Ссылка на архив со скриптом

Спасибо, riot26 за выкладку на githab:
gist.github.com/riot26/bb55e8a19fae0b58d687040c54cbc148

Минимальный «hello world» telegram-бот / Хабр

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

  1. Пройдите регистрацию в telegram
  2. Получите идентификатор нового бота (далее <Bot_token>): обратитесь к боту @BotFather c требованием создать нового бота (команда /newbot)
  3. Получите Идентификатор беседы с ботом (далее <chat_id>):
    • Откройте диалог со своим созданным ботом и напишите ему произвольное сообщение
    • Откройте в браузере ссылку, заменив <Bot_token> на полученный идентификатор от @BotFather https://api.telegram.org/bot<Bot_token>/getUpdates
    • В полученном json-ответе найдите значение в параметре result->message->chat->id, это и есть <chat-id>
  4. Откройте браузер и перейдите по ссылке, заменив <Bot_token> и <chat_id> на свои данные
    https://api.telegram.org/bot<Bot_token>/sendMessage?chat_id=<chat_id>&text=Привет%20мир

Тем самым Вы получите сообщение от бота на все свои устройства с клиентом telegram.

Последний вызов можно использовать в bat-файле или консоли или раздать друзьям не имеющим telegram и пишущим с умного утюга ( но только очень хорошим друзьям так как <Bot_token> конфиденциальная информация вообще-то).

Варианты использованияЗаменив <Bot_token> и <chat_id> на свои данные, получим:
Пример для консоли:
ping yandex.ru -t || start https://api.telegram.org/bot<Bot_token>/sendMessage?chat_id=<chat_id>^&text=Мир%20В%20ОПАСНОСТИ

Пример для bat-файла, сохраненного как utf-8 без BOM и выполняющегося из taskschd.msc раз в 2 недели:
chcp 65001
start https://api.telegram.org/bot<Bot_token>/sendMessage?chat_id=<chat_id>^^^&text=Cходи%20в%20спортзал

Напомнинаю вариант запуска разового задания из консоли:
at 19:47 c:\temp\go_home.bat

Пример на python:
import urllib2
get = urllib2.urlopen('https://api.telegram.org/bot<Bot_token>/sendMessage?chat_id=<chat_id>&text=Без%20python%20не%20кошерно'.encode('UTF-8'))

Получить уведомление сервера в приложении Telegram

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

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

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

Здесь мы будем использовать эту функцию бота для отправки уведомлений с сервера в приложение Telegram Messenger.

Создание бота в Telegram

  • Используя botfather в Telegram, мы можем создать нового бота. Зайдите в поле поиска в Telegram и введите botfather.
  • Перейдите в поле сообщения и нажмите «Пуск».

  • Введите «/ newbot» без кавычек в поле сообщения и нажмите Enter.
  • Теперь отец бота просит вас назвать нового бота.Дайте любое имя на ваш выбор. В этом примере он назван «Джарвис».

  • Бот требует уникального имени пользователя. Введите имя пользователя по вашему выбору. Если он уже принят, попробуйте другой.
  • После успешного создания имени пользователя вы получите поздравительное сообщение от отца-бота с идентификатором токена бота. Этот идентификатор токена используется в Telegram API для отправки сообщений.

  • Далее нам нужно получить ID чата.Найдите вновь созданного бота в поле поиска и начните сеанс чата.

На скриншоте выделенный раздел имеет идентификатор чата.

В случае группового чата необходимо пригласить бота в группу, а затем запустить getupdates API, чтобы получить идентификатор чата. Идентификатор группового чата в начале будет иметь отрицательный знак.

Простой сценарий bash для отправки уведомлений через бот телеграммы.

  #! / Bin / bash   chat_id = "123456789"
   token = "112233445: AABbcd1FfggHHi22jkLmmn0PPQQRstu"
   msg = "Тестовое сообщение"   curl -s -F chat_id = $ chat_id -F text = "$ msg" https: // api.telegram.org/bot$token/sendMessage> / dev / null  

Bash Script для отправки отчета в Telegram, если на сервере обнаружено высокое использование ресурсов.

Вот сценарий bash, который может регулярно отслеживать загрузку сервера и использование памяти. Он был протестирован на Centos 7. API телеграммы используется для отправки вложения, а не просто текстового сообщения. Это связано с тем, что отправляемый текст имеет ограничение на количество символов. Статистику использования ресурсов можно отправлять во вложении вместо простого сообщения.

#! / Bin / bash
# Этот скрипт отслеживает загрузку сервера и использование памяти каждые 10 секунд и отправляет уведомление в Telegram в случае высокого использования.

# Включите сюда идентификатор чата телеграммы и идентификатор токена бота
chat_id = "123456789"
token = "112233445: AABbcd1FfggHHi22jkLmmn0PPQQRstu"

data resource_Temple_Temple_Time_source_token resource_usage_info.txt
msg_caption = / tmp / telegram_msg_caption.txt

# Здесь устанавливаются пороговые уровни использования памяти и нагрузки. Если использование превышает эти значения, будет отправлено уведомление.
mem_threshold = 90 # Должен быть межсетевым. Это в процентах.
load_threshold = $ (nproc) # Должно быть целым числом. Обычно общее количество ядер.

# Telegram API для отправки уведомлений.
function telegram_send
{
curl -s -F chat_id = $ chat_id -F document = @ $ resource_usage_info -F caption = "$ caption" https: // api.telegram.org/bot$token/sendDocument> / dev / null 2 ​​&> 1
}

# Мониторинг нагрузки на сервере
while:
do
min_load = $ (cat / proc / loadavg | cut -d. -f1)
if [$ min_load -ge $ load_threshold]
then
echo -e "Высокая загрузка процессора обнаружена на $ (hostname) \ n $ (uptime)"> $ msg_caption
echo -e "Отчет об использовании ЦП от $ (hostname) \ nServer Time: $ (date +"% d% b% Y% T ") \ n \ n \ $ uptime \ n $ (uptime) \ n \ n% CPU% MEM USER \ tCMD "> $ resource_usage_info
ps -eo pcpu, pmem, user, cmd | sed '1d' | sort -nr >> $ resource_usage_info
caption = $ (<$ msg_caption)
telegram_send
rm -f $ resource_usage_info
rm -f $ msg_caption
спящий сценарий 900 # остановка
fi
спящий режим 10

# Мониторинг использования памяти на сервере
mem = $ (бесплатно -m)
mem_usage = $ (echo "$ mem" | awk 'NR == 2 {printf "% i \ n", ($ 3 * 100 / $ 2)} ')
if [$ mem_usage -gt $ mem_threshold]
then
echo -e "На $ (hostname ) \ n $ (echo $ mem_usage% memory usage) "> $ msg_caption
echo -e" Отчет о потреблении памяти от $ (hostname) \ nServer Time: $ (date + "% d% b% Y% T") \ n \ n \ $ free -m output \ n $ mem \ n \ n% MEM% CPU USER \ tCMD "> $ resource_usage_info
p s -eo pmem, pcpu, пользователь, cmd | sed '1d' | sort -nr >> $ resource_usage_info
caption = $ (<$ msg_caption)
telegram_send
rm -f $ resource_usage_info
rm -f $ msg_caption
спящий сценарий 900 # остановка
fi
sleep 10
done

VIDEO

Спасибо за чтение статьи.Если есть вопросы, оставляйте комментарии ниже.

.

linux - Добавление разрыва строки в текстовое сообщение с помощью бота Telegram

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании

Загрузка…

  1. Авторизоваться зарегистрироваться
  2. текущее сообщество

    • Переполнение стека Помогите болтать
.

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

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