前言

电报客户端只能在当前信息进行下载,并且不显示下载速度和具体的下载进度。用telegram_media_downloader部署机器人可以自动下载,并显示网速和下载进度,还能通过rclone 自动上传至网盘

创建机器人

获取api密钥

  1. 访问 telegram官网 并使用您的 Telegram 帐户登录。

  2. 填写表格以注册新的 Telegram 应用程序。(填写 App titleShort name 即可)

  3. 完成! API 密钥由两部分组成:api_idapi_hash

机器人

https://t.me/BotFather 对话:

  1. 输入 /start
  2. 输入 /newbot
  3. 输入 你想创建的机器人名称
  4. 保存BotToken

用python3运行

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/tangyoha/telegram_media_downloader.git
cd telegram_media_downloader

# 创建虚拟环境
python -m venv ./telegram
source ./telegram/bin/activate
pip3 install -r requirements.txt
# 运行
python3 media_downloader.py
# 注意首次运行需要输入电话号码和密码

配置

配置文件(config.yaml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
api_hash: 
api_id:
bot_token:
web_host: 0.0.0.0
web_port: 5000
proxy:
scheme: http
hostname: 127.0.0.1
port: 7890
file_formats:
audio:
- all
document:
- all
video:
- all
file_name_prefix:
- file_name

file_path_prefix:
-
# - chat_title
# - media_datetime
media_types:
- audio
- photo
- video
- document
- voice
- video_note
save_path: /home/username/Downloads/media
upload_drive:
enable_upload_file: true
remote_dir: alist:/
rclone_path: /usr/bin/rclone
language: ZH
  • api_hash - 你从电报应用程序获得的 api_hash

  • api_id - 您从电报应用程序获得的 api_id

  • bot_token - 你的机器人凭证

  • chat

    - 多频道

    • chat_id - 您要下载媒体的聊天/频道的 ID。你从上述步骤中得到的。
    • download_filter - 下载过滤器, 查阅 如何使用过滤器
    • last_read_message_id -如果这是您第一次阅读频道,请将其设置为“0”,或者如果您已经使用此脚本下载媒体,将有一些数字,这些数字会在脚本成功执行后自动更新。不要改变。
  • chat_id - 您要下载媒体的聊天/频道的 ID。你从上述步骤中得到的。

  • last_read_message_id - 如果这是您第一次阅读频道,请将其设置为“0”,或者如果您已经使用此脚本下载媒体,将有一些数字,这些数字会在脚本成功执行后自动更新。不要改变。

  • ids_to_retry - 保持原样。下载器脚本使用来跟踪所有跳过的下载,以便在下次执行脚本时可以下载。

  • media_types - 要下载的媒体类型,您可以更新要下载的媒体类型,可以是一种或任何可用类型。

  • file_formats - 为支持的媒体类型(“音频”、“文档”和“视频”)下载的文件类型。默认格式为“all”,下载所有文件。

  • save_path - 你想存储下载文件的根目录

  • file_path_prefix

    - 存储文件子文件夹,列表的顺序不定,可以随机组合

    • chat_title - 聊天频道或者群组标题, 如果找不到标题则为配置文件中的chat_id
    • media_datetime - 资源的发布时间
    • media_type - 资源类型,类型查阅 media_types
  • upload_drive

    - 您可以将文件上传到云盘

    • enable_upload_file - [必填]启用上传文件,默认为false
    • remote_dir - [必填]你上传的地方,如alist:/,其中alist为创建rclone远程时所填的名字,确保rclone ls alist: 命令不报错
    • upload_adapter - [必填]上传文件适配器,可以为rclone,aligo。如果为rclone,则支持rclone所有支持上传的服务器,如果为aligo,则支持上传阿里云盘
    • rclone_path,如果配置upload_adapterrclone则为必填,rclone的可执行目录,查阅 如何使用rclone
    • before_upload_file_zip - 上传前压缩文件,默认为false
    • after_upload_file_delete - 上传成功后删除文件,默认为false
  • file_name_prefix

    - 自定义文件名称,使用和

    file_path_prefix

    一样

    • message_id - 消息id
    • file_name - 文件名称(可能为空)
    • caption - 消息的标题(可能为空)
  • file_name_prefix_split - 自定义文件名称分割符号,默认为-

  • max_download_task - 最大任务下载任务个数,默认为5个。

  • hide_file_name - 是否隐藏web界面文件名称,默认false

  • web_host - web界面地址

  • web_port - web界面端口

  • language - 应用语言,默认为英文(EN),可选ZH(中文),RU,UA

  • web_login_secret - 网页登录密码,如果不配置则访问网页不需要登录

  • log_level - 默认日志等级,请参阅 logging._nameToLevel

  • forward_limit - 限制每分钟转发次数,默认为33,默认请不要修改该参数

  • allowed_user_ids - 允许哪些人使用机器人,默认登录账号可以使用,带@的名称请加单引号

  • date_format - 支持自定义配置file_path_prefix中media_datetime的格式,具体格式查看 python-datetime

  • enable_download_txt 启用下载txt文件,默认false

默认配置

module/cloud_drive.py 修改默认配置

1
2
3
4
5
6
7
8
9
10
11
def __init__(
self,
enable_upload_file: bool = False,
before_upload_file_zip: bool = False,
after_upload_file_delete: bool = False,
rclone_path: str = os.path.join(
os.path.abspath("."), "rclone", f"rclone{platform.get_exe_ext()}"
),
remote_dir: str = "",
upload_adapter: str = "rclone",
):