view libpurple/purple-notifications-example @ 25172:fd5eedf131b4

Generalize the FQY command so it can be used by different callbacks based on the place that called it. Then automatically call an FQY when sending the buddy list ADL's for a buddy with an unknown network. Then we can send a corrected ADL later with the network from the FQY. This should make it easier for people with OCS/Yahoo contacts that were added incorrectly by previous versions, as they shouldn't need to mess with their address book outside of Pidgin (but if there are multiple buddy copies, that may need fixing externally). I should probably figure out how to permanently fix the Membership lists, eventually. References #6755. References #3322
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Fri, 27 Feb 2009 07:13:20 +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()