// SPDX-License-Identifier: GPL-3.0-only pragma solidity ^0.8.26; import {IAccessControl} from "lens-modules/contracts/core/interfaces/IAccessControl.sol"; import {Group} from "lens-modules/contracts/core/primitives/group/Group.sol"; import {RuleChange, RuleProcessingParams, KeyValue} from "lens-modules/contracts/core/types/Types.sol"; import {BeaconProxy} from "lens-modules/contracts/core/upgradeability/BeaconProxy.sol"; import {ProxyAdmin} from "lens-modules/contracts/core/upgradeability/ProxyAdmin.sol"; import {PrimitiveFactory} from "lens-modules/contracts/extensions/factories/PrimitiveFactory.sol"; contract GroupFactory is PrimitiveFactory { event Lens_GroupFactory_Deployment(address indexed group, string metadataURI); constructor(address primitiveBeacon, address proxyAdminLock, address lensFactory) PrimitiveFactory(primitiveBeacon, proxyAdminLock, lensFactory) {} function deployGroup( string memory metadataURI, IAccessControl accessControl, address proxyAdminOwner, RuleChange[] calldata ruleChanges, KeyValue[] calldata extraData, address foundingMember ) external onlyLensFactory returns (address) { address proxyAdmin = address(new ProxyAdmin(proxyAdminOwner, PROXY_ADMIN_LOCK)); Group group = Group(address(new BeaconProxy(proxyAdmin, PRIMITIVE_BEACON))); group.initialize(metadataURI, TEMPORARY_ACCESS_CONTROL, foundingMember); group.changeGroupRules(ruleChanges); group.setExtraData(extraData); group.setAccessControl(accessControl); emit Lens_GroupFactory_Deployment(address(group), metadataURI); return address(group); } }