вторник, 4 апреля 2017 г.

Уведомление в Telegram после завершения консольной команды

Понадобилось мне тут импортировать большой mysql-дамп и чтобы не сидеть все время в ожидании окончания импорта, я решил отойти по делам, а когда импорт закончится мне придет уведомление в Telegram, так как смартфон всегда при мне.

Делается это очень просто. Для этого нужно только создать бота. На рабочей машине должен быть python3.

1. Создаем бота.
Идем к @BotFather
/start
/newbot
Получаем токен вида:
311825528:AAE3r8V7iaIiXzJY_s0-9brG6JMWbT126qB
Добавляем бота в список контактов в телеграме.

2. Узнаем свой TelegramID.
Идем к @MyTelegramID_bot
/start
Получаем ID вида:
281724313

3. Создаем скрипт отправки, переменные token и id меняем на свои:
# vim ~/.tgsend.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from urllib.parse import urlparse, urlencode
from urllib.request import urlopen
import argparse

token = '311825528:AAE3r8V7iaIiXzJY_s0-9brG6JMWbT126qB'
id = '281724313'

parser = argparse.ArgumentParser()
parser.add_argument('-m', default='The task is finished', dest='MESSAGE')
namespace = parser.parse_args()
message = namespace.MESSAGE

turl = 'https://api.telegram.org/bot'
tfull = '{0}{1}/sendMessage'.format(turl, token)
tparams = urlencode({'chat_id': id, 'text': message}).encode('utf-8')
urlopen(tfull, tparams)

Делаем файл исполняемым и добавляем алиас:
$ chmod +x ~/.tgsend.py
$ echo alias send="~/.tgsend.py" | tee -a ~/.bashrc

Использовать можно вот так например:
$ какая-то долговыполняющаяся команда ; send -m "Закончил выполнение"
ключ -m можно не использовать, тогда по умолчанию в Telegram придет сообщения с текстом "The task is finished"

Комментариев нет: