#!/usr/bin/env python

import argparse
import getpass
import rconite
import sys
import os.path

def print_error(message):
    print >>sys.stderr, '%s: %s' % (
        os.path.basename(sys.argv[0]),
        message
    )

parser = argparse.ArgumentParser(
    description='Send an rcon command to a server.',
    add_help=False
)
parser.add_argument(
    'command',
    metavar='COMMAND',
    nargs='+',
    help='rcon command and arguments'
)
parser.add_argument(
    '-h', '--host',
    metavar='HOST',
    default='localhost',
    help='rcon host to connect to (default: %(default)s)'
)
parser.add_argument(
    '-p', '--port',
    metavar='PORT',
    type=int,
    default=25575,
    help='rcon port number (default: %(default)s)'
)
parser.add_argument(
    '-P', '--password',
    metavar='PASSWORD',
    help='rcon password (will prompt by default)'
)
parser.add_argument(
    '-?', '--help',
    action='help',
    help='show this help message and exit'
)
args = parser.parse_args()

if args.password:
    password = args.password
else:
    password = getpass.getpass('rcon password: ')

try:
    with rconite.connect(args.host, args.port, password) as rcon:
        response = rcon.command(' '.join(args.command))
        if response:
            print response
except Exception, e:
    print_error(e)
    sys.exit(1)
