diff --git a/aleksis/apps/matrix/models.py b/aleksis/apps/matrix/models.py index 4ab8df110397c418be57e9ff5bb602b4ceb7fa98..e7b529bb96b908c07fc0bab56de895eccc83c6ea 100644 --- a/aleksis/apps/matrix/models.py +++ b/aleksis/apps/matrix/models.py @@ -103,6 +103,7 @@ class MatrixRoom(ExtensiblePolymorphicModel): not get_site_preferences()["matrix__disambiguate_room_aliases"] or e.args[0].get("errcode") != "M_ROOM_IN_USE" ): + raise match = re.match(r"^(.*)-(\d+)$", alias) @@ -137,7 +138,14 @@ class MatrixRoom(ExtensiblePolymorphicModel): if creation_content: body["creation_content"] = creation_content - r = do_matrix_request("POST", "createRoom", body=body) + try: + r = do_matrix_request("POST", "createRoom", body=body) + except MatrixException as e: + if e.args[0].get("error") == "Cannot invite so many users at once": + del body["invite"] + r = do_matrix_request("POST", "createRoom", body=body) + else: + raise return r diff --git a/aleksis/apps/matrix/tests/test_matrix.py b/aleksis/apps/matrix/tests/test_matrix.py index 52f9a885760f99e26cad373039fee8bde2acc1a2..14fc9f78177f5842600af0884d24b89686fa9387 100644 --- a/aleksis/apps/matrix/tests/test_matrix.py +++ b/aleksis/apps/matrix/tests/test_matrix.py @@ -478,3 +478,22 @@ def test_matrix_profile(): profile = MatrixProfile.from_person(p1) assert profile == MatrixProfile.from_person(p1) + + +def test_too_much_invites(matrix_bot_user): + get_site_preferences()["matrix__homeserver_ids"] = "matrix.aleksis.example.org" + + g = Group.objects.create(name="Test Room") + + persons = [] + for i in range(100): + + u = User.objects.create_user(f"test{i}", f"test{i}@example.org", f"test{i}") + p = Person.objects.create(first_name=f"Test {i}", last_name="Person", user=u) + persons.append(p) + + g.members.set(persons) + + room = MatrixRoom.from_group(g) + + room.sync_profiles()