def cmd(send, msg, args):
    """Files a github issue or gets a open one.

    Syntax: {command} <title [--desc description]|--get <number>>

    """
    repo = args['config']['api']['githubrepo']
    apikey = args['config']['api']['githubapikey']
    if not repo:
        send("GitHub repository undefined in config.cfg!")
        return
    parser = arguments.ArgParser(args['config'])
    parser.add_argument('title', nargs='*', default='')
    parser.add_argument('--get', '--show', action='store_true')
    parser.add_argument('--description', nargs='+', default="No description given.")
    cmdargs, remainder = parser.parse_known_args(msg)
    if isinstance(cmdargs.title, list):
        cmdargs.title = ' '.join(cmdargs.title)
    if isinstance(cmdargs.description, list):
        cmdargs.description = ' '.join(cmdargs.description)
    if remainder:
        cmdargs.title = "%s %s" % (cmdargs.title, ' '.join(remainder))
    if args['type'] == 'privmsg':
        send('You want to let everybody know about your problems, right?')
    elif cmdargs.get or cmdargs.title.isdigit():
        issue = get('https://api.github.com/repos/%s/issues/%d' % (repo, int(cmdargs.title))).json()
        if 'message' in issue:
            send("Invalid Issue Number")
        else:
            send("%s (%s) -- %s" % (issue['title'], issue['state'], issue['html_url']))
    elif not cmdargs.title:
        issues = []
        n = 1
        while True:
            headers = {'Authorization': 'token %s' % apikey}
            page = get('https://api.github.com/repos/%s/issues' % repo, params={'per_page': '100', 'page': n}, headers=headers).json()
            n += 1
            if page:
                issues += page
            else:
                break
        if len(issues) == 0:
            send("No open issues to choose from!")
        else:
            issue = choice(issues)
            num_issues = len([x for x in issues if 'pull_request' not in x])
            send("There are %d open issues, here's one." % num_issues)
            send("#%d -- %s -- %s" % (issue['number'], issue['title'], issue['html_url']))
    elif cmdargs.title and args['is_admin'](args['nick']):
        url, success = create_issue(cmdargs.title, cmdargs.description, args['source'], repo, apikey)
        if success:
            send("Issue created -- %s -- %s -- %s" % (url, cmdargs.title, cmdargs.description))
        else:
            send("Error creating issue: %s" % url)
    elif cmdargs.title:
        row = Issues(title=cmdargs.title, description=cmdargs.description, source=str(args['source']))  # str needed to make mysqlconnector happy
        args['db'].add(row)
        args['db'].flush()
        send("New Issue: #%d -- %s -- %s, Submitted by %s" % (row.id, cmdargs.title, cmdargs.description, args['nick']),
             target=args['config']['core']['ctrlchan'])
        send("Issue submitted for approval.", target=args['nick'])
    else:
        send("Invalid arguments.")
def cmd ( send , msg , args ) : repo = args [ 'config' ] [ 'api' ] [ 'githubrepo' ] apikey = args [ 'config' ] [ 'api' ] [ 'githubapikey' ] if not repo : send ( "GitHub repository undefined in config.cfg!" ) return parser = arguments . ArgParser ( args [ 'config' ] ) parser . add_argument ( 'title' , nargs = '*' , default = '' ) parser . add_argument ( '--get' , '--show' , action = 'store_true' ) parser . add_argument ( '--description' , nargs = '+' , default = "No description given." ) cmdargs , remainder = parser . parse_known_args ( msg ) if isinstance ( cmdargs . title , list ) : cmdargs . title = ' ' . join ( cmdargs . title ) if isinstance ( cmdargs . description , list ) : cmdargs . description = ' ' . join ( cmdargs . description ) if remainder : cmdargs . title = "%s %s" % ( cmdargs . title , ' ' . join ( remainder ) ) if args [ 'type' ] == 'privmsg' : send ( 'You want to let everybody know about your problems, right?' ) elif cmdargs . get or cmdargs . title . isdigit ( ) : issue = get ( 'https://api.github.com/repos/%s/issues/%d' % ( repo , int ( cmdargs . title ) ) ) . json ( ) if 'message' in issue : send ( "Invalid Issue Number" ) else : send ( "%s (%s) -- %s" % ( issue [ 'title' ] , issue [ 'state' ] , issue [ 'html_url' ] ) ) elif not cmdargs . title : issues = [ ] n = 1 while True : headers = { 'Authorization' : 'token %s' % apikey } page = get ( 'https://api.github.com/repos/%s/issues' % repo , params = { 'per_page' : '100' , 'page' : n } , headers = headers ) . json ( ) n += 1 if page : issues += page else : break if len ( issues ) == 0 : send ( "No open issues to choose from!" ) else : issue = choice ( issues ) num_issues = len ( [ x for x in issues if 'pull_request' not in x ] ) send ( "There are %d open issues, here's one." % num_issues ) send ( "#%d -- %s -- %s" % ( issue [ 'number' ] , issue [ 'title' ] , issue [ 'html_url' ] ) ) elif cmdargs . title and args [ 'is_admin' ] ( args [ 'nick' ] ) : url , success = create_issue ( cmdargs . title , cmdargs . description , args [ 'source' ] , repo , apikey ) if success : send ( "Issue created -- %s -- %s -- %s" % ( url , cmdargs . title , cmdargs . description ) ) else : send ( "Error creating issue: %s" % url ) elif cmdargs . title : row = Issues ( title = cmdargs . title , description = cmdargs . description , source = str ( args [ 'source' ] ) ) args [ 'db' ] . add ( row ) args [ 'db' ] . flush ( ) send ( "New Issue: #%d -- %s -- %s, Submitted by %s" % ( row . id , cmdargs . title , cmdargs . description , args [ 'nick' ] ) , target = args [ 'config' ] [ 'core' ] [ 'ctrlchan' ] ) send ( "Issue submitted for approval." , target = args [ 'nick' ] ) else : send ( "Invalid arguments." )
Files a github issue or gets a open one.

    Syntax: {command} <title [--desc description]|--get <number>>