Python Pidgin Dbus Monitor
This is a script that registers a callback with Pidgin’s Dbus interface, and then sends a message in response whenever anyone sends an IM. I’m using it for a chatbot, but it could easily be extended to do things like switch X10 light controllers on and off, get the state of hardware connected to the target computer, and so forth. Pidgin has to be running and configured to use Dbus, but it does that by default.
''' Created on Nov 18, 2011 Watches pidgin over Dbus and responds to incoming messages. ''' import dbus from dbus.mainloop.glib import DBusGMainLoop import gobject class StupidResponder(): def getResponse(self, message): #This is where you would do something clever to come up with a response return "Insect! I cannot bear your words! They are TOO TINY!" def got_msg_cb(account, sender, message, conversation, flags): purple.PurpleConvImSend(purple.PurpleConvIm(conversation), responder.getResponse(message)) if __name__ == '__main__': #load a response generator responder = StupidResponder() #Connect to pidgin on Dbus main_loop = DBusGMainLoop() session_bus = dbus.SessionBus(mainloop = main_loop) obj = session_bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") #Add the callback session_bus.add_signal_receiver(got_msg_cb, dbus_interface="im.pidgin.purple.PurpleInterface", signal_name="ReceivedImMsg") #Listen loop = gobject.MainLoop() loop.run()