view libpurple/gaim-notifications-example @ 15877:80ee585fb53c

SF Patch #1686400 from Eoin Coffey ("ecoffey") ecoffey described the changes: 1) Small tweaks to the loader to bring it up to speed with new mono versions and API wrapper changes that grim had made. (was in original patch, just forgot about it :-P) 2) .NET Plugins are now required to define an Id as part of their info. 3) Modified gaim_probe_plugin to check for existence of info->id and to make sure it's not empty; Prints an error, stores an error in the plugin and sets plugin->unloadable = TRUE.
author Richard Laager <rlaager@wiktel.com>
date Sat, 24 Mar 2007 06:24:59 +0000
parents 5fe8042783c1
children
line wrap: on
line source

#!/usr/bin/env python

# This is a simple gaim 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
# gaim-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 = GAIM_CONV_IM 
        return gaim.GaimConversationNew(1, account, name)

def receivedimmsg(account, name, message, conversation, flags):
    buddy = gaim.GaimFindBuddy(account, name)
    if buddy != 0:
        alias = gaim.GaimBuddyGetAlias(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 = gaim.GaimConversationGetWindow(conversation)
        gaim.GaimConvWindowRaise(window)

    if code == 103:                     # close 
        gaim.GaimConversationDestroy(conversation)

    if code == 104:                     # abuse
        im = gaim.GaimConversationGetImData(conversation)
        gaim.GaimConvImSend(im, "Go away you f...")
                                 
        
def buddysignedon(buddyid):
    alias = gaim.GaimBuddyGetAlias(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 = gaim.GaimBuddyGetName(buddyid)
        account = gaim.GaimBuddyGetAccount(buddyid)
        gaim.GaimConversationNew(1, account, name)
    

bus = dbus.SessionBus()
obj = bus.get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")

bus.add_signal_receiver(receivedimmsg,
                        dbus_interface = "net.sf.gaim.GaimInterface",
                        signal_name = "ReceivedImMsg")

bus.add_signal_receiver(buddysignedon,
                        dbus_interface = "net.sf.gaim.GaimInterface",
                        signal_name = "BuddySignedOn")

print "This is a simple gaim notification server."
print "It shows notifications when your buddy signs on or you get an IM message."

loop = gobject.MainLoop()
loop.run()