광주소프트웨어마이스터고(GSM) 외출제 관리 서비스 GOMS와 연동되는 Discord 봇입니다.
외출제 관리 인원 모집, 참여자 수집, GOMS 서버 권한 동기화, 석식 안내 등을 자동화하여 학생회의 외출제 운영을 지원합니다.
- 매주 월요일, 수요일 오전 9시 30분 자동 모집
- 모집 메시지 자동 전송
- 매주 월요일, 수요일 오후 6시 25분 자동 수집
- 모집 메시지의 🙋 반응자 조회
- GOMS 내부 API 호출
- Discord 계정과 GOMS 계정 매핑
- 외출제 관리 인원 권한 자동 부여
- 기존 학생회 권한 자동 초기화
- 동기화 결과 Discord 채널 전송
- 모집 참여자 자동 멘션
- 석식 식사 후 외출제 관리 위치 이동 안내
| 명령어 | 설명 |
|---|---|
!명령어 |
사용 가능한 명령어 목록 표시 |
| 명령어 | 설명 |
|---|---|
!외출제 |
외출제 자동 발송 상태 확인 |
!외출제 on |
외출제 자동 발송 활성화 |
!외출제 off |
외출제 자동 발송 비활성화 |
!외출제 모집 |
모집 메시지 수동 전송 및 외출제 상태 활성화 |
!외출제 공지 |
외출제 공지 메시지 수동 전송 (관리자 전용) |
- 외출제가 ON일 때 매주 월요일과 수요일 13:10 (Asia/Seoul)에 외출제 공지를 자동 전송합니다.
- 모집/석식 서버와 다른 Discord 서버를 사용하도록 공지 Channel ID를 별도로 설정할 수 있습니다.
- 1/2/3학년 Role ID를 기준으로 멘션하며, 마지막 자동 공지만 삭제해 최신 공지를 유지합니다.
- ON/OFF 상태와 마지막 공지 Message ID는 JSON 파일에 저장되어 봇 재시작 후에도 유지됩니다.
09:30
↓
모집 메시지 전송
↓
🙋 반응 수집
18:25
↓
참여자 수집
↓
Discord User ID 추출
↓
GOMS 내부 API 호출
↓
권한 동기화
↓
석식 안내
↓
결과 안내
- Node.js
- Discord.js v14
- Axios
- Node Cron
- Dotenv
기존 환경변수 외에 외출제 공지 자동화에는 다음 값이 필요합니다.
DISCORD_OUTING_NOTICE_CHANNEL_ID=
DISCORD_GRADE_1_ROLE_ID=
DISCORD_GRADE_2_ROLE_ID=
DISCORD_GRADE_3_ROLE_ID=
OUTING_NOTICE_CRON=10 13 * * 1,3
OUTING_STATE_FILE=data/automation-state.json
OUTING_NOTICE_CRON을 생략하면 월요일·수요일 13:10 KST를 사용합니다. 공지 서버에서 Bot에 View Channel, Send Messages, 해당 역할 멘션 권한, Manage Messages 권한을 부여해야 합니다. Role hierarchy와 역할의 멘션 허용 설정도 확인해야 합니다.
이 프로젝트는 GOMS 서비스 운영을 위한 내부 프로젝트입니다.