本文引用的文件
本指南面向希望为 Cosmoe Bot 进行扩展开发的工程师,覆盖以下主题:
Cosmoe Bot 采用按职责分层的组织方式:
调度器:基于 Cloudflare Cron 的定时任务,用于推送新活动通知等
graph TB
A["入口<br/>src/index.ts"] --> B["命令注册与对话<br/>src/command/index.ts"]
B --> C["命令处理器<br/>src/command/handlers/*.ts"]
C --> D["API 客户端<br/>src/client/cosmoe.ts"]
A --> E["定时任务<br/>src/scheduler/index.ts"]
A --> F["环境变量与类型<br/>worker-configuration.d.ts"]
图表来源
章节来源
章节来源
下图展示了从用户输入到 API 调用与 KV 存取的整体流程。
sequenceDiagram
participant U as "用户"
participant W as "Worker 入口<br/>src/index.ts"
participant B as "Bot/命令注册<br/>src/command/index.ts"
participant H as "命令处理器<br/>handlers/*.ts"
participant C as "API 客户端<br/>src/client/cosmoe.ts"
participant K as "KV 存储<br/>COSMOE_STORAGE/COSMOE_CREDENTIALS"
U->>W : "发送消息/回调"
W->>B : "webhookCallback 分发"
B->>H : "匹配命令/正则/回调键"
H->>K : "读取/写入对话状态/凭证"
H->>C : "调用 API 方法"
C-->>H : "返回统一结构"
H-->>U : "回复消息/内联键盘"
图表来源
设置命令菜单:在入口中一次性设置 Bot 命令列表
flowchart TD
A["setupCommands 启动"] --> B["安装 conversations 插件"]
B --> C["注册命令与回调"]
C --> D["/start /events /history /login /logout"]
C --> E["正则路由:/event_*/book_*/cancel_*"]
C --> F["回调查询:confirm_cancel_* / select_coupon_*"]
A --> G["设置命令菜单"]
图表来源
章节来源
数据持久化策略:KV 适配器负责序列化/反序列化,异常时记录日志并保持健壮性
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant CV as "对话处理器<br/>login.ts"
participant K as "KV 存储"
U->>B : "/login"
B->>CV : "enter('login')"
CV->>U : "提示输入用户名"
U->>CV : "用户名"
CV->>U : "提示输入密码"
U->>CV : "密码"
CV->>K : "写入凭证"
CV-->>U : "登录结果"
图表来源
章节来源
错误处理:统一返回结构包含 code/msg/data;在客户端内部抛出语义化错误或返回错误码
classDiagram
class CosmoeClient {
+getToken(username, password)
+setCredentials(userId, token)
+getCredentials()
+isAuthenticated()
+getEvents()
+getEventDetail(eventId)
+getProfile()
+getMyBookings()
+bookEvent(request)
+changePassword(...)
+getUserProfile()
+getAvailableCoupons(eventId)
+updatePaymentOrder(...)
+updateBookingNote(...)
+cancelBooking(bookingId)
+selfReschedule(...)
+selfTransfer(...)
+register(...)
}
图表来源
章节来源
章节来源
章节来源
KV 使用:存储最新事件 ID 与用户凭证
sequenceDiagram
participant S as "调度器<br/>src/scheduler/index.ts"
participant C as "API 客户端"
participant K as "KV 存储"
participant T as "Telegram Bot"
S->>C : "getEvents()"
C-->>S : "事件列表"
S->>K : "读取/更新 latestEventId"
loop 遍历新事件
S->>K : "列出已注册用户"
S->>T : "sendMessage(用户, 新活动通知)"
end
图表来源
章节来源
类型与环境:通过 wrangler 生成的类型声明与 Cloudflare Worker 环境对接
graph LR
P["package.json 依赖"] --> G["grammy"]
P --> GC["conversations"]
P --> KS["@grammyjs/storage-cloudflare"]
T["tsconfig.json 编译配置"] --> R["运行时类型/严格检查"]
W["worker-configuration.d.ts"] --> E["Env 类型注入"]
图表来源
章节来源
章节来源
通过统一的命令注册中心、KV 持久化的对话状态、以及统一封装的 API 客户端,Cosmoe Bot 提供了清晰的扩展路径。新增命令时遵循“注册—解析—调用—回复—异常”的闭环流程,并在处理器中完成 KV 与 API 的交互,即可快速实现新功能并与现有系统保持一致。
章节来源
章节来源
章节来源
章节来源