Skip to content

Latest commit

ย 

History

History
340 lines (252 loc) ยท 10.3 KB

File metadata and controls

340 lines (252 loc) ยท 10.3 KB

Lexiva Logo

Lexiva

AI ่‹ฑ่ฏญๅญฆไน ็ณป็ปŸ | ไฝ“้ชŒไผ˜ๅ…ˆ | ๅผ€ๆบๅ…่ดน

Version Python Vue License Platform


โญ ้กน็›ฎ็ฎ€ไป‹

Lexiva ๆ˜ฏไธ€ๆฌพ้ขๅ‘ๅญฆ็”Ÿ็š„ AI ่‹ฑ่ฏญๅญฆไน  Web ็ณป็ปŸ๏ผŒๆ ธๅฟƒๅฎšไฝๆ˜ฏใ€Œไฝ“้ชŒไผ˜ๅ…ˆใ€โ€”โ€”่ฟฝๆฑ‚ๅชฒ็พŽๅ•†ไธšไบงๅ“็š„ๆต็•…ไบคไบ’ไฝ“้ชŒ๏ผŒๅŒๆ—ถไฟๆŒๅผ€ๆบๅ…่ดนใ€ๆžๆ˜“้ƒจ็ฝฒ็š„็‰นๆ€งใ€‚

ไบ”ๅคงๆ ธๅฟƒไผ˜ๅŠฟ๏ผš

โšก ้›ถๆˆๆœฌ ๐Ÿš€ ้›ถ้—จๆง› ๐Ÿ’จ ้›ถ็ญ‰ๅพ… ๐Ÿ”Š ้›ถๆ’ไปถ ๐Ÿ”’ ้›ถๆณ„้œฒ
ๅ…่ดนๅผ€ๆบ AI ๆจกๅž‹ Python + SQLite WebSocket ๅฎžๆ—ถ้€šไฟก ๆต่งˆๅ™จๅŽŸ็”Ÿ Web Audio ๆ•ฐๆฎๆœฌๅœฐๅญ˜ๅ‚จ

โœจ ๅŠŸ่ƒฝ็‰นๆ€ง

๐Ÿ“– ๅญฆไน ๆจกๅ—

ๆจกๅ— ๅŠŸ่ƒฝๆ่ฟฐ
๐ŸŽ™๏ธ AI ๅฃ่ฏญๅฏน่ฏ ๆตๅผ่ฏญ้Ÿณไบคไบ’ + ่‡ชๅŠจๆ‰“ๆ–ญ + ๅคšๅœบๆ™ฏ่ฏ้ข˜
๐Ÿ—ฃ๏ธ ๆ™บ่ƒฝๅ‘้Ÿณ่ฏ„ๆต‹ ๅฎžๆ—ถ่ฏ„ๅˆ† + ่ฏฆ็ป†้Ÿณ็ด ๅˆ†ๆž + ๅฏนๆฏ”็คบ่Œƒ้Ÿณ
โœ๏ธ ๅ†™ไฝœ่พ…ๅŠฉๆ‰นๆ”น AI ๆ‰นๆ”น + ้”™่ฏฏๆ ‡ๆณจ + ๅ†™ไฝœๅปบ่ฎฎ
๐ŸŽง ๅฌๅŠ›ๆๆ–™็ปƒไน  ๅฌๅ†™็ปƒไน  + ้Ÿณ้ข‘ๆŽงๅˆถ + ๅณๆ—ถๅ้ฆˆ
๐Ÿ“š ่ฏๆฑ‡ๆœฌ็ฎก็† ็”Ÿ่ฏๆทปๅŠ  + ๅคไน ่ฎกๅˆ’ + ่ฎฐๅฟ†ๆ›ฒ็บฟ
๐Ÿ“Š ๅญฆไน ๆ•ฐๆฎ็ปŸ่ฎก ๅญฆไน ๆ—ถ้•ฟ + ๆญฃ็กฎ็އ่ถ‹ๅŠฟ + AI ไฝฟ็”จๅˆ†ๆž

