Administrator
发布于 2026-07-10 / 33 阅读
0
0

从零开始,我用Telegram Bot搭建了一个电子图书馆

缘起

事情的起因其实很简单。我在整理一批语言学习资料(PDF),文件体积比较大、数量也不少,每次国外的一些朋友想要我分享的时候都很麻烦——用网盘要上传、用邮件太大。我就在想,能不能让朋友直接在 Telegram 上搜书名就能下载?

于是这个叫 @Islamshubot 的 Telegram Bot 就诞生了。

技术选型

动手之前,我先列了一下需求:

• 用户发书名或关键词,Bot 返回对应的电子书文件

• 文件直接通过 Telegram 发送,不需要第三方存储

• 支持多卷册的丛书

• 支持阿拉伯语搜索

• 轻量、低成本、单机可运行

最终选定了以下技术栈:

Python 3 + python-telegram-bot:Telegram Bot 开发最成熟的 Python 库,异步支持好

TG群组文件保存:书籍文件直接存在TG服务器上

文件名索引:用文件名做关键字匹配,简单有效

•服务器: CloudCone VPS(便宜)

实现过程

第一步:Bot 注册与 Token

在 Telegram 里搜 @BotFather,发一条 /newbot,跟着向导设置名字和用户名。BotFather 会给一个 API Token,这是 Bot 的身份凭证,保管好。

第二步:Bot 程序骨架

核心逻辑其实很简单——收到用户消息 → 在文件名里搜索 → 返回匹配的文件。大概长这样:

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters
import os, glob
BOOKS_DIR = "/path/to/books"
async def search(update: Update, context):
    query = update.message.text.strip()
    files = []
    for f in glob.glob(os.path.join(BOOKS_DIR, "**/*"), recursive=True):
        if os.path.isfile(f) and query in os.path.basename(f):
            files.append(f)
    if files:
        for f in files[:5]:  # 最多返回5个
            with open(f, "rb") as fh:
                await update.message.reply_document(fh)
    else:
        await update.message.reply_text("没有找到匹配的书籍")
app = Application.builder().token("TOKEN").build()
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, search))
app.run_webhook()

第三步:入库方式

入库非常直接——直接用文件名作为文件名,把文件发给 Bot 就入库了。没有数据库,没有后台管理,文件名就是搜索关键词。用户搜「هداية」就能找到 الهداية 的 PDF。

第四步:部署与运行

在 服务器 上用 systemd 托管 Bot 进程,确保断开 SSH 后 Bot 仍在后台运行。同时配合定时心跳检查,确保 Bot 进程在线。

遇到的坑与解决

坑1:Telegram 文件大小限制

Telegram Bot API 默认限制文件上传不超过 50MB。我的 PDF 大部分在 10-30MB 之间,暂时够用。如果将来有更大的文件,可以考虑分割或使用 Telegram Premium 的 Bot(200MB 限制)。

坑2:阿拉伯语文件名编码

Linux 下用 ext4 文件系统,阿拉伯语文件名直接存 UTF-8 没问题。但终端 ls 显示可能乱码,不影响实际功能。搜索时用 Python 的 in 操作符做子串匹配,对阿拉伯语也完全兼容。

坑3:文件名搜索效率

目前书籍数量不多(3000多个文件),遍历式搜索够用。如果将来增长到数万个文件,考虑换成 SQLite 或 Elasticsearch 做全文索引。

一点心得

做这个 Bot 最大的感受是——有时候最简单的方案就是最好的方案。不用搞微服务、不需要数据库、不用上云存储。一个 Bot Token + 一个 Python 脚本 + 一个文件夹,就能解决一个实际的分享需求。朋友们在 Telegram 里搜书名就能拿到书,体验比网盘分享好太多了。

如果你也有类似的需求(文件分享、资料库查询),推荐试试这个思路。Telegram Bot 作为一个轻量级的"文件分发接口",真的很好用。

Bot :@Islamshubot

photo_2026-07-10_22-45-36.jpg

IMG_3333.jpeg


评论