Для мониторинга серверов или сетевых устройств существует множество программных решений, многие из которых требует ресурсов сервера для развертывания и знаний по настройке. Но если у Вас один или несколько серверов или маршрутизатор с белым* IP то нет надобности развертывать сложную структуру мониторинга только для того, чтобы проверять, доступен ли сервер или маршрутизатор. Достаточно создать простого телеграм бота, который будет отправлять Вам уведомление в телеграм, если проверяемый IP недоступен (down) и когда снова доступен (up). Сам бот будет работать 24/7 на виртуальном сервере под управлениям операционной системы Linux, с минимальной нагрузкой на ресурсы.
* белый IP адрес — это уникальный IP адрес, выданный на устройство или сервер и доступен из интернета. Такой IP является публичным.
Что необходимо сделать:
1. В Telegram создать бота и приватный канал, в который добавить бота. В канал Вы можете приглашать тех, кто тоже может наблюдать за мониторингом
БЕСПЛАТНЫЙ ХОСТИНГ для TELEGRAM БОТА на PYTHON AIOGRAM | REPLIT
2. Установить на сервере python3. В этой статье мы рассмотрим размещение бота на виртуальном сервере с ОС Ubuntu 20.04 (можно разместить на любой ОС, на которой можно установить пакет python3)
3. Создать скрипт-файл, прописать в нем IP хостов (серверов или маршрутизаторов), установить период мониторинга и запустить с крипт в режиме работы 24/7.
Приступим к выполнению.
2. Подключимся к серверу по SSH (как это сделать)
Проверим установлен ли python3:
python3 —version
Если python3 не установлен (ошибка: -bash: python3: command not found), необходимо установить командой
— для Ubuntu:
apt install python3 -y
— дляCentOS
yum install python3 -y
Дополнительно установим модуль requests:
pip3 install requests
3. Создадим папку, в которой будет размещен скрипт мониторинга. Для этого выполним команду:
cd mkdir pingmonitor cd pingmonitor
Создадим и откроем файл
vim main.py
и разместим в нем скрипт:
#—————————————————-
import os
import requests
import time
#————————-
hostname = [‘8.8.8.8′,’1.1.1.1’]
time_pause = 30
#————————-
def SendMsgToTelegramChanel(msg):
token=»TOKEN»
chat_id = ‘CHAT_ID’
params =
response = requests.get(‘https://api.telegram.org/bot’+token+’/sendMessage’, params=params)
def IsHostAlive(host):
ret = os.system(‘ping -c 2 <> > /dev/null’.format(host))
if ret == 0:
return True
return False
while True:
for i in range(len(hostname)):
file_signal = hostname[i] +’_down’
if IsHostAlive(hostname[i]):
if os.path.isfile(file_signal):
os.remove(file_signal)
SendMsgToTelegramChanel(hostname[i] + ‘ is up’)
#print(hostname + ‘ is up!’)
else:
if not os.path.isfile(file_signal):
open(file_signal,’tw’).close()
SendMsgToTelegramChanel(hostname[i] + ‘ is down’)
#print(hostname + ‘ is down!’)
time.sleep(time_pause)
#————————————————
— в скрипте следует заменить TOKEN и CHAT_ID на сохраненные ранее значения token и chat_id.
— в строке hostname = [‘8.8.8.8′,’1.1.1.1’], вместо IP 8.8.8.8 и 1.1.1.1 укажите IP (или hostname) Вашего сервера или маршрутизатора, которые необходимо мониторить*. IP адреса устройств следует указывать в одинарных кавычках и через запятую (если IP больше чем один)
— значение переменной time_pause = 30, указывает период проверки (в секундах). Не рекомендуется устанавливать меньше 10-15 секунд, особенно, если список проверяемых IP большой.
— не удаляйте отступы строк в скрипте. Это может привести к синтаксической ошибке.
(*)скрипт использует метод проверки через отправку icmp пакетов (ping), по этой причине, следует убедится, что на сервере или маршрутизаторе (которые мониторятся) не блокируются ping-запросы.
Теперь все готово для запука скрипта.
Так как скрипт должен работать 24/7, чтобы его работа не отображалась на основном экране консоли, запустим его в отдельном «окне» с помощью утилиты screen (если не установлена, установите ее. Более подробно: Основы работы с утилитой screen).
Для этого выполним команду:
screen -S pingmonitor
и перейдем к папку с файлом скрипта:
cd cd pingmonitor
Источник: zomro.com
Telegram-бот на Python: от первой строчки до запуска на Heroku
Напишем простой диалоговый Telegram-бот на Python, который в дальнейшем можно дополнить различными функциями, и запустим его на сервере Heroku.
- Настройка
- Создание Telegram-бота
- Деплой на Heroku
- Заключение
Настройка
- свой токен;
- адрес Telegram API (https://api. telegram .org/bot);
- ссылку на документацию.
Далее начните беседу с ботом. Введите в поисковой строке его имя и нажмите /start . Отправьте любое сообщение: оно станет первым обновлением, которое получит бот.
Если вы в первый раз работаете с API, то разобраться поможет браузер. Откройте новую вкладку и перейдите по ссылке:
https://api. telegram .org/bot /getUpdates
Так вы отправите запрос на сервер Telegram , и он ответит вам в формате JSON:
< «ok»:true, «result»:[< «update_id»:523349956, «message»:< «message_id»:51, «from»:< «id»:303262877, «first_name»:»YourName» >, «chat»:< «id»:303262877, «first_name»:»YourName», «type»:»private» >, «date»:1486829360, «text»:»Hello» > >] >
Если вы откроете раздел метода /sendMessage , то увидите, что он принимает два параметра: chat_id и text . Вы можете создавать цепочки параметров в адресной строке браузера, используя ? для первого параметра и text=test
Попробуйте получить ответ от вашего бота, подставив в качестве chat_id значение, полученное после вызова /getUpdates (в нашем примере это 303262877 ). Текст сообщения может быть любым. Запрос должен выглядеть так:
https://api.telegram.org/bot/sendMessage?chat_id=303262877 ? Вы можете сделать то же самое, добавив словарь в качестве второго дополнительного параметра в функциях get / post из пакета requests.
Главный минус текущего скрипта — необходимость запускать его всякий раз, когда нужно, чтобы бот отправил сообщение. Исправим это.
Чтобы бот слушал сервер и получал обновления, нужно запустить основной цикл. После import requests добавьте from time import sleep и замените две последние строки на следующий код:
def main(): update_id = last_update(get_updates_json(url))[‘update_id’] while True: if update_id == last_update(get_updates_json(url))[‘update_id’]: send_mess(get_chat_id(last_update(get_updates_json(url))), ‘test’) update_id += 1 sleep(1) if __name__ == ‘__main__’: main()
Хотя мы и добавили таймаут в 1 секунду, пример выше можно использовать только в обучающих целях, поскольку он использует частые опросы (short polling), что плохо влияет на сервер Telegram .
Есть ещё два способа получения обновлений через API — длинные опросы (long polling) и вебхуки (webhooks). Если мы будем использовать способ получения обновлений через getUpdates без параметров, то запросы будут происходить слишком часто.
Переключимся на длинные опросы. Сперва изменим первую функцию, добавив в неё параметр timeout . Сам по себе он не уменьшит частоту проверки обновлений и будет работать только в том случае, когда обновлений нет. Чтобы помечать уже просмотренные обновления, нужно добавить параметр сдвига offset :
def get_updates_json(request): params = response = requests.get(request + ‘getUpdates’, data=params) return response.json()
Теперь Telegram-бот на Python должен работать нормально, но его всё ещё можно улучшить. Давайте инкапсулируем все функции в один класс. Должно получиться что-то вроде этого:
import requests import datetime class BotHandler: def __init__(self, token): self.token = token self.api_url .format(token) def get_updates(self, offset=None, timeout=30): method = ‘getUpdates’ params = resp = requests.get(self.api_url + method, params) result_json = resp.json()[‘result’] return result_json def send_message(self, chat_id, text): params = method = ‘sendMessage’ resp = requests.post(self.api_url + method, params) return resp def get_last_update(self): get_result = self.get_updates() if len(get_result) > 0: last_update = get_result[-1] else: last_update = get_result[len(get_result)] return last_update
Последний штрих — объявим переменные и научим бота приличным манерам. Сделаем так, чтобы бот приветствовал вас раз в день, при этом фраза должна зависеть от времени суток. Для этого добавьте следующий код в ваш скрипт:
greet_bot = BotHandler(token) greetings = (‘здравствуй’, ‘привет’, ‘ку’, ‘здорово’) now = datetime.datetime.now() def main(): new_offset = None today = now.day hour = now.hour while True: greet_bot.get_updates(new_offset) last_update = greet_bot.get_last_update() last_update_id = last_update[‘update_id’] last_chat_text = last_update[‘message’][‘text’] last_chat_id = last_update[‘message’][‘chat’][‘id’] last_chat_name = last_update[‘message’][‘chat’][‘first_name’] if last_chat_text.lower() in greetings and today == now.day and 6 ‘.format(last_chat_name)) today += 1 elif last_chat_text.lower() in greetings and today == now.day and 12 ‘.format(last_chat_name)) today += 1 elif last_chat_text.lower() in greetings and today == now.day and 17 ‘.format(last_chat_name)) today += 1 new_offset = last_update_id + 1 if __name__ == ‘__main__’: try: main() except KeyboardInterrupt: exit()
Теперь вы можете улучшать бота так, как захотите. Можно, например, настроить отправку медиафайлов или добавить собственные кнопки.
Деплой на Heroku
Последним шагом будет развёртывание бота на сервере. Зарегистрируйтесь на GitHub, если у вас ещё нет там аккаунта, и установите Git. Для этого на Linux выполните следующую команду:
$ sudo apt-get install git-all
На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku. Установите virtualenv:
$ pip install virtualenv
Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv :
$ virtualenv my_env
Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env . Теперь нужно склонировать git-репозиторий. Введите команду:
$ git clone https://github.com/имя_вашего_профиля/имя_вашего_репозитория
Поместите скрипт в папку, полученную в результате выполнения команды git clone . Вернитесь в папку my_env и запустите virtualenv :
$ scriptsactivate.bat
$ source bin/activate
Если вы успешно запустили virtualenv , приглашение командной строки должно начинаться с (my_env). Перейдите в папку репозитория и ещё раз установите модуль requests:
$ pip install requests
Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:
$ pip freeze > requirements.txt
Создайте Procfile . В этом файле следует разместить инструкции по работе со скриптом. Имя файла обязательно должно быть Procfile ( Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):
web: python my_bot.py
Добавьте файл __init__.py в вашу папку. Он может быть пустым, но должен там быть. Отправьте коммит с изменениями в репозиторий:
$ git init $ git add . $ git commit -m ‘короткое сообщение, описывающее изменения в коммите’ $ git push -u https://github.com/имя_вашего_профиля/имя_вашего_репозитория
Теперь развернём Telegram-бота на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль.
Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду. Если у вас Ubuntu, используйте следующие команды:
$ sudo add-apt-repository «deb https://cliassets.heroku.com/branches/stable/apt ./» $ curl -L https://cli-assets.heroku.com/apt/release.key | $ sudo apt-key add — $ sudo apt-get update $ sudo apt-get install heroku
Теперь выполните следующие команды:
$ heroku login $ heroku create $ git push heroku master $ heroku ps:scale web=1 $ heroku open
С этого момента приложение должно работать на сервере Heroku. Если что-то пойдёт не так, проверить логи можно следующим образом:
$ heroku logs —tail
Заключение
Поздравляем! Теперь вы знаете, как писать ботов для Telegram на Python. Лучше изучить возможности Telegram-ботов поможет видеокурс — в нём используется PHP, но суть та же.
Источник: news.myseldon.com
Telegram bot с ChatGpt на Python.
Это руководство по созданию ChatGPT бота Telegram всего несколькими строками кода на ЯП Python. Независимо от того, являетесь ли вы профессионалом в области программирования или только начинаете, мы подготовили для вас пошаговое руководство. Приготовьтесь произвести революцию в ваших чатах и хорошенько повеселиться!
1. Для начала убедитесь, что на вашем компьютере установлен Python.
Если python не установлен, инструкция тут:
Как только бот будет создан, BotFather предоставит вам токен. Этот токен используется для аутентификации вашего бота и предоставления ему доступа к Telegram API. Скопируйте токен и используйте его в коде вашего бота для аутентификации и доступа к API. Не делитесь токеном вашего бота ни с кем.
Затем вам нужно будет получить ID чата канала, который вы только что создали в Telegram. Этот ID является уникальным идентификатором и используется, когда кто-то хочет интегрировать Telegram со своими собственными приложениями или сервисами.
Отправьте сообщение на этот канал через API бота, используя своё имя канала и токен доступа.
, «chat»:< «id»:-1001527664788, «title»:»», «username»:»TestChannel»,»type»:»channel» >, «date»:1670434355, «text»:»123″ > >
Вы найдёте идентификатор канала в разделе chat/id.
Важно предоставить вашему боту права администратора, чтобы он мог выполнять все необходимые задачи.
Внимание всем программистам! Эти ID токенов доступа могут выглядеть красиво, но они просто для галочки. Далее вам понадобится свой собственный для вашего приложения.
3. Пришло время получить свой API-ключ и подключиться к движку OpenAI.
Если в вашем регионе ChtGpt недоступен, вот инструкция по получению апи ключа,
Оттуда вы можете сгенерировать новый ключ и использовать его для аутентификации ваших запросов API. Важно хранить этот API-ключ в секрете и в безопасности, чтобы защитить вашу учётную запись.
Имейте в виду, что OpenAI может ограничить количество вызовов API, которые вы можете выполнять. С личной учётной записью вам предоставляется грант в размере 18 долларов США для использования в запросах API. Обязательно ознакомьтесь с условиями предоставления услуг и информацией о ценах на веб-сайте OpenAI перед использованием API.
Подключение к Text-davinci-003
Text-davinci-003 – это большая языковая модель, разработанная OpenAI. Она считается одной из наиболее эффективных языковых моделей, доступных в настоящее время, благодаря своей способности генерировать текст, похожий на человеческий, и выполнять широкий спектр языковых задач. Она был обучена на наборе данных из миллиардов слов и может генерировать связный текст, который читается так, как будто он был написан человеком.
С помощью нескольких простых шагов и немного магии Python вы сможете подключить и развернуть своего бота ChatGPT в своей группе в кратчайшие сроки. Давайте приступим к написанию кода!
4. Начните писать код на Python.
Для начала мы импортируем необходимые библиотеки и установим параметр аутентификации ключа.
# 1. импорт стандартных библиотек import json import os import threading # серктный ключ чатджипити, полученный ранее API_KEY = ‘xxxxxxxxxxxsecretAPIxxxxxxxxxx’ # Models: text-davinci-003,text-curie-001,text-babbage-001,text-ada-001 MODEL = ‘text-davinci-003’ #токен, полученный от телеграм бота ботфазер BOT_TOKEN = ‘xxxxxxbotapikeyxxxxx’ # определяем личность бота, мы сделали бота-шутника для примера BOT_PERSONALITY = ‘Answer in a funny tone, ‘
Вводим параметр BOT_PERSONALITY — задайте стиль ответов ChatGpt в телеграме ! Используйте эту удобную константу, чтобы придать вашему боту определённый тон или манеру разговора, например, дружелюбный, профессиональный или с чувством юмора. Установив параметр BOT_PERSONALITY, вы можете настроить способ общения ChatGPT с вашими пользователями и создать более персонализированный и привлекательный объект:
Вот 15 видов персоналий, которые можно выбрать of ChatGPT: 1. Friendly 2. Professional 3. Humorous 4. Sarcastic 5. Witty 6. Sassy 7. Charming 8. Cheeky 9. Quirky 10. Laid-back 11. Elegant 12. Playful 13. Soothing 14. Intense 15. Passionate
Затем создайте функцию, которая получает ответ от чат-бота OpenAI.
# 2a. ответ от openAi def openAI(prompt): # делаем запрос на сервер с ключами response = requests.post( ‘https://api.openai.com/v1/completions’, headers=’>, json= ) result = response.json() final_result = ».join(choice[‘text’] for choice in result[‘choices’]) return final_result # 2b. функция обработки изображений def openAImage(prompt): # запрос на OpenAI API resp = requests.post( ‘https://api.openai.com/v1/images/generations’, headers=’>, json= ) response_text = json.loads(resp.text) return response_text[‘data’][0][‘url’]
Эта функция 2.a отправит POST-запрос в OpenAI API с заданными входными данными (например, “Что такое энтропия?”) для анализа API. Параметр temperature определяет, насколько случайным будет сгенерированный ответ — более низкие значения означают более предсказуемый текст. Параметр max_tokens устанавливает ограничение на количество слов и знаков препинания в ответе. И вуаля! Функция вернёт сгенерированный ответ из указанной модели OpenAI.
Далее, пришло время создать функцию, которая отправляет сообщение определённой группе в Telegram:
# 3a. функция отправки в заданную телеграм группу def telegram_bot_sendtext(bot_message,chat_id,msg_id): data = < ‘chat_id’: chat_id, ‘text’: bot_message, ‘reply_to_message_id’: msg_id >response = requests.post( ‘https://api.telegram.org/bot’ + BOT_TOKEN + ‘/sendMessage’, json=data ) return response.json() # 3b. Функция, которая отправляет изображение в определенную группу телеграмм def telegram_bot_sendimage(image_url, group_id, msg_id): data = < ‘chat_id’: group_id, ‘photo’: image_url, ‘reply_to_message_id’: msg_id >url = ‘https://api.telegram.org/bot’ + BOT_TOKEN + ‘/sendPhoto’ response = requests.post(url, data=data) return response.json()
Приведённая выше функция 3.a отправляет сообщение определённой группе Telegram с помощью Telegram API. Функция принимает три аргумента: bot_message, который является сообщением, подлежащим отправке, chat_id, который является уникальным идентификатором чата, в который будет отправлено сообщение, и msg_id, который задаёт уникальный идентификатор сообщения, на которое вы хотите ответить. Функция использует библиотеку запросов для отправки запроса GET в Telegram API с необходимыми параметрами, включая ключ API, идентификатор чата и сообщение для отправки.
Теперь пришло время перейти к самому интересному— созданию функции, которая извлекает последние запросы от пользователей в группе Telegram, генерирует умный ответ с помощью OpenAI и отправляет его обратно в группу. Давайте сделаем это!
Итак, последний шаг! Пришло время добавить компонент планирования в ваш бот, чтобы он мог регулярно проверять наличие новых сообщений в группе и отправлять ответы по мере необходимости. Потоковая библиотека Python может помочь вам в этом:
# 5 Запускаем проверку каждые 5 секунд на наличие новых сообщений def main(): timertime=5 Chatbot() # 5 секунд таймер threading.Timer(timertime, main).start() # запускаем функцию main if __name__ == «__main__»: main()
Та-да! Представляем плоды вашего труда: окончательный код на Python для вашего нового весёлого чат-бота. Просто скопируйте и вставьте этого “парня” в свой любимый редактор кода, подключите свои API-ключи и идентификатор группы чата, и вы в мгновение ока будете общаться с ChatGPT.
Полная версия кода (github link here):
С помощью нескольких простых шагов и небольшого количества магии Python вы успешно создали чат-бота для своей группы Telegram с помощью OpenAI. Поздравляю! Время откинуться на спинку стула и понаблюдать за поступающими весёлыми ответами. Или, знаете ли, проведите некоторую тонкую настройку, чтобы сделать вашего чат-бота действительно уникальным.
Источник: uproger.com