#!/usr/bin/python

import sys
import BaseHTTPServer
import xmpp
import inspect
import datetime
import thread
import urllib, urllib2

http_port = 8080;

bot_username = 'mybot@example.com'
bot_password = 'password'

twitter_username = 'user'
twitter_password = 'password'

conn = None
    
def log(s):
    print s

def main():
    server = BaseHTTPServer.HTTPServer(('', http_port), WebRequestHandler)
    thread.start_new_thread(startWebServer, (server,))

    startBot()

def startWebServer(server):
    server.serve_forever()

def postToTwitter(text):
    
    log('posting to twitter')
    
    auth = urllib2.HTTPPasswordMgrWithDefaultRealm()
    auth.add_password(None, 'http://twitter.com/statuses/', twitter_username, twitter_password)
    authHandler = urllib2.HTTPBasicAuthHandler(auth)
    
    opener = urllib2.build_opener(authHandler)
  
    urllib2.install_opener(opener)
    url = 'http://twitter.com/statuses/update.xml'

    post = {'status':text, 'source':'peep' }
    post = urllib.urlencode(post)

    log('POST' + post)

    request = urllib2.Request(url, post)
    request.add_header('User-Agent', 'Peep bot')
    
    resp = urllib2.urlopen(request).read()

def send(conn, user, text):
    msg = xmpp.Message(user, text)
    conn.send(msg)

def get_message(conn, msg):
    text = msg.getBody()

    if not text:
        return

    postToTwitter(text)

    send(conn, msg.getFrom(), "you said " + text)


def startBot():
    
    jid = xmpp.JID(bot_username)
    conn = xmpp.Client( jid.getDomain(), debug = [])
    
    if not conn.connect():
        log( 'unable to connect to server.')
        return None
    
    if not conn.auth( jid.getNode(), bot_password):
        log( 'unable to authorize with server.')
        return None
    
    conn.RegisterHandler( 'message', get_message)
    conn.sendInitPresence()
    
    if conn:
        log('bot connected. serving forever.')
    else:
        log('could not connect to server - aborting.')
        return

    while True:
        try:
            conn.Process(1)
        except KeyboardInterrupt:
            log('bot stopped by user request. shutting down.')
            break




class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write('Hello World')


if __name__ == "__main__":
  main()            
        




