使用pidgin dbus python API获取xmpp资源字符串

1 投票
1 回答
600 浏览
提问于 2025-04-17 07:59

我在使用pidgin的dbus接口,想通过写一段Python代码来打印我在gtalk上的好友名字和他们的状态:

import dbus


# Initiate a connection to the Session Bus
bus = dbus.SessionBus()

# Associate Pidgin's D-Bus interface with Python objects
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")


# Iterate through every active account
for acctID in purple.PurpleAccountsGetAllActive():
   for buddy in purple.PurpleFindBuddies(acctID,""):
      print purple.PurpleBuddyGetName(buddy),'Online' if purple.PurpleBuddyIsOnline(buddy) else 'Offline'

在Pidgin中,当我把鼠标悬停在某个好友上时,会显示出这个好友的资源字符串,比如gtalk、android等。这个字符串告诉我这个用户是从哪个设备登录的。

有没有办法通过pidgin的dbus接口或者其他方法获取这个资源字符串呢?

请帮帮我,谢谢!

1 个回答

0

你可以使用来自这个维基页面的脚本:

#!/usr/bin/env python

def my_func(account, sender, message, conversation, flags):
    print sender, "said:", message

import dbus, gobject
from dbus.mainloop.glib import DBusGMainLoop
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()

bus.add_signal_receiver(my_func,
                        dbus_interface="im.pidgin.purple.PurpleInterface",
                        signal_name="ReceivedImMsg")

loop = gobject.MainLoop()
loop.run()

sender 在这里会像这样:
如果你使用的是安卓,格式是 'example@gmail.com/androidXXXXXXXX';
如果是使用谷歌聊天(gtalk),格式是 'example@gmail.com/gmail.XXXXXXXX';
对于其他即时通讯工具,格式是 'example@gmail.com/XXXXXXXX',其中的 X 是十六进制的值。

撰写回答