如何在 ejabberd 上为 muc(多用户聊天)设置不同的消息间隔?
How to set different message interval for muc(Multi-User Chat) on ejabberd?
我想为 ejabberd 中的某些 muc(多用户聊天)设置不同的消息间隔。我知道所有 muc 的 min_message_interval 选项。但我想为一些 muc 设置不同的间隔。例如,我想创建一个最小消息间隔为每秒 1 条消息的房间(muc room)。另一个房间消息间隔是每秒5条消息。
这可能吗?如何实现?
选项 min_message_interval 是为整个 mod_muc 服务定义的,因此它对您的目的没有帮助。而且这些房间没有您可以为每个房间设置的等效选项。
好消息是我找到了一个肮脏的解决方案:根据您的目的使用现有房间选项...
首先:您需要下载 ejabberd 源代码(最近的 21.04 版本)并应用此补丁:
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 2fa08dc79..0ced5429b 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -309,7 +309,7 @@ normal_state({route, <<"">>,
true when Type == groupchat ->
Activity = get_user_activity(From, StateData),
Now = erlang:system_time(microsecond),
- MinMessageInterval = trunc(mod_muc_opt:min_message_interval(StateData#state.server_host) * 1000000),
+ MinMessageInterval = trunc((StateData#state.config)#config.voice_request_min_interval* 1000),
Size = element_size(Packet),
{MessageShaper, MessageShaperInterval} =
ejabberd_shaper:update(Activity#activity.message_shaper, Size),
@@ -1744,7 +1744,7 @@ get_user_activity(JID, StateData) ->
-spec store_user_activity(jid(), #activity{}, state()) -> state().
store_user_activity(JID, UserActivity, StateData) ->
MinMessageInterval =
- trunc(mod_muc_opt:min_message_interval(StateData#state.server_host) * 1000),
+ trunc((StateData#state.config)#config.voice_request_min_interval),
MinPresenceInterval =
trunc(mod_muc_opt:min_presence_interval(StateData#state.server_host) * 1000),
Key = jid:tolower(JID),
重新编译ejabberd,安装并启动。
现在使用 jabber 客户端或使用“ejabberdctl change_room_option”更改房间配置。具体更改选项voice_request_min_interval。每个房间可以有不同的值...
ejabberd 将使用该选项来确定最小消息间隔,而不是 mod_muc 选项。
我想为 ejabberd 中的某些 muc(多用户聊天)设置不同的消息间隔。我知道所有 muc 的 min_message_interval 选项。但我想为一些 muc 设置不同的间隔。例如,我想创建一个最小消息间隔为每秒 1 条消息的房间(muc room)。另一个房间消息间隔是每秒5条消息。 这可能吗?如何实现?
选项 min_message_interval 是为整个 mod_muc 服务定义的,因此它对您的目的没有帮助。而且这些房间没有您可以为每个房间设置的等效选项。
好消息是我找到了一个肮脏的解决方案:根据您的目的使用现有房间选项...
首先:您需要下载 ejabberd 源代码(最近的 21.04 版本)并应用此补丁:
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 2fa08dc79..0ced5429b 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -309,7 +309,7 @@ normal_state({route, <<"">>,
true when Type == groupchat ->
Activity = get_user_activity(From, StateData),
Now = erlang:system_time(microsecond),
- MinMessageInterval = trunc(mod_muc_opt:min_message_interval(StateData#state.server_host) * 1000000),
+ MinMessageInterval = trunc((StateData#state.config)#config.voice_request_min_interval* 1000),
Size = element_size(Packet),
{MessageShaper, MessageShaperInterval} =
ejabberd_shaper:update(Activity#activity.message_shaper, Size),
@@ -1744,7 +1744,7 @@ get_user_activity(JID, StateData) ->
-spec store_user_activity(jid(), #activity{}, state()) -> state().
store_user_activity(JID, UserActivity, StateData) ->
MinMessageInterval =
- trunc(mod_muc_opt:min_message_interval(StateData#state.server_host) * 1000),
+ trunc((StateData#state.config)#config.voice_request_min_interval),
MinPresenceInterval =
trunc(mod_muc_opt:min_presence_interval(StateData#state.server_host) * 1000),
Key = jid:tolower(JID),
重新编译ejabberd,安装并启动。
现在使用 jabber 客户端或使用“ejabberdctl change_room_option”更改房间配置。具体更改选项voice_request_min_interval。每个房间可以有不同的值...
ejabberd 将使用该选项来确定最小消息间隔,而不是 mod_muc 选项。