有一种方法可以根据文档在聊天室中获取用户的昵称(roomName@domain.com/nick),但是如何获得用户的真实jid(name@domain.com/resource_name)?是否可以根据XMPP协议?
答案 0 :(得分:2)
除非房间是匿名的,否则你可以。 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。