> ## 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.

# Change Member Scope

> Learn how to change group member scope (admin, moderator, participant) and receive real-time scope change events using the CometChat iOS SDK.

<Accordion title="AI Integration Quick Reference">
  ```swift theme={null}
  // Change member scope to admin
  CometChat.updateGroupMemberScope(UID: "UID", GUID: "GUID", scope: .admin, onSuccess: { response in }, onError: { error in })

  // Listen for scope change events
  // Conform to CometChatGroupDelegate
  func onGroupMemberScopeChanged(action: ActionMessage, scopeChangeduser: User, scopeChangedBy: User, scopeChangedTo: String, scopeChangedFrom: String, group: Group) { }
  ```
</Accordion>

Promote or demote group members between admin, moderator, and participant scopes. Only admins can change member scopes, and only the group owner can change admin scopes.

## Change Scope of a Group Member

Use `updateGroupMemberScope()` to change a member's scope within a group.

| Parameter | Description                                              |
| --------- | -------------------------------------------------------- |
| `UID`     | The UID of the member whose scope you want to change     |
| `GUID`    | The GUID of the group                                    |
| `scope`   | The new scope: `.admin`, `.moderator`, or `.participant` |

The default scope is `.participant`. Only Admins can change member scopes.

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let guid = "cometchat-guid-1"
    let uid = "cometchat-uid-2"
    let scope: CometChat.MemberScope = .admin

    CometChat.updateGroupMemberScope(UID: uid, GUID: guid, scope: scope, onSuccess: { (response) in
        print("Scope changed: \(response)")
    }, onError: { (error) in
        print("Error: \(error?.errorDescription)")
    })
    ```
  </Tab>
</Tabs>

## Real-Time Scope Change Events

Implement `onGroupMemberScopeChanged()` in `CometChatGroupDelegate` to receive real-time notifications when a member's scope changes.

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    class ViewController: UIViewController, CometChatGroupDelegate {
        
        override func viewDidLoad() {
            super.viewDidLoad()
            CometChat.groupdelegate = self
        }
        
        func onGroupMemberScopeChanged(action: ActionMessage, scopeChangeduser: User, scopeChangedBy: User, scopeChangedTo: String, scopeChangedFrom: String, group: Group) {
            print("\(scopeChangeduser.name ?? "") scope changed")
            print("From: \(scopeChangedFrom) To: \(scopeChangedTo)")
        }
    }
    ```
  </Tab>

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

    @implementation ViewController

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

    - (void)onGroupMemberScopeChangedWithAction:(Action *)action user:(User *)user scopeChangedTo:(NSString *)scopeChangedTo scopeChangedFrom:(NSString *)scopeChangedFrom group:(Group *)group {
        // User scope changed
    }

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

<Warning>
  Always remove group delegates when they're no longer needed. Set delegate in `viewDidLoad()`: `CometChat.groupdelegate = self`.
</Warning>

## Missed Group Member Scope Changed Events

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

| Field       | Value/Type                               | Description                    |
| ----------- | ---------------------------------------- | ------------------------------ |
| `action`    | `"scopeChanged"`                         | The action type                |
| `actionOn`  | [`User`](/sdk/reference/entities#user)   | The user whose scope changed   |
| `actionBy`  | [`User`](/sdk/reference/entities#user)   | The user who changed the scope |
| `actionFor` | [`Group`](/sdk/reference/entities#group) | The group                      |
| `oldScope`  | `string`                                 | The previous scope             |
| `newScope`  | `string`                                 | The new scope                  |

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Transfer Group Ownership" icon="arrow-right-arrow-left" href="/sdk/ios/transfer-group-ownership">
    Transfer ownership of a group to another member
  </Card>

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

  <Card title="Add Members" icon="user-plus" href="/sdk/ios/group-add-members">
    Add new members to a group
  </Card>

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