Время прочтения: 4 мин.

Ознакомившись с нашей предыдущей статьей (ссылка), узнаем как получать токен Telegram.

import telebot
from telebot import types
import requests
telegram_token = 'Ключ токена, полученый у @BotFather'
bot = telebot.TeleBot(telegram_token)
bot.remove_webhook()

Для использования API Jira нам необходимо получить еще один токен, который можно создать в настройках учетной записи Jira:

Подключимся к Jira с использование полученного ранее нами токена:

from jira import JIRA
login = 'почтовый адрес вашего аккаунта Jira'
api_key = 'Созданный API токен для Jira'
jira_options = {'server': 'https://telejira.atlassian.net'}
jira = JIRA(options=jira_options, basic_auth=(login, api_key))

Перейдем непосредственно к реакциям бота на действия пользователя. Для начала отработает стартовое действие “Старт”. Помимо этого создадим кнопки быстрого ввода основных команд.

@bot.message_handler(commands=["start"])
def bot_messages(message):
    
    markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1=types.KeyboardButton("Создать задачу")
    markup.add(item1)
    item2=types.KeyboardButton("Найти задачу")
    markup.add(item2)
    item3=types.KeyboardButton("Открыть задачу")
    markup.add(item3)

    bot.send_message(message.chat.id, 'Я могу исполнить три желания:\n Создать задачу\n Найти задачу\n Открыть задачу',  reply_markup=markup)

После того, как пользователь напишет текст, происходит обработка полученных сообщений и в зависимости от выбранной команды бот приступит к получению новых данных и выполнению последующих действий с помощью register_next_step_handler.

@bot.message_handler(content_types=["text"])
def handle_text(message):
    
    if message.text.strip() == 'Создать задачу' :
            bot.send_message(message.chat.id, 'Создание задачи. Введите название задачи.')
            bot.register_next_step_handler(message, get_create_issue_summary)  
    elif message.text.strip() == 'Найти задачу':
            bot.register_next_step_handler(message, get_search_issue)  
    elif message.text.strip() == 'Открыть задачу':
            bot.send_message(message.chat.id, 'Открытые задачи. Введите номер задачи TJ-...')
            bot.register_next_step_handler(message, get_open_issue) 

Тут мы обрабатываем заголовок задачи, который пользователь ввел. Далее попросим у пользователя назначить приоритет. Для Jira корректными приоритетами являются – Highest, High, Medium, Low и Lowest.

def get_create_issue_summary(message):
    global jira_summary
    jira_summary = message.text.strip()
    bot.send_message(message.chat.id, 'Создание задачи. Введите приоритет.')
    bot.register_next_step_handler(message, get_create_issue_priority)

После получения приоритета, попросим у пользователя ввести описание задачи.

def get_create_issue_priority(message):
    global jira_priority
    jira_priority = message.text.strip()
    bot.send_message(message.chat.id, 'Создание задачи. Введите описание')
    bot.register_next_step_handler(message, get_create_issue_description)

Наконец, после получения описания от пользователя, отображаем полученные данные и просим подтверждение на создание задачи.

def get_create_issue_description(message):
    global jira_description
    jira_description = message.text.strip()
    bot.send_message(message.chat.id, 'Название: ' + jira_summary + '\n' +
                                      'Приоритет: ' + jira_priority + '\n' +
                                      'Описание: ' + jira_description)
    bot.send_message(message.chat.id, 'Создать задачу? (Да/Нет)')
    bot.register_next_step_handler(message, get_create_issue)    

Если было получено подтверждение на создание, то задача создается в Jira и мы покажем пользователю номер созданной задачи.

def get_create_issue(message):
    if message.text.strip() == 'Да' : 
        issue = jira.create_issue(project = 'TJ', 
                                      summary= jira_summary, 
                                      issuetype= {'name': 'Task'}, 
                                      priority = {'name': jira_priority},
                                      description = jira_description)
        bot.send_message(message.chat.id, 'Задача ' + issue.key + ' создана')
    elif message.text.strip() == 'Нет' :
        bot.send_message(message.chat.id, 'Создание задачи отменено.')

Следующим функционалом будет простой поиск ключей задач по JQL запросу. Подробнее о встроенном языке Jira JQL вы можете прочитать в наших статьях (ссылка раз, ссылка два и ссылка три).

def get_search_issue(message):
    issues = jira.search_issues(message.text.strip(), maxResults = False)
    ans = []
    for issue in issues:
        ans.append(issue.key)
    bot.send_message(message.chat.id, 'Найдены задачи:'+'\n'.join(ans))

И последним по списку покажем открытие задачи и показ полей ключ, название, приоритет, описание.

def get_open_issue(message):
    issue = jira.issue('TJ-'+message.text.strip())
    desc = issue.fields.description if issue.fields.description is not None else '-'
    bot.send_message(message.chat.id, 'Ключ: ' + issue.key + '\n' +
                                      'Название: ' + issue.fields.summary + '\n' +
                                      'Приоритет: ' + issue.fields.priority.name + '\n' +
                                      'Описание: ' + desc)
if __name__ == '__main__':
    bot.infinity_polling()

Проверяем

Все работает! Таким не хитрым способом мы упростили работу с Jira для создания задач. Чтобы всегда оставаться мобильным и быть максимально эффективным