GitHub - johklo/moltbot: 카카오톡 PC 자동 응답 봇 - AI가 대신 답장해주는 카카오톡 봇 (GitHub Models API + kakaotalk-mcp) · GitHub
Skip to content
johkloPublic

About

카카오톡 PC 자동 응답 봇 - AI가 대신 답장해주는 카카오톡 봇 (GitHub Models API + kakaotalk-mcp)

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

카카오톡 자동 응답 봇 (KakaoTalk Auto Reply Bot)

Python 3.10+ Windows License: MIT

카카오톡 PC 채팅방을 모니터링하고, AI가 자동으로 답장해주는 봇입니다.

kakaotalk-mcp의 Win32 API를 활용하고, GitHub Models API로 자연스러운 응답을 생성합니다.

✨ 주요 기능

  • 🤖 AI 자동 응답 — 새 메시지를 감지하면 LLM이 자연스럽게 답장
  • 🎭 사람별 페르소나 — personas.json으로 상대방마다 말투/톤 설정
  • 🔄 백그라운드 모니터링 — 주기적 폴링으로 새 메시지 감지
  • 🛡️ 안전 장치 — 전송 전 재확인, 자기 메시지 무시, dry-run 모드
  • 🆓 무료 — GitHub Models API 사용 (GitHub 계정만 있으면 OK)

📋 요구사항

  • Windows 10/11
  • 카카오톡 PC 설치 및 로그인 상태
  • Python 3.10 이상
  • GitHub CLI (gh) 로그인 상태
  • kakaotalk-mcp 패키지

🚀 설치

# 1. 저장소 클론
git clone https://github.com/johklo/moltbot.git
cd moltbot

# 2. 의존성 설치
pip install kakaotalk-mcp requests

# 3. GitHub CLI 로그인 (이미 되어있으면 건너뛰기)
gh auth login

⚙️ 설정

personas.json

상대방별 말투와 톤을 설정합니다. 프로젝트 루트에 personas.json 파일을 생성하세요:

{
  "홍길동": {
    "persona": "친근한 동료. 반말+요체 섞어서. 유머 섞어서.",
    "my_name": "나의카톡이름"
  },
  "김부장님": {
    "persona": "회사 상사. 존댓말 사용. 정중하고 공손하게.",
    "my_name": "나의카톡이름"
  },
  "아내": {
    "persona": "아내와의 대화. 친근하고 다정하게. 반말 사용.",
    "my_name": "나의카톡이름"
  }
}
필드 설명
persona AI가 참고할 말투/성격 설명
my_name 카카오톡에서 표시되는 내 이름

💡 my_name을 설정하면 --my-name 인자를 생략할 수 있습니다.

📖 사용법

기본 실행

# personas.json에 설정된 채팅방
python kakao_auto_reply.py --room "홍길동"

# my_name 직접 지정
python kakao_auto_reply.py --room "홍길동" --my-name "나의카톡이름"

옵션

옵션 설명 기본값
--room 모니터링할 채팅방 이름 (필수) -
--my-name 내 카카오톡 표시 이름 personas.json에서 로드
--interval 폴링 주기 (초) 10
--dry-run 응답 생성만 하고 전송하지 않음 false

실행 예시

# 테스트 (전송 안 함)
python kakao_auto_reply.py --room "홍길동" --dry-run

# 5초마다 체크
python kakao_auto_reply.py --room "홍길동" --interval 5

# 실행 로그 예시
[16:23:11] ✅ 카카오톡 실행 확인
[16:23:11] 📌 채팅방: '홍길동'
[16:23:11] 👤 내 이름: '나의카톡이름'
[16:23:11] 🎭 페르소나: 친근한 동료. 반말+요체 섞어서.
[16:23:11] 🔑 GitHub 인증 완료
[16:23:12] 🔄 모니터링 시작 (주기: 10초)
────────────────────────────────────────
[16:24:22] 📩 [홍길동] 점심 뭐 먹을까
[16:24:24] 💬 답변: 오늘 국밥 어때요? ㅋㅋ
[16:24:25] ✅ 전송 완료

🏗️ 동작 원리

전체 흐름

┌──────────────┐    폴링     ┌──────────────┐
│  카카오톡 PC  │ ◄────────  │   moltbot    │
│   (Win32)    │            │              │
│              │  Ctrl+A/C  │  새 메시지?   │
│              │ ──────────►│      │        │
│              │            │      ▼        │
│              │  클립보드   │  fingerprint  │
│              │  붙여넣기   │   비교        │
│              │ ◄──────────│      │        │
└──────────────┘            │      ▼        │
                            │ ┌──────────┐  │
                            │ │ GitHub   │  │
                            │ │ Models   │  │
                            │ │ API      │  │
                            │ └──────────┘  │
                            └──────────────┘

