Время прочтения: 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 для создания задач. Чтобы всегда оставаться мобильным и быть максимально эффективным