Compare commits

..

No commits in common. "fb0d06001834573dd68f12a1e29d64cefc9c64ea" and "ead52a835a547c6de0decc82a8a47f71007c56ab" have entirely different histories.

5 changed files with 468 additions and 1565 deletions

7
.gitignore vendored
View File

@ -3,6 +3,8 @@ node_modules/
.wwebjs_auth/ .wwebjs_auth/
.wwebjs_cache/ .wwebjs_cache/
# Logs # Logs
*.log *.log
app.log app.log
@ -14,6 +16,8 @@ yarn-error.log*
.env .env
.env.* .env.*
# OS files # OS files
.DS_Store .DS_Store
Thumbs.db Thumbs.db
@ -33,6 +37,3 @@ build/
# Misc # Misc
*.bak *.bak
credentials.json
token.json

View File

@ -1,50 +0,0 @@
{
"users": {
"15192773600@c.us": {
"projectName": null,
"folderId": null,
"lastBatchFolderName": "2 tier chocolate vegan Star Wars cake",
"lastBatchFolderId": "1oJufpdl2yuyZTOEejVv22rKMEf7o6LAV"
},
"14374329515@c.us": {
"projectName": null,
"folderId": null,
"lastBatchFolderName": "social currency",
"lastBatchFolderId": "1iUdfbHOCg3Cambad7DhmDla9wCBPtk_0"
},
"918220348218@c.us": {
"projectName": null,
"folderId": null,
"lastBatchFolderName": "mohan",
"lastBatchFolderId": "1MxGKRFjb60x2pcCySc6DBTC_c2qXzG0L"
},
"16476796537@c.us": {
"projectName": null,
"folderId": null,
"lastBatchFolderName": "Manesh",
"lastBatchFolderId": "1VylDIP7pvKtNa2WV-lAK6f6gNaU9pZ0V"
},
"919585967575@c.us": {
"projectName": null,
"folderId": null,
"lastBatchFolderName": "Vijay testing",
"lastBatchFolderId": "12zRnuoeIhudGLbKckMciYLDxd7zLJpVA"
},
"16476229848@c.us": {
"projectName": null,
"folderId": null,
"lastBatchFolderName": "Clickstogarlands",
"lastBatchFolderId": "1fs-6-2FA6RkioHR2Ybo7Q1xGp6ftCU7B"
},
"15198976975@c.us": {
"projectName": null,
"folderId": null,
"lastBatchFolderName": "TCA _sportsday",
"lastBatchFolderId": "1JVzN_9KHMIm0jDQZL0UthM_jCJDkV8Dz"
}
},
"restartStats": {
"date": "2026-04-17",
"count": 1
}
}

View File

@ -1,7 +0,0 @@
{
"access_token": "ya29.a0Aa7MYiqoT1k7-HDBeAYAzTWBp-kS3WvVmeXjdmRmCb6xWxLbT5EVSxCFQCqJJh8_oFxsgNyNqicpy-hBALL3qdTZfeCIMrLiNevV8cTKHgnf4aPfAH0uLRJzybRtp_8Ug62mSrhTopZ3-atQwtJSFsFMbv-xIm5VneLzXswLUrk5JeE_YsQquDfq2b3fCntMJunjUg8aCgYKAbESARUSFQHGX2MiuCZNTXNB8oN5EMVBdHffEQ0206",
"refresh_token": "1//0g-1DMMQieY-iCgYIARAAGBASNwF-L9IrbLZtEY9b5aXmbpTJ921vq4lIQ-8KHA-erzu231SNSqwseN4y6L8uQ-MrJ25yAANEGz0",
"scope": "https://www.googleapis.com/auth/drive.file",
"token_type": "Bearer",
"expiry_date": 1776540291131
}

View File

