多人实时聊天 + 投票揪 AI 的社交推理网页游戏。
UI 使用 blora-design,登录对接 Bloret PassPort,数据全部落在 PostgreSQL,后端 Node.js。
- PassPort 登录(开发可用 Mock 登录)
- 创建私人房(邀请码)或 公开匹配
- 开局后混入 1+ 名 AI 玩家(身份隐藏)
- 每轮:讨论 → 投票 → 出局揭晓
- 人类揪出全部 AI 则胜;AI 人数压过人类或撑满最大轮数则 AI 胜
| 层 | 技术 |
|---|---|
| 前端 | Vanilla JS SPA + Blora Design |
| 后端 | Express + Socket.IO |
| 数据库 | PostgreSQL + Prisma |
| 登录 | Bloret PassPort OAuth(/app/oauth + /app/verify) |
| AI | OpenAI 兼容 API(config.json → openai) |
| 配置 | config.json(无 .env) |
# 示例:本地 PostgreSQL
createuser aiguess -P # 密码 aiguess
createdb -O aiguess ai_guesscp config.example.json config.json
# 编辑 databaseUrl、sessionSecret、passport、openai 等config.json 已加入 .gitignore,勿提交密钥。仓库提供 config.example.json 作模板。
npm install
npm run db:push
npm run dev示例配置默认开启:
authMock: true:无需 PassPort,大厅点「开发 Mock 登录」aiMock: true:无 LLM Key 时用规则假 AI 发言/投票
- 在 PassPort 注册应用,回调:
{publicUrl}/api/auth/callback - 权限建议:
user:name、user:head(可选user:email、user:tags) - 在
config.json中设置:
{
"authMock": false,
"passport": {
"baseUrl": "https://passport.bloret.net",
"appId": "YOUR_APP_ID",
"appSecret": "YOUR_APP_SECRET",
"redirectUri": "https://your.domain/api/auth/callback"
}
}{
"aiMock": false,
"openai": {
"baseURL": "https://api.x.ai/v1",
"apiKey": "xai-...",
"model": "grok-4.5"
}
}任意 OpenAI 兼容端点均可切换。
| 字段 | 说明 |
|---|---|
port / publicUrl |
监听端口与对外 URL |
databaseUrl |
PostgreSQL 连接串(也会注入给 Prisma CLI) |
sessionSecret |
Session 签名密钥 |
nodeEnv |
development | production(影响 cookie secure 等) |
authMock / aiMock |
开发开关 |
passport.* |
Bloret PassPort OAuth |
openai.* |
LLM |
defaults.* |
默认房间规则(人数、时长等) |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/auth/login |
跳转 PassPort |
| GET | /api/auth/callback |
OAuth 回调 |
| GET | /api/auth/mock?user=alice |
Mock 登录(仅 authMock) |
| GET | /api/auth/me |
当前用户 |
| POST | /api/rooms |
创建房间 |
| POST | /api/rooms/:code/join |
加入 |
| POST | /api/rooms/:code/start |
房主开局 |
| POST | /api/match/enqueue |
公开匹配 |
| GET | /health |
健康检查 |
Socket.IO(需登录 cookie):room:subscribe、chat:send、vote:cast 等。
页面右上角使用 Blora 内置 配色选择器 与 明暗切换,偏好写入 localStorage。
config.example.json 配置模板
config.json 本地配置(不入库)
src/ 服务端(auth / game / ai / routes / realtime)
public/ 前端 SPA
prisma/ 数据模型
blora-design/ UI 子模块
scripts/run-prisma.js 从 config.json 注入 DATABASE_URL 后跑 Prisma
应用代码以仓库为准;blora-design 为 Apache-2.0。