尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
ระบบใหม่ของ 1SHOT ย้ายจาก Python + SQLite/JSON (tvaccess, AI-Trading-Lab/server) มาเป็น Next.js 16 (App Router) + Supabase พร้อมหน้าตาใหม่ทั้งหมด • ตรวจสิทธิ์ TradingView อัตโนมัติ (tv_verify.py) — ตอนนี้แอดมินให้สิทธิ์เองในหน้า Admin • ตรวจ IB ผ่าน Exness API (exness_link.py) — ตอนนี้แอดมินกดยืนยัน IB เอง • MT5 Gateway + Worker (mt5-automation/) — ต้องรันบน Windows/Wine แยกจากเว็บอยู่แล้ว • AI Agent Machine (สถิติ + Claude) และบอทส่งสัญญาณเข้าห้อง (tv_alert.py) • กราฟแท่งเทียน (ยังไม่มีแหล่งราคา) — หน้า Setup แสดงเฉพาะโซนที่อินดิเคเตอร์วาด檢視完整 README ↗
ระบบใหม่ของ 1SHOT ย้ายจาก Python + SQLite/JSON (tvaccess, AI-Trading-Lab/server) มาเป็น Next.js 16 (App Router) + Supabase พร้อมหน้าตาใหม่ทั้งหมด
| ส่วน | ของเดิม | ของใหม่ |
|---|---|---|
| ตัวอ่าน Alert WF1 | tvaccess/wf_contract.py | src/lib/domain/wf1.ts — ผลตรงกับ Python ทุกเคส (tests/parity.test.ts) |
รูปวาด #S บนกราฟ | tvaccess/tv_shapes.py | src/lib/domain/shapes.ts |
| กันสัญญาณซ้ำ | wf_receipts + chart_events (SQLite) | ตาราง signal_events + ฟังก์ชัน ingest_signal_events (atomic) |
| Webhook TradingView | tv_webhook.py /hook/<secret> | POST /api/webhook/tradingview/<secret> |
| สมาชิก / สมัคร / ยืนยันอีเมล | server/app.py + SQLite | Supabase Auth + ตาราง profiles |
| สิทธิ์อินดิเคเตอร์ | tv_rights.json | ตาราง indicator_rights (มีวันหมดอายุ / ตลอดชีพ) |
| เชื่อม Telegram | tvaccess/tv_webbridge.py | src/lib/telegram.ts + POST /api/telegram/webhook |
| ลิงก์เข้าห้องแบบใช้ครั้งเดียว | request_room / approve | requestRoomInvite / handleJoinRequest |
| ข่าวโลก / สรุปเช้า | tv_world.json, tv_morning_brief.json | ตาราง news_items, daily_briefs + scripts/import-legacy.ts |
tv_verify.py) — ตอนนี้แอดมินให้สิทธิ์เองในหน้า Adminexness_link.py) — ตอนนี้แอดมินกดยืนยัน IB เองmt5-automation/) — ต้องรันบน Windows/Wine แยกจากเว็บอยู่แล้วtv_alert.py)npm install
cp .env.example .env.local # ใส่ค่า Supabase และ secret
npm run dev # http://localhost:3000
โปรเจ็กต์ Supabase ที่ใช้: 1shot-signals (igpftrpnfxwvqxbigkum, ap-southeast-1) รัน migration ครบทุกไฟล์แล้ว
supabase/migrations/ (ชื่อไฟล์ตรงกับ version บนโปรเจ็กต์) โปรเจ็กต์ใหม่ใช้ supabase db pushSUPABASE_SECRET_KEY (Project Settings → API Keys → Secret keys) ใน .env.local ต้องมีสำหรับ webhook, Telegram, ร้านค้า และการตั้งเจ้าของระบบhttp://localhost:3000/auth/confirm กับ {SITE_URL}/auth/confirm ใน Redirect URLsOWNER_EMAILS แล้วสมัครด้วยอีเมลนั้น พอยืนยันอีเมลและเข้าระบบ บัญชีจะเป็น owner อัตโนมัติnpm run import:legacy -- /path/to/tvaccessระบบเข้าสู่ระบบ (Supabase Auth, cookie session ผ่าน @supabase/ssr):
/auth/confirm → หน้าบัญชี/forgot-password) → ลิงก์ในอีเมล → /reset-password (ลิงก์ใช้ได้ 15 นาทีหลังเปิด)profiles.email จะตามเอง (trigger sync_user_email)ลูกค้าซื้อได้ 2 แบบ: รายงวด (ตัดบัตรอัตโนมัติรายเดือน/รายปี) และ จ่ายครั้งเดียว (ใช้ได้ตามจำนวนวัน หรือตลอดชีพ)
ชำระสำเร็จแล้วระบบเพิ่ม indicator_rights ให้เอง ซื้อซ้ำจะบวกเวลาต่อจากของเดิม และไม่ลดสิทธิ์ที่มีอยู่ เส้นทางฟรีผ่าน Exness IB (แอดมินให้สิทธิ์เอง) ยังใช้ได้เหมือนเดิม
STRIPE_SECRET_KEY{SITE_URL}/api/stripe/webhook เลือก event:
checkout.session.completed, checkout.session.async_payment_succeeded, checkout.session.async_payment_failed,
checkout.session.expired, invoice.paid, invoice.payment_failed, customer.subscription.updated,
customer.subscription.deleted, charge.refunded แล้วใส่ Signing secret เป็น STRIPE_WEBHOOK_SECRETทดสอบในเครื่อง: stripe listen --forward-to localhost:3000/api/stripe/webhook แล้วใช้บัตรทดสอบ 4242 4242 4242 4242
คืนเงิน: กดปุ่ม "คืนเงิน" ในหน้า Admin → คำสั่งซื้อ (หรือหน้าสมาชิก) หรือคืนจากหน้า Stripe ก็ได้ เมื่อคืนเต็มจำนวน ระบบจะถอนสิทธิ์อัตโนมัติ
เฉพาะส่วนที่คำสั่งซื้อนั้นให้ไป (เวลาที่ได้จากการซื้ออื่นหรือที่แอดมินให้เองยังอยู่) การคืนเงินบางส่วนไม่ถอนสิทธิ์
ถ้าคำสั่งซื้อที่คืนเงินเป็นของการสมัครรายงวด (งวดแรกหรืองวดต่ออายุ) ระบบจะยกเลิกการสมัครนั้นทันทีด้วย จะไม่มีการตัดบัตรงวดถัดไป
Alert → Notifications → Webhook URL: {SITE_URL}/api/webhook/tradingview/{TRADINGVIEW_WEBHOOK_SECRET}
ข้อความ Alert ต้องเป็นรูปแบบ WF1 ([WF1] … [/WF1]) และแนบบรรทัด #S ได้ตามเดิม
curl "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/setWebhook" \
-d url="$SITE_URL/api/telegram/webhook" \
-d secret_token="$TELEGRAM_WEBHOOK_SECRET" \
-d 'allowed_updates=["message","chat_join_request"]'
บอทต้องเป็นแอดมินในห้องสัญญาณ (สิทธิ์เชิญสมาชิก) แล้วผูก Chat ID ของห้องในหน้า Admin → อินดิเคเตอร์และห้อง
npm run typecheck
npm test # parity tests กับโค้ด Python เดิม + ตรรกะร้านค้า/คืนเงิน (ฐานข้อมูลในหน่วยความจำ tests/support/)
npm run build
tests/parity/fixtures.json คือผลลัพธ์ที่บันทึกไว้จากโค้ด Python เดิม (ตัว generator ถูกลบออกแล้ว ทั้งโปรเจ็กต์เป็น TypeScript) ห้ามสร้างใหม่จากโค้ด TypeScript เพราะจะทำให้ parity test ไม่มีความหมาย
role และ ib_verified แก้ได้เฉพาะแอดมิน (trigger guard_profile_update)SUPABASE_SECRET_KEY ใช้เฉพาะฝั่ง server (webhook, บอท) ห้ามใส่ใน frontend.env.local หรือ tv_config.json ของระบบเดิม