ejabberd:连接到服务器时获取用户(版本和os)
ejabberd: get users (version & os) when connect to the server
我正在尝试阅读用户 os "Windows XP, Windows 7, Linux .... etc"
当他们连接时我正在使用 ejabberd 2。1.x 但没有显示给我。
我正在做的是:
-module(mod_test).
-behaviour(gen_mod).
%% gen_mod callbacks
-export([start/2, stop/1]).
%% hook handlers
-export([user_send_packet/3, filter_packet/1]).
-include("ejabberd.hrl").
-include("jlib.hrl").
-define(PROCNAME, ejabberd_mod_filter).
start(Host, _Opts) ->
ejabberd_hooks:add(user_send_packet, Host, ?MODULE, user_send_packet, 75),
ejabberd_hooks:add(filter_packet, global, ?MODULE, filter_packet, 75),
ok.
stop(Host) ->
ejabberd_hooks:delete(filter_packet, global, ?MODULE, filter_packet, 75),
ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, user_send_packet, 75),
ok.
user_send_packet(_From, _To, _Packet) ->
ok.
filter_packet({From, To, Packet}) ->
io:format("~p", [Packet]),
filter_packet(Arg) ->
Arg.
return 包含所有用户数据,例如(状态、资源、上限...等)其他(版本、os、客户端名称)有什么方法可以做到这一点吗?
我相信在(muc 聊天)中有很多机器人可以这样做,如果我输入 :
version some_user
return 给我这条消息:
name : Psi+
version : 1.1
os : Windows XP
但我不知道他们是怎么做到的。
您可以通过向客户端发送 "Software Version" 请求来获取此信息,如 XEP-0092 中所述。这是 ejabberd 通常不会做的事情,因此您可能必须自己编写代码来跟踪响应。 (基本思想是服务器发送具有特定 ID 的请求,然后需要检查具有相同 ID 的响应,同时考虑超时和错误。)
我正在尝试阅读用户 os "Windows XP, Windows 7, Linux .... etc"
当他们连接时我正在使用 ejabberd 2。1.x 但没有显示给我。
我正在做的是:
-module(mod_test).
-behaviour(gen_mod).
%% gen_mod callbacks
-export([start/2, stop/1]).
%% hook handlers
-export([user_send_packet/3, filter_packet/1]).
-include("ejabberd.hrl").
-include("jlib.hrl").
-define(PROCNAME, ejabberd_mod_filter).
start(Host, _Opts) ->
ejabberd_hooks:add(user_send_packet, Host, ?MODULE, user_send_packet, 75),
ejabberd_hooks:add(filter_packet, global, ?MODULE, filter_packet, 75),
ok.
stop(Host) ->
ejabberd_hooks:delete(filter_packet, global, ?MODULE, filter_packet, 75),
ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, user_send_packet, 75),
ok.
user_send_packet(_From, _To, _Packet) ->
ok.
filter_packet({From, To, Packet}) ->
io:format("~p", [Packet]),
filter_packet(Arg) ->
Arg.
return 包含所有用户数据,例如(状态、资源、上限...等)其他(版本、os、客户端名称)有什么方法可以做到这一点吗?
我相信在(muc 聊天)中有很多机器人可以这样做,如果我输入 :
version some_user
return 给我这条消息:
name : Psi+
version : 1.1
os : Windows XP
但我不知道他们是怎么做到的。
您可以通过向客户端发送 "Software Version" 请求来获取此信息,如 XEP-0092 中所述。这是 ejabberd 通常不会做的事情,因此您可能必须自己编写代码来跟踪响应。 (基本思想是服务器发送具有特定 ID 的请求,然后需要检查具有相同 ID 的响应,同时考虑超时和错误。)