13765
|
1 #!/usr/bin/env python
|
|
2
|
|
3 # This is a simple gaim notification server.
|
|
4 # It shows notifications when your buddy signs on or you get an IM message.
|
|
5 #
|
|
6 # This script requires Python 2.4 and PyGTK bindings
|
|
7 #
|
|
8 # Note that all function names are resolved dynamically, no
|
|
9 # gaim-specific library is needed.
|
|
10
|
|
11 import dbus
|
|
12 import dbus.glib
|
|
13 import dbus.decorators
|
|
14 import gobject
|
|
15 import os
|
|
16
|
|
17 def ensureimconversation(conversation, account, name):
|
|
18 if conversation != 0:
|
|
19 return conversation
|
|
20 else:
|
|
21 # 1 = GAIM_CONV_IM
|
|
22 return gaim.GaimConversationNew(1, account, name)
|
|
23
|
|
24 def receivedimmsg(account, name, message, conversation, flags):
|
|
25 buddy = gaim.GaimFindBuddy(account, name)
|
|
26 if buddy != 0:
|
|
27 alias = gaim.GaimBuddyGetAlias(buddy)
|
|
28 else:
|
|
29 alias = name
|
|
30
|
|
31 text = "%s says %s" % (alias, message)
|
|
32 code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
|
|
33 "'So what?','Show me',Close,Abuse", text)
|
|
34
|
|
35 if code == 101: # so what?
|
|
36 pass
|
|
37 else:
|
|
38 conversation = ensureimconversation(conversation, account, name)
|
|
39
|
|
40 if code == 102: # show me
|
|
41 window = gaim.GaimConversationGetWindow(conversation)
|
|
42 gaim.GaimConvWindowRaise(window)
|
|
43
|
|
44 if code == 103: # close
|
|
45 gaim.GaimConversationDestroy(conversation)
|
|
46
|
|
47 if code == 104: # abuse
|
|
48 im = gaim.GaimConversationGetImData(conversation)
|
|
49 gaim.GaimConvImSend(im, "Go away you f...")
|
|
50
|
|
51
|
|
52 def buddysignedon(buddyid):
|
|
53 alias = gaim.GaimBuddyGetAlias(buddyid)
|
|
54 text = "%s is online" % alias
|
|
55
|
|
56 code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
|
|
57 "'So what?','Let's talk'", text)
|
|
58
|
|
59 if code == 101: # so what?
|
|
60 pass
|
|
61
|
|
62 if code == 102: # talk
|
|
63 name = gaim.GaimBuddyGetName(buddyid)
|
|
64 account = gaim.GaimBuddyGetAccount(buddyid)
|
|
65 gaim.GaimConversationNew(1, account, name)
|
|
66
|
|
67
|
|
68 bus = dbus.SessionBus()
|
|
69 obj = bus.get_object("net.sf.gaim.GaimService", "/net/sf/gaim/GaimObject")
|
|
70 gaim = dbus.Interface(obj, "net.sf.gaim.GaimInterface")
|
|
71
|
|
72 bus.add_signal_receiver(receivedimmsg,
|
|
73 dbus_interface = "net.sf.gaim.GaimInterface",
|
|
74 signal_name = "ReceivedImMsg")
|
|
75
|
|
76 bus.add_signal_receiver(buddysignedon,
|
|
77 dbus_interface = "net.sf.gaim.GaimInterface",
|
|
78 signal_name = "BuddySignedOn")
|
|
79
|
|
80 print "This is a simple gaim notification server."
|
|
81 print "It shows notifications when your buddy signs on or you get an IM message."
|
|
82
|
|
83 loop = gobject.MainLoop()
|
|
84 loop.run()
|
|
85
|
|
86
|