def _fetch_new_members_for_network(api: GMatrixHttpApi,
                                   user_activity: Dict[str, int],
                                   discovery_room: RoomInfo,
                                   current_time: int) -> None:
    try:
        response = api._send(
            "GET",
            f"/_synapse/admin/v1/rooms/{discovery_room.room_id}/members")
        server_name = urlparse(api.base_url).netloc
        room_members = [
            member for member in response["members"]
            if member.split(":")[1] == server_name
            and not member.startswith("@admin")
        ]

        # Add new members with an overdue activity time
        # to trigger presence update later
        for user_id in room_members:
            if user_id not in user_activity:
                user_activity[
                    user_id] = current_time - USER_PURGING_THRESHOLD - 1

    except MatrixError as ex:
        click.secho(
            f"Could not fetch members for {discovery_room.alias} with error {ex}"
        )
def _purge_inactive_users_for_network(
    api: GMatrixHttpApi,
    user_activity: Dict[str, int],
    due_users: List[str],
) -> None:
    for user_id in due_users:
        try:
            # delete user account and remove him from the user_activity_file
            last_ago = (int(time.time()) - user_activity[user_id]) / (60 * 60 *
                                                                      24)
            api._send(
                "POST",
                f"/deactivate/{user_id}",
                content={"erase": True},
                api_path="/_synapse/admin/v1",
            )
            user_activity.pop(user_id, None)
            click.secho(f"{user_id} deleted. Offline for {last_ago} days.")
        except MatrixError as ex:
            click.secho(f"Could not delete user {user_id} with error {ex}")
        finally:
            time.sleep(0.1)