๐Ÿค– AI ่ƒฝๅŠ›

่ƒฝๅŠ› ๆŠ€ๆœฏๅฎž็Žฐ
ๆ™บ่ƒฝๅฏน่ฏ DeepSeek / Qwen ๅคงๆจกๅž‹๏ผŒๆตๅผๅ“ๅบ”
่ฏญ้Ÿณ่ฏ†ๅˆซ Whisper (faster-whisper)๏ผŒๆ”ฏๆŒๅฎžๆ—ถ่ฝฌๅ†™
่ฏญ้Ÿณๅˆๆˆ Edge TTS๏ผŒๅคš้Ÿณ่‰ฒ้€‰ๆ‹ฉ
ๅ‘้Ÿณ่ฏ„ๆต‹ AI ้Ÿณ็ด ๆ‰“ๅˆ†๏ผŒ็ป†่Š‚ๅˆฐๆฏไธช้Ÿณ่Š‚
ๅ†™ไฝœๆ‰นๆ”น AI ่‡ชๅŠจ็บ ้”™๏ผŒ่ฏญๆณ•ๅปบ่ฎฎ

๐Ÿ› ๏ธ ๆŠ€ๆœฏๆ ˆ

ๅˆ†็ฑป ๆŠ€ๆœฏ
ๅ‰็ซฏ Vue 3 + TypeScript + Vite + Element Plus + Pinia
ๅŽ็ซฏ FastAPI + SQLAlchemy + SQLite
AI DeepSeek API / Qwen + faster-whisper + Edge TTS
้€šไฟก RESTful API + WebSocket

๐Ÿ—บ๏ธ ็ณป็ปŸๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                   ๅ‰็ซฏ (Vue3)                     โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ ๅฃ่ฏญๅฏน่ฏ โ”‚ โ”‚ ๅ‘้Ÿณ่ฏ„ๆต‹ โ”‚ โ”‚ ๅ†™ไฝœๆ‰นๆ”น โ”‚ โ”‚ ๅฌๅŠ›็ปƒไน  โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                        โ”‚
โ”‚  โ”‚ ่ฏๆฑ‡ๆœฌ  โ”‚ โ”‚ ๅญฆไน ็ปŸ่ฎก โ”‚                        โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚ RESTful / WebSocket
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  ๅŽ็ซฏ (FastAPI)                  โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚ Chat APIโ”‚ โ”‚่ฏญ้Ÿณ่ฏ†ๅˆซ โ”‚ โ”‚่ฏญ้Ÿณๅˆๆˆ โ”‚ โ”‚ๅ‘้Ÿณ่ฏ„ๆต‹ โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                  ๆ•ฐๆฎๅฑ‚ (SQLite)                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿณ Docker ้ƒจ็ฝฒ๏ผˆๆŽจ่๏ผ‰

ๅฟซ้€ŸๅฏๅŠจ

# 1. ๅ…‹้š†้กน็›ฎ
git clone https://github.com/your-repo/lexiva.git
cd lexiva

# 2. ๅคๅˆถ็Žฏๅขƒๅ˜้‡้…็ฝฎ
cp backend/.env.example backend/.env
# ็ผ–่พ‘ backend/.env ๅกซๅ…ฅๆ‚จ็š„ API Keys

# 3. ไฝฟ็”จๅฏๅŠจ่„šๆœฌ๏ผˆWindows/Mac/Linux ้€š็”จ๏ผ‰
python run.py docker

ๆ‰‹ๅŠจๅฏๅŠจ

# ๆž„ๅปบๅนถๅฏๅŠจ
docker-compose up -d --build

# ๆŸฅ็œ‹ๆ—ฅๅฟ—
docker-compose logs -f

# ๅœๆญขๆœๅŠก
docker-compose down

โœ… ๅŽ็ซฏ: http://localhost:8000 | ๅ‰็ซฏ: http://localhost:5173 | API ๆ–‡ๆกฃ: http://localhost:8000/docs


๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

็Žฏๅขƒ่ฆๆฑ‚

  • Python 3.10+
  • Node.js 18+

ๅฏๅŠจ๏ผˆ่ทจๅนณๅฐ๏ผ‰

# Windows / Mac / Linux ้€š็”จๆ–นๅผ
python run.py            # ๆ˜พ็คบๅธฎๅŠฉ
python run.py all        # ๅŒๆ—ถๅฏๅŠจๅ‰ๅŽ็ซฏ
python run.py docker     # Docker ๅฏๅŠจ๏ผˆๆŽจ่๏ผ‰

# Windows ็”จๆˆทไนŸๅฏไปฅๅŒๅ‡ป
run.bat

# macOS / Linux ็”จๆˆทไนŸๅฏไปฅ็”จ shell ่„šๆœฌ
./run.sh all
./run.sh docker

ๆ‰‹ๅŠจๅˆ†ๆญฅๅฏๅŠจ

# ๅŽ็ซฏๅฏๅŠจ
cd backend
python -m venv venv
# Windows: venv\Scripts\activate  |  Mac/Linux: source venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --host 0.0.0.0 --port 8000

# ๅ‰็ซฏๅฏๅŠจ๏ผˆๆ–ฐ็ช—ๅฃ๏ผ‰
cd frontend
npm install
npm run dev

โœ… ๅŽ็ซฏๅœฐๅ€: http://localhost:8000/docs | ๅ‰็ซฏๅœฐๅ€: http://localhost:5173


๐Ÿ“ ้กน็›ฎ็ป“ๆž„

lexiva/
โ”œโ”€โ”€ Dockerfile                  # Docker ้•œๅƒ้…็ฝฎ
โ”œโ”€โ”€ docker-compose.yml          # Docker Compose ้…็ฝฎ
โ”œโ”€โ”€ run.py                      # ่ทจๅนณๅฐๅฏๅŠจ่„šๆœฌ๏ผˆWindows/Mac/Linux๏ผ‰
โ”œโ”€โ”€ run.bat                     # Windows ๅฟซๆทๅฏๅŠจ
โ”œโ”€โ”€ run.sh                      # Unix ็ณป็ปŸๅฏๅŠจ่„šๆœฌ
โ”œโ”€โ”€ pyproject.toml              # Python ้กน็›ฎ้…็ฝฎ
โ”œโ”€โ”€ README.md                   # ๆœฌๆ–‡ไปถ
โ”‚
โ”œโ”€โ”€ backend/                    # FastAPI ๅŽ็ซฏ
โ”‚   โ”œโ”€โ”€ .env.example           # ็Žฏๅขƒๅ˜้‡ๆจกๆฟ
โ”‚   โ”œโ”€โ”€ api/                   # API ่ทฏ็”ฑ
โ”‚   โ”œโ”€โ”€ api/                   # API ่ทฏ็”ฑ
โ”‚   โ”‚   โ”œโ”€โ”€ chat.py            # AI ๅฏน่ฏ
โ”‚   โ”‚   โ”œโ”€โ”€ vocabulary.py      # ่ฏๆฑ‡็ฎก็†
โ”‚   โ”‚   โ”œโ”€โ”€ writing.py        # ๅ†™ไฝœๆ‰นๆ”น
โ”‚   โ”‚   โ”œโ”€โ”€ pronunciation.py   # ๅ‘้Ÿณ่ฏ„ๆต‹
โ”‚   โ”‚   โ”œโ”€โ”€ listening.py      # ๅฌๅŠ›็ปƒไน 
โ”‚   โ”‚   โ”œโ”€โ”€ statistics.py     # ๅญฆไน ็ปŸ่ฎก
โ”‚   โ”‚   โ””โ”€โ”€ settings.py       # ็ณป็ปŸ่ฎพ็ฝฎ
โ”‚   โ”œโ”€โ”€ services/             # ไธšๅŠก้€ป่พ‘
โ”‚   โ”‚   โ”œโ”€โ”€ ai_chat.py        # AI ๅฏน่ฏๆœๅŠก
โ”‚   โ”‚   โ”œโ”€โ”€ ai_whisper.py     # ่ฏญ้Ÿณ่ฏ†ๅˆซๆœๅŠก
โ”‚   โ”‚   โ”œโ”€โ”€ ai_tts.py         # ่ฏญ้ŸณๅˆๆˆๆœๅŠก
โ”‚   โ”‚   โ””โ”€โ”€ writing.py        # ๅ†™ไฝœๆ‰นๆ”นๆœๅŠก
โ”‚   โ”œโ”€โ”€ db/                   # ๆ•ฐๆฎๅบ“ๆ“ไฝœ
โ”‚   โ”œโ”€โ”€ websocket/           # WebSocket ๅค„็†
โ”‚   โ””โ”€โ”€ main.py              # ๅบ”็”จๅ…ฅๅฃ
โ”‚
โ”œโ”€โ”€ frontend/                 # Vue3 ๅ‰็ซฏ
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ api/             # API ่ฐƒ็”จ
โ”‚   โ”‚   โ”œโ”€โ”€ components/     # ๅ…ฌๅ…ฑ็ป„ไปถ
โ”‚   โ”‚   โ”œโ”€โ”€ stores/         # Pinia ็Šถๆ€
โ”‚   โ”‚   โ””โ”€โ”€ views/          # ้กต้ข่ง†ๅ›พ
โ”‚   โ””โ”€โ”€ package.json
โ”‚
โ””โ”€โ”€ docs/                     # ้กน็›ฎๆ–‡ๆกฃ
    โ”œโ”€โ”€ AI่‹ฑ่ฏญๅญฆไน ็ณป็ปŸไฝ“้ชŒไผ˜ๅ…ˆ็‰ˆๆŠ€ๆœฏๆ–นๆกˆ.md
    โ”œโ”€โ”€ AI่‹ฑ่ฏญๅญฆไน ็ณป็ปŸๅญฆ็”Ÿ็‰ˆๆŠ€ๆœฏๆ–นๆกˆ.md
    โ””โ”€โ”€ ๆœฌๅœฐAI่ฏญ้Ÿณ้€š่ฏๆŠ€ๆœฏๅฎž็Žฐ.md

