网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

如何用400行代码打造极简版MoltBot,现名tele-code?

GG网络技术分享 2026-04-17 09:30 0


不堪入目。 装完openclaw以后 只要敲一条openclaw onboard --install-daemon启动向导,挑选免费模型,核心配置瞬间搞定。接着再点几下 Telegram 就能像一根遥控棒一样,指挥本地的 OpenCode AI 编程工具写代码、改 bug、甚至帮你写诗那个。400 行代码打造的极简版tele‑code 其实就是把这根遥控棒拆得只剩骨头,却还能精准打击目标。

一、 灵感突发:从咖啡店的“bug”到手机上的“指令”

大胆一点... 那天在街边吃炸鸡,我脑子里突然冒出一个念头:如果我能在手机上直接对本地 AI 发指令,那岂不是省去打开电脑、复制粘贴的所有麻烦?于是 我把 Telegram 当成键盘,把 OpenCode 当成“大脑”,两者之间只差一个轻量级桥接层——这就是tele‑code的雏形。

用 400 行核心代码打造一个极简的 MoltBot(OpenClaw),这货现在叫 tele-code

核心思路:Polling + SSE + Session Manager

Telegram Polling 收消息, 用 OpenCode SSE 收后来啊,中间用 Session Manager 把两头对应起来,这家伙...。

下面这段代码负责把超长消息分割成 Telegram 能接受的 4096 字以内:

export function splitMessage: string {
  if  return ;
  const messages: string = ;
  let remaining = text;
  while  {
    if  {
      messages.push;
      break;
    }
    let splitIndex = maxLength - 50; // 留点儿余地
    const lastNewline = remaining.lastIndexOf;
    if  splitIndex = lastNewline;
    messages.push + '

…');
    remaining = remaining.slice.trim;
  }
  return messages;
}

二、 项目结构——七个文件,四百行;别问为什么不是五百行,那是我偷懒的艺术。

目录大概长这样:

tele-code/
├── src/
│   ├── index.ts          # 程序入口
│   ├── config.ts         # 环境变量加载
│   ├── services/
│   │   ├── telegram.ts   # Telegraf 包装
│   │   ├── opencode.ts   # SDK + SSE
│   │   └── session.ts    # 会话映射
│   ├── handlers/
│   │   └── message.ts    # 消息分发逻辑
│   └── utils/
│       └── formatter.ts # 消息格式化/分割
├── .env                  # Bot Token、端口等
└── package.json          # 依赖清单

为什么只要四百行?

  • SSE 天生推送:不需要轮询,AI 每生成一段文字就立刻得到事件。
  • Polling 已经足够:Tegraf 的 long‑polling 延迟只有几百毫秒,在个人使用场景里根本不显眼。
  • 会话映射极简:用一个 Map 保存 {chatId → sessionId}无需数据库。

三、 坑爹细节 & 随机噪声

有一次我把模型切换指令写成了 /modleTelegram 那边直接返回“未知命令”。 没眼看。 我花了半小时才发现拼写错误——这就是所谓“人类因素”。

SSE 超时怎么办?

SSE 默认超时是30秒, 如果你的编译任务跑得太久,就会收到 "event: error"。解决办法很简单:在创建 SSE 客户端时加上 { timeout: 0 }。 脑子呢? 不过这样做会让进程一直占着内存,请务必配合 Node 的 .unref 用法。

限流策略——别让 Telegram 报429!

const EDIT_THROTTLE_MS = 1000;
function shouldThrottle {
  const now = Date.now;
  const last = throttleMap.get || 0;
  if  return true;
  throttleMap.set;
  return false;
}

每秒最多编辑一次消息, 这样既不会被限流,又能保持“打字”效果。配合前面提到的 #splitMessage, 完整实现大约四百行左右。

四、相关产品对比表

产品名称 是否开源 本地部署难度 Telegram 支持度 额外功能
MoltBot ✔ 是 ☆☆☆☆☇☇☇☇☇☇✔ 多模型切换 / ✘ 插件系统
tele‑code ✔ 是 ☆☆☇☇☇✘ 基础指令 / ✘ 高级交互 ✘ 暂无插件
LobeChat ✘ 否 ☆☆☆☇☇✘ 官方仅 Web ✘ 限制模型
KoboldCPP ✔ 是 ☆☇☇☇☇✘ 社区自行实现 ✘ 无 Telegram 集成
OpenClaw ✔ 是 Đ         
* ★ 表示难度越低越好;✭ 表示支持越强越好;✔ 为已实现功能;✘ 为未实现功能。

五、一步步把它跑起来

⚠️ 注意:本文所有命令均假设你已经装好了 Node.js和 pnpm。 绝了... 如果没有, 请自行.

拉取仓库 & 安装依赖

git clone https://github.com/yourname/tele-code.git
cd tele-code
pnpm i --production

配置 .env

BOT_TOKEN=YOUR_TELEGRAM_BOT_TOKEN
OPENCODE_HOST=127.0.0.1
OPENCODE_PORT=4096
* 如果你不知道 Bot Token 怎么来可以在 BotFar 那里随便建一个机器人,然后复制 token。

启动桥接服务 & 开始玩耍 🎉︎️️︎️︎️︎️︎️︎️︎️‍♀️‍♂️‍♀️‍♂️‍♀️‍♂️‍
pnpm start
// 此时你应该在终端看到 “✅ Bridge ready – listening on port …”。打开 Telegram,对你的机器人发送任意文字,比方说 “帮我把下面函数改成 async”。几秒钟后你会收到 OpenCode 的实时输出。


提交需求或反馈

Demand feedback