Skip to content
Velo.x Logo
Go back

🚀 赛博写作流完全体:用 TG 机器人和 Cloudflare Workers 重构我的 Astro 博客

Edit page

还在手动 git add/commit/push?还在打开网页拖拽上传图片?大人,时代变了!今天分享我是如何利用 Serverless 魔法,把我的 Astro 博客打造成一个全自动化的“赛博生产力流水线”。

作为一名追求极致效率的极客,我无法忍受写博客时任何打断心流的摩擦力。传统的博客工作流(写 Markdown -> 打开图床网页传图 -> 复制链接 -> 回到编辑器粘贴 -> 手动 Git 推送)简直是灵感杀手。

于是,我决定利用 Cloudflare WorkersTelegram Bot,重构这一切。

我的目标很明确:双手不离键盘,在一个聊天窗口内完成图文创作和发布。


🛠️ 核心架构:极简且强大

我的这套“赛博流水线”由两个核心的 Telegram 机器人构成,它们背后都运行在 Cloudflare 强大的全球 Serverless 网络上:

  1. 🧠 写作助理机器人:负责接收我的灵感碎片,调用 AI 模型进行润色排版,自动生成带有 Frontmatter 的 Markdown 文件,并直接推送到 GitHub 仓库,触发 Cloudflare Pages 的自动构建。
  2. 📸 图床直传机器人:这是今天刚竣工的重头戏!负责解决最头疼的配图问题。

⚡️ 实战展示:只要 1 秒的极速图床体验

以前为了给文章配一张图,我要切出编辑器,打开浏览器,访问我的图床主站,拖拽上传,等待,然后复制链接。

现在?我只需要做一个动作:Ctrl+V。

我将我的“文件传输助手”改造成了 R2 直传机器人。我把截图粘贴给它,它背后的 Worker 会瞬间把图片二进制流塞进我的 Cloudflare R2“维洛克斯”存储桶,并利用 R2 的公共加速域名生成链接。

为了追求极致的体验,我甚至给代码加上了“豪华双显”功能。看看这性感的部署代码:

Worker 部署代码截图 👆 核心魔法:利用 Worker 接收 TG 图片流并直传 R2 存储桶

部署完成后,实际体验简直爽到飞起!机器人不仅会秒回一个方便写博客的 Markdown 代码块,Telegram 还会自动抓取链接生成一张超大的实时预览图,安全感拉满!

看看这丝滑的效果:

TG 机器人回复效果 👆 最终形态:发图即得 Markdown 源码,外带超大预览图

💻 附录:核心 Worker 源码

分享一下我打磨好的 R2 图床机器人的完整 Cloudflare Worker 代码。这段代码实现了“非图片消息静默”、“自动提取最高画质原图”以及“返回纯净版直连链接”的核心功能。

export default {
  async fetch(request, env) {
    // 1. 验证 POST 请求
    if (request.method !== "POST") return new Response("🚀 Velox 的 R2 图床极速通道已就绪!");

    let update;
    try {
      update = await request.json();
    } catch (e) {
      return new Response("OK");
    }

    // 2. 核心逻辑:如果没有收到消息,或者收到的不是图片,直接静默放行(不打扰当备忘录用)
    if (!update.message || !update.message.photo) {
      return new Response("OK");
    }

    const chatId = update.message.chat.id;
    // 获取 TG 压缩数组里最后一张(分辨率最高)的图片
    const photo = update.message.photo[update.message.photo.length - 1];
    const fileId = photo.file_id;

    try {
      // 3. 向 TG 索要真实下载路径
      const fileRes = await fetch(`https://api.telegram.org/bot${env.TG_BOT_TOKEN}/getFile?file_id=${fileId}`);
      const fileData = await fileRes.json();
      if (!fileData.ok) throw new Error("获取 TG 图片路径失败");
      const filePath = fileData.result.file_path;

      // 4. 下载图片二进制流
      const imgRes = await fetch(`https://api.telegram.org/file/bot${env.TG_BOT_TOKEN}/${filePath}`);
      const imgBuffer = await imgRes.arrayBuffer();

      // 5. 生成极客时间戳文件名
      const fileExt = filePath.split('.').pop() || 'png';
      const fileName = `blog-img-${Date.now()}.${fileExt}`;

      // 6. 暴力塞入 R2 维洛克斯网盘
      await env.MY_BUCKET.put(fileName, imgBuffer, {
        httpMetadata: { contentType: `image/${fileExt}` }
      });

      // ==========================================
      // ⚠️ 极其关键:下面这里换成你图床真实的加速域名
      const customDomain = "pub-65eb3861e8d64d24a3280e55bd221735.r2.dev"; 
      // ==========================================

      const rawUrl = `https://${customDomain}/${fileName}`;

      // 7. 发送极简纯净版回复给 TG
      await fetch(`https://api.telegram.org/bot${env.TG_BOT_TOKEN}/sendMessage`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          chat_id: chatId,
          text: `📸 **R2 直传成功!**\n\n🌐 **纯净链接 (长按或右键复制)**:\n${rawUrl}`,
          parse_mode: "Markdown"
        })
      });
      
    } catch (error) {
      await fetch(`https://api.telegram.org/bot${env.TG_BOT_TOKEN}/sendMessage`, {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          chat_id: chatId,
          text: `❌ 翻车了:${error.message}`
        })
      });
    }

    return new Response("OK");
  }
};

🎉 总结:进入“心流”写作状态

现在,我写这篇文章的体验是这样的:

一分钟后,你现在看到的这篇文章就自动上线了。

这就是 Serverless 时代给极客带来的终极自由。不需要维护服务器,不需要繁琐的操作,把一切重复劳动都交给机器人,而我们,只专注于创造价值本身。😎


💡 提示: > 本文首发于我的个人博客 Velo.x 的极客空间。我在那里存放了更完整的 从 GSC 瞬间收录到 Cloudflare 301 权重聚合系列教程,排版更精美,更新也更及时,欢迎来踩踩!🚀



Edit page
Share this post on:

Previous Post
🔥 拒绝吃灰!手搓 1000+ 行底层代码,开源这套地表最强的 VPS 全能管理装甲!
Next Post
🚀 赛博极客流水线:用 Cloudflare Worker + TG 机器人全自动发布 Astro 博客