本文引用的文件
本文件聚焦于活动管理相关命令的实现与扩展,重点解析以下命令:
同时,文档阐述活动数据的缓存策略、API 调用优化与错误处理机制,并提供活动搜索、过滤与个性化推荐的扩展开发建议。
项目采用按功能模块划分的目录组织方式,命令入口集中于命令索引文件,各命令处理器位于独立文件中,客户端封装统一的 API 客户端。
graph TB
subgraph "入口与配置"
IDX["src/index.ts<br/>Bot 初始化与命令注册"]
CMDIDX["src/command/index.ts<br/>命令注册与会话配置"]
end
subgraph "命令处理器"
EVT["src/command/handlers/events.ts<br/>/events 列表"]
DET["src/command/handlers/eventDetails.ts<br/>/event_{id} 详情"]
BOOK["src/command/handlers/bookEvent.ts<br/>/book_* 预约与优惠券"]
HIST["src/command/handlers/history.ts<br/>/history 历史"]
CANCEL["src/command/handlers/cancel.ts<br/>/cancel_* 取消"]
LOGIN["src/command/handlers/login.ts<br/>/login 交互式登录"]
end
subgraph "客户端"
CLIENT["src/client/cosmoe.ts<br/>CosmoeClient 封装"]
end
IDX --> CMDIDX
CMDIDX --> EVT
CMDIDX --> DET
CMDIDX --> BOOK
CMDIDX --> HIST
CMDIDX --> CANCEL
CMDIDX --> LOGIN
EVT --> CLIENT
DET --> CLIENT
BOOK --> CLIENT
HIST --> CLIENT
CANCEL --> CLIENT
LOGIN --> CLIENT
图表来源
章节来源
章节来源
下图展示了从用户输入到 API 调用与响应处理的整体流程,以及关键组件之间的依赖关系。
sequenceDiagram
participant U as "用户"
participant B as "Bot(grammy)"
participant C as "命令处理器"
participant K as "KV 存储"
participant API as "CosmoeClient(API)"
U->>B : "/events"
B->>C : "handleEventsCommand"
C->>API : "getEvents()"
API-->>C : "返回活动列表"
C-->>U : "Markdown 格式的活动列表"
U->>B : "/event_{id}"
B->>C : "handleEventDetails"
C->>API : "getEventDetail(id)"
API-->>C : "返回活动详情"
C-->>U : "Markdown 格式的详情(含图片、时间安排、预约链接)"
U->>B : "/book_{event_id}_{slot_index}"
B->>C : "handleBookEvent"
C->>K : "读取用户凭据"
K-->>C : "返回凭据(JSON)"
C->>API : "getEventDetail(id)"
API-->>C : "返回活动详情"
C->>API : "bookEvent(含可选优惠券)"
API-->>C : "返回预约结果"
C-->>U : "预约成功/失败消息"
图表来源
错误处理
异常捕获后回复“获取摄影活动时出错,请稍后再试”。
flowchart TD
Start(["进入 /events"]) --> CallAPI["调用 getEvents()"]
CallAPI --> RespOK{"返回 code==200 且有数据?"}
RespOK -- 否 --> NoEvents["回复: 当前没有摄影活动"]
RespOK -- 是 --> SliceTop10["取前 10 条活动"]
SliceTop10 --> BuildMsg["构建 Markdown 消息"]
BuildMsg --> Reply["发送消息"]
NoEvents --> End(["结束"])
Reply --> End
图表来源
章节来源
错误处理
API 非 200 或异常时,回复错误消息并记录日志。
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant H as "eventDetails 处理器"
participant API as "CosmoeClient"
U->>B : "/event_{id}"
B->>H : "handleEventDetails"
H->>API : "getEventDetail(id)"
API-->>H : "返回活动详情"
H->>H : "计算是否可预约(按北京时间比较)"
H->>H : "按 range 排序时间段"
H-->>U : "Markdown 格式详情(含图片与预约链接)"
图表来源
章节来源
错误处理
异常捕获后回复“处理预约请求时出错,请稍后再试”。
sequenceDiagram
participant U as "用户"
participant B as "Bot"
participant HB as "handleBookEvent"
participant HK as "handleCouponSelection"
participant API as "CosmoeClient"
participant KV as "KV 存储"
U->>B : "/book_{event_id}_{slot_index}"
B->>HB : "处理预约请求"
HB->>KV : "读取用户凭据"
KV-->>HB : "返回凭据(JSON)"
HB->>API : "getEventDetail(event_id)"
API-->>HB : "返回活动详情"
HB->>HB : "校验索引与剩余容量"
alt 多个优惠券
HB-->>U : "内联键盘选择优惠券"
U->>B : "回调 : 选择优惠券"
B->>HK : "handleCouponSelection"
HK->>API : "getEventDetail(event_id)"
API-->>HK : "返回活动详情"
HK->>API : "bookEvent(含优惠券)"
API-->>HK : "返回预约结果"
HK-->>U : "更新消息并回复结果"
else 单个/无优惠券
HB->>API : "bookEvent(可选优惠券)"
API-->>HB : "返回预约结果"
HB-->>U : "回复预约结果"
end
图表来源
章节来源
章节来源
章节来源
章节来源
入口依赖
Bot 初始化与命令注册集中在入口文件,命令索引文件负责会话与回调注册。
graph LR
EVT["events.ts"] --> CLI["cosmoe.ts:getEvents"]
DET["eventDetails.ts"] --> CLI
BOOK["bookEvent.ts"] --> CLI
HIST["history.ts"] --> CLI
CANCEL["cancel.ts"] --> CLI
LOGIN["login.ts"] --> CLI
BOOK --> KV["KV 存储(COSMOE_CREDENTIALS)"]
HIST --> KV
CANCEL --> KV
LOGIN --> KV
CMDIDX["command/index.ts"] --> EVT
CMDIDX --> DET
CMDIDX --> BOOK
CMDIDX --> HIST
CMDIDX --> CANCEL
CMDIDX --> LOGIN
图表来源
章节来源
[本节为通用性能建议,不直接分析具体文件,故无章节来源]
章节来源
本项目围绕活动管理构建了完整的命令体系,覆盖活动浏览、详情查看、预约、历史与取消等核心流程。当前实现简洁可靠,具备良好的错误处理与用户体验。为进一步增强系统能力,可在现有基础上引入缓存、搜索过滤与个性化推荐等扩展功能。
[本节为总结性内容,不直接分析具体文件,故无章节来源]
章节来源
章节来源
章节来源
章节来源