mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
7.7 KiB
7.7 KiB
✅ Telegram Bot 完成总结
🎉 完成的功能
1. Core 层重构 ✅
位置: packages/cli/src/core/
- ✅ 存储抽象层 (
storage.ts): 定义TokenStorage接口 - ✅ 文件存储 (
storage/file.ts): CLI 使用的文件存储 - ✅ 上下文管理 (
context.ts): 支持多用户场景 - ✅ 客户端 (
client.ts): 同步/异步 API 支持 - ✅ 认证 (
auth.ts): 同步/异步登录、登出 - ✅ AI 对话 (
agent.ts): 同步/异步流式对话
2. Telegram Bot 实现 ✅
位置: packages/platform-telegram/
- ✅ Redis 存储 (
src/storage.ts): 多用户 token 管理 - ✅ 认证处理 (
src/auth.ts): 登录、登出、鉴权中间件 - ✅ Bot 实现 (
src/index.ts): 完整的 Telegram bot - ✅ 独立启动 (
src/bot.ts): 可独立运行
3. 多用户支持 ✅
Telegram User A (ID: 123456) → Token A → MemoHome User A
Telegram User B (ID: 789012) → Token B → MemoHome User B
- ✅ 每个 TG 用户独立登录
- ✅ 独立的 session 管理
- ✅ Token 自动过期(30天)
- ✅ 用户信息缓存
📁 项目结构
packages/
├── cli/ # CLI 和 Core 层
│ └── src/
│ ├── core/ # 核心功能(可复用)
│ │ ├── storage.ts # 存储接口
│ │ ├── storage/
│ │ │ ├── file.ts # 文件存储
│ │ │ └── index.ts
│ │ ├── context.ts # 上下文管理
│ │ ├── client.ts # API 客户端
│ │ ├── auth.ts # 认证逻辑
│ │ ├── agent.ts # AI 对话
│ │ └── index.ts # 统一导出
│ └── cli/ # CLI UI 层
│ └── commands/
│
└── platform-telegram/ # Telegram Bot
├── src/
│ ├── storage.ts # Redis 存储
│ ├── auth.ts # TG 认证处理
│ ├── index.ts # Bot 主逻辑
│ └── bot.ts # 启动入口
├── .env.example # 环境变量示例
├── README.md # 完整文档
├── SETUP.md # 设置指南
└── QUICKSTART.md # 快速开始
🚀 快速开始
1. 配置环境
cd packages/platform-telegram
cp .env.example .env
编辑 .env:
BOT_TOKEN=你的_bot_token
REDIS_URL=redis://localhost:6379
API_BASE_URL=http://localhost:7002
2. 启动服务
# Terminal 1: Redis
redis-server
# Terminal 2: MemoHome API
cd packages/api
pnpm start
# Terminal 3: Telegram Bot
cd packages/platform-telegram
pnpm start
3. 测试 Bot
在 Telegram 中:
/start
/login admin password
/chat 你好
🎯 核心特性
存储抽象
// 接口定义
interface TokenStorage {
getToken(userId?: string): Promise<string | null> | string | null
setToken(token: string, userId?: string): Promise<void> | void
clearToken(userId?: string): Promise<void> | void
// ...
}
// CLI 使用文件存储
const fileStorage = new FileTokenStorage()
// Telegram 使用 Redis 存储
const redisStorage = new TelegramRedisStorage()
多用户上下文
// 为不同用户创建独立上下文
const userAContext = createContext({
storage: redisStorage,
userId: 'telegram_123456' // User A
})
const userBContext = createContext({
storage: redisStorage,
userId: 'telegram_789012' // User B
})
// 使用各自的上下文
await loginAsync({ username: 'userA', password: 'passA' }, userAContext)
await loginAsync({ username: 'userB', password: 'passB' }, userBContext)
鉴权中间件
// 自动检查用户是否登录
bot.command('chat', requireAuth(storage), async (ctx) => {
// 只有登录用户才能执行
})
流式对话
await chatStreamAsync({
message: '讲个故事',
language: 'Chinese'
}, async (event) => {
if (event.type === 'text-delta') {
// 实时更新 Telegram 消息
}
}, userContext)
📊 Redis 存储结构
memohome:tg:token:123456 → "token_abc..." (30天过期)
memohome:tg:user:123456 → {
"username": "userA",
"role": "admin",
"userId": "user-id-xxx"
}
memohome:tg:token:789012 → "token_def..."
memohome:tg:user:789012 → {
"username": "userB",
"role": "user",
"userId": "user-id-yyy"
}
🔧 Bot 命令
| 命令 | 描述 | 需要登录 |
|---|---|---|
/start |
欢迎消息 | ❌ |
/help |
帮助信息 | ❌ |
/login <username> <password> |
登录 | ❌ |
/logout |
登出 | ✅ |
/whoami |
查看当前用户 | ✅ |
/chat <message> |
AI 对话 | ✅ |
| 直接发送消息 | AI 对话 | ✅ |
🎨 使用示例
CLI 使用(不受影响)
memohome auth login -u admin -p password
memohome agent chat "Hello"
Telegram Bot 使用
User A: /login adminA passwordA
Bot: ✅ Login successful! Username: adminA
User A: 今天天气怎么样?
Bot: 🤖 今天天气...
User B: /login userB passwordB
Bot: ✅ Login successful! Username: userB
User B: 讲个笑话
Bot: 🤖 好的,听好了...
编程使用
import { createContext, loginAsync, chatStreamAsync } from '@memohome/cli'
import { TelegramRedisStorage } from '@memohome/platform-telegram'
const storage = new TelegramRedisStorage()
const context = createContext({
storage,
userId: 'telegram_123456'
})
// 登录
await loginAsync({
username: 'user',
password: 'pass'
}, context)
// 对话
await chatStreamAsync({
message: 'Hello'
}, async (event) => {
console.log(event)
}, context)
📚 文档
- 📖 README.md - 完整功能文档
- 🚀 QUICKSTART.md - 5分钟快速开始
- 🛠 SETUP.md - 详细设置指南
- 🏗 REFACTORING_SUMMARY.md - 重构总结
- 📐 ARCHITECTURE.md - CLI 架构说明
✨ 亮点
- 完全分离: CLI UI 和业务逻辑完全解耦
- 可复用: Core 层可被任何平台使用
- 多存储: 支持文件、Redis 等多种存储
- 多用户: Telegram bot 支持多用户独立 session
- 类型安全: 完整的 TypeScript 类型
- 文档完善: README、SETUP、示例齐全
- 易扩展: 轻松添加新平台(Discord、Web 等)
🔮 未来扩展
基于这个架构,可以轻松添加:
- 🎮 Discord Bot
- 🌐 Web 应用
- 📱 移动应用
- 💬 微信 Bot
- 🤖 其他平台...
只需实现对应的 TokenStorage 和平台逻辑即可!
✅ 测试清单
- CLI 登录/登出功能正常
- CLI 对话功能正常
- Telegram bot 启动成功
- Telegram 多用户登录
- Telegram 独立 session
- Telegram 流式对话
- Redis 存储正常
- Token 过期管理
- 鉴权中间件工作
- 错误处理完善
- 类型检查通过
- 文档完整
🎊 总结
重构完成!现在你拥有:
- ✅ 清晰的架构: Core 层可复用,CLI 和 Platform 独立
- ✅ 多用户支持: Telegram bot 支持多个用户同时使用
- ✅ 灵活的存储: 文件存储(CLI)和 Redis 存储(Telegram)
- ✅ 完善的文档: 从快速开始到详细设置一应俱全
- ✅ 易于扩展: 添加新平台只需实现存储接口
现在可以:
- 继续使用 CLI(体验不变)
- 启动 Telegram bot 服务多个用户
- 在其他项目中复用 Core 功能
- 轻松添加新的平台支持
祝使用愉快!🚀