# Discord 연결하기

Mocco는 자체 Discord 봇으로 게시합니다. 서버에 봇을 한 번 설치한 다음, 봇이 게시할 채널을 고릅니다. Mocco 워크스페이스의 소유자와 관리자만 이 작업을 할 수 있습니다.

![Discord 서버와 그 채널이 연결된 Channels 탭](https://fi-workers-mocco-storage.s3.ap-northeast-2.amazonaws.com/pub/w/93e11fe8-0494-4e3d-b1cb-fe4dffd3ee7e/p/d64785b8-9a23-4fa1-a81d-550af30e203a/helpcenter/801850ef-31c5-41d7-b883-ef5a6bcf7a33/channels.png)

## 1. 봇 설치

1. Mocco에서 **Notifications**를 열고 **Channels** 탭에 머뭅니다.
2. **Connect Discord**를 클릭합니다. Mocco가 Discord로 이동시킵니다.
3. Discord에서 서버를 고르고 봇을 승인합니다. Discord는 직접 관리할 수 있는 서버에만 봇을 추가하게 해 줍니다. 서버가 목록에 없으면 서버 관리자에게 요청하세요.
4. Discord가 Mocco로 되돌려 보냅니다. 이제 서버가 **Discord servers** 아래에 나타납니다.

봇은 **View Channel**, **Send Messages**, **Embed Links**, **Read Message History** 네 가지 권한을 요청합니다. Mocco는 알림마다 임베드로 게시하므로 네 가지가 모두 필요합니다.

Mocco가 Discord를 사용할 수 없다고 표시하면, 사용 중인 Mocco 배포에 Discord가 아직 설정되지 않은 것입니다. 배포를 운영하는 사람에게 문의하세요.

Discord에서 돌아왔을 때 오류가 보이면 설치가 끝나지 않은 것입니다. 설치를 취소했거나 링크가 만든 지 10분이 지났습니다. **Connect Discord**를 다시 클릭하세요.

## 2. 채널 추가

1. **Add channel**을 클릭합니다.
2. **Server**를 고른 다음 **Channel**을 고릅니다. 목록에는 봇이 지금 볼 수 있는 텍스트 채널과 공지 채널이 표시됩니다.
3. 원하면 **Label**을 지정합니다. 기본값은 `#alerts` 같은 채널 이름입니다.
4. **Add channel**을 클릭합니다.

Mocco가 **Mocco is connected**라는 테스트 메시지를 게시하고 결과를 바로 보여 줍니다.

- **Test message sent**: 채널이 동작합니다. 다음으로 규칙을 추가하세요.
- Discord가 돌려준 오류: 봇이 아직 그 채널에 게시할 수 없습니다. 메시지에 Discord의 응답이 표시됩니다. [아래](#give-the-bot-access-to-a-private-channel)에 설명한 대로 해결한 다음 **Re-enable**을 클릭하세요.

## 비공개 채널에 봇 접근 권한 주기

비공개 채널은 접근 권한을 받지 않은 모든 사람에게 숨겨지며, Mocco 봇도 예외가 아닙니다. 그래서 **Channel** 목록에 채널이 없거나, 테스트 메시지가 `Missing Access`(코드 50001) 또는 권한 부족 오류(코드 50013)로 실패할 수 있습니다.

Discord에서 다음을 합니다.

1. 채널을 마우스 오른쪽 버튼으로 클릭하고 **Edit Channel**, **Permissions**를 차례로 선택합니다.
2. **Add members or roles**를 클릭하고 Mocco 봇(또는 봇의 역할)을 추가합니다.
3. **View Channel**, **Send Messages**, **Embed Links**, **Read Message History**를 허용합니다.
4. 변경 사항을 저장합니다.

Mocco로 돌아와 채널에서 **Re-enable**을 클릭합니다. 이전에 목록에 없던 채널이면 새로 추가합니다.

채널 권한은 서버 역할보다 우선합니다. 봇의 역할에 메시지 전송 권한이 있어도 채널에서 이를 거부하면 봇은 그 채널에 게시할 수 없습니다. **View Channel**을 거부하면 그 채널의 나머지 권한도 모두 막힙니다.

## 비활성화된 채널

봇이 채널에 접근할 수 없다고 Discord가 알려 주면(접근 권한을 잃었거나 채널이 삭제된 경우), Mocco는 해당 채널을 **Disabled**로 표시하고 Discord가 알려 준 이유를 보여 준 뒤 게시를 멈춥니다. 원인을 해결하고 **Re-enable**을 클릭하기 전까지는 비활성화된 채널로 아무것도 전송되지 않습니다. 그 뒤 Mocco가 채널을 다시 확인하고 새 테스트 메시지를 게시합니다. 봇이 여전히 게시하지 못하면 채널은 새 이유와 함께 비활성화된 상태로 남습니다.

![비활성화된 이유와 Re-enable 버튼이 표시된 채널](https://fi-workers-mocco-storage.s3.ap-northeast-2.amazonaws.com/pub/w/93e11fe8-0494-4e3d-b1cb-fe4dffd3ee7e/p/d64785b8-9a23-4fa1-a81d-550af30e203a/helpcenter/395213b2-c61a-4b25-8bec-23ee3ea2123b/disabled-channel.png)

봇이 서버에서 제거되었거나, 제거되었다가 다시 추가된 경우에는 Mocco가 Discord를 다시 연결하라고 안내합니다. **Connect Discord**를 클릭한 다음 채널을 다시 추가하세요.

## 3. 채널별로 받을 이벤트 고르기

채널은 규칙이 요청한 이벤트만 받습니다. 각 채널 카드에는 **Rules** 섹션이 있습니다.

**프리셋 적용.** 프리셋을 고르고 **Apply**를 클릭합니다.

| 프리셋 | 추가되는 규칙 |
|---|---|
| Mocco | `gate.pending`, `gate.resumed`, `gate.rejected`, `run.failed` |
| Sentry | `sentry.issue.created` |
| Vercel | 프로덕션에 한정한 `vercel.deployment.succeeded`, `vercel.deployment.error`, `vercel.deployment.canceled` |
| GitHub | 커밋이 있는 `github.push`, 열림·다시 열림·병합·닫힘 상태의 pull request, 열림·다시 열림·닫힘 상태의 이슈, `github.release.published`, `github.workflow_run.failed` |

Sentry, Vercel, GitHub 프리셋에서는 소스도 고를 수 있으며, 그러면 규칙이 그 소스의 이벤트만 받습니다. 프리셋을 두 번 적용해도 새로 추가되는 것은 없습니다.

**규칙을 직접 추가**하려면 **Add rule**을 사용합니다.

- **Event type**: `vercel.deployment.error` 같은 정확한 타입이나, `github.pull_request.*`, `gate.*`처럼 `.*`로 끝나는 이벤트 계열 전체를 지정합니다.
- **Only from source**(선택): 해당 소스의 이벤트만 받습니다.
- **Filter**(선택): 한 줄에 `key=value` 하나씩 씁니다. 모든 줄이 이벤트와 정확히 일치해야 합니다. 예를 들어 `target=production`이나 `branch=main`입니다. 필터로 쓸 수 있는 키는 각 소스 페이지와 [Mocco 이벤트](https://www.mocco.club/docs/ko/articles/eriac3-mocco-events)에 나와 있습니다.

규칙을 삭제하려면 규칙 옆의 **Remove**를 클릭합니다. 채널을 삭제하면 그 규칙도 함께 삭제되며, 과거 활동 기록은 계속 볼 수 있습니다.

## 다음 단계

소스를 추가하세요. [Sentry](https://www.mocco.club/docs/ko/articles/wbbawp-sentry), [Vercel](https://www.mocco.club/docs/ko/articles/55gt7w-vercel), [GitHub](https://www.mocco.club/docs/ko/articles/cnzvv7-github)가 있습니다. 메시지가 도착하지 않으면 **Activity**를 열고 [문제 해결](https://www.mocco.club/docs/ko/articles/pmzrkr-troubleshooting)을 참고하세요.
