Skip to content

Repository files navigation

Bloret AI Guess · 谁是 AI

多人实时聊天 + 投票揪 AI 的社交推理网页游戏。
UI 使用 blora-design,登录对接 Bloret PassPort,数据全部落在 PostgreSQL,后端 Node.js

玩法

  1. PassPort 登录(开发可用 Mock 登录)
  2. 创建私人房(邀请码)或 公开匹配
  3. 开局后混入 1+ 名 AI 玩家(身份隐藏)
  4. 每轮:讨论 → 投票 → 出局揭晓
  5. 人类揪出全部 AI 则胜;AI 人数压过人类或撑满最大轮数则 AI 胜

技术栈

技术
前端 Vanilla JS SPA + Blora Design
后端 Express + Socket.IO
数据库 PostgreSQL + Prisma
登录 Bloret PassPort OAuth(/app/oauth + /app/verify
AI OpenAI 兼容 API(config.jsonopenai
配置 config.json(无 .env

快速开始

1. 数据库

# 示例:本地 PostgreSQL
createuser aiguess -P   # 密码 aiguess
createdb -O aiguess ai_guess

2. 配置

cp config.example.json config.json
# 编辑 databaseUrl、sessionSecret、passport、openai 等

config.json 已加入 .gitignore,勿提交密钥。仓库提供 config.example.json 作模板。

3. 安装与迁移

npm install
npm run db:push
npm run dev

打开 http://localhost:3000

示例配置默认开启:

  • authMock: true:无需 PassPort,大厅点「开发 Mock 登录」
  • aiMock: true:无 LLM Key 时用规则假 AI 发言/投票

4. Bloret PassPort(生产)

  1. 在 PassPort 注册应用,回调:{publicUrl}/api/auth/callback
  2. 权限建议:user:nameuser:head(可选 user:emailuser:tags
  3. 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"
  }
}

文档:https://bbs.bloret.net/#post/Bloret%20Software%20Community/Bloret%20PassPort/1770907136954_si3o0.json

5. 真实 LLM

{
  "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.* 默认房间规则(人数、时长等)

主要 API

方法 路径 说明
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:subscribechat:sendvote: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。

Releases

Packages

Contributors

Languages