# Telegram Media Downloader 配置指南

> 本文档记录了在 macOS 上配置和运行 Telegram Media Downloader 的完整步骤。

---

## 目录

- [环境要求](#环境要求)
- [快速启动](#快速启动)
- [详细配置步骤](#详细配置步骤)
  - [1. 安装依赖](#1-安装依赖)
  - [2. 获取 Telegram API 密钥](#2-获取-telegram-api-密钥)
  - [3. 配置代理](#3-配置代理)
  - [4. 修改 Web 端口](#4-修改-web-端口)
  - [5. 首次登录认证](#5-首次登录认证)
  - [6. 配置下载任务](#6-配置下载任务)
  - [7. 配置 Bot（持续运行）](#7-配置-bot持续运行)
- [配置文件说明](#配置文件说明)
- [常用命令](#常用命令)
- [常见问题](#常见问题)
- [我的配置信息](#我的配置信息)

---

## 环境要求

- **操作系统**: macOS / Linux / Windows
- **Python**: 3.7 及以上
- **代理软件**: Clash / V2Ray 等（国内必需）
- **Telegram 账号**: 需要能正常登录

---

## 快速启动

如果已经配置好，直接运行：

```bash
cd /Users/gaotu/WebstormProjects/telegram_media_downloader-master
python3 media_downloader.py
```

访问 Web 界面：
- **下载进度**: http://localhost:5001
- **控制台**: http://localhost:5001/control

---

## 详细配置步骤

### 1. 安装依赖

```bash
# 进入项目目录
cd /Users/gaotu/WebstormProjects/telegram_media_downloader-master

# 安装依赖（macOS/Linux）
make install

# 或者直接用 pip（Windows）
pip3 install -r requirements.txt
```

### 2. 获取 Telegram API 密钥

1. 访问 https://my.telegram.org/apps
2. 使用 Telegram 账号登录,登录时需要注意，验证码不是发短信，是发送到软件里，需要到软件中的服务号查收。
3. 填写表单创建新应用（Platform 选 Desktop）
4. 获取 `api_id` 和 `api_hash`

> ⚠️ 注意：如果提示 "too many tries"，需要等待 1-2 小时再试。

### 3. 配置代理

由于国内无法直连 Telegram，需要配置代理。

编辑 `config.yaml`，添加代理配置：

```yaml
# Clash 代理配置
proxy:
  scheme: socks5
  hostname: 127.0.0.1
  port: 7891      # Clash SOCKS5 端口，根据实际情况修改
```

**常见代理端口**：

| 代理软件 | HTTP 端口 | SOCKS5 端口 |
|---------|----------|------------|
| Clash   | 7890     | 7891       |
| V2Ray   | 10809    | 10808      |
| Shadowsocks | -    | 1080       |

### 4. 修改 Web 端口

macOS 的 AirPlay Receiver 默认占用 5000 端口，需要修改：

```yaml
web_host: 127.0.0.1
web_port: 5001    # 改为其他端口
```

### 5. 首次登录认证

运行程序：

```bash
python3 media_downloader.py
```

首次运行会要求输入：

1. **手机号**：输入 Telegram 注册手机号（带国际区号，如 `+8615064240820`）
2. **确认**：输入 `y` 确认
3. **验证码**：查看 Telegram 客户端收到的验证码，输入

登录成功后会生成 `media_downloader.session` 文件，后续无需重复登录。

### 6. 配置下载任务

编辑 `config.yaml` 中的 `chat` 部分：

```yaml
chat:
- chat_id: happycat03              # 频道用户名或 ID
  last_read_message_id: 0          # 从头开始下载设为 0
  download_filter: message_date >= 2024-01-01 00:00:00  # 时间过滤
```

**获取频道 ID 的方法**：

1. **使用用户名**：直接填写 `@` 后面的部分，如 `happycat03`
2. **使用机器人**：发送频道链接给 [@username_to_id_bot](https://t.me/username_to_id_bot)
3. **Web Telegram**：从 URL 中获取

**时间过滤器示例**：

```yaml
# 下载 2024 年以后的
download_filter: message_date >= 2024-01-01 00:00:00

# 下载指定时间段
download_filter: message_date >= 2024-01-01 00:00:00 and message_date <= 2024-06-30 23:59:59

# 不设置过滤器（下载全部）
# 删除 download_filter 行即可
```

### 7. 配置 Bot（持续运行）

默认情况下，程序下载完成后会自动退出。配置 Bot 后程序会持续运行。

**创建 Bot**：

1. 在 Telegram 中打开 [@BotFather](https://t.me/BotFather)
2. 发送 `/newbot`
3. 按提示设置名称和用户名（用户名必须以 `bot` 结尾）
4. 获取 Bot Token

**添加到配置**：

```yaml
bot_token: 你的Bot_Token
```

配置后：
- 程序会持续运行
- 可以通过机器人发送命令下载
- Web 界面可以一直访问

---

## 配置文件说明

完整的 `config.yaml` 示例：

```yaml
# Telegram API 密钥
api_hash: your_api_hash
api_id: your_api_id

# Bot Token（可选，配置后程序持续运行）
bot_token: your_bot_token

# 下载任务配置
chat:
- chat_id: channel_username        # 频道用户名或 ID
  last_read_message_id: 0          # 上次读取位置，0 表示从头开始
  download_filter: message_date >= 2024-01-01 00:00:00  # 时间过滤

# 下载的媒体类型
media_types:
- audio
- photo
- video
- document
- voice
- video_note

# 文件格式过滤
file_formats:
  audio:
  - all
  document:
  - all
  video:
  - all

# 保存路径
save_path: /Users/gaotu/Downloads/telegram_downloads

# 文件路径前缀（子目录结构）
file_path_prefix:
- chat_title      # 频道名称
- media_datetime  # 媒体日期

# Web 界面配置
web_host: 127.0.0.1
web_port: 5001

# 代理配置
proxy:
  scheme: socks5
  hostname: 127.0.0.1
  port: 7891

# 语言
language: ZH  # ZH 中文, EN 英文
```

---

## 常用命令

```bash
# 启动下载程序
python3 media_downloader.py

# 停止程序
Ctrl + C

# 后台运行（可选）
nohup python3 media_downloader.py > download.log 2>&1 &

# 查看后台进程
ps aux | grep media_downloader

# 停止后台进程
pkill -f media_downloader
```

---

## 常见问题

### Q1: 连接超时（Connection timed out）

**原因**：代理未配置或代理软件未运行

**解决**：
1. 确保 Clash/V2Ray 正在运行
2. 检查 `config.yaml` 中的代理端口是否正确

### Q2: 端口 5000 被占用

**原因**：macOS AirPlay Receiver 占用

**解决**：修改 `web_port` 为其他端口（如 5001）

### Q3: 程序下载完就退出

**原因**：未配置 Bot Token

**解决**：创建 Telegram Bot 并配置 `bot_token`

### Q4: 大文件下载失败（Request timed out）

**原因**：网络不稳定，大文件容易超时

**解决**：
1. 重新运行程序，会自动重试失败的文件
2. 更换更稳定的代理节点

### Q5: API 密钥申请被限制

**原因**：尝试次数过多

**解决**：等待 1-2 小时后重试，或更换网络/IP

---

## 我的配置信息

> ⚠️ 以下是我的个人配置，请勿泄露给他人

| 配置项 | 值 |
|--------|-----|
| api_id | `35804872` |
| api_hash | `79872da654ba47a407ff758df43b342b` |
| bot_token | `8304994550:AAHrfD8iZy-g7eMvd5j_nUCWAVzkfpn-STk` |
| Bot 用户名 | [@ymxixibot](https://t.me/ymxixibot) |
| 代理端口 | `7891`（Clash SOCKS5） |
| Web 端口 | `5001` |
| 保存路径 | `/Users/gaotu/Downloads/telegram_downloads` |

---

## Web 界面说明

### 下载进度页面

地址：http://localhost:5001

- 查看正在下载的文件
- 查看已完成的下载
- 暂停/继续下载

### 控制台页面（自定义）

地址：http://localhost:5001/control

- 输入频道链接
- 设置下载时间范围
- 查看当前配置
- 查看下载状态

---

## 更新日志

- **2026-01-10**: 初次配置，成功下载 184 个无损音乐文件
- **2026-01-10**: 配置 Bot Token，实现程序持续运行
- **2026-01-10**: 添加自定义 Web 控制台页面

---

*文档创建于 2026-01-10*