โš™๏ธ ้…็ฝฎ่ฏดๆ˜Ž

็Žฏๅขƒๅ˜้‡

ๅœจ backend/ ็›ฎๅฝ•ไธ‹ๅˆ›ๅปบ .env ๆ–‡ไปถ๏ผš

# AI ๆจกๅž‹้…็ฝฎ
DEEPSEEK_API_KEY=your_api_key
DEEPSEEK_BASE_URL=https://api.deepseek.com

# Whisper ่ฏญ้Ÿณ่ฏ†ๅˆซ (base/small/medium/large-v3)
WHISPER_MODEL=base

# Edge TTS ่ฏญ้Ÿณๅˆๆˆ
TTS_VOICE=zh-CN-XiaoxiaoNeural

๐Ÿ“– ๆ–‡ๆกฃ

ๆ–‡ๆกฃ ่ฏดๆ˜Ž
ไฝ“้ชŒไผ˜ๅ…ˆ็‰ˆๆŠ€ๆœฏๆ–นๆกˆ ๅฎŒๆ•ดๆŠ€ๆœฏๆžถๆž„ไธŽๅฎž็Žฐ็ป†่Š‚
ๅญฆ็”Ÿ็‰ˆๆŠ€ๆœฏๆ–นๆกˆ ๅŠŸ่ƒฝ้œ€ๆฑ‚ไธŽไบงๅ“่ฎพ่ฎก
ๆœฌๅœฐAI่ฏญ้Ÿณ้€š่ฏ ๅฎžๆ—ถ่ฏญ้Ÿณๅฏน่ฏๆŠ€ๆœฏๅฎž็Žฐ

