【发布时间】:2012-07-30 13:19:24
【问题描述】:
有一种方法可以根据文档在聊天室中获取用户的昵称(roomName@domain.com/nick),但是如何获取用户的真实jid(name@domain.com/resource_name)?是否可以根据 XMPP 协议?
【问题讨论】:
有一种方法可以根据文档在聊天室中获取用户的昵称(roomName@domain.com/nick),但是如何获取用户的真实jid(name@domain.com/resource_name)?是否可以根据 XMPP 协议?
【问题讨论】:
除非房间是匿名的,否则你可以。 Jabber 协议使聊天室中的人可能是匿名的成为可能,因此您无法返回他们真实的 JID。这也是它在房间内提供私人消息聊天的原因,因此您仍然可以向这样做的人发送私人消息。
我在Bot::Backbone::Service::JabberChat 中有一些代码可以做到这一点:
# Figure out who sent this message
my $from_user = $room->get_user($xmpp_message->from_nick);
# Prefer the real JID as the username
my $from_username = $from_user->real_jid // $from_user->in_room_jid;
my $from_nickname = $from_user->nick;
请参阅AnyEvent::XMPP::Ext::MUC::User 和AnyEvent::XMPP::Ext::MUC::Room 了解更多详情。
【讨论】:
real_jid 为所有帐户工作。这就是我实际测试代码的全部内容。