def handle(command, args): # we don't need api connection to show help :/ if command == "help": return usage() jira_username = config.get("jira_user") jira_password = config.get("jira_pass") options = {"server": config.get("jira_server")} jira = JIRA(options, basic_auth=(jira_username, jira_password)) if commands.get(command): return commands[command](jira, args)
def fires(jira, args): m = re.match(r'(\w+)?', args) if not m: return utils.not_valid_args(args) project_key = m.group(1) or config.get('jira_default_project') if not project_key: return utils.error('Project name is required') if not utils.check_project(jira, project_key): return utils.error('Project {} does not exist'.format(project_key)) try: query = 'project={0} and labels in (fire)'.format(project_key) issues = jira.search_issues(query) if not issues: return 'No issues found' return '\n'.join([utils.issue_info(issue) for issue in issues]) except JIRAError as e: response = utils.error('{} {}'.format(str(e.status_code), str(e.text))) return response
def create(jira, args): m = re.match(r'(\w+)? ?(?:@(\w+))? (.*)', args) if not m: return utils.not_valid_args(args) project_key = m.group(1) or config.get('jira_default_project') if not project_key: return utils.error('Project name is required') assignee = m.group(2) summary = m.group(3) fields = { 'project': {'key': project_key}, 'summary': summary, 'issuetype': {'name': config.get('jira_default_issue_type')}, } try: if assignee: jira.user(assignee) issue = jira.create_issue(fields=fields) issue.fields.labels = config.get('jira_default_labels') issue.update(fields={"labels": issue.fields.labels}) # weird, but user cannot be assigned during creation if assignee: issue.update(assignee={'name': assignee}) return utils.issue_info(issue) except JIRAError as e: response = utils.error('{} {}'.format(str(e.status_code), str(e.text))) return response
def users(jira, args): m = re.match(r'(\w+)?', args) if not m: return utils.not_valid_args(args) project_key = m.group(1) or config.get('jira_default_project') if not project_key: return utils.error('Project name is required') if not utils.check_project(jira, project_key): return utils.error('Project {} does not exist'.format(project_key)) try: users = jira.search_assignable_users_for_projects('', project_key) return '\n'.join([utils.user_info(user) for user in users]) except JIRAError as e: response = utils.error('{} {}'.format(str(e.status_code), str(e.text))) return response
def done_issues(jira, args): # todo m = re.match(r'(\w+)?', args) if not m: return utils.not_valid_args(args) project_key = m.group(1) or config.get('jira_default_project') if not project_key: return utils.error('Project name is required') if not utils.check_project(jira, project_key): return utils.error('Project {} does not exist'.format(project_key)) query = 'project={} and status in (\'Done\', \'Closed\', \'Resolved\')'.format(project_key) issues = jira.search_issues(query) if not issues: return 'No issues found' return '\n\n'.join([utils.issue_info(issue) for issue in issues])
def issue_info(issue): issue_summary = issue.fields.summary issue_description = issue.fields.description or 'No description' issue_key = issue.key issue_labels = ','.join(issue.fields.labels or ['no labels', ]) issue_type = issue.fields.issuetype issue_status = issue.fields.status issue_link = '{}/browse/{}'.format(config.get('jira_server'), issue_key) assignee = issue.fields.assignee if assignee: assignee = '@' + user_info(assignee) else: assignee = 'not assigned' return '{}\n{}\n{}|{}|{}|{}|{}\n{}'.format(issue_summary, issue_description, issue_key, issue_labels, issue_type, issue_status, assignee, issue_link)
import logging import sys import asyncio import discord import yaml from bot.bot import DungeonBot from bot.config import config log = logging.getLogger(__name__) if __name__ == "__main__": bot_config = config.get("bot", {}) token = bot_config.pop("token", "") prefix = bot_config.get("prefix") if not token or token == "Replace me": log.critical("No token given, add your token in config.yml!") print("No token given, add your token in config.yml!") sys.exit(1) kwargs = { "command_prefix": prefix, "config": bot_config } bot = DungeonBot(**kwargs) bot.load_cogs()