#!/usr/bin/env python #pidgintwitter from tomhodson.com v0.2 import dbus, gobject, httplib, urllib, base64, getpass, time, threading, dbus.glib from dbus.mainloop.glib import DBusGMainLoop banlist = [ 'nasty@tomhodson.com' ] #add people here seperated with ","'s #emails on this list will appear by their email and not their alias perdaylimit = 50 #this is the limit of texts per day (note: if program is restarted so is the counter) queue = [ 'blank', 'blank', 'blank', 'blank', 'blank', 'blank', 'blank', 'blank', 'blank', 'blank' ] queue2 = [ 0,0,0,0,0,0,0,0,0,0] count = [ 0 ] def activeaccount(): account = purple.PurpleAccountsGetAllActive() j=0 while purple.PurpleAccountGetProtocolName(account[j])!="MSN": j+=1 if j != len(account): break name = purple.PurpleAccountGetUsername(account[j]) return name def updateTwitter(username, passwd, statusmsg): statusmsg = statusmsg.encode('ascii','ignore') if len(statusmsg) > 140: statusmsg = statusmsg[:140] # Generate Twitter authentication header string auth = {"Authorization": "Basic %s" % base64.encodestring("%s:%s" % (username, passwd)).strip()} # Create a connection to the Twitter web site connection = httplib.HTTPConnection("twitter.com", 80) # Use Twitter's REST API to post a status update connection.request("POST", "/statuses/update.xml", urllib.urlencode({"status":statusmsg}), auth) return def sendmessage(text, acct, conversation): # conv2 = purple.PurpleGetConversations() # if conv2.count(conversation) != 1: # acct, conversation = createconv(acct, ) ims = purple.PurpleConversationGetImData(conversation) purple.PurpleConvImSend(ims, text) return def createconv(acct, name): conv = purple.PurpleConversationNew(1,acct,name) trans = purple.PurpleConvIm(conv) return trans, conv def stripper(message): mode = 0 out = '' for letter in message: if mode == 0: if letter == '<': mode = 1 else: out+=letter else: if letter == '>': mode = 0 return out def catcher(account, sender, message, conversation, flags): thread1 = threading.Thread(target=immsg, args=(account, sender, message, conversation, flags)) thread1.start() return def immsg(account, sender, message, conversation, flags): status = purple.PurpleSavedstatusGetCurrent() if purple.PurpleSavedstatusGetType(status) != 2: bud = purple.PurpleFindBuddy(account, sender) name2 = purple.PurpleBuddyGetAlias(bud) name = purple.PurpleBuddyGetName(bud) if conversation == 0: yout = purple.PurpleGetConversations() for pigs in yout: if name == purple.PurpleConversationGetName(pigs): conversation = pigs if count[0]>perdaylimit: sendmessage('Todays sms limit reached, sorry! :(', account, conversation) else: queue.pop(-1) queue.reverse() queue.append(sender) queue.reverse() if queue.count(sender) > 4: if queue.count(sender > 8): sendmessage('Flood attempt, wait a while and try again later', account, conversation) count[0]= count[0] + 1 return queue.reverse() a = time.gmtime() b = queue.index(sender) queue.reverse() if a[4] - queue2[b] < 10: sendmessage('Flood attempt, wait a while and try again later', account, conversation) return message = stripper(message) if len(name2)-10 > len(name) or banlist.count(name) != 0: name2=name updateTwitter(accountname, password, name2 + "\n" + message) sendmessage('Your message has been forwarded to my mobile! :)', account, conversation) a = time.gmtime() queue2.pop(-1) queue2.reverse() queue2.append(a[4]) queue2.reverse() count[0]= count[0] + 1 return accountname = raw_input('Username: ') password = getpass.getpass() DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") # pig = purple.PurpleGetConversations() # ims = purple.PurpleConvIm(pig[0]) # acct = purple.PurpleConversationGetAccount(pig[0]) # while True: # r = raw_input('> ') # sendmessage(r, ims, acct) bus.add_signal_receiver(catcher, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg") gobject.threads_init() dbus.glib.init_threads() loop = gobject.MainLoop() loop.run()