docs: 更新 README 和游戏引擎

- 更新 README 中的 Twitch 配置说明
- 更新游戏引擎相关代码
This commit is contained in:
empty
2026-01-01 19:23:21 +08:00
parent 0cd7c9c4d9
commit 1f29010de6
2 changed files with 88 additions and 9 deletions

View File

@@ -8,13 +8,14 @@
the-island/
├── backend/ # Python FastAPI 后端服务
│ └── app/
│ ├── main.py # 应用入口
│ ├── server.py # WebSocket 服务器
│ ├── engine.py # 游戏引擎核心逻辑
│ ├── models.py # SQLAlchemy 数据模型
│ ├── schemas.py # Pydantic 消息模式
│ ├── llm.py # LLM 集成 (对话生成)
── database.py # 数据库配置
│ ├── main.py # 应用入口
│ ├── server.py # WebSocket 服务器
│ ├── engine.py # 游戏引擎核心逻辑
│ ├── models.py # SQLAlchemy 数据模型
│ ├── schemas.py # Pydantic 消息模式
│ ├── llm.py # LLM 集成 (对话生成)
── twitch_service.py # Twitch 聊天机器人
│ └── database.py # 数据库配置
├── frontend/ # Web 调试客户端
│ ├── app.js # JavaScript 客户端
│ └── debug_client.html # 调试页面
@@ -61,7 +62,8 @@ the-island/
- **WebSocket** - 实时双向通信
- **SQLAlchemy** - ORM 数据持久化
- **SQLite** - 轻量级数据库
- **Anthropic Claude** - LLM 对话生成
- **LiteLLM** - LLM 提供商支持
- **TwitchIO** - Twitch 聊天集成
### Unity 客户端
- **Unity 6 LTS** (6000.3.2f1)
@@ -151,13 +153,61 @@ SOCIAL_INTERACTION # 角色间社交
AUTO_REVIVE # 自动复活 (休闲模式)
```
## Twitch 直播集成
游戏支持连接到 Twitch 直播聊天室,观众可以通过发送弹幕来控制游戏。
### 获取 Twitch Token
**方法一Twitch Token Generator (推荐用于测试)**
1. 访问 https://twitchtokengenerator.com/
2. 选择 "Bot Chat Token"
3. 使用你的 Twitch 账号授权
4. 复制 "Access Token" (以 `oauth:` 开头)
**方法二Twitch Developer Console (生产环境)**
1. 访问 https://dev.twitch.tv/console/apps
2. 创建新应用,类型选择 "Chat Bot"
3. 设置 OAuth 重定向 URL: `http://localhost:3000`
4. 使用 OAuth 授权码流程获取 Token
5. 需要的权限范围: `chat:read`, `chat:edit`, `bits:read`
### Bits 打赏转换
观众在直播间使用 Bits 打赏时,系统会自动将 Bits 转换为游戏内金币:
- **转换比率**: 1 Bit = 1 Gold
- Unity 客户端会收到 `gift_effect` 事件用于显示特效
## 环境变量
创建 `.env` 文件:
`backend/.env` 文件中配置:
```env
# LLM 配置 (选择一种)
ANTHROPIC_API_KEY=your_api_key_here
# 或
OPENAI_API_KEY=your_api_key_here
LLM_MODEL=gpt-3.5-turbo
# Twitch 配置 (可选)
TWITCH_TOKEN=oauth:your_access_token_here
TWITCH_CHANNEL_NAME=your_channel_name
TWITCH_COMMAND_PREFIX=!
```
### 必需变量
| 变量 | 说明 |
|------|------|
| `LLM_MODEL` | LLM 模型名称 |
| `ANTHROPIC_API_KEY``OPENAI_API_KEY` | LLM API 密钥 |
### Twitch 变量 (可选)
| 变量 | 说明 |
|------|------|
| `TWITCH_TOKEN` | OAuth Token (必须以 `oauth:` 开头) |
| `TWITCH_CHANNEL_NAME` | 要加入的频道名称 |
| `TWITCH_COMMAND_PREFIX` | 命令前缀 (默认 `!`) |
## 开发说明
### 添加新命令

View File

@@ -942,3 +942,32 @@ class GameEngine:
"""Stop the game engine."""
self._running = False
logger.info("Game engine stopping...")
async def process_command(self, user: str, text: str) -> None:
"""Process a command from Twitch chat."""
# Use the existing process_comment method to handle commands
await self.process_comment(user, text)
async def process_bits(self, user: str, amount: int) -> None:
"""Process Twitch bits and convert to game gold."""
# 1 Bit = 1 Gold conversion rate
gold_added = amount
with get_db_session() as db:
user_obj = self._get_or_create_user(db, user)
user_obj.gold += gold_added
await self._broadcast_event(EventType.USER_UPDATE, {
"user": user,
"gold": user_obj.gold,
"message": f"{user} received {gold_added} gold from {amount} bits!"
})
# Also broadcast a special bits event for UI effects
await self._broadcast_event("bits_received", {
"user": user,
"bits": amount,
"gold": gold_added
})
logger.info(f"Processed bits: {user} -> {amount} bits -> {gold_added} gold")