๐Ÿค ่ดก็Œฎ

ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request๏ผ

  1. Fork ๆœฌไป“ๅบ“
  2. ๅˆ›ๅปบ็‰นๆ€งๅˆ†ๆ”ฏ (git checkout -b feature/xxx)
  3. ๆไบคๆ›ดๆ”น (git commit -m 'Add xxx')
  4. ๆŽจ้€ๅˆ†ๆ”ฏ (git push origin feature/xxx)
  5. ๅˆ›ๅปบ Pull Request

โš ๏ธ ๅธธ่ง้—ฎ้ข˜

ffmpeg ๆœชๅฎ‰่ฃ…

ๅฆ‚ๆžœ้‡ๅˆฐ ffmpeg not found ้”™่ฏฏ๏ผŒ้œ€่ฆๅฎ‰่ฃ… ffmpeg๏ผš

# PowerShell ไธญๆ‰ง่กŒ
winget install ffmpeg

ๆˆ– CMD ไธญ๏ผš

winget install ffmpeg

ๅฎ‰่ฃ…ๅŽ้‡ๅฏ็ปˆ็ซฏ/PyCharmใ€‚

ๆˆ–่€…ๆ‰‹ๅŠจๆทปๅŠ ๅˆฐ PATH๏ผˆPowerShell๏ผ‰๏ผš

$ffmpegBin = "C:\Users\Administrator\AppData\Local\Microsoft\WinGet\Packages\Gyan.FFmpeg_Microsoft.Winget.Source_8wekyb3d8bbwe\ffmpeg-8.1-full_build\bin"
[Environment]::SetEnvironmentVariable("Path", "$([Environment]::GetEnvironmentVariable('Path', 'User'));$ffmpegBin", "User")

CMD ไธญ๏ผš

setx Path "%Path%;C:\Users\Administrator\AppData\Local\Microsoft\WinGet\Packages\Gyan.FFmpeg_Microsoft.Winget.Source_8wekyb3d8bbwe\ffmpeg-8.1-full_build\bin"

pip ๅฎ‰่ฃ…ๅคฑ่ดฅ๏ผˆไปฃ็†้”™่ฏฏ๏ผ‰

ๅฆ‚ๆžœ้‡ๅˆฐไปฃ็†่ถ…ๆ—ถ้”™่ฏฏ๏ผš

PowerShell๏ผš

# ไธดๆ—ถๅ–ๆถˆไปฃ็†
$env:HTTP_PROXY = ""
$env:HTTPS_PROXY = ""

# ๆˆ–ไฝฟ็”จๆธ…ๅŽ้•œๅƒ๏ผˆๆŽจ่๏ผ‰
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

CMD๏ผš

set HTTP_PROXY=
set HTTPS_PROXY=
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

npm ๅ‘ฝไปคๆ‰พไธๅˆฐ

็กฎไฟ Node.js ๅทฒๅฎ‰่ฃ…ๅนถๆทปๅŠ ๅˆฐ PATHใ€‚้‡ๅฏ็ปˆ็ซฏๅŽๆ‰ง่กŒ๏ผš

where.exe npm

Whisper ่ฏญ้Ÿณ่ฏ†ๅˆซ

ๆ”ฏๆŒไธค็งๆ–นๅผ๏ผš

  1. ๆœฌๅœฐๆจกๅž‹๏ผˆfaster-whisper๏ผ‰๏ผš้œ€่ฆ ffmpeg๏ผŒ้ฆ–ๆฌกไธ‹่ฝฝๆจกๅž‹่พƒๆ…ข
  2. API ๆ–นๅผ๏ผš้…็ฝฎ OpenAI API Key๏ผŒๆ— ้œ€ๆœฌๅœฐๆจกๅž‹

๐Ÿ“„ ่ฎธๅฏ่ฏ

ๆœฌ้กน็›ฎๅŸบไบŽ MIT ๅ่ฎฎๅผ€ๆบใ€‚


Made with โค๏ธ for English Learners