11146
+ �� 1 #!/usr/bin/env python
+ �� 2
+ �� 3 # this is an example of a client that communicates with gaim using DBUS
+ �� 4 #
+ �� 5 # requires Python 2.4 and PyGTK bindings
+ �� 6 #
+ �� 7 # note that all function names are resolved dynamically, no
+ �� 8 # gaim-specific library is needed
+ �� 9
+ �� 10 import dbus
+ �� 11 import dbus.glib
+ �� 12 import dbus.decorators
+ �� 13 import gobject
+ �� 14 import os
+ �� 15
+ �� 16 def receivedimmsg(account, name, message, conversation, flags):
+ �� 17 buddy = gaim.GaimFindBuddy(account, name)
+ �� 18 if buddy != 0:
+ �� 19 alias = gaim.GaimBuddyGetAlias(buddy)
+ �� 20 else:
+ �� 21 alias = name
+ �� 22
+ �� 23 text = "%s says %s" % (alias, message)
+ �� 24 code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
+ �� 25 "'So what?','Show me',Close,Abuse", text)
+ �� 26
+ �� 27 if code == 101: # so what?
+ �� 28 pass
+ �� 29 if code == 102: # show me
+ �� 30 window = gaim.GaimConversationGetWindow(conversation)
+ �� 31 gaim.GaimConvWindowRaise(window)
+ �� 32 if code == 103: # close
+ �� 33 gaim.GaimConversationDestroy(conversation)
+ �� 34 if code == 104: # abuse
+ �� 35 im = gaim.GaimConversationGetImData(conversation)
+ �� 36 gaim.GaimConvImSend(im, "Go away you f...")
+ �� 37
+ �� 38
+ �� 39 def buddysignedon(buddyid):
+ �� 40 alias = gaim.GaimBuddyGetAlias(buddyid)
+ �� 41 text = "%s is online" % alias
+ �� 42
+ �� 43 code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
+ �� 44 "'So what?','Let's talk'", text)
+ �� 45
+ �� 46 if code == 101: # so what?
+ �� 47 pass
+ �� 48 if code == 102: # let's talk
+ �� 49 name = gaim.GaimBuddyGetName(buddyid)
+ �� 50 account = gaim.GaimBuddyGetAccount(buddyid)
+ �� 51 gaim.GaimConversationNew(1, account, name)
+ �� 52
+ �� 53
+ �� 54 def talkto(buddyname, accountname, protocolname):
+ �� 55 account = gaim.GaimAccountsFindConnected(accountname, protocolname)
+ �� 56 if account != 0:
+ �� 57 gaim.GaimConversationNew(1, account, buddyname)
+ �� 58
+ �� 59
+ �� 60 bus = dbus.SessionBus()
+ �� 61 obj = bus.get_object("org.gaim.GaimService", "/org/gaim/GaimObject")
+ �� 62 gaim = dbus.Interface(obj, "org.gaim.GaimInterface")
+ �� 63
+ �� 64 bus.add_signal_receiver(receivedimmsg,
+ �� 65 dbus_interface = "org.gaim.GaimInterface",
+ �� 66 signal_name = "ReceivedImMsg")
+ �� 67 bus.add_signal_receiver(buddysignedon,
+ �� 68 dbus_interface = "org.gaim.GaimInterface",
+ �� 69 signal_name = "BuddySignedOn")
+ �� 70
+ �� 71
+ �� 72 # Tell the remote object to emit the signal
+ �� 73
+ �� 74 talkto("testone@localhost", "", "prpl-jabber")
+ �� 75
+ �� 76 loop = gobject.MainLoop()
+ �� 77 loop.run()
+ �� 78
+ �� 79