Mercurial > pidgin.yaz
view libpurple/purple-notifications-example @ 27109:fdc0035bea5a
Change the way we parse messages on MySpace a little bit. This
fixes #8846: people using web myspaceIM can't respond to pidgin myspaceIM
For some reason IMs send using the myspace web site are sent so that
they won't become offline messages if the other person is offline.
I'm not really sure why that decision was made.
So now we treat messages with bm 1 the same as messages with bm 121. This means
we have to combine the function that parses out typing notification with
the function that parses IMs. And we check for typing notifications by
looking for %typing%. Which means if someone sends the IM "%typing%" with
no markup then we'll interpret it as a typing notification. And there's
nothing we can do to differentiate between the two. I asked.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Thu, 04 Jun 2009 05:19:49 +0000 |
parents | 61c2d36a38a3 |
children |
line wrap: on
line source
#!/usr/bin/env python # This is a simple purple notification server. # It shows notifications when your buddy signs on or you get an IM message. # # This script requires Python 2.4 and PyGTK bindings # # Note that all function names are resolved dynamically, no # purple-specific library is needed. import dbus import dbus.glib import dbus.decorators import gobject import os def ensureimconversation(conversation, account, name): if conversation != 0: return conversation else: # 1 = PURPLE_CONV_IM return purple.PurpleConversationNew(1, account, name) def receivedimmsg(account, name, message, conversation, flags): buddy = purple.PurpleFindBuddy(account, name) if buddy != 0: alias = purple.PurpleBuddyGetAlias(buddy) else: alias = name text = "%s says %s" % (alias, message) code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons", "'So what?','Show me',Close,Abuse", text) if code == 101: # so what? pass else: conversation = ensureimconversation(conversation, account, name) if code == 102: # show me window = purple.PurpleConversationGetWindow(conversation) purple.PurpleConvWindowRaise(window) if code == 103: # close purple.PurpleConversationDestroy(conversation) if code == 104: # abuse im = purple.PurpleConversationGetImData(conversation) purple.PurpleConvImSend(im, "Go away you f...") def buddysignedon(buddyid): alias = purple.PurpleBuddyGetAlias(buddyid) text = "%s is online" % alias code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons", "'So what?','Let's talk'", text) if code == 101: # so what? pass if code == 102: # talk name = purple.PurpleBuddyGetName(buddyid) account = purple.PurpleBuddyGetAccount(buddyid) purple.PurpleConversationNew(1, account, name) bus = dbus.SessionBus() obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject") purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface") bus.add_signal_receiver(receivedimmsg, dbus_interface = "im.pidgin.purple.PurpleInterface", signal_name = "ReceivedImMsg") bus.add_signal_receiver(buddysignedon, dbus_interface = "im.pidgin.purple.PurpleInterface", signal_name = "BuddySignedOn") print "This is a simple purple notification server." print "It shows notifications when your buddy signs on or you get an IM message." loop = gobject.MainLoop() loop.run()