@ -1,83 +1,39 @@
# WhatsApp -> Google Drive batch uploader (`mcb` commands) # WhatsApp → Google Drive batch uploader (WD- commands)
Uploads files from WhatsApp chats into structured Google Drive folders using batch commands. Phase 1: Upload user documents into your single Google Drive.
## Commands ## Commands
- User-friendly (case-insensitive): `start`, `done`, `cancel`, `status`, `help` - WD-START → start a batch
- Also supported fallback: `mcb-*` and legacy `hi mcb` / `bye mcb` - WD-END → upload all collected files
- Batch management: - WD-CANCEL → cancel batch
- `rename <folder-name>` -> change active batch target folder - WD-STATUS → show count + time left
- `list` -> show queued file names and sizes - WD-PROJECT <name> → set project folder
- `undo` -> remove last queued file - WD-HELP → help
- `retry-failed` -> retry previously failed uploads
- Project/admin:
- `mcb-project <name>` -> set/save a project folder
- `admin-stats` -> today + lifetime operational stats
- `admin-stats 7d` -> rolling summary for last N days (example: `7d`)
- `admin-stats YYYY-MM-DD` -> stats for a specific date
- `admin-health` -> live ops snapshot (heartbeat, queues, alerts)
## Local setup (Windows/Linux) ## Setup
1) Install dependencies: 1) Install deps
```bash ```
npm install npm install
``` ```
2) Create `.env` (example values): 2) Copy env
```env ```
GOOGLE_CREDENTIALS=./credentials.json copy .env.example .env
GOOGLE_TOKEN=./token.json
DEFAULT_ROOT_FOLDER=Whatsapp-Drive
WA_CLIENT_ID=MCB-bot
OWNER_NUMBER=
BATCH_TTL_MIN=30
IDLE_RESTART_CHECK_MIN=60
IDLE_RESTART_MIN=240
IDLE_RESTART_MAX_PER_DAY=6
DOWNLOAD_TIMEOUT_MS=900000
DOWNLOAD_MAX_RETRIES=2
DOWNLOAD_RETRY_DELAY_MS=5000
MAX_MEDIA_MB=95
WA_PROTOCOL_TIMEOUT=9000000
WA_INIT_RETRIES=3
WA_INIT_RETRY_DELAY_MS=5000
WA_HEADLESS=true
LOG_DIR=./logs
HEARTBEAT_INTERVAL_SEC=60
RETRY_MAX_ITEMS=200
SMART_SUBFOLDERS=true
FAIL_ALERT_WINDOW=10
FAIL_ALERT_THRESHOLD_PCT=20
FAIL_ALERT_COOLDOWN_MIN=30
# Optional on Linux VPS if Chromium is not auto-detected:
# WA_EXECUTABLE_PATH=/usr/bin/chromium-browser
``` ```
3) Put Google OAuth client JSON at `credentials.json`. 3) Put your Google OAuth client JSON at `credentials.json`
4) Generate Drive token: 4) Generate token
```bash ```
npm run auth npm run auth
``` ```
5) Start bot: 5) Run bot
```bash ```
npm start npm start
``` ```
## Linux VPS notes ## Notes
- Install Chromium/Chrome and required libraries for Puppeteer. - Bot only responds to messages that start with `WD-`.
- If Chromium path is custom, set `WA_EXECUTABLE_PATH`. - Files are stored temporarily on disk under your system temp folder.
- Use a process manager (for example PM2/systemd) for auto-restart. # WhatsDrive-Whatsapp-To-Drive-Manager
## Runtime notes
- Temporary files are written under your OS temp directory (`MCB-batches`).
- Upload target folders are auto-created in Drive.
- Uploaded folder gets read-only public link (`anyone` with `reader` role).
- Duplicate protection is enabled per batch (same filename + size is skipped).
- Failed uploads are moved to retry queue and can be retried with `retry-failed`.
- Structured rotating logs are written to `logs/app-YYYY-MM-DD.jsonl`.
- Heartbeat logs are emitted periodically for VPS monitoring.
- Uploads are auto-organized into Drive subfolders by date + event type (`Invoices`, `Photos`, `Documents`).
- Active upload sessions are restored from disk after process restart (within batch TTL).
- Owner receives failure alerts when recent upload failures exceed configured threshold.

1307
index.js

File diff suppressed because it is too large Load Diff