Как узнать, если пользователь в сети предоставляет только имя пользователя / ник / участника, но не весь JID (Ejabberd)
Я настраиваю модуль 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 ответ
Решение
Вы можете использовать это, чтобы получить список хостов:
ejabberd_config:get_global_option(hosts)
Затем используйте это, чтобы проверить, если пользователь онлайн:
ejabberd_sm:get_user_resources(User, Host)
Это вернет пустой массив, если пользователь не в сети.