Удалите некоторые параметры из конфигурации комнаты MUC

Когда владелец присоединяется, и комната, и открытая панель конфигурации комнаты, когда появляется несколько параметров конфигурации.

Я хочу удалить некоторые параметры из панели конфигурации, например

  1. Максимальное количество пользователей> максимальный лимит составляет 200, но я хочу установить максимальный лимит на 30, и поле не редактируется. (Никто не может изменить 30 лимит)

    1. Присутствие реальных джидов - (по умолчанию - модератор) Я хочу установить значение по умолчанию «Все», а поле скрыто.

    2. Роли, присутствие которых транслируется (По умолчанию выбраны все). просто хочу скрыть это поле. Ничего не меняется.

    3. Сделать комнату модерируемой (просто хочу скрыть это поле. Не отмечено.)

    4. Пользователи по умолчанию в качестве участников (просто хочу скрыть это поле. По умолчанию отмечено)

    5. Разрешить посетителям отправлять текст статуса в трансляции присутствия (просто хочу скрыть это поле. Не отмечено)

    6. Разрешить посетителю менять ник (просто хочу скрыть это поле. Не отмечено)

    7. Разрешить посетителю отправлять голосовой запрос (просто снимите галочку и скройте это поле)

    8. Разрешить подписку (просто хочу снять флажок и скрыть это поле)

Я знаю, что все эти изменения будут внесены в файл .erl, и я пытаюсь это сделать, но ничего не происходит. Может кто знает как это сделать.

Пожалуйста помоги.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
177
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Спасибо брат. Это действительно работает. Не могли бы вы сделать еще одну помощь, пожалуйста. Подскажите, как перестать менять ник в комнате. Пользователь вошел с реальным джидом, а затем внезапно меняет свой ник на другое имя. Подскажите, как это отключить.

c͓̽o͓̽d͓̽e͓̽x͓̽ 25.10.2018 08:54

Я добавил еще один патч в свой комментарий по этому поводу.

Badlop 25.10.2018 22:03

Спасибо брат. Но я хочу отключить смену псевдонима для всех аффилированных лиц. Владельцы, администраторы, члены и участники.

c͓̽o͓̽d͓̽e͓̽x͓̽ 26.10.2018 06:13

Затем вместо предыдущего патча примените тот, который я только что добавил к комментарию.

Badlop 26.10.2018 11:21

Спасибо брат. Вы очень любезны. :-)

c͓̽o͓̽d͓̽e͓̽x͓̽ 26.10.2018 15:01

@Badlop Спасибо за код. Это сработало отлично. Но я также хотел запретить пользователю менять ник при присоединении. Этот патч ограничивает пользователя изменять ник только после присоединения.

axcl 05.04.2020 16:20

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