Как узнать, если пользователь в сети предоставляет только имя пользователя / ник / участника, но не весь 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)

Это вернет пустой массив, если пользователь не в сети.

Другие вопросы по тегам