Notion "HLC 인증 Board"를 자동으로 판정·집계하고 Discord로 리포트하는 봇. Notion(데이터) + GitHub Actions(두뇌) + Discord(알림) 구조.
자세한 설계는 DESIGN.md 참고.
- 매일 08:00 KST 심판 (
run_judge.py)- 어제 카드: 할 일 체크리스트 전부 체크 →
인증 완료, 아니면실패 - 오늘 계획 미제출자 →
실패카드 자동 생성 - 멤버·날짜당 벌금(3,000원) 집계 → Discord 리포트 발송
- 어제/오늘 카드의 빈
날짜필드 자동 기입
- 어제 카드: 할 일 체크리스트 전부 체크 →
- 낮 시간대 30분마다 상태 교정 (
run_sync.py)- 오늘 카드의
진행 상태를 체크박스 진실에 맞춰 강제 동기화 - 전부 체크 →
인증 완료, 아니면계획 완료(수동으로 바꾼 가짜 인증완료/실패를 되돌림) - Notion은 특정 속성만 잠글 수 없어, 상태를 봇이 계속 덮어써 사실상 봇 소유로 만든다
- 오늘 카드의
판정·벌금은
hlc/config.py의START_DATE~END_DATE(시즌 기간) 안의 challenge day에만 적용된다. 시작 전은 소급하지 않고, 마감일을 넘기면 판정·벌금·미제출 카드 생성이 모두 멈춘다.
시즌 상태: 시즌1(6/22~7/31) 마감. Actions 크론은 꺼둔 상태(수동 실행만 가능).
시즌2를 열려면 START_DATE/END_DATE를 갱신하고 두 워크플로우의 schedule: 주석을 해제한다.
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # NOTION_TOKEN, DISCORD_WEBHOOK_URL 채우기
pytest # 테스트
python run_judge.py # 심판 1회 (실제로 Notion/Discord에 반영됨!)
python run_sync.py # 완료 동기화 1회- 이 저장소를 GitHub에 push
- Settings → Secrets and variables → Actions 에 시크릿 2개 등록:
NOTION_TOKENDISCORD_WEBHOOK_URL
- Actions 탭에서 워크플로우 활성화.
Run workflow로 수동 테스트 가능.judge.yml— 매일 08:00 KSTsync.yml— 30분마다(낮 시간대)
public 저장소면 Actions 무료 무제한. private면 월 2,000분 내(본 봇은 넉넉히 그 안).
| 값 | 의미 |
|---|---|
MEMBERS |
Notion user id → 이름 |
DATABASE_ID |
HLC 인증 Board |
START_DATE |
자동 판정 시작일 |
END_DATE |
시즌 마감일(마지막 challenge day). 이후는 집계 없음 |
PENALTY |
실패 1건 벌금(원) |
DEADLINE_HOUR |
마감 시각(KST) |
hlc/core.py 순수 로직 (challenge day 계산, 체크박스 판정)
hlc/models.py Notion 페이지 → Card 정규화
hlc/judge.py 심판 계획(순수) — 멤버·날짜 단위 판정/벌금
hlc/notion.py Notion API 클라이언트 (IO)
hlc/discord.py 리포트 포맷 + 웹훅 발송
run_judge.py 진입점: 08:00 심판
run_sync.py 진입점: 완료 동기화