Sometimes people come up with some creative solutions to solve their problems. The correct way to monitor data, such as messages, coming from Telepathy is to write an Observer, however sometimes you just want to get a feed of all of the text messages (e.g. so you can feed it to your keyboard's LCD or something).
The following is a pure D-Bus solution (although it includes telepathy.interfaces to cut down on typing). It listens to all Channel.Type.Text.Received signals, looks up the connection they came from and resolves the sender handle to a name. However note: it makes a lot more D-Bus calls than is required with Telepathy. Really you should cache the results for these handles and listen to the signals that tell you when that information has updated. If you were doing things properly, that's what you'd do.
import dbus, gobject from dbus.mainloop.glib import DBusGMainLoop from telepathy.interfaces import * from datetime import datetime dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) bus = dbus.SessionBus() def message(id, timestamp, sender, type, flags, text, path=None): # path is the object path of the channel, from this we can derive the # object path of the connection, and acquire a proxy to it service = '.'.join(path.split('/')[1:8]) conn_path = '/' + service.replace('.', '/') conn = bus.get_object(service, conn_path) # request the alias and id of the sender handle d = dbus.Interface(conn, CONNECTION_INTERFACE_CONTACTS).GetContactAttributes([sender], [CONNECTION, CONNECTION_INTERFACE_ALIASING], False) alias = d[sender].get(CONNECTION_INTERFACE_ALIASING + '/alias', d[sender].get(CONNECTION + '/contact-id', "Unknown")) dt = datetime.fromtimestamp(timestamp) print "%s <%s> %s" % (dt.strftime('%H:%M'), alias, text) # listen to all Channel.Type.Text.Received signals bus.add_signal_receiver(message, dbus_interface=CHANNEL_TYPE_TEXT, signal_name='Received', path_keyword='path') loop = gobject.MainLoop() loop.run()
Like I said, this is not efficient use of Telepathy. If it eats your D-Bus, don't blame me.
On the other hand, this has actually started a conversation about possible new convenience classes for telepathy-python.