SVN бот для Telegram

Telegram охуенный. Даже не вижу смысла обсуждать это. Если вы готовы с этим спорить, скорее всего просто не пробовали его пользовать. Мы пробовали несколько мессенджеров для переписки в компании. В итоге остановились на телеграме. Slack тоже охуенный но медленнее и сука, безумно дорогой. К тому же, я до сих пор не могу привыкнуть к модели оплаты «per user/per month». В общем Telegram. Остаётся прикрутить к нему нотификации из репозитория и Trello. Про первое сейчас расскажу.
Все просто, как банан:
- Зарегистрировать бота у @BotFather
- Узнать ID вашего чата в Telegram
- Запилить post-commit hook в репозитории
- Написать 3 строчки кода
Регистрируем бота
У вас должен быть установлен Telegram. Добавляем BotFather. Пишем ему /newbot, сначала он спросит имя бота, оно будет отображаться как имя отправителя. Потом имя пользователя бота, аля my_super_mega_bot, оно обязательно должно заканчиваться на bot. Получаем в ответ токен, который обязательно сохраняем. По желанию можно добавить юрезпик /setuserpic, полное и краткое описание /setdescription /setabouttext.
Узнаем ID чата
Для начала добавляем свежесозданного бота в ваш рабочий чат. Пишем в чат любую хуйню. Потом вбиваем в браузер https://api.telegram.org/bot<тутдолженбытьтокенбезугловыхскобок>/getUpdates?offset=0 в ответ получим JSON в котором находим ID чата.
Post-commit hook
Мы пользуем SVN и не спрашивайте почему. С другими системами контроля версий ситуация должна быть аналогичной. Просто погуглите как запилить post-commit hook для вашей системы. Для SVN в папке с репозиторием есть папка hook (я имею в виду репозиторий на сервере, а не вашу рабочую копию если че). В ней файл post-commit, туда копипастим:
REPOS="$1"
REV="$2"
DIR="$REPOS/hooks"
LOG="$DIR/log.txt"
/ПОЛНЫЙ ПУТЬ К РЕПОЗИТОРИЮ/hooks/telegrambot-posthook.py "$REPOS" "$REV" >> $LOG 2>&1 || exit 1
Пишем три строчки telegrambot-posthook.py не забывая поменять token и chatid на свои. Тут половина импортов наверно не нужна, но мне лень смотреть какие. Сохраняем этот файл в /полный путь к репозиторию/hooks/telegrambot-posthook.py не забываем поменять владельца файла на нужного, для CentOS это обычно apache «chown apache:apache /полный путь к репозиторию/hooks/telegrambot-posthook.py» и сделать файл исполняемым «chmod +x /полный путь к репозиторию/hooks/telegrambot-posthook.py»
#!/usr/bin/python
import sys
import subprocess
import urllib
import urllib2
import json
import telegram
from twx.botapi import TelegramBot, ReplyKeyboardMarkup
LOOK='svnlook' # svnlook location
TOKEN = '123456789:AAFzCs7LbwfHIGiINUh74QKAMM7M1y8WYTO' # Bot token
CHATID = '-12345678' # ID of telegram chat
def run_look(*args):
p = subprocess.Popen(' '.join([LOOK] + list(args)), stdout=subprocess.PIPE, shell=True, stderr=subprocess.STDOUT)
out, err = p.communicate()
return out
def get_commit_info(repo, revision):
comment = run_look('log', repo, '-r', revision)
print comment
author = run_look('author', repo, '-r', revision)
files = run_look('changed', repo, '-r', revision)
payload = '#SVN ' + revision.rstrip('\n') + ' ' + author.rstrip('\n') + ' ' + comment.rstrip('\n')
return payload
def main():
payload = get_commit_info(sys.argv[1], sys.argv[2])
bot = TelegramBot(TOKEN)
bot.send_message(CHATID, payload)
if __name__ == '__main__':
main()
В общем-то и все, теперь в чат должны приходить сообщения от бота после каждого вашего коммита.