# `ExStreamClient.Operations.Users`
[🔗](https://github.com/Tango-Tango/ex_stream_client/blob/main/lib/ex_stream_client/operations/users.ex#L1)

Modules for interacting with the `users` group of Stream APIs

API Reference: https://getstream.github.io/protocol/?urls.primaryName=Chat%20v2

### Shared options
All functions in this module accept the following optional parameters:

 * `api_key` - API key to use. If not provided, the default key from config will be used
 * `authenticate_as_user` - User id to authenticate. If not provided, the server key will be used
 * `api_key_secret` - API key secret to use. If not provided, the default secret from config will be used
 * `endpoint` - endpoint to use. If not provided, the default endpoint from config will be used
 * `client` - HTTP client to use. Must implement `ExStreamClient.Http.Behavior`. Defaults to `ExStreamClient.Http`
 * `req_opts` - all of these options will be forwarded to req. See `Req.new/1` for available options

# `shared_opts`

```elixir
@type shared_opts() :: [
  api_key: String.t(),
  api_key_secret: String.t(),
  authenticate_as_user: String.t(),
  client: module(),
  endpoint: String.t(),
  req_opts: keyword()
]
```

# `block_users`

```elixir
@spec block_users(ExStreamClient.Model.BlockUsersRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.BlockUsersResponse.t()} | {:error, any()}
```

Block users

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.BlockUsersRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `deactivate_user`

```elixir
@spec deactivate_user(
  String.t(),
  ExStreamClient.Model.DeactivateUserRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.DeactivateUserResponse.t()} | {:error, any()}
```

Deactivates user with possibility to activate it back

### Sends events:
- `user.deactivated`

### Required Arguments:
- `user_id`
- `payload`: `Elixir.ExStreamClient.Model.DeactivateUserRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `deactivate_users`

```elixir
@spec deactivate_users(ExStreamClient.Model.DeactivateUsersRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.DeactivateUsersResponse.t()} | {:error, any()}
```

Deactivate users in batches

### Sends events:
- `user.deactivated`

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.DeactivateUsersRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `delete_users`

```elixir
@spec delete_users(ExStreamClient.Model.DeleteUsersRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.DeleteUsersResponse.t()} | {:error, any()}
```

Deletes users and optionally all their belongings asynchronously.

### Sends events:
- `channel.deleted`
- `user.deleted`

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.DeleteUsersRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `export_user`

```elixir
@spec export_user(String.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.ExportUserResponse.t()} | {:error, any()}
```

Exports the user's profile, reactions and messages. Raises an error if a user has more than 10k messages or reactions

### Required Arguments:
- `user_id`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `get_blocked_users`

```elixir
@spec get_blocked_users([{:user_id, String.t()} | shared_opts()]) ::
  {:ok, ExStreamClient.Model.GetBlockedUsersResponse.t()} | {:error, any()}
```

Get list of blocked Users

### Optional Arguments:
- `user_id`
- All options from [Shared Options](#module-shared-options) are supported.

# `get_user_live_locations`

```elixir
@spec get_user_live_locations([{:user_id, String.t()} | shared_opts()]) ::
  {:ok, ExStreamClient.Model.SharedLocationsResponse.t()} | {:error, any()}
```

Retrieves all active live locations for a user

### Optional Arguments:
- `user_id`
- All options from [Shared Options](#module-shared-options) are supported.

# `query_users`

```elixir
@spec query_users([
  {:payload, ExStreamClient.Model.QueryUsersPayload.t()} | shared_opts()
]) ::
  {:ok, ExStreamClient.Model.QueryUsersResponse.t()} | {:error, any()}
```

Find and filter users

### Optional Arguments:
- `payload`: `Elixir.ExStreamClient.Model.QueryUsersPayload`
- All options from [Shared Options](#module-shared-options) are supported.

# `reactivate_user`

```elixir
@spec reactivate_user(
  String.t(),
  ExStreamClient.Model.ReactivateUserRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.ReactivateUserResponse.t()} | {:error, any()}
```

Activates user who's been deactivated previously

### Sends events:
- `user.reactivated`

### Required Arguments:
- `user_id`
- `payload`: `Elixir.ExStreamClient.Model.ReactivateUserRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `reactivate_users`

```elixir
@spec reactivate_users(ExStreamClient.Model.ReactivateUsersRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.ReactivateUsersResponse.t()} | {:error, any()}
```

Reactivate users in batches

### Sends events:
- `user.reactivated`

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.ReactivateUsersRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `restore_users`

```elixir
@spec restore_users(ExStreamClient.Model.RestoreUsersRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.Response.t()} | {:error, any()}
```

Restore soft deleted users

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.RestoreUsersRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `unblock_users`

```elixir
@spec unblock_users(ExStreamClient.Model.UnblockUsersRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.UnblockUsersResponse.t()} | {:error, any()}
```

Unblock users

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UnblockUsersRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `update_live_location`

```elixir
@spec update_live_location(ExStreamClient.Model.UpdateLiveLocationRequest.t(), [
  {:user_id, String.t()} | shared_opts()
]) :: {:ok, ExStreamClient.Model.SharedLocationResponse.t()} | {:error, any()}
```

Updates an existing live location with new coordinates or expiration time

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UpdateLiveLocationRequest`
### Optional Arguments:
- `user_id`
- All options from [Shared Options](#module-shared-options) are supported.

# `update_users`

```elixir
@spec update_users(ExStreamClient.Model.UpdateUsersRequest.t(), shared_opts()) ::
  {:ok, ExStreamClient.Model.UpdateUsersResponse.t()} | {:error, any()}
```

Update or create users in bulk

### Sends events:
- `user.updated`

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UpdateUsersRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

# `update_users_partial`

```elixir
@spec update_users_partial(
  ExStreamClient.Model.UpdateUsersPartialRequest.t(),
  shared_opts()
) ::
  {:ok, ExStreamClient.Model.UpdateUsersResponse.t()} | {:error, any()}
```

Updates certain fields of the user

### Sends events:
- `user.presence.changed`
- `user.updated`

### Required Arguments:
- `payload`: `Elixir.ExStreamClient.Model.UpdateUsersPartialRequest`
### Optional Arguments:
- All options from [Shared Options](#module-shared-options) are supported.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
