【问题标题】:How can I get the user jabber Id in a chat room using AnyEvent::XMPP?如何使用 AnyEvent::XMPP 在聊天室中获取用户 jabber ID?
【发布时间】:2012-07-30 13:19:24
【问题描述】:

有一种方法可以根据文档在聊天室中获取用户的昵称(roomName@domain.com/nick),但是如何获取用户的真实jid(name@domain.com/resource_name)?是否可以根据 XMPP 协议?

【问题讨论】:

    标签: perl xmpp anyevent


    【解决方案1】:

    除非房间是匿名的,否则你可以。 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::UserAnyEvent::XMPP::Ext::MUC::Room 了解更多详情。

    【讨论】:

    • 实际上我在问这里之前已经阅读了您的模块代码 :) 无论如何,我发现我必须授予我的机器人帐户管理员权限才能查看真正的 JID,现在我可以使用此代码获取它。感谢您的帮助!
    • 嗯,OpenFire(以及 6 年以上的前辈)必须默认允许 real_jid 为所有帐户工作。这就是我实际测试代码的全部内容。
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    相关资源
    最近更新 更多