diff --git a/synapse/config/server_notices.py b/synapse/config/server_notices.py
index ce041abe9b..a8badba0f8 100644
--- a/synapse/config/server_notices.py
+++ b/synapse/config/server_notices.py
@@ -48,6 +48,7 @@ class ServerNoticesConfig(Config):
self.server_notices_mxid_display_name: Optional[str] = None
self.server_notices_mxid_avatar_url: Optional[str] = None
self.server_notices_room_name: Optional[str] = None
+ self.server_notices_auto_join: bool = False
def read_config(self, config: JsonDict, **kwargs: Any) -> None:
c = config.get("server_notices")
@@ -62,3 +63,4 @@ class ServerNoticesConfig(Config):
self.server_notices_mxid_avatar_url = c.get("system_mxid_avatar_url", None)
# todo: i18n
self.server_notices_room_name = c.get("room_name", "Server Notices")
+ self.server_notices_auto_join = c.get("auto_join", False)
diff --git a/synapse/server_notices/server_notices_manager.py b/synapse/server_notices/server_notices_manager.py
index 44b999677a..2353b5d47f 100644
--- a/synapse/server_notices/server_notices_manager.py
+++ b/synapse/server_notices/server_notices_manager.py
@@ -224,14 +224,27 @@ class ServerNoticesManager:
if room.room_id == room_id:
return
+ user_id_obj = UserID.from_string(user_id)
await self._room_member_handler.update_membership(
requester=requester,
- target=UserID.from_string(user_id),
+ target=user_id_obj,
room_id=room_id,
action="invite",
ratelimit=False,
)
+ if self._config.servernotices.server_notices_auto_join:
+ user_requester = create_requester(
+ user_id, authenticated_entity=self._server_name
+ )
+ await self._room_member_handler.update_membership(
+ requester=user_requester,
+ target=user_id_obj,
+ room_id=room_id,
+ action="join",
+ ratelimit=False,
+ )
+
async def _update_notice_user_profile_if_changed(
self,
requester: Requester,
|