pidgin/pidgin

facebook: Store sent message id in lastmid, to deduplicate echoed messages

This is crappy and error prone, just like the rest of the duplicate
message handling code. It works, but it's going to get some echoes now
and then, particularly in quick moving groupchats.

I'm pretty sure this is a bug in the server, but the official clients
have much more elaborate deduplication built-in, so they won't notice.
#!/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()