如何知道用户是否在线只提供用户名/昵称/参与者而不是整个JID(Ejabberd)

时间:2013-02-15 18:32:27

标签: functional-programming erlang xmpp ejabberd erlang-ports

我正在自定义模块mod_muc_room,我想添加一个知道用户是否在线但只提供用户名的函数。在模块中,我可以找到函数is_user_online

is_user_online(JID, StateData) ->

LJID = jlib:jid_tolower(JID),

?DICT:is_key(LJID, StateData#state.users).

我知道我必须提供用户名,服务器和资源。 LJID,会产生类似{"user", "myserver.com, "someid"}

的结果

我想添加一个返回相同功能的函数,但只提供类似

的“用户”
User = "user",

is_member_online(User, StateData) ->

?DICT:is_key(User, StateData#state.users).

我可以就如何实现这个目标提出一些建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用它来获取主机列表:

ejabberd_config:get_global_option(hosts)

然后使用它来检查用户是否在线:

ejabberd_sm:get_user_resources(User, Host)

如果用户离线,这将返回一个空数组。