本文引用的文件
本文件聚焦于交互式命令的实现与设计,围绕以下命令展开:
文档将深入解释动态参数(正则表达式匹配与参数解析)、命令与用户交互的设计模式(分页/菜单/状态保持),并提供开发模板与用户体验优化建议。
该项目采用按功能模块划分的目录结构,命令注册集中在入口文件,各命令处理器位于独立文件中,底层通过客户端封装调用第三方 API。
graph TB
subgraph "命令层"
IDX["src/command/index.ts"]
H1["handlers/events.ts"]
H2["handlers/eventDetails.ts"]
H3["handlers/history.ts"]
H4["handlers/bookEvent.ts"]
H5["handlers/login.ts"]
H6["handlers/cancel.ts"]
H7["handlers/logout.ts"]
H8["handlers/start.ts"]
end
subgraph "客户端"
C1["src/client/cosmoe.ts"]
end
IDX --> H1
IDX --> H2
IDX --> H3
IDX --> H4
IDX --> H5
IDX --> H6
IDX --> H7
IDX --> H8
H1 --> C1
H2 --> C1
H3 --> C1
H4 --> C1
H5 --> C1
H6 --> C1
H7 --> C1
图表来源
章节来源
章节来源
整体采用“命令入口 + 处理器 + 客户端 + KV 存储”的分层架构。命令入口负责路由与上下文管理,处理器负责业务逻辑与用户交互,客户端封装 API 调用,KV 存储用于会话与凭证持久化。
graph TB
U["用户"]
B["Telegram Bot"]
C["命令入口<br/>src/command/index.ts"]
E["事件列表处理器<br/>events.ts"]
D["事件详情处理器<br/>eventDetails.ts"]
Y["历史处理器<br/>history.ts"]
BK["预约处理器<br/>bookEvent.ts"]
L["登录处理器<br/>login.ts"]
X["取消处理器<br/>cancel.ts"]
LOG["登出处理器<br/>logout.ts"]
CL["Cosmoe 客户端<br/>src/client/cosmoe.ts"]
KV["KV 存储<br/>COSMOE_STORAGE/COSMOE_CREDENTIALS"]
U --> B
B --> C
C --> E
C --> D
C --> Y
C --> BK
C --> L
C --> X
C --> LOG
E --> CL
D --> CL
Y --> CL
BK --> CL
L --> CL
X --> CL
LOG --> CL
C --> KV
L --> KV
Y --> KV
BK --> KV
X --> KV
LOG --> KV
图表来源
用户体验
使用 Markdown 格式增强可读性
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant H as "handleEventsCommand"
participant CL as "CosmoeClient"
U->>B : "/events"
B->>H : 调用处理器
H->>CL : 获取活动列表
CL-->>H : 返回结果
H->>U : 发送最近活动列表含 /event_{id} 链接
图表来源
章节来源
错误处理
详情接口失败时提示错误;异常时统一兜底
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant H as "handleEventDetails"
participant CL as "CosmoeClient"
U->>B : "/event_{id}"
B->>H : 解析 id 并调用处理器
H->>CL : 获取活动详情
CL-->>H : 返回详情含时间槽
H->>U : 发送活动详情与可预约入口
图表来源
章节来源
错误处理
无历史、鉴权失败、接口异常均给出明确提示
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant H as "handleHistoryCommand"
participant KV as "KV 存储"
participant CL as "CosmoeClient"
U->>B : "/history"
B->>H : 调用处理器
H->>KV : 读取用户凭证
KV-->>H : 返回凭证
H->>CL : 设置凭证并获取历史
CL-->>H : 返回历史
H->>U : 发送历史列表含可取消入口
图表来源
章节来源
最终预约
调用客户端执行预约,返回最终价格、预约编号等信息
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant H as "handleBookEvent"
participant KV as "KV 存储"
participant CL as "CosmoeClient"
U->>B : "/book_{event_id}_{slot_index}"
B->>H : 解析参数并调用处理器
H->>KV : 读取用户凭证
KV-->>H : 返回凭证
H->>CL : 设置凭证并获取活动详情
CL-->>H : 返回详情含时间槽
alt 多张优惠券
H->>U : 弹出优惠券选择键盘
U->>B : 回调选择优惠券
B->>H : 触发优惠券选择回调
else 单张/无优惠券
H->>CL : 执行预约
CL-->>H : 返回预约结果
end
H->>U : 发送预约成功/失败信息
图表来源
章节来源
错误处理
输入缺失、认证失败、KV 写入异常均有相应提示
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant C as "对话插件"
participant H as "handleInteractiveLogin"
participant CL as "CosmoeClient"
participant KV as "KV 存储"
U->>B : "/login"
B->>C : 进入 login 对话
C->>H : 触发对话处理器
H->>U : 请求用户名
U->>C : 输入用户名
H->>U : 请求密码
U->>C : 输入密码
H->>CL : 获取 token
CL-->>H : 返回 token
alt 成功
H->>KV : 写入凭证
KV-->>H : 成功
H->>U : 登录成功提示
else 失败
H->>U : 登录失败提示
end
图表来源
章节来源
回调处理
解析回调动作,读取凭证,调用取消接口,更新消息文本反馈结果
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant H1 as "handleCancelCommand"
participant H2 as "handleCancelConfirmation"
participant KV as "KV 存储"
participant CL as "CosmoeClient"
U->>B : "/cancel_{booking_id}"
B->>H1 : 解析参数并调用处理器
H1->>KV : 读取用户凭证
KV-->>H1 : 返回凭证
H1->>CL : 设置凭证并获取历史
CL-->>H1 : 返回历史
H1->>U : 发送取消确认键盘
U->>B : 点击“确认”
B->>H2 : 触发回调处理器
H2->>KV : 读取用户凭证
KV-->>H2 : 返回凭证
H2->>CL : 取消预约
CL-->>H2 : 返回结果
H2->>U : 更新消息为成功/失败
图表来源
章节来源
章节来源
章节来源
命令与回调
命令通过正则监听器接收动态参数;回调通过内联键盘触发,解析动作字符串
graph LR
P["@grammyjs/conversations"] --> IDX["src/command/index.ts"]
S["@grammyjs/storage-cloudflare"] --> IDX
IDX --> H1["events.ts"]
IDX --> H2["eventDetails.ts"]
IDX --> H3["history.ts"]
IDX --> H4["bookEvent.ts"]
IDX --> H5["login.ts"]
IDX --> H6["cancel.ts"]
IDX --> H7["logout.ts"]
H1 --> C["src/client/cosmoe.ts"]
H2 --> C
H3 --> C
H4 --> C
H5 --> C
H6 --> C
H7 --> C
图表来源
章节来源
章节来源
章节来源
该交互式命令体系通过清晰的命令路由、正则参数解析与回调交互,实现了从活动浏览、详情查看、预约下单到历史管理与取消的完整闭环。结合 KV 存储与对话插件,既保证了状态保持,也提升了用户体验。后续可在消息分页、批量操作、错误重试等方面进一步优化。
章节来源