本文引用的文件
本指南面向首次接触 Cosmoe Bot 的开发者,帮助你在本地快速完成环境搭建与首次运行。你将学到:
Cosmoe Bot 是一个基于 Cloudflare Workers 的 Telegram 机器人,采用 TypeScript 开发,并通过 Wrangler 进行本地开发与部署。核心目录与文件如下:
类型声明:worker-configuration.d.ts(由 wrangler 生成)
graph TB
subgraph "根目录"
Pkg["package.json"]
Wrangler["wrangler.jsonc"]
TSConf["tsconfig.json"]
DevVars[".dev.vars"]
Vitest["vitest.config.mts"]
TestEnv["test/env.d.ts"]
Types["worker-configuration.d.ts"]
end
subgraph "源码 src/"
Entry["src/index.ts"]
Cmd["src/command/index.ts"]
Handlers["src/command/handlers/*.ts"]
Scheduler["src/scheduler/index.ts"]
Client["src/client/cosmoe.ts"]
end
Pkg --> Wrangler
Wrangler --> Entry
Entry --> Cmd
Entry --> Scheduler
Cmd --> Handlers
Entry --> Client
Types --> Entry
图表来源
章节来源
章节来源
下图展示了本地开发与运行时的关键交互:本地通过 wrangler dev 启动 Worker,接收 Telegram Webhook 请求;Worker 初始化 grammY Bot 并注册命令;命令执行时可访问 KV 与 Cosmoe API;同时 Worker 在计划时间触发调度逻辑,向用户发送通知。
sequenceDiagram
participant TG as "Telegram"
participant CF as "Cloudflare Workers"
participant Bot as "grammY Bot"
participant Cmd as "命令系统"
participant Sched as "调度器"
participant KV as "KV 命名空间"
participant API as "Cosmoe 服务端"
TG->>CF : "Webhook 请求"
CF->>Bot : "初始化 Bot 与命令"
Bot->>Cmd : "分发命令/回调"
Cmd->>KV : "读取/写入对话状态/凭证"
Cmd->>API : "调用 Cosmoe API"
API-->>Cmd : "返回结果"
Cmd-->>TG : "回复消息"
CF->>Sched : "定时触发"
Sched->>API : "拉取活动列表"
API-->>Sched : "返回活动"
Sched->>KV : "读取/更新最新活动 ID"
Sched-->>TG : "向已注册用户推送通知"
图表来源
章节来源
章节来源
章节来源
章节来源
flowchart TD
Start(["用户发送 /login"]) --> EnterConv["进入登录对话"]
EnterConv --> AskUser["提示输入用户名"]
AskUser --> WaitUser["等待用户输入"]
WaitUser --> AskPass["提示输入密码"]
AskPass --> WaitPass["等待用户输入"]
WaitPass --> CallAPI["调用 Cosmoe API 获取 Token"]
CallAPI --> CheckRes{"认证成功?"}
CheckRes --> |是| SaveCreds["以 Telegram 用户 ID 为键保存凭证到 KV"]
SaveCreds --> ReplyOK["回复登录成功"]
CheckRes --> |否| ReplyFail["回复失败原因"]
ReplyOK --> End(["结束"])
ReplyFail --> End
图表来源
flowchart TD
Cron(["定时触发"]) --> LoadLatest["读取最新活动 ID"]
LoadLatest --> FetchEvents["调用 Cosmoe API 获取活动列表"]
FetchEvents --> FilterNew{"过滤新活动"}
FilterNew --> |有| ListUsers["遍历已注册用户"]
FilterNew --> |无| End(["结束"])
ListUsers --> SendMsg["向每个用户发送通知"]
SendMsg --> UpdateID["更新最新活动 ID"]
UpdateID --> End
图表来源
开发依赖
typescript:类型支持与编译
graph LR
Entry["src/index.ts"] --> Gram["grammY"]
Entry --> Conv["@grammyjs/conversations"]
Entry --> KVStore["@grammyjs/storage-cloudflare"]
Entry --> Client["src/client/cosmoe.ts"]
Entry --> Cmd["src/command/index.ts"]
Cmd --> Handlers["src/command/handlers/*.ts"]
Entry --> Sched["src/scheduler/index.ts"]
Wrangler["wrangler.jsonc"] --> Entry
Pkg["package.json"] --> Wrangler
Pkg --> Types["worker-configuration.d.ts"]
图表来源
章节来源
章节来源
通过以上步骤,你可以在本地快速搭建 Cosmoe Bot 的开发环境,并完成首次运行与基础功能测试。后续可根据业务需要扩展命令、完善调度逻辑与错误处理,并在 Cloudflare 上完成正式部署。
章节来源