프로젝트 개요

techinpark/lottery-bot 오픈소스 프로젝트를 기반으로 제작했습니다. 원본 프로젝트의 자동 구매·알림 구조를 활용하되, 수동/혼합 번호 선택, Slack·Discord 듀얼 채널 알림, 연금복권 선택적 구매 등의 기능을 추가했습니다.

매주 토요일 로또를 사러 편의점에 가는 번거로움을 없애기 위한 자동화 봇으로, 동행복권 사이트 계정에 예치금만 충전해두면 GitHub Actions가 매주 자동으로 로또와 연금복권을 구매하고 당첨 결과를 알림으로 전달합니다.

Python 3.11GitHub ActionsBeautifulSoupPyCryptodomeSlack/Discord Webhook

프로젝트 구조

lottery-bot/
├── controller.py        # CLI 진입점 (buy/check)
├── auth.py              # RSA 암호화 로그인 모듈
├── lotto645.py          # 로또 6/45 구매/당첨확인
├── win720.py            # 연금복권 720+ 구매/당첨확인
├── notification.py      # Slack/Discord 웹훅 알림
├── HttpClient.py        # HTTP 세션 싱글톤
├── requirements.txt     # 의존성 목록
└── .github/workflows/
    ├── buy.yml          # 매주 토요일 자동 구매
    └── check.yml        # 매주 일요일 당첨 확인

auth.py

동행복권 RSA 공개키 기반 로그인 모듈. 로그인 페이지에서 RSA modulus/exponent를 추출하고, PyCryptodome으로 아이디와 비밀번호를 암호화하여 인증합니다.

lotto645.py / win720.py

로또 6/45와 연금복권 720+ 구매 및 당첨 확인 모듈. 자동/수동/혼합 3가지 번호 선택 모드를 지원하며, BeautifulSoup으로 회차·잔액·당첨 결과를 파싱합니다.

notification.py

Slack과 Discord 웹훅을 자동 감지하여 알림을 전송합니다. 구매 결과(번호·잔액)와 당첨 결과(등수·금액)를 포맷팅된 메시지로 발송합니다.

주요 기능

RSA 암호화 로그인

동행복권 사이트의 RSA 공개키를 런타임에 추출하여 아이디와 비밀번호를 PKCS#1 v1.5로 암호화합니다. 2024년 이후 변경된 보안 방식에 대응합니다.

3가지 구매 모드

자동(AUTO), 수동(MANUAL), 혼합(MIXED) 모드를 지원합니다. 혼합 모드에서는 고정 번호와 자동 번호를 조합하여 원하는 전략으로 구매할 수 있습니다.

당첨 자동 확인

매주 일요일 크론으로 로또와 연금복권 당첨 결과를 자동 조회합니다. 당첨 시 등수와 금액, 미당첨 시에도 결과를 알림으로 전달합니다.

Slack / Discord 알림

웹훅 URL에서 Slack과 Discord를 자동 감지하여 각 플랫폼에 맞는 페이로드로 메시지를 전송합니다. 두 채널 동시 알림도 지원합니다.

GitHub Actions 스케줄링

매주 토요일 09:00(KST) 자동 구매, 일요일 10:00(KST) 당첨 확인. 서버 비용 없이 GitHub Actions 크론으로 운영하며, 수동 실행(workflow_dispatch)도 지원합니다.

실행 흐름

01
RSA 로그인

동행복권 로그인 페이지에서 RSA 공개키 추출 후 암호화 인증

02
회차·잔액 확인

현재 판매 회차와 예치금 잔액을 조회하여 구매 가능 여부 확인

03
번호 선택

모드에 따라 자동/수동/혼합 번호 생성 및 유효성 검증

04
구매 요청

동행복권 API에 구매 요청 전송, 응답 JSON으로 성공 여부 확인

05
결과 알림

구매 번호와 잔액을 Slack/Discord 웹훅으로 포맷팅하여 전송

댓글

불러오는 중...