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()
Recent Comments