Бот - для работы с репозиторием проекта в BitBucket.
Приветствую любителей ботов :-) Позвольте представить вашему вниманию бота для работы с репозиторием проекта в BitBucket.
Краткое описание моих скромных трудов.
Схема:
Пример сообщений в телеграм:
Сразу оговорюсь, я являюсь автоматизатором на Java. Начинал изучение с Python, поэтому и бота написал на нем, так как моя работа происходит на Java, мне захотелось вспомнить Python), поддерживать и углублять свои знания этого языка.
И вот мне пришла в голову идея создания бота. Который к слову на проекте используется в нашем командном телеграмм чате, состоящим из 9 человек. Я обдумал основные задачи для которых он был бы необходим, их три (по результатм опроса, позже, выяснилось этого достаточно, но можно расширять функционал по своему усмотрению и необходимости):
Информировать о новых пулл-реквестах
Напоминать о текущих, что бы их проверили и поставили апрув (подтверждение на мерж)
Информировать о комментах в реквесте, если их более 1
Задачи исходили в первую очередь из потребностей проекта. У нас бывало по долгу не проверялись реквесты. Их либо забывали проверять, либо не знали что реквест создан (у нас есть информирование по реквестам через корпоративную почту, но там бывают задержки, да и не всегда она читается).
Я понимаю, бота можно расширить до того, что он будет информировать о любых изменениях реквеста (аппрув, изменение названия, событие мержа реквеста), но тогда наш чат превратиться в чат бесконечного спама от бота, будет неудобно переписываться по рабочим вопросам между собой, поэтому я ограничился задачами, описанными, выше. Этого как оказалось вполне хватает, реквесты стали более быстро проверяться, комментироваться и отслеживаться, что не может не радовать).
Да бот оказался весьма кстати и как мне кажется полезен.
Технологии и библиотеки
Прежде чем приступить к реализации бота, я разумееется поискал есть ли подобные боты, они были, но мне удалось найти только на GO и на Java примеры реализаций. Был, насколько я припоминаю, и на Python, но мне не подходила его реализация. Вообщем сделаю свой, решил я.
Я хотел сделать его максимально понятным и удобным в использовании. Разумеется так как он работает с конфидециальным корпоративным ресурсом я не могу деплоить его в облаках или на сторонних серверах, он работает у меня локально, меня и всех это устраивает. Будьте осторожны, если захотите использовать этого бота, с вашими конфидециальными данными (конечно если таковые есть), используйте бота в защищенных корпоративных сетях либо локально.
Я выбрал популярную библиотеку Aiogram для работы с телеграмм. Примеров ее использования достаточно много можно найти в совбодном доступе, роликов на ютубе достаточно.
Работу с API BitBucket была использована библиотека Atlassian.
Пример команды, можно подробнее посмотреть на GitHub:
from aiogram import Bot, Dispatcher, executor, types
from aiogram.types import ParseMode, Message
from aiogram.utils.markdown import text, bold, code
@dp.message_handler(commands=['start', 'help'])
async def start_bot(message: types.Message):
"""
Стартовая команда, для приветствия и инфо о боте
"""
try:
msg = text(code("Привет, это бот BitBucket\n") +
code("Для проекта: ") + bold(project.upper() + "\n") +
code("Репозитория: ") + bold(repository + "\n") +
code("Нажмите, просмотреть: ") + bold("/requests") + "\n" +
code("Посмотреть курсы валют: ") + bold("/currency"))
await bot.send_message(message.from_user.id, msg, parse_mode=ParseMode.MARKDOWN, reply_markup=kb_client)
except:
await message.reply("ВАЖНО: Вам нужно добавиться к боту, все уведомления идут в ЛС!!!")
@dp.message_handler(commands=['requests'])
async def send_open_pull_requests(message: Message):
"""
Команда для вывода Pull-requests в личку пользователю
:param message: класс Message от которого можно использовать
разные методы отправки сообщений
"""
size = bitBacketUtils.get_size_pull_requests()
try:
msg = text("