Bot & Automation

Market AI

/root/hermes-projects/Market AI

src/bot/ui/keyboards.ts text
import { Markup } from "telegraf";
import type { TradingMode } from "../../domain/types";

export function mainMenuKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("📊 Market", "menu:market"), Markup.button.callback("⭐ Watchlist", "menu:watchlist")],
    [Markup.button.callback("🔔 Price Alert", "menu:alert"), Markup.button.callback("🤖 Auto Trading", "menu:auto")],
    [Markup.button.callback("⚙️ Settings", "menu:settings"), Markup.button.callback("❓ Help", "menu:help")]
  ]);
}

export function marketSelectionKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("🥇 XAUUSD / Gold", "pair:XAUUSD"), Markup.button.callback("💶 EURUSD", "pair:EURUSD")],
    [Markup.button.callback("🇬🇧 GBPUSD", "pair:GBPUSD"), Markup.button.callback("🇯🇵 USDJPY", "pair:USDJPY")],
    [Markup.button.callback("₿ BTCUSD", "pair:BTCUSD"), Markup.button.callback("⭐ Watchlist", "menu:watchlist")],
    [Markup.button.callback("⬅️ Kembali", "menu:main")]
  ]);
}

export function marketAnalysisKeyboard(symbolCode: string) {
  return Markup.inlineKeyboard([
    [
      Markup.button.callback("🔄 Refresh", `market:refresh:${symbolCode}`),
      Markup.button.callback("🤖 Auto Trade Market Ini", `market:autotrade:${symbolCode}`)
    ],
    [
      Markup.button.callback("🔔 Buat Price Alert", `market:alert:${symbolCode}`),
      Markup.button.callback("⬅️ Pilih Market Lain", "menu:market")
    ]
  ]);
}

export function autoTradingDashboardKeyboard(_isEnabled: boolean) {
  return Markup.inlineKeyboard([
    [Markup.button.callback("🚀 Setup Auto Trading", "auto:setup")],
    [Markup.button.callback("📊 Status Robot", "auto:status"), Markup.button.callback("📜 Trading History", "auto:history")],
    [Markup.button.callback("🛑 Emergency Stop", "auto:stop")],
    [Markup.button.callback("⬅️ Kembali", "menu:main")]
  ]);
}

export function setupAccountKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("🧪 Demo", "setup:account:demo"), Markup.button.callback("💰 Real", "setup:account:real")],
    [Markup.button.callback("⬅️ Kembali", "menu:auto")]
  ]);
}

export function setupMarketKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("🥇 XAUUSD / Gold", "setup:market:XAUUSD"), Markup.button.callback("💶 EURUSD", "setup:market:EURUSD")],
    [Markup.button.callback("🇬🇧 GBPUSD", "setup:market:GBPUSD"), Markup.button.callback("🇯🇵 USDJPY", "setup:market:USDJPY")],
    [Markup.button.callback("₿ BTCUSD", "setup:market:BTCUSD"), Markup.button.callback("⭐ Dari Watchlist", "setup:market:watchlist")],
    [Markup.button.callback("⬅️ Kembali", "setup:back:market")]
  ]);
}

export function setupStrategyKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("⚡ Fast Scalping", "setup:strategy:fast_scalping")],
    [Markup.button.callback("📊 Trend Scalping", "setup:strategy:trend_scalping")],
    [Markup.button.callback("🔄 Custom Strategy", "setup:strategy:custom")],
    [Markup.button.callback("⬅️ Kembali", "setup:back:strategy")]
  ]);
}

export function setupRiskKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("✏️ Ubah Lot", "setup:risk:lot"), Markup.button.callback("🎯 Ubah Target Profit", "setup:risk:tp")],
    [Markup.button.callback("🛡️ Ubah Stop Loss", "setup:risk:sl"), Markup.button.callback("📉 Ubah Daily Loss Limit", "setup:risk:dailyloss")],
    [Markup.button.callback("⏱️ Ubah Cooldown", "setup:risk:cooldown")],
    [Markup.button.callback("➡️ Lanjutkan", "setup:risk:next"), Markup.button.callback("⬅️ Kembali", "setup:back:risk")]
  ]);
}

export function setupReviewKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("▶️ Start Bot", "setup:review:start")],
    [Markup.button.callback("✏️ Edit", "setup:review:edit"), Markup.button.callback("❌ Cancel", "menu:auto")]
  ]);
}

export function setupRealConfirmKeyboard() {
  return Markup.inlineKeyboard([
    [Markup.button.callback("✅ Confirm & Start", "setup:confirm:start"), Markup.button.callback("❌ Cancel", "menu:auto")]
  ]);
}

/** @deprecated Tetap dipertahankan untuk kompatibilitas handler lama yang memanggil secara statis */
export function modeKeyboard(symbolCode: string) {
  return Markup.inlineKeyboard([
    [Markup.button.callback("Scalping", `mode:${symbolCode}:scalping`), Markup.button.callback("Intraday", `mode:${symbolCode}:intraday`)],
    [Markup.button.callback("Back", "menu:market")]
  ]);
}

/** @deprecated Tetap dipertahankan untuk kompatibilitas handler lama */
export function signalActionKeyboard(symbolCode: string, _mode: TradingMode, _orderIntent: any) {
  return marketAnalysisKeyboard(symbolCode);
}