erfanghorbanee/Telegram-File-Downloader

GitHub: erfanghorbanee/Telegram-File-Downloader

从 Telegram 频道、群组、私聊中批量下载并按类型过滤文件的 Python 命令行工具。

Stars: 31 | Forks: 6

# Telegram-File-Downloader [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) 一个用于从 Telegram 实体(频道、群组、聊天或收藏夹)下载文件的 Python 脚本。它支持按文件类型(例如图片、PDF)进行过滤。 ## 目录 - [Telegram-File-Downloader](#telegram-file-downloader) - [目录](#table-of-contents) - [功能](#features) - [前置条件](#prerequisites) - [获取 Telegram API 凭证的步骤](#steps-to-get-telegram-api-credentials) - [设置 .env 文件](#setting-up-the-env-file) - [用法](#usage) - [列出所有可访问的对话框](#list-all-accessible-dialogs) - [下载文件](#download-files) - [安全说明](#security-notes) - [常见问题](#faq) - [什么是 Telegram Entity?](#what-is-a-telegram-entity) - [如何找到私有频道或群组的 ID?](#how-do-i-find-the-id-of-a-private-channel-or-group) - [我可以使用 Bot Token 代替手机号码吗?](#can-i-use-a-bot-token-instead-of-my-phone-number) - [支持哪些文件格式?](#what-file-formats-are-supported) - [贡献](#contributing) ## 功能 - 从频道、群组、私聊或收藏夹下载文件。 - 按文件类型(例如图片、PDF、视频)过滤下载。 - 将文件保存到指定目录。 - 列出你有权访问的所有频道、群组和聊天。 - 通过环境变量轻松设置,实现安全的凭证管理。 ## 前置条件 1. 你的系统上已安装 Python 3.12 或更高版本。 2. 已安装 `telethon` 库。你可以使用以下命令安装所有必需的库: pip3 install -r requirements.txt 3. 一个 Telegram 账号或 Bot Token。 ### 获取 Telegram API 凭证的步骤 要使用此脚本,你需要从 Telegram 获取 **API ID** 和 **API Hash**。请按照以下步骤操作: 1. 打开浏览器并访问 [Telegram 的 My Apps 页面](https://my.telegram.org/apps)。 2. 使用你的 Telegram 账号凭证登录。 3. 点击 **Create New Application**。 4. 填写所需详细信息。 5. 创建应用程序后,你将看到你的 **API ID** 和 **API Hash**。复制这些值。 ### 设置 .env 文件 为了安全地存储你的凭证: 1. 在项目目录中,创建一个名为 `.env` 的文件。 2. 在文件中添加以下行: TELEGRAM_API_ID=your_api_id TELEGRAM_API_HASH=your_api_hash 将 `your_api_id` 和 `your_api_hash` 替换为从 Telegram 获取的实际值。 ## 用法 ### 列出所有可访问的对话框 要查看你有权访问的所有频道、群组和聊天: ``` python main.py --list ``` 这将显示一个包含以下内容的表格: - **ID**:实体的数字标识符 - **Type**:实体的类型(Channel (public/private)、User、Chat 等) - **Name**:显示名称 - **Username**:公开用户名(如果有) ### 下载文件 **基本语法:** ``` python main.py --format --output --limit ``` **示例:** ``` # 从公开频道下载 python main.py @channel_name --format images --output ./downloads --limit 100 # 从 Saved Messages 下载 python main.py me --format videos --output ./downloads --limit 100 # 使用 ID 从私有频道、私有群组或用户聊天下载 python main.py -1001234567891 --format images --output ./downloads --limit 100 # 下载特定文件类型 (pdf) python main.py @channel_name --format pdf --output ./downloads --limit 0 # 下载所有媒体类型(无过滤) python main.py @channel_name --output ./downloads --limit 0 ``` **参数:** - ``:要下载内容的实体。可以是: - 公开频道用户名:`@channel_name` 或 `channel_name` - 实体 ID:`-1001234567891`(使用 `--list` 查找 ID) - 收藏夹:`me` 或 `self` - `--format` 或 `-f`:按文件类型类别或特定扩展名过滤。 - **类别:** `images`、`documents`、`videos`、`audios`、`archives` - **特定扩展名:** `pdf`、`jpg`、`png`、`mp4`、`zip` 等。 - 如果省略,则下载所有媒体类型。 - `--output` 或 `-o`:保存下载文件的目录。默认为当前目录。 - `--limit` 或 `-l`:要获取的最大消息数量。使用 `0` 获取**所有消息**。默认为 100。 **注意:** 你可以在代码的 `FILE_CATEGORIES` 字典中自定义每个类别支持的扩展名。 **注意:** `--limit` 参数指定要检查的消息数量,而不是要下载的文件数量。例如,`--format pdf --limit 10` 将检查最近的 10 条消息,并下载其中找到的所有 PDF。 ## 安全说明 - 避免分享 .env 文件。 - 避免分享 `session_name.session` 文件,因为它包含加密数据,可能被滥用以访问你的账号。 ## 常见问题 ### 什么是 Telegram Entity? Telethon 库广泛使用了“entities”的概念。Entity 指的是 API 在响应某些方法(例如 GetUsersRequest)时可能返回的任何 User、Chat 或 Channel 对象。 **了解更多:** [Telethon Entities 文档](https://docs.telethon.dev/en/stable/concepts/entities.html) ### 如何找到私有频道或群组的 ID? 使用 `--list` 命令查看所有可访问的对话框及其 ID: ``` python main.py --list ``` **注意:** 你必须是频道/群组的成员或与用户存在聊天记录才能下载文件。 ### 我可以使用 Bot Token 代替手机号码吗? 不可以。Telegram Bot 拥有受限的 API 访问权限,无法使用此脚本所需的方法 (`iter_messages`) 从频道检索消息历史记录。你必须使用用户账号(手机号码认证)才能使此脚本正常工作。 ### 支持哪些文件格式? 你可以按类别或特定扩展名进行过滤: **类别:** `images`、`documents`、`videos`、`audios`、`archives` **特定扩展名:** `pdf`、`jpg`、`png`、`mp4`、`mp3`、`zip` 等。 ## 贡献 如果你有建议或发现问题,请提交 issue 或 pull request。欢迎所有贡献。
标签:BeEF, PDF下载, Python, Telegram, Telethon, 二进制发布, 即时通讯, 图片下载, 媒体过滤, 开源工具, 数字取证, 数据归档, 数据获取, 文件下载, 无后门, 爬虫, 群组管理, 自动化脚本, 视频下载, 资源采集, 逆向工具, 频道监控