> ## Documentation Index
> Fetch the complete documentation index at: https://cometchat-22654f5b-docs-angular-v5-docs-update.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Add Members To A Group

> Learn how to add members to a group, receive real-time member added events, and handle missed events using the CometChat iOS SDK.

<Accordion title="AI Integration Quick Reference">
  ```swift theme={null}
  // Add members to a group
  let member = GroupMember(UID: "UID", groupMemberScope: .participant)
  CometChat.addMembersToGroup(guid: "GUID", groupMembers: [member], onSuccess: { response in }, onError: { error in })

  // Listen for member added events
  // Conform to CometChatGroupDelegate
  func onMemberAddedToGroup(action: ActionMessage, addedBy: User, addedUser: User, addedTo: Group) { }
  ```
</Accordion>

Add users to a group programmatically. Only admins and moderators can add members. The added users receive a notification and are immediately part of the group.

## Add Members to Group

Use `addMembersToGroup()` to add members to a group.

| Parameter       | Description                                             |
| --------------- | ------------------------------------------------------- |
| `guid`          | The group to add members to                             |
| `groupMembers`  | Array of `GroupMember` objects (UID and scope required) |
| `bannedMembers` | Array of UIDs to ban (can be `nil`)                     |

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let grpmem1 = GroupMember(UID: "member1", groupMemberScope: .participant)
    let grpmem2 = GroupMember(UID: "member2", groupMemberScope: .participant)
    let grpmem3 = GroupMember(UID: "member3", groupMemberScope: .admin)
    let grpmem4 = GroupMember(UID: "member4", groupMemberScope: .admin)
    let grpmem5 = GroupMember(UID: "member5", groupMemberScope: .moderator)

    CometChat.addMembersToGroup(guid: "mygroup", groupMembers: [grpmem1, grpmem2, grpmem3, grpmem4, grpmem5], onSuccess: { (response) in
        print("Response from addMembersGroup: \(response)")
    }, onError : { (error) in
        print("Adding member in a group failed with error: \(String(describing: error?.errorDescription))")
    })
    ```
  </Tab>

  <Tab title="Objective C">
    ```objc theme={null}
    GroupMember *grpmem1 = [GroupMember alloc] initWithUID: @"mem1" groupMemberScope: GroupMemberScopeTypeParticipant];
    GroupMember *grpmem2 = [GroupMember alloc] initWithUID: @"mem2" groupMemberScope: GroupMemberScopeTypeParticipant];
    GroupMember *grpmem3 = [GroupMember alloc] initWithUID: @"mem3" groupMemberScope: GroupMemberScopeTypeModerator];
    GroupMember *grpmem4 = [GroupMember alloc] initWithUID: @"mem4" groupMemberScope: GroupMemberScopeTypeModerator];
    GroupMember *grpmem5 = [GroupMember alloc] initWithUID: @"mem5" groupMemberScope: GroupMemberScopeTypeAdmin];

    NSMutableArray<GroupMember *> members = [[NSMutableArray alloc]initWithObjects:mem1, mem2, mem3, mem4, mem5, nil];
        [CometChat addMembersToGroupWithGuid:@"mygroup" groupMembers:members bannedUIDs:nil onSuccess:^(NSDictionary<NSString *,id> * _Nonnull) {
            NSLog(@"AddMembersToGroup response is successfully.");
        } onError:^(CometChatException * _Nullable)error {
            NSLog(@"AddMembersToGroup is failed with an error %@", [error.errorDescription]);
        }]
    ```
  </Tab>
</Tabs>

The method returns a response dictionary where each key is a UID and the value is either `"success"` or an error message describing why that user couldn't be added.

## Real-Time Group Member Added Events

<Note>
  When a group member is added by another member, this event is triggered. When a user joins a group on their own, the joined event is triggered.
</Note>

Implement `onMemberAddedToGroup()` in `CometChatGroupDelegate` to receive real-time notifications when members are added.

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    extension AppDelegate: CometChatGroupDelegate {

      func onMemberAddedToGroup(action: ActionMessage, addedBy: User, addedUser: User, addedTo: Group) {
          //When any member is added in the group this function will be called
      }
    }
    ```
  </Tab>

  <Tab title="Objective C">
    ```objc theme={null}
    @interface ViewController ()<CometChatGroupDelegate>
    @end

    @implementation ViewController

    - (void)viewDidLoad {
        [super viewDidLoad];
        [CometChat setGroupdelegate:self];
    }

    - (void)onMemberAddedToGroup:(Action *)action addedBy:(User * _Nonnull)addedBy addedUser:(User * _Nonnull)addedUser addedTo:(Group * _Nonnull)addedTo {
        //When any member is added in the group this function will be called
    }

    @end
    ```
  </Tab>
</Tabs>

<Warning>
  Set delegate in `viewDidLoad()`: `CometChat.groupdelegate = self`. Remove delegate when view is dismissed to avoid memory leaks.
</Warning>

## Missed Member Added Events

When fetching previous messages, member additions appear as [`Action`](/sdk/reference/messages#action) messages (a subclass of [`BaseMessage`](/sdk/reference/messages#basemessage)).

| Field       | Value/Type                               | Description                       |
| ----------- | ---------------------------------------- | --------------------------------- |
| `action`    | `"added"`                                | The action type                   |
| `actionOn`  | [`User`](/sdk/reference/entities#user)   | The user who was added            |
| `actionBy`  | [`User`](/sdk/reference/entities#user)   | The user who added the member     |
| `actionFor` | [`Group`](/sdk/reference/entities#group) | The group the member was added to |

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Kick & Ban Members" icon="user-slash" href="/sdk/ios/group-kick-member">
    Remove or ban members from a group
  </Card>

  <Card title="Change Member Scope" icon="user-shield" href="/sdk/ios/group-change-member-scope">
    Promote or demote group members
  </Card>

  <Card title="Retrieve Group Members" icon="users" href="/sdk/ios/retrieve-group-members">
    Fetch the list of members in a group
  </Card>

  <Card title="Join a Group" icon="right-to-bracket" href="/sdk/ios/join-group">
    Allow users to join public or password-protected groups
  </Card>
</CardGroup>
