Когда владелец присоединяется, и комната, и открытая панель конфигурации комнаты, когда появляется несколько параметров конфигурации.
Я хочу удалить некоторые параметры из панели конфигурации, например
Максимальное количество пользователей> максимальный лимит составляет 200, но я хочу установить максимальный лимит на 30, и поле не редактируется. (Никто не может изменить 30 лимит)
Присутствие реальных джидов - (по умолчанию - модератор) Я хочу установить значение по умолчанию «Все», а поле скрыто.
Роли, присутствие которых транслируется (По умолчанию выбраны все). просто хочу скрыть это поле. Ничего не меняется.
Сделать комнату модерируемой (просто хочу скрыть это поле. Не отмечено.)
Пользователи по умолчанию в качестве участников (просто хочу скрыть это поле. По умолчанию отмечено)
Разрешить посетителям отправлять текст статуса в трансляции присутствия (просто хочу скрыть это поле. Не отмечено)
Разрешить посетителю менять ник (просто хочу скрыть это поле. Не отмечено)
Разрешить посетителю отправлять голосовой запрос (просто снимите галочку и скройте это поле)
Разрешить подписку (просто хочу снять флажок и скрыть это поле)
Я знаю, что все эти изменения будут внесены в файл .erl, и я пытаюсь это сделать, но ничего не происходит. Может кто знает как это сделать.
Пожалуйста помоги.
Как администратор сервера, вы можете установить значения комнат по умолчанию в ejabberd.yml с помощью этой опции mod_muc: default_room_options, см. https://docs.ejabberd.im/admin/configuration/#mod-muc
Затем вам нужно изменить mod_muc_room.erl, чтобы скрыть поле, а также не использовать параметры, если умный владелец комнаты добавляет их вручную. Позже вы скомпилируете этот файл (или весь ejabberd) и установите модифицированный mod_muc_room.beam, перезаписав старый, и, наконец, перезапустите ejabberd. Если вы не видите изменений, возможно, вы скопировали файл луча в другое место (возможно, у вас установлено два ejabberd, один из которых работает, а другой старый и вас смущает?).
Я думаю, что это изменение включает в себя все параметры, которые вы хотели, но лучше проверьте, возможно, я кое-что забыл. Я пробовал это изменение в ejabberd 18.09, и оно скрывает несколько параметров в формуляре конфигурации комнаты:
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 267514b20..a6fc0e73f 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -58,7 +58,7 @@
-include("mod_muc_room.hrl").
-define(MAX_USERS_DEFAULT_LIST,
- [5, 10, 20, 30, 50, 100, 200, 500, 1000, 2000, 5000]).
+ [30]).
-define(DEFAULT_MAX_USERS_PRESENCE,1000).
@@ -3363,23 +3363,23 @@ get_config(Lang, StateData, From) ->
MaxUsersRoom
| ?MAX_USERS_DEFAULT_LIST]),
N =< ServiceMaxUsers]},
- {whois, if Config#config.anonymous -> moderators;
- true -> anyone
- end},
- {presencebroadcast, Config#config.presence_broadcast},
+ %{whois, if Config#config.anonymous -> moderators;
+ % true -> anyone
+ % end},
+ %{presencebroadcast, Config#config.presence_broadcast},
{membersonly, Config#config.members_only},
- {moderatedroom, Config#config.moderated},
- {members_by_default, Config#config.members_by_default},
+ %{moderatedroom, Config#config.moderated},
+ %{members_by_default, Config#config.members_by_default},
{changesubject, Config#config.allow_change_subj},
{allow_private_messages, Config#config.allow_private_messages},
{allow_private_messages_from_visitors,
Config#config.allow_private_messages_from_visitors},
{allow_query_users, Config#config.allow_query_users},
{allowinvites, Config#config.allow_user_invites},
- {allow_visitor_status, Config#config.allow_visitor_status},
- {allow_visitor_nickchange, Config#config.allow_visitor_nickchange},
- {allow_voice_requests, Config#config.allow_voice_requests},
- {allow_subscription, Config#config.allow_subscription},
+ %{allow_visitor_status, Config#config.allow_visitor_status},
+ %{allow_visitor_nickchange, Config#config.allow_visitor_nickchange},
+ %{allow_voice_requests, Config#config.allow_voice_requests},
+ %{allow_subscription, Config#config.allow_subscription},
{voice_request_min_interval, Config#config.voice_request_min_interval},
{pubsub, Config#config.pubsub}]
++
@@ -3440,27 +3440,27 @@ set_config(Opts, Config, ServerHost, Lang) ->
C#config{allow_private_messages = V};
({allow_private_messages_from_visitors, V}, C) ->
C#config{allow_private_messages_from_visitors = V};
- ({allow_visitor_status, V}, C) -> C#config{allow_visitor_status = V};
- ({allow_visitor_nickchange, V}, C) ->
- C#config{allow_visitor_nickchange = V};
+ %({allow_visitor_status, V}, C) -> C#config{allow_visitor_status = V};
+ %({allow_visitor_nickchange, V}, C) ->
+ %C#config{allow_visitor_nickchange = V};
({publicroom, V}, C) -> C#config{public = V};
({public_list, V}, C) -> C#config{public_list = V};
({persistentroom, V}, C) -> C#config{persistent = V};
- ({moderatedroom, V}, C) -> C#config{moderated = V};
- ({members_by_default, V}, C) -> C#config{members_by_default = V};
+ %({moderatedroom, V}, C) -> C#config{moderated = V};
+ %({members_by_default, V}, C) -> C#config{members_by_default = V};
({membersonly, V}, C) -> C#config{members_only = V};
({captcha_protected, V}, C) -> C#config{captcha_protected = V};
({allowinvites, V}, C) -> C#config{allow_user_invites = V};
- ({allow_subscription, V}, C) -> C#config{allow_subscription = V};
+ %({allow_subscription, V}, C) -> C#config{allow_subscription = V};
({passwordprotectedroom, V}, C) -> C#config{password_protected = V};
({roomsecret, V}, C) -> C#config{password = V};
({anonymous, V}, C) -> C#config{anonymous = V};
({presencebroadcast, V}, C) -> C#config{presence_broadcast = V};
- ({allow_voice_requests, V}, C) -> C#config{allow_voice_requests = V};
+ %({allow_voice_requests, V}, C) -> C#config{allow_voice_requests = V};
({voice_request_min_interval, V}, C) ->
C#config{voice_request_min_interval = V};
- ({whois, moderators}, C) -> C#config{anonymous = true};
- ({whois, anyone}, C) -> C#config{anonymous = false};
+ %({whois, moderators}, C) -> C#config{anonymous = true};
+ %({whois, anyone}, C) -> C#config{anonymous = false};
({maxusers, V}, C) -> C#config{max_users = V};
({enablelogging, V}, C) -> C#config{logging = V};
({pubsub, V}, C) -> C#config{pubsub = V};
Есть опция, запрещающая посетителям менять ник. Если вы хотите, чтобы этот параметр также запрещал участникам, примените это изменение:
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 267514b20..16ce21ba1 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -1031,7 +1031,7 @@ do_process_presence(Nick, #presence{from = From, type = available, lang = Lang}
StateData#state.host,
From, Nick),
{(StateData#state.config)#config.allow_visitor_nickchange,
- is_visitor(From, StateData)}} of
+ is_visitor_or_participant(From, StateData)}} of
{_, _, {false, true}} ->
Packet1 = Packet#presence{sub_els = [#muc{}]},
ErrText = <<"Visitors are not allowed to change their "
@@ -1501,6 +1501,11 @@ get_default_role(Affiliation, StateData) ->
is_visitor(Jid, StateData) ->
get_role(Jid, StateData) =:= visitor.
+is_visitor_or_participant(Jid, StateData) ->
+ (get_role(Jid, StateData) =:= visitor)
+ or
+ (get_role(Jid, StateData) =:= participant).
+
-spec is_moderator(jid(), state()) -> boolean().
is_moderator(Jid, StateData) ->
get_role(Jid, StateData) =:= moderator.
С другой стороны, если вы хотите запретить всем ролям изменять ник, изменение будет меньше:
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl
index 267514b20..2ef75e6ed 100644
--- a/src/mod_muc_room.erl
+++ b/src/mod_muc_room.erl
@@ -1032,7 +1032,7 @@ do_process_presence(Nick, #presence{from = From, type = available, lang = Lang}
From, Nick),
{(StateData#state.config)#config.allow_visitor_nickchange,
is_visitor(From, StateData)}} of
- {_, _, {false, true}} ->
+ {_, _, {false, _}} ->
Packet1 = Packet#presence{sub_els = [#muc{}]},
ErrText = <<"Visitors are not allowed to change their "
"nicknames in this room">>,
Я добавил еще один патч в свой комментарий по этому поводу.
Спасибо брат. Но я хочу отключить смену псевдонима для всех аффилированных лиц. Владельцы, администраторы, члены и участники.
Затем вместо предыдущего патча примените тот, который я только что добавил к комментарию.
Спасибо брат. Вы очень любезны. :-)
@Badlop Спасибо за код. Это сработало отлично. Но я также хотел запретить пользователю менять ник при присоединении. Этот патч ограничивает пользователя изменять ник только после присоединения.
Спасибо брат. Это действительно работает. Не могли бы вы сделать еще одну помощь, пожалуйста. Подскажите, как перестать менять ник в комнате. Пользователь вошел с реальным джидом, а затем внезапно меняет свой ник на другое имя. Подскажите, как это отключить.