许多Telegram用户经常遇到这样的困扰:在多个群组或频道中看到重要文件(文档、图片、视频等),但手动下载保存既繁琐又容易遗漏。尤其是当文件量较大或需要跨设备同步时,逐个保存几乎不现实。市面上虽然有各种“自动转存机器人”,但要么需要付费,要么操作复杂,甚至存在隐私风险。本文将手把手教你如何安全、免费地搭建一个属于自己的Telegram自动转存机器人,实现群组文件自动备份到指定位置。
第一步:创建Telegram机器人并获取Token
具体操作说明:
在Telegram中搜索并打开 @BotFather,这是官方机器人创建工具。发送 /newbot指令,按提示为你的机器人命名(如“我的自动转存助手”),然后设置一个以 bot结尾的用户名(例如 MyAutoSaveBot)。创建成功后,BotFather会返回一个API Token,格式类似 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11,请务必复制并保存好这个Token。
注意事项/小提示:
- 机器人用户名必须唯一,如果提示已占用,尝试添加数字或下划线。
- Token是机器人的唯一凭证,不要分享给任何人,否则他人可控制你的机器人。
- 建议将Token保存在安全的地方,比如密码管理器中。
备用方案:
如果 @BotFather无法访问,可尝试使用第三方机器人创建工具(不推荐),或检查网络是否屏蔽了BotFather。通常更换代理节点即可解决。
第二步:将机器人拉入目标群组并赋予管理员权限
具体操作说明:
打开你想要自动转存文件的群组或频道,点击群组名称进入设置,选择 “添加成员”,搜索你的机器人用户名(如 @MyAutoSaveBot)并添加。添加后,在群组管理员设置中,将机器人提升为管理员,并确保勾选 “读取消息”权限(部分版本显示为“查看消息”或“读取聊天记录”)。这是机器人能监控并转发文件的前提。
注意事项/小提示:
- 机器人必须是管理员才能读取群组消息,普通成员无法获取文件。
- 如果群组有大量文件历史,机器人只能从成为管理员之后的消息开始监控,无法转存历史文件。
- 对于频道,同样需要将机器人添加为管理员,并开启“发布消息”权限(用于后续转存)。
备用方案:
如果无法将机器人添加为管理员(如你不是群组创建者),可以联系群组管理员协助操作。或者,你可以创建一个私有频道,将机器人设为主管,然后手动将需要转存的文件转发到该频道。
第三步:配置自动转存脚本(以Python为例)
具体操作说明:
你需要一台可以24小时运行的设备(如电脑、树莓派或云服务器),安装Python 3.7以上版本。创建一个新文件夹,例如 auto_save_bot,在其中新建一个 bot.py文件。使用以下代码框架(需安装 python-telegram-bot库,通过 pip install python-telegram-bot安装):
`python
from telegram import Update
from telegram.ext import Application, MessageHandler, filters
# 替换为你的Token
TOKEN = "你的机器人Token"
async def auto_save(update: Update, context):
# 获取消息中的文件(文档、图片、视频等)
file = update.message.document or update.message.photo or update.message.video
if file:
# 获取文件ID并下载到本地文件夹
file_id = file.file_id
new_file = await context.bot.get_file(file_id)
await new_file.download_to_drive(f"downloads/{file_id}_{file.file_name if hasattr(file, 'file_name') else 'media'}")
# 可选:在群组中回复确认消息
await update.message.reply_text(f"已自动保存文件:{file.file_name if hasattr(file, 'file_name') else '媒体文件'}")
def main():
app = Application.builder().token(TOKEN).build()
# 监听所有消息类型(可根据需要过滤)
app.add_handler(MessageHandler(filters.ALL, auto_save))
app.run_polling()
if __name__ == "__main__":
main()
`
运行脚本(python bot.py),机器人即开始监听所在群组的消息,自动下载文件到 downloads文件夹。
注意事项/小提示:
- 代码中的
filters.ALL会监听所有消息,包括文字。如需只保存文件,可改为filters.Document | filters.PHOTO | filters.VIDEO。 - 下载路径
downloads/需提前创建,否则会报错。 - 如果文件较大,下载可能耗时,建议添加超时处理或异步队列。
备用方案:
如果你不熟悉Python,可以使用现成的开源项目(如 TG-File-Stream-Bot或 Telegram-Auto-Save-Bot),在GitHub搜索后按README配置即可。或者使用低代码平台(如Node-RED)通过HTTP接口实现。
第四步:验证自动转存是否生效
具体操作说明:
在机器人所在的群组中发送一个文件(如PDF或图片),观察机器人是否在群组中回复“已自动保存”消息(如果代码中加入了回复)。同时,检查脚本运行目录下的 downloads文件夹,确认文件是否已成功下载。如果文件存在且能正常打开,说明转存成功。
注意事项/小提示:
- 首次测试建议使用小文件(小于20MB),避免因网络或权限问题导致失败。
- 如果机器人没有反应,检查控制台是否有报错信息(如Token错误、权限不足等)。
- 部分Telegram客户端可能延迟显示机器人消息,稍等几秒刷新群组。
备用方案:
如果文件未保存,尝试在群组中发送一条文字消息,看机器人是否回复(如果代码未过滤文字)。若文字消息有回复而文件无,说明文件处理逻辑有误,检查 update.message.document等属性是否正确获取。
第五步:处理常见问题与故障排除
具体操作说明:
运行中可能遇到以下问题:1)机器人断线重连失败:检查网络是否稳定,或使用 run_polling(drop_pending_updates=True)参数丢弃积压消息;2)文件保存失败:确认磁盘空间充足,且 downloads文件夹有写入权限;3)机器人被群组禁言:检查管理员权限是否被移除,重新添加并授权;4)重复保存文件:可在代码中添加文件ID去重逻辑,例如用集合记录已处理的 file_id。
注意事项/小提示:
- 如果使用云服务器,确保防火墙允许Telegram的IP范围(通常无需额外设置)。
- 定期清理
downloads文件夹,避免磁盘占满。 - 对于高频率群组,建议添加速率限制(如
filters.MessageFilter限制每秒处理数量)。
备用方案:
若问题无法解决,可尝试重启脚本,或使用 python-telegram-bot的 ApplicationBuilder中的 concurrent_updates参数限制并发数。对于复杂需求,建议查阅官方文档或社区Discord群组。
常见问题补充
Q1:机器人只能保存文件,不能保存文字或链接吗?
A:可以。修改代码中的 filters为 filters.TEXT即可保存文字消息到日志文件,或通过 update.message.text获取内容。但自动转存通常针对文件,文字消息建议手动处理。
Q2:如何转存到云盘(如Google Drive或OneDrive)?
A:在代码中集成对应云盘的API(如Google Drive API),下载文件后调用上传接口。也可以先下载到本地,再使用同步工具(如rclone)自动上传。
Q3:机器人会消耗我的Telegram账号流量吗?
A:不会。机器人是独立实体,流量消耗在机器人Token对应的服务器上。但你的服务器带宽和存储空间会受影响。
Q4:如何让机器人只转存特定类型的文件(如仅PDF)?
A:在代码中增加条件判断,例如 if update.message.document and update.message.document.mime_type == 'application/pdf'。
总结:
通过创建Telegram机器人并编写简单的Python脚本,你可以轻松实现群组文件的自动转存,彻底告别手动下载的繁琐,同时完全掌控自己的数据隐私。