# Workflow sử dụng Bot MORETECH — phân theo vai trò

Sinh từ graphify (`graph.json`, 1533 node / 3883 cạnh) + đối chiếu trực tiếp với
mã nguồn: vai trò dưới đây lấy từ **câu lệnh gác quyền thật trong handler**,
không lấy từ tài liệu.

Tổng: **56 lệnh** — Khách 15 · Sale 1 · Admin 40.

---

## Cổng vào: bot quyết định chạy lệnh nào

Mọi tin nhắn đi qua `xkprj.CommandHandler.handle_command`:

```
Tin nhắn tới
    │
    ├─ Nhóm đã duyệt?  (thread nằm trong duyetboxdata.json HOẶC người gửi là admin)
    │
    ├── CHƯA duyệt ──► chỉ chạy: .menu .mua .bg .km .stk  (+ .mau nếu là Sale)
    │                  lệnh khác: admin/sale nhận thông báo "nhóm chưa được duyệt",
    │                             người lạ → bot im lặng (tránh bị coi là spam)
    │
    └── ĐÃ duyệt ────► chạy toàn bộ lệnh theo quyền của người gửi
                       gõ sai → gợi ý lệnh gần giống (difflib)
```

Lệnh không cần prefix chạy ở mọi nhóm: `bot` / `bót` (chào + dẫn vào menu), `prefix`.

---

## 1. NGƯỜI DÙNG / KHÁCH — 15 lệnh

Luồng mua hàng chính:

```
  bot / .menu ──► .mua ──► .mua <mã> ──► .mua <mã> <gói> ──► .stk <số tiền> <nội dung>
                    │          │               │                      │
                    │          │               └─ .km <mã>            └─ QR VietQR + STK
                    │          │                  (ưu đãi)               → khách chuyển khoản
                    │          └─ .bg / .bg next (bảng giá phân trang)    → chụp màn hình gửi Sale
                    │
                    └─ .hotro ──► .sp <câu hỏi> ──► (Gemini trả lời) ──► .huy (đóng vé)
```

| Lệnh | Việc |
|---|---|
| `.menu` | Menu theo vai trò — khách chỉ thấy phần bán hàng |
| `.mua` | Danh mục sản phẩm |
| `.mua <mã>` | Các gói + giá của một sản phẩm |
| `.mua <mã> <gói>` | Chọn gói → ra lệnh `.stk` kèm số tiền |
| `.bg`, `.bg next`, `.bg <trang>`, `.bg <mã>` | Bảng giá phân trang (vị trí trang lưu riêng từng người) |
| `.km`, `.km <mã>` | Khuyến mãi còn hiệu lực |
| `.stk`, `.stk <số tiền> [nội dung]` | Thông tin chuyển khoản / QR VietQR động |
| `.hotro` → `.sp <hỏi>` → `.huy` | Vé hỗ trợ AI (Gemini), có ngữ cảnh bảng giá + khuyến mãi |
| `bot` / `bót` | Chào và dẫn vào menu |
| `.info`, `.uid`, `.prefix` | Thông tin tài khoản Zalo, lấy UID, xem prefix |
| ⚠️ `.adduser`, `.tagall` | **Nằm trong thư mục quantri nhưng KHÔNG gác quyền** — xem mục Rủi ro |

---

## 2. SALE — 1 lệnh, 13 mẫu

`.mau` gác bằng `is_sales_user()` (đọc `admin` + `adm` + `sale`/`sales` trong
`seting.json` và `sales_ids` trong `shop_config.json`).

Chuỗi mẫu bám theo vòng đời đơn hàng:

```
  .mau ds ──► .mau xem <mã mẫu> ──► (reply tin khách) ──► .mau <mã mẫu>
                    │
                    └─ bản xem trước hiện luôn bước kế, chỉ Sale thấy

  chao ──► baogia <sp> ──► chotdon <sp> ──► thanhtoan <tiền> ──► xacnhan
                                              │ (tự gửi QR)        │
                                              └────────────────────┴──► dangxuly ──► dagiao ──► baohanh
                                                                                          │
  hethang <sp> ──► giahan <sp> <gói>  ◄──────────────────────────────────────────────────┘
```

| Nhóm | Mẫu |
|---|---|
| Bán hàng | `chao` `baogia` `chotdon` `hethang` `khuyenmai` `tuvanchinhsach` |
| Thanh toán | `thanhtoan` (kèm QR) · `xacnhan` |
| Đơn hàng | `dangxuly` · `dagiao` |
| Hậu mãi | `baohanh` · `giahan` · `camon` |

Viết tắt: `ck`/`tt`→thanhtoan · `xn`→xacnhan · `xl`→dangxuly · `giao`→dagiao ·
`bh`→baohanh · `gh`→giahan · `hh`→hethang · `km`→khuyenmai · `ct`→camon · `bg`→baogia

---

## 3. QUẢN TRỊ VIÊN — 40 lệnh