상세 로직

1단계: 초기화

시작
 ├─ 카카오톡 PC 실행 확인 (Win32 FindWindow)
 ├─ 채팅방 창 검색 및 열기 (없으면 Ctrl+F로 검색)
 ├─ personas.json 로드 → 채팅방에 맞는 페르소나 선택
 ├─ GitHub 토큰 획득 (gh auth token)
 └─ 현재 대화의 fingerprint 저장 (기존 대화에 반응하지 않음)

2단계: 메시지 읽기 (폴링)

매 주기(기본 10초)마다 다음을 반복합니다:

  1. 카카오톡 창 활성화 — bring_window_to_front()로 채팅방을 앞으로 가져옴
  2. 클립보드 초기화 — 이전 클립보드 내용 제거
  3. 대화 전체 선택 & 복사 — Ctrl+A → Ctrl+C (Win32 keybd_event)
  4. 클립보드에서 텍스트 읽기 — win32clipboard.GetClipboardData()

읽어온 텍스트는 다음과 같은 형식입니다:

15 April 2026
[홍길동] [14:01] 점심 뭐 먹을까
[나] [14:02] 국밥 어때요?
[홍길동] [14:02] 좋아요!

3단계: 새 메시지 감지 (fingerprint 비교)

단순 해시 비교가 아닌 메시지별 fingerprint 추적 방식을 사용합니다:

fingerprint = MD5(발신자 + 시간 + 내용)
  • 마지막으로 처리한 메시지의 fingerprint를 저장
  • 새로 읽은 메시지 목록에서 해당 fingerprint 이후의 메시지만 추출
  • 내 메시지, 사진/동영상/파일은 자동 제외

이 방식의 장점:

  • 여러 메시지가 한꺼번에 와도 누락 없이 처리
  • 내 메시지에 자기 응답하는 루프 방지

4단계: LLM 응답 생성

새 메시지가 감지되면:

  1. 최근 15개 메시지를 LLM 대화 형식으로 변환
    • 내 메시지 → assistant role
    • 상대 메시지 → user role (발신자 이름 포함: [홍길동] 내용)
  2. personas.json의 페르소나를 시스템 프롬프트에 주입
  3. GitHub Models API (gpt-4o-mini) 호출
시스템 프롬프트:
  "너는 '나의카톡이름'이라는 사람이야. 카카오톡으로 대화 중이야.
   친근한 동료. 반말+요체 섞어서. 유머 섞어서.
   - 짧고 자연스럽게 대화해 (1-2문장)
   - 절대 AI임을 밝히지 마
   ..."

5단계: 전송 전 안전 확인

답변을 보내기 직전에 한 번 더 채팅방을 읽어서 확인합니다:

LLM 응답 생성 완료
 └─ 전송 전 재확인
     ├─ 새 메시지가 추가로 왔나? → 있으면 이번 답변 취소, 다음 주기에서 재처리
     └─ 없으면 → 전송

이렇게 하면 LLM이 응답을 생성하는 동안 상대가 추가 메시지를 보낸 경우, 맥락에 맞지 않는 답변이 전송되는 것을 방지합니다.

6단계: 메시지 전송

  • send_message_to_room() — 클립보드에 텍스트 복사 후 Ctrl+V → Enter
  • 전송 후 2초 대기하여 내 메시지가 채팅방에 반영되도록 함
  • fingerprint 갱신하여 내 메시지에 다시 반응하지 않도록 처리

⚠️ 주의사항

  • Windows 전용 — Win32 API 기반
  • 포그라운드 필요 — 메시지 읽기/전송 시 카카오톡 창이 잠시 앞으로 올라옴
  • 클립보드 사용 — 작업 중 시스템 클립보드가 변경됨
  • 1:1 채팅 전용 — 그룹 채팅에서는 정확도가 떨어질 수 있음
  • API 사용량 — 새 메시지가 감지될 때만 LLM API 호출

📁 프로젝트 구조

moltbot/
├── kakao_auto_reply.py    # 메인 스크립트
├── personas.json          # 사람별 페르소나 설정 (사용자 생성)
├── personas.example.json  # 페르소나 설정 예시
├── README.md
├── LICENSE
└── .gitignore

🔗 관련 프로젝트

📄 라이선스

MIT License

About

카카오톡 PC 자동 응답 봇 - AI가 대신 답장해주는 카카오톡 봇 (GitHub Models API + kakaotalk-mcp)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages