Slack 알고리즘 스터디의 인증글, 자정 현황, 다음날 마감 결과를 자동으로 안내하는 봇입니다.
- 2기 시작일: 2026-10-01
- Slack 채널:
C0C562P5YK0 - 운영자·개발자: 양승환
- 1기 운영 기간: 2026-03-23 ~ 2026-08-26
모든 GitHub Actions 워크플로우는 자체 schedule 없이 cron-job.org의 workflow_dispatch 호출로 실행합니다.
| 시각(KST) | 스크립트 | 역할 |
|---|---|---|
| 00:00 | midnight_report.py |
전날 제출 현황 중간 점검 |
| 09:09 | check_slack.py |
전날 최종 제출·면제 확인 및 벌금 안내 |
| 09:10 | send_slack.py |
당일 인증 스레드 개설 |
- 인증 이미지가 첨부된 스레드 댓글만 제출로 인정합니다.
- 미제출 벌금은 1회당 항상 1,000원이며 가중처벌은 없습니다.
- 벌금 계좌로 즉시 송금하지 않습니다. 누적 벌금액을 기록하고 추후 회식·모임 비용을 나눌 때 정산합니다.
- 다음날 09:09 최종 안내에 등록된 9명 전원의 누적 미제출 횟수·금액과 전체 누적 벌금액을 표시합니다. 금액 내림차순으로 1~9번을 표시하며, 동액이면 멤버 등록 순서를 유지합니다. 저장된 금액을 1,000원으로 나눠 미제출 횟수를 표시합니다. 검사 대상은 각 멤버의 가입일부터 적용합니다.
- 면제권은 인증 스레드 댓글에
면제권 사용이 포함되면 적용됩니다. 뒤에 말을 덧붙여도 인정하며, 사유 심사나 사용 횟수 제한은 없습니다. - 면제 사유 관련 이미지를 대신 올려도 일반 이미지 제출과 동일하게 인증됩니다.
- 2026년 10~12월 평일 공휴일(10월 5일·9일, 12월 25일)은 전원 면제일입니다. 토·일요일은 정기 검사 대상이 아니므로 면제일 목록에 넣지 않습니다.
- 아직 Slack ID가 없는 인원은 자동 검사 대상에서 제외됩니다.
현재 검사 대상 9명의 Slack ID는 config.py에서 관리합니다. 김수현·홍상우 님도 2026년 10월 1일 분량부터 자동 검사 대상에 포함됩니다.
새 Slack 워크스페이스에 앱을 설치하고 대상 채널에 봇을 참여시킵니다.
- Bot Token Scope:
chat:write - Bot Token Scope:
channels:history— 공개 채널인 경우 - Bot Token Scope:
groups:history— 비공개 채널인 경우
게시와 채널·스레드 조회 모두 Bot Token으로 처리합니다.
GitHub Actions Secret에는 새 워크스페이스에서 발급된 토큰 하나를 등록합니다.
| Secret | 용도 |
|---|---|
SLACK_BOT_TOKEN |
새 워크스페이스의 Bot User OAuth Token (xoxb-...) |
채널 ID는 비밀값이 아니므로 config.py의 SLACK_CHANNEL_ID에 저장합니다.
누적 벌금액은 miss_counts.v2.json에 사용자 이름별 원 단위 금액으로만 저장합니다. 미제출할 때마다 해당 금액이 1,000원 증가합니다. 날짜·Slack ID는 이 파일에 저장하지 않으며, 같은 분량의 재실행 여부는 GitHub 커밋 기록으로 확인해 중복 증가를 막습니다. check-slack.yml은 자동 발급되는 GITHUB_TOKEN으로 파일을 갱신하며 contents: write 권한을 사용합니다. 별도 GitHub Secret 등록은 필요하지 않습니다.
pip install requests
SLACK_BOT_TOKEN=xoxb-... python send_slack.py
SLACK_BOT_TOKEN=xoxb-... python midnight_report.py
SLACK_BOT_TOKEN=xoxb-... GITHUB_TOKEN=... GITHUB_REPOSITORY=yang5864/Slack-msg python check_slack.py테스트:
python -m unittest discover -s tests -vconfig.py: 채널, 운영 기간, 멤버, 벌금과 면제 규칙slack_utils.py: Slack API 공통 호출과 오류 처리send_slack.py: 아침 인증글midnight_report.py: 자정 중간 점검check_slack.py: 다음날 최종 검사miss_tracker.py: 이름별 누적 벌금액 갱신과 중복 실행 확인miss_counts.v2.json: 2기 이름별 누적 벌금액state.v1.json: 1기 종료 시점 상태의 읽기 전용 보관본
2기에는 벌금 가중처벌과 면제권 횟수 제한이 없습니다. 누적 벌금액만 기록하며 Gemini 기반 알고리즘 마스터 선정은 하지 않습니다.