# 고정 메시지

## 고정 메시지 <a href="#undefined" id="undefined"></a>

채팅에서 고정메시지(Pinned Message)는 채팅방이나 그룹 대화에서 중요한 메시지를 채널이나 대화창의 상단에 고정하는 기능을 말합니다. 이 기능은 참가자들이 해당 채팅을 열 때마다 쉽게 볼 수 있도록 하여 중요한 정보나 알림을 놓치지 않도록 도와줍니다. 다음은 고정메시지의 주요 특징과 활용 방법에 대한 설명입니다.

### 고정 메시지의 활용 방법 <a href="#undefined" id="undefined"></a>

* **회의 일정 공지**: 정기 회의나 중요 이벤트의 일정을 고정메시지로 설정하여 참여자들이 일정을 잊지 않도록 합니다.
* **중요 문서 링크**: 중요한 문서나 자료의 링크를 고정하여 모든 참가자가 쉽게 접근할 수 있도록 합니다.
* **규칙 및 지침 공유**: 채팅방의 규칙이나 프로젝트 지침을 고정메시지로 설정하여 새로운 참가자도 쉽게 지침을 확인할 수 있게 합니다.
* **긴급 공지**: 긴급하게 전달해야 할 내용이나 변경 사항을 고정메시지로 빠르게 공유할 수 있습니다.

고정메시지 기능은 다양한 커뮤니케이션 플랫폼에서 제공되며, 이를 효과적으로 활용하면 팀 커뮤니케이션의 효율성을 크게 높일 수 있습니다.

### 고정 메시지 생성 <a href="#undefined" id="undefined"></a>

채팅 애플리케이션에서 중요한 메시지를 사용자들이 쉽게 볼 수 있도록 상단에 고정하는 기능입니다. 아래의 C# 코드는 채팅 채널에서 메시지를 고정하는 방법을 보여줍니다.

```csharp
var newPin = await nc.createPin(channelId, messageId, pinned, pinnedAt, expiredAt);
```

* `channelId`: 메시지가 고정될 채팅 채널의 고유 식별자입니다.
* `pinned`: 고정할 메시지의 내용입니다.
* `pinnedAt`: 메시지가 고정된 시각을 나타냅니다.
* `expiredAt`: 메시지 고정이 해제될 시각입니다.

이 함수를 사용하면 특정 채팅 채널 내에서 중요한 메시지를 쉽게 강조하여 표시할 수 있습니다.

### 고정 메시지 수정 <a href="#undefined" id="undefined"></a>

기존에 고정된 메시지의 정보를 업데이트하기 위한 기능입니다. 메시지의 내용, 고정 시각 또는 만료 시각을 변경할 수 있습니다.

```csharp
var updatedPin = await nc.updatePin(id, channelId, pinned, pinnedAt, expiredAt);
```

* `channelId`: 수정할 메시지가 있는 채널의 ID입니다.
* `pinned`: 수정된 메시지 내용입니다.
* `pinnedAt`: 메시지가 새롭게 고정된 시각입니다.
* `expiredAt`: 메시지 고정의 새로운 만료 시각입니다.

이 코드는 이미 고정된 메시지의 세부사항을 변경할 때 사용되며, 메시지의 중요성이 변경되었거나 고정 시간을 조정해야 할 때 유용합니다.

### 고정 메시지 정보 <a href="#undefined" id="undefined"></a>

특정 메시지의 고정 관련 정보를 조회하는 기능입니다. 이는 메시지의 고정 상태, 고정 시각, 만료 시각 등을 확인할 수 있습니다.

```csharp
var pin = await nc.getPin(channelId, messageId);
```

* `channelId`: 정보를 조회할 채널의 ID입니다.
* `messageId`: 고정된 메시지의 고유 식별자입니다.

이 함수를 통해 특정 메시지가 현재 어떤 상태인지 확인할 수 있으며, 이는 관리자나 사용자가 채널 내 메시지 관리를 보다 효과적으로 할 수 있게 도와줍니다.

### 고정 메시지 목록 <a href="#undefined" id="undefined"></a>

채팅 채널에서 현재 고정된 모든 메시지의 목록을 조회하는 기능입니다. 이 함수는 페이징을 지원하여 대규모 채널에서도 효율적으로 데이터를 처리할 수 있습니다. 사용자는 `offset`과 `per_page`을 설정하여 원하는 범위의 데이터를 가져올 수 있습니다.

```csharp
Hashtable filter = new Hashtable
{
    { "channel_id", channelId },
};
Hashtable sort = new Hashtable
{
    { "created_at", -1 },
};
Hashtable option = new Hashtable
{
    { "offset", 0 },
    { "per_page", 10 },
};
var pins = await nc.getPins(channelId, filter, sort, option);
```

**파라미터 설명**

* **filter**: 조회할 데이터를 필터링하기 위한 조건들을 정의합니다. 예를 들어, 특정 채널에서 고정 메시지를 조회할 수 있습니다.
* **sort**: 결과 목록의 정렬 방식을 정의합니다. 여기서는 생성 시간(`created_at`)을 기준으로 내림차순(-1) 정렬을 사용합니다.
* **option**: 조회 시 사용할 옵션을 정의합니다. `offset`은 조회 시작 위치, `per_page`는 페이지 당 보여질 메시지 수를 지정합니다.

**옵션 세부 사항**

<table><thead><tr><th width="149">ID</th><th width="140">Type</th><th>Description</th></tr></thead><tbody><tr><td>offset</td><td>number</td><td>데이터를 가져올 시작 위치입니다.</td></tr><tr><td>per_page</td><td>number</td><td>한 페이지당 반환할 메시지의 수, 최대 100개까지 설정 가능합니다.</td></tr></tbody></table>

이 기능을 사용하면 채널 관리자는 채널 내에서 중요한 메시지를 쉽게 모니터링하고 관리할 수 있습니다. 또한, 특정 사용자 또는 시간 기준으로 고정 메시지를 빠르게 검색하고 정렬할 수 있어, 채널의 효율적인 운영을 돕습니다.