### 3.1 Mở đường cho bot
```
.thread duyet ──► nhóm chạy được toàn bộ lệnh
.thread duyetall / banall / listduyet / list-approved / duyetid / banid
.admin (thêm/bớt admin)   .setprefix <ký tự>   .restart   .var
```

### 3.2 Quản lý hàng hóa (nguồn dữ liệu cho mọi lệnh của khách)
```
.addsp ──► .addgoi ──► .editgoi / .delgoi ──► .delsp
.addkm ──► .capnhat ──► .delkm
        └─► ảnh hưởng thẳng tới .mua / .bg / .km / .mau baogia
```

### 3.3 Gửi thông báo hàng loạt — `.thongbao` (4 bước, có chốt xác nhận)
```
1️⃣ reply ảnh + .thongbao tao [2-300] <nội dung>     → bản nháp
2️⃣ .thongbao phamvi all | phamvi nhom <id,...>       (.thongbao ds xem ID nhóm)
3️⃣ .thongbao xem                                      → kiểm tra ảnh + nội dung
4️⃣ .thongbao gui ──► .thongbao xacnhan <mã 6 ký tự>   → mã hết hạn sau 10 phút
       │
       ├─ .thongbao trangthai   theo dõi tiến độ
       ├─ .thongbao huy         dừng trước nhóm kế tiếp
       ├─ .thongbao retry       gửi lại RIÊNG nhóm thất bại
       └─ .thongbao xuly <ID> dagui|chuagui   chốt nhóm "chưa rõ kết quả"
```
Cơ chế chống gửi trùng: sổ `sent/failed/skipped/in_flight` ghi atomic, khóa
liên tiến trình (flock), nhóm chưa rõ kết quả **không bao giờ tự gửi lại**.

### 3.4 Chăm sóc lead — `.lead` (cùng khung với .thongbao)
```
1️⃣ .lead add <sđt>|<tên>|<nguồn consent>  ·  .lead import  ·  .lead quet <ID nhóm>
2️⃣ .lead ketban <lời nhắn>   hoặc   .lead nhantin <nội dung>   ·   .lead nghi <2-300>
3️⃣ .lead xem ──► .lead gui ──► .lead xacnhan <mã>
4️⃣ .lead trangthai / dung / retry / xuly <sđt|uid> dagui|chuagui / chan / bochan
```
`.lead ds` **chỉ chạy trong chat riêng** — danh sách khách không đổ ra nhóm.
Có giới hạn ngày (kết bạn 20, nhắn tin 50) để tránh Zalo khóa tài khoản bot.

### 3.5 Bảo vệ & kỷ luật nhóm
```
.antispam on/off      .antilink on/off      .loctk on/off/add/remove/list
.antiundo on/off/rs   .lockbot / .unlockbot / .listlb
.mute / .unmute       .kick   .ban   .del   .delmsg   .duyetmem   .autoapprv
```

### 3.6 Tự động & tiện ích
```
.autosend on/off   .autosticker on/off   .autoweather on/off   .event set/unset
.rai (rải link)    .join   .leave   .lgr   .rename   .rngr   .spamgroup
.tagallmem         .money  .undo
```

---

## Đường đi của dữ liệu

```
seting.json ─────► admin, adm, prefix, autorestart
shop_config.json ► ngân hàng (TP Bank), liên hệ Sale, sales_ids
price_list.json ─► .mua .bg .mau baogia .hotro      (69 gói, 63 đã có price)
km.json ─────────► .km .mau khuyenmai .hotro
mau.json ────────► 13 mẫu của .mau
duyetboxdata.json► nhóm được phép chạy lệnh nội bộ
thongbao_state.json / lead_state.json ► sổ chống gửi trùng (+ .lock, .run.lock)
```

---

## Rủi ro phát hiện khi dựng graph

1. **`.adduser` và `.tagall` không có câu lệnh gác quyền nào** — nằm trong
   `modules/quantri/` nhưng bất kỳ thành viên nào trong nhóm đã duyệt đều chạy được.
   `.tagallmem` cùng loại thì lại có gác. Nên thống nhất.
2. **Ba ngân hàng khác nhau trong cùng dự án**: `shop_config.json` = TP Bank
   (nguồn thật của `.stk` và `.hotro`), nhưng cache còn `qr.png` in **Vietcombank**
   và `qrthanhtoan.png` in **MB Bank**. Hai ảnh này không lệnh nào dùng — nên xóa
   để không ai gửi nhầm cho khách.
3. **`modules/quantri/noidung.txt`** là quảng cáo tài khoản game của
   *Randomtdat.site* (kèm SĐT + link nhóm Zalo khác) — không liên quan MORETECH,
   nhưng nằm trong kho nội dung của `.spamgroup`.
4. **`noidung.txt` và `data/noidung.txt` trùng khít nhau**, nội dung là ~108 câu
   chọc phá/spam tiếng Việt.
5. **`modules/cache/image/bg.jpg` là ảnh khỏa thân (NSFW)** nằm trong cache của bot.
