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