libpurple/purple-notifications-example

Mon, 27 Nov 2017 20:55:41 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Mon, 27 Nov 2017 20:55:41 -0600
changeset 38791
cf55bdaccfb0
parent 37984
6a5ca046a90d
permissions
-rw-r--r--

Remove all of the #if 0'd blocks. All were 10 years old and don't seem necessary

#!/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.

from __future__ import absolute_import, division, print_function

import os

import dbus
import dbus.glib
import dbus.decorators
import gobject


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

mercurial