# mm Event事件脚本编码

编写mm_os框架Event的事件脚本。App级用 `module.exports = { _init, main }`，Plugin级用 `exports.main = main`（与API脚本一致）。触发关键词：main.js、事件脚本、编码规范。

## 执行步骤

### 步骤0：获取运行路径
使用 `get_run_path` 工具获取当前程序运行根目录。

### 步骤1：读取相关常识知识
使用 `read_knowledge knowledge_name='mm_event_system'` — 两种导出方式、五阶段返回值约定、Event委托API模式

### 步骤2：读取工作提示词
使用 `read_work work_name='script_mm_event'`

### 步骤3：确定导出方式
- App 级：`module.exports = { async _init() {...}, async main(ctx, db) {...} }`
- Plugin 级：`exports.main = main`（与 API 脚本风格一致）

### 步骤4：编写事件处理函数
使用 `write_text` 编写事件脚本。核心模式：通过 `$.admin.api().run(ctx, db)` 委托给 API 管理器。

### 步骤5：添加错误处理
使用 try-catch 包裹处理逻辑，返回 `$.ret.error()` 或非 null 值中断请求。

### 步骤6：控制事件流程
根据处理结果决定是否继续执行后续事件（返回 null 继续，返回非 null 中断）。

## 输出成果
1. main.js（或 index.js/before.js/after.js）事件脚本

## 失败处理
- 若事件处理异常，记录日志并决定是否中断流程
- 若上下文对象不可用，检查事件阶段配置

## 禁止行为
- ❌ 禁止在事件脚本中执行长时间操作
- ❌ 禁止事件脚本修改核心请求数据
- ❌ 禁止跳过 `get_run_path` 直接操作文件