Telegram-бот "Попингуй"У многих админов, в том числе и у нас, используется система мониторинга Zabbix с прикрученным к ней телеграм-ботом, который всякие ворнинги постоянно кидает в группу. Но бывает так, что падает агент заббикса, или происходит ложное срабатывание, ну и так далее. В итоге приходится ночью вскакивать с кровати, бежать к компу, ломиться на рабочий комп по удаленке - и все это ради того, чтобы просто пропинговать ресурс и убедиться в том, что он жив. Вот и решил я написать свой бот на Python, который будет болтаться на сервере в локальной сети и по заявкам пользователей пинговать что надо.
Сначала добавляем себе супер-бота
@BotFather, создаем через него своего бота и получаем токен, который надо будет указать в скрипте, затем переходим к разработке.
Сам скрипт выкладывать в канал смысла не вижу, его можно посмотреть по ссылкам ниже. Кроме стандартной работы с библиотекой telebot, интерес в скрипте представляет механизм авторизации. Используя библиотеку
shelve, мы будем хранить в файле эдакую базу данных "ключ: значение". В качестве ключа у нас будет слово users, а в качестве значения - множество ID наших клиентов. При запуске скрипта мы читаем из базы идентификаторы в множество(если, конечно, там уже есть нужный ключ. Если его нет, то множество останется пустым):
db=shelve.open('/admin/teleusers.db')
allowed=set()
try:
allowed=db["users"]
except:
pass
Если пользователь отправит нам пароль, то мы внесем его в множество allowed и положим обновленное множество в базу:
if message.text == password:
print message.from_user.id
allowed.add(message.from_user.id)
db["users"]=allowed
bot.send_message(message.chat.id, 'Вы добавлены в список пользователей бота. Теперь можете писать адрес, который надо пропинговать')
При каждом запросе проверяем, "наш человек или посторонний". Если наш, то запускаем пинг и возвращаем результат. Если пинг завершится неуспешно, то выводим сообщение о недоступности ресурса.
if user in allowed:
bot.send_message(message.chat.id, 'Пингую, подождите')
else:
bot.send_message(message.chat.id, 'Пока не скажешь пароль, ничего не получишь!')
Для того, чтобы не заморачиваться с демонизацией скрипта, но при этом быть уверенным в его работе, воспользуемся
systemctl - создадим файл сервиса /etc/systemd/system/telegrambot.service
[Unit]
Description=MyTelegramBot
After=multi-user.target
[Service]
Type=idle
ExecStart=/usr/bin/python /admin/telegrambot.py
Restart=always
[Install]
WantedBy=multi-user.target
Перечитаем список демонов и запустим нашего
sudo systemctl daemon-reload
sudo systemctl enable telegrambot.service
sudo systemctl start telegrambot.service
Все, можно пробовать подключаться.
Код можно посмотреть в wiki и в vk
http://pubwiki.mindsellers.ru/index.php/Telegram-%D0%91%D0%BE%D1%82_%22%D0%BF%D0%BE%D0%BF%D0%B8%D0%BD%D0%B3%D1%83%D0%B9%22https://vk.com/@mindsellers-telegram-bot-popingui
#python #linux #bash #telegram