Über D-Bus lassen sich Befehle an Pidgin schicken. Das ganze ist bislang nicht sonderlich gut dokumentiert, weshalb ich meine Erkenntnisse teilen möchte. Mit dem D-Bus-Debugger D-Feet konnte ich etwas reverse-engineering betreiben und mir Konzepte der D-Bus-Kommunikation von Pidgin erschließen. Dabei herausgekommen sind zwei Pythonscripts
Von der Kommandozeile aus Nachricht schreiben #
purple-remote jabber:goim?screenname=hackerspace-bielefeld@conference.jabber.ccc.de&message="test22"
History eines Chatraums ausgeben #
# getChatHistory.py
import dbus
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
for conv in purple.PurpleGetConversations():
for msg in reversed(purple.PurpleConversationGetMessageHistory(conv)):
print "<" + purple.PurpleConversationMessageGetSender(msg) + ", " + ">"
print purple.PurpleConversationMessageGetMessage(msg) + "n"
Liste der Benutzer im Chat ausgeben #
# getUsers.py
#!/usr/bin/env python
import dbus
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
for chat in purple.PurpleGetChats():
chat = purple.PurpleConvChat(chat)
userlist = []
for usr in purple.PurpleConvChatGetUsers(chat):
userlist.append( (usr, purple.PurpleConvChatCbGetName(usr)))
for usr in sorted(userlist, key=lambda s: s[1].lower()):
print usr[1]