# 사례: 텔레그램 "자료 수집 유저봇" 만들기

# 사례: 텔레그램 "자료 수집 유저봇" 만들기

> 비개발자가 AI 코딩 도구의 도움을 받아, 여러 텔레그램 대화방·채널의 글을

> 한 곳에 모아주는 개인용 봇을 처음부터 끝까지 만들어 본 기록입니다.

> (등장하는 계정·번호·방 이름·경로 등은 모두 예시로 익명화했습니다.)

---

## 1. 무엇을 만들고 싶었나

- 내가 참여 중인 **여러 대화방·채널** 중 원하는 곳을 골라,

- 그곳의 글을 **하나의 전용 방**에 모아서 정리하고,

- 모으는 시점은 **내가 명령할 때마다** "직전 명령 이후 ~ 지금"까지,

- 맨 처음 명령은 **현재 시각 기준 1시간 전**부터.

한 줄 요약: **"흩어진 방들의 자료를 명령 한 번으로 내 방에 모아두기."**

---

## 2. 첫 갈림길 — "일반 봇"으로는 안 된다

가장 먼저 부딪힌 핵심 제약:

- **BotFather로 만드는 일반 봇(Bot API)** 은

- 자기가 **관리자로 추가되지 않은 방**의 글을 못 읽고,

- 자기가 추가되기 **이전의 과거 메시지**를 아예 못 가져온다.

즉 "내가 멤버인 방들의 과거 내역을 모은다"는 목표와 맞지 않았다.

**해결책 = 유저봇(Userbot).**

- 라이브러리 **Telethon** + **본인 텔레그램 계정**으로 로그인(MTProto).

- 그러면 "내가 속한 방"의 과거 내역을 **내 권한 그대로** 읽을 수 있다.

- 로그인에 필요한 api_id / api_hashmy.telegram.org 에서 무료 발급.

> 교훈: "텔레그램 봇 = 파이썬/BotFather" 라는 고정관념과 달리,

> **목적에 따라 '유저봇'이라는 다른 길**이 필요할 수 있다.

---

## 3. 요구사항 확정

| 항목 | 선택 |

|------|------|

| 방식 | 유저봇 (Telethon + 본인 계정) |

| 수집 대상 | 텍스트 + 사진/영상/파일 + 링크(URL 별도 모음) |

| 저장 위치 | 전용 비공개 그룹(= 명령을 입력하는 방) |

| 실행 환경 | 개인 PC (Windows) |

---

## 4. 계정 정지를 피하기 위한 설계

유저봇은 **과한 자동화가 스팸으로 탐지**되면 일시 제한(FloodWait)이나

정지로 이어질 수 있다. 그래서 "사람처럼 천천히" 동작하도록 설계에 반영했다.

- **요청 사이 간격 + 랜덤 지터** — 기계처럼 연속 호출하지 않음

- **전달은 작은 묶음(25건)으로 나눠** 묶음마다 휴식

- **FloodWait 자동 준수** — 제한이 걸리면 시키는 만큼 기다렸다 이어감

- **1회 처리량 상한**(소스당 기본 500건) — 초과분은 다음 명령에서 **무손실**로 이어받기

- **실제 데스크톱 클라이언트처럼** 기기/앱 정보 지정

- **엔티티 캐시**로 불필요한 반복 조회 제거

또한 "직전 이후"를 **소스별 마지막 메시지 id**로 추적해,

여러 방을 등록해도 각자 정확히 빠진 부분만 가져오고 **중복·누락이 없게** 했다.

---

## 5. 설치 여정 (실제로 겪은 순서)

1. **Python 설치 문제**

- 처음엔 PATH에 잡히는 게 가짜 Python(스토어 스텁) 이라 pip 이 없었다.

- 정식 Python(python.org / winget)을 설치해 해결.

- **PATH 갱신** = "PowerShell 창을 닫고 새로 열기" 만으로 끝.

- 검증: python --version, python -m pip --version 둘 다 정상 출력.

2. **패키지 설치**

- pip install -r requirements.txt → telethon 등 설치 완료.

3. **API 키 발급 (`my.telegram.org`)**

- 사이트가 느려 ERR_CONNECTION_TIMED_OUT 발생.

→ 재시도 / 다른 네트워크(모바일 핫스팟) / VPN 으로 우회 가능.

- 전화번호는 **국제 형식**(`+82` + 앞 0 제거)으로 입력.

- 앱 생성 후 **App api_id / api_hash** 두 값을 확보.

- 두 값은 **본인 .env 파일에만** 입력(타인·채팅창에 노출 금지).

4. **첫 로그인**

- python bot.py → 전화번호 → 인증코드 → (2단계 인증 시) 비밀번호.

- **비밀번호 입력칸은 화면에 글자가 안 보이는 게 정상**(보안).

- 텔레그램이 보낸 **"새 기기 로그인 확인"** 알림에는 **"네, 맞습니다"** 로 승인.

- 세션이 *.session 파일로 저장돼, 이후엔 재로그인 불필요.

---

## 6. 사용 흐름

봇이 실행된 상태에서, 전용 방에 명령을 입력한다.

```

/here ← 이 방을 수집·명령 방으로 지정 (최초 1회)

/dialogs <검색어> ← 모을 방의 id 찾기 (이름 일부로 검색)

/add -1001234567890 ← 소스 등록 (마이너스 포함)

/sources ← 등록 확인

/collect ← 1시간 전부터(이후엔 직전 이후) 모으기

```

설정(수집 방·소스·마지막 수집 시점)은 state.json 에 저장돼

**봇을 껐다 켜도 그대로 유지**된다.

---

## 7. 사용 중 알게 된 점들

- **`/collect` 는 소스 방에 흔적을 남기지 않는다.** 조용히 읽어오기만 하므로

소스 방의 "읽음 표시"가 바뀌거나 알림이 가지 않는다.

- **봇이 곧 내 계정**이라, 봇의 모든 동작은 "나"로 표시되지만

그 동작은 **내 수집 방 안에서만** 일어난다.

- **`/dialogs` 목록은 최근 활동순으로 일부만** 보여준다(개수 제한).

조용한 방은 뒤로 밀릴 뿐 사라진 게 아니며,

**한 번 등록해두면 활동이 적어도 /collect 때 정상 수집**된다.

- 봇은 **PowerShell 창이 켜져 있는 동안만** 명령을 받는다.

꺼져 있던 동안의 메시지도, 다시 켜고 /collect 하면 빠짐없이 가져온다.

---

## 8. 비용/키 정리

| 키 | 용도 | 현재 단계 |

|----|------|-----------|

| api_id / api_hash | 텔레그램 로그인 | **필요 (발급 완료)** |

| Claude API 키(AI) | 메시지 요약 | **아직 불필요** |

지금까지의 "수집·정리"는 **AI 키 없이, 추가 비용 없이** 동작한다.

---

## 9. 다음 단계 (구상)

현재는 "여러 방 → 한 방에 모으기" 단계.

최종 목표는 **"대화방·채널별로 구분 + 자료 요약해서 보기."**

```

[지금] 여러 소스 → 한 방에 통째로 모음

[다음] 여러 소스 → 소스별 '토픽'으로 구분 정리 (AI 키 불필요)

[최종] 여러 소스 → 소스별 + AI가 핵심 요약까지 (Claude API 키 필요)

```

- **소스별 구분**: 텔레그램 "토픽" 기능을 쓰면 소스마다 탭처럼 분리 가능.

- **AI 요약**: 모은 메시지를 LLM에 보내 "핵심 N줄 + 관련 링크"로 압축.

이 단계에서 처음으로 AI API 키와 사용량 과금이 생긴다.

---

## 10. 회고

- **비개발자도** AI 코딩 도구의 단계별 안내를 따라

"환경 설치 → 키 발급 → 로그인 → 실사용"까지 완주할 수 있었다.

- 가장 중요한 분기점은 코드가 아니라 **"일반 봇이 아니라 유저봇"** 이라는

**구조적 판단**이었다.

- 자동화는 **'할 수 있다'와 '안전하게 한다'가 다르다.**

계정 보호(속도 제한·상한·FloodWait 준수)를 처음부터 설계에 넣은 것이 핵심.

---

본 문서는 학습/공유용 사례 기록이며, 등장하는 계정·번호·경로·방 이름은 모두 익명 예시입니다.

1
2개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.