「img-mom | 图片老妈」Telegram 多图床图片上传机器人

前言

本人写博客的时候,会将自己的图片上传到 BackblazeB2 中,但每次上传图片到 BackblazeB2 都需要打开浏览器并重新登陆,然后找到对应的 bucket,再上传,操作非常繁琐。我也不乐忠于在电脑中安装各种 CLI 以及客户端软件(因为我只是上传下图片并获取外链)。考虑到我的电脑一般开机都会打开 Telegram, Wechat, Discord, 所以在新年放假期间,写了一个 Telegram Bot 来简化我的图片上传流程。

项目介绍

img-mom | 图片老妈, Telegram 图片上传机器人,轻松上传图片到指定图床并获取外链地址。

特性

  • 基于 Cloudflare Workers 运行时构建, 轻量使用完全免费
  • 支持多种图床(目前只支持 Telegram/Cloudfalre R2/Backblaze B2 )
  • 快速部署。使用 Wrangler 可快速实现自部署

使用方式

  • 将图片通过私聊发送给 Bot, Bot 默认将只回复对应的 Telegram 图床链接
  • 发送 /settings 指令,可以指定额外的图床,设置完成后,将图片通过私聊发送给 Bot, Bot 将回复你指定的额外图床链接
  • 可使用 https://t.me/img_mom_bot,进行在线体验 (注意:为了防止恶意使用,体验 Bot 只会返回 Telegram 图床链接)
    demo

自部署

前置条件

  • 该项目使用 NodeJS + TypeScript 开发,需要你的本地环境安装 NodeJS (推荐 NodeJS 20.11.0 以上版本)
  • 该项目最终会部署并运行在 Cloudflare Workers 上,所以需要你拥有一个 Cloudflare 账户。具体可去 Cloudflare 官网注册
  • 该项目是 Telegram 机器人的服务端,所以需要你创建一个 Telegram 机器人。具体如何创建见 Telegram 官方文档 https://core.telegram.org/bots/features#creating-a-new-bot

部署

  1. 克隆该项目

    1
    2
    [email protected]:beilunyang/img-mom.git
    cd img-mom
  2. 安装项目依赖

    1
    npm install
  3. 创建 wrangler 配置文件

    1
    cp wrangler.example.toml wrangler.toml
  4. 编辑新创建的 wrangler.toml 文件

  5. 当编辑完成后,运行

    1
    npm run deploy

    等待项目编译完成并自动部署到 Cloudflare Workers

  6. 浏览器打开 https://<域名>/setup, 完成必要的 Webhook 初始化

Wrangler.toml 待配置项说明

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
37
38
39
40
41
42
43
44
45
46
47
# 你的 Cloudflare 账户ID
# 必填
account_id = "<string>"

[vars]
# 填写你创建的 Telegram Bot Token
# 必填
TG_BOT_TOKEN = "<string>"
# 长度为 1-256 字符,字符集为 A-Z,a-z,0-9,_,- 的字符串,用于防止 Webhook 接口被除当前Telegram Bot以外的应用恶意调用
# 非必填,但强烈推荐填写
TG_WEBHOOK_SECRET_TOKEN = "<string>"
# Telegram Bot 的所有者用户名
# 必填
TG_BOT_OWNER_USERNAME = "<string>"
# 是否允许非 Owner 用户使用 Telegram 图床 (注意:即使设置为 true, 非 Owner 用户也不能使用 CloudflareR2/BackblazeB2 图床)
# 非必填
TG_BOT_ALLOW_ANYONE = "<boolean>"

# Cloudflare R2 自定义域名
# 启用 Cloudflare R2 图床时,必填
R2_CUSTOM_DOMAIN = "<string>"
# Backblaze B2 keyID
# 启用 Backblaze B2 图床时,必填
B2_KEY_ID = "<string>"
# Backblaze B2 secretKey
# 启用 Backblaze B2 图床时,必填
B2_SECRET_KEY = "<string>"
# Backblaze B2 Endpoint
# 启用 Backblaze B2 图床时,必填
B2_ENDPOINT = "<string>"
# Backblaze B2 Bucket名
# 启用 Backblaze B2 图床时,必填
B2_BUCKET = "<string>"
# Backblaze B2 自定义域名
# 非必填
B2_CUSTOM_DOMAIN = "<string>"

[[kv_namespaces]]
# kv ID, 详见 [https://developers.cloudflare.com/workers/runtime-apis/kv](https://developers.cloudflare.com/workers/runtime-apis/kv)
# 必填
id = "<string>"

[[r2_buckets]]
# r2 Bucket名,详见 [https://developers.cloudflare.com/r2/api/workers/workers-api-usage/](https://developers.cloudflare.com/r2/api/workers/workers-api-usage/)
# 必填
bucket_name = "<string>"

提示:

结语

该项目代码已开源,Github 地址 https://github.com/beilunyang/img-mom ,欢迎各位 Fork, Star, Issue, PR. 最后也祝各位新年快乐🎉