|
@@ -910,40 +910,72 @@ This action cannot be undone.
|
|
|
await query.edit_message_text(text="Leverage adjustment cancelled.")
|
|
|
|
|
|
async def leverage_command(self, update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
|
- """Command to set leverage for a symbol. Format: /leverage [token] [leverage]"""
|
|
|
+ """
|
|
|
+ Command to set or get leverage for a symbol.
|
|
|
+ Format:
|
|
|
+ /leverage [token] -> get leverage
|
|
|
+ /leverage [token] [leverage] -> set leverage
|
|
|
+ """
|
|
|
chat_id = update.effective_chat.id
|
|
|
try:
|
|
|
parts = update.message.text.split()
|
|
|
- if len(parts) != 3:
|
|
|
- await self.notification_manager.send_generic_notification(
|
|
|
- "Format: /leverage [token] [leverage_value]", chat_id=chat_id
|
|
|
- )
|
|
|
- return
|
|
|
+ num_args = len(parts)
|
|
|
|
|
|
- token = normalize_token_case(parts[1])
|
|
|
- leverage = int(parts[2])
|
|
|
-
|
|
|
- if leverage <= 0:
|
|
|
+ if num_args not in [2, 3]:
|
|
|
await self.notification_manager.send_generic_notification(
|
|
|
- "Leverage must be a positive number.", chat_id=chat_id
|
|
|
+ "Format: /leverage [token] OR /leverage [token] [leverage_value]", chat_id=chat_id
|
|
|
)
|
|
|
return
|
|
|
|
|
|
+ token = normalize_token_case(parts[1])
|
|
|
symbol = f"{token}/USDC:USDC"
|
|
|
|
|
|
- # Confirmation dialog
|
|
|
- keyboard = [
|
|
|
- [
|
|
|
- InlineKeyboardButton("✅ Yes, Set Leverage", callback_data=f"leverage_confirm_yes_{token}_{leverage}"),
|
|
|
- InlineKeyboardButton("❌ No, Cancel", callback_data="leverage_confirm_no"),
|
|
|
+ # Case 1: Get leverage
|
|
|
+ if num_args == 2:
|
|
|
+ await update.message.reply_text(f"⏳ Fetching leverage for {token}...")
|
|
|
+
|
|
|
+ leverage_data, error = await self.trading_engine.get_leverage(symbol)
|
|
|
+ if error:
|
|
|
+ await update.message.reply_text(f"❌ Could not fetch leverage: {error}")
|
|
|
+ return
|
|
|
+
|
|
|
+ market_data = await self.trading_engine.get_market_data(symbol)
|
|
|
+ max_leverage = "N/A"
|
|
|
+ if market_data and market_data.get('ticker', {}).get('info', {}):
|
|
|
+ max_leverage = market_data['ticker']['info'].get('maxLeverage', 'N/A')
|
|
|
+
|
|
|
+ current_leverage = leverage_data.get('leverage', 'N/A') if leverage_data else 'N/A'
|
|
|
+
|
|
|
+ message = (
|
|
|
+ f"ℹ️ <b>Leverage for {token}</b>\n\n"
|
|
|
+ f"Current Leverage: <b>{current_leverage}x</b>\n"
|
|
|
+ f"Max Leverage: <b>{max_leverage}x</b>"
|
|
|
+ )
|
|
|
+ await update.message.reply_html(message)
|
|
|
+
|
|
|
+ # Case 2: Set leverage
|
|
|
+ elif num_args == 3:
|
|
|
+ leverage = int(parts[2])
|
|
|
+ if leverage <= 0:
|
|
|
+ await self.notification_manager.send_generic_notification(
|
|
|
+ "Leverage must be a positive number.", chat_id=chat_id
|
|
|
+ )
|
|
|
+ return
|
|
|
+
|
|
|
+ # Confirmation dialog
|
|
|
+ keyboard = [
|
|
|
+ [
|
|
|
+ InlineKeyboardButton("✅ Yes, Set Leverage", callback_data=f"leverage_confirm_yes_{token}_{leverage}"),
|
|
|
+ InlineKeyboardButton("❌ No, Cancel", callback_data="leverage_confirm_no"),
|
|
|
+ ]
|
|
|
]
|
|
|
- ]
|
|
|
- reply_markup = InlineKeyboardMarkup(keyboard)
|
|
|
-
|
|
|
- await update.message.reply_html(
|
|
|
- f"Are you sure you want to set leverage for <b>{token}</b> to <b>{leverage}x</b>?",
|
|
|
- reply_markup=reply_markup,
|
|
|
- )
|
|
|
+ reply_markup = InlineKeyboardMarkup(keyboard)
|
|
|
+
|
|
|
+ await update.message.reply_html(
|
|
|
+ f"Are you sure you want to set leverage for <b>{token}</b> to <b>{leverage}x</b>?",
|
|
|
+ reply_markup=reply_markup,
|
|
|
+ )
|
|
|
+
|
|
|
except (IndexError, ValueError):
|
|
|
await self.notification_manager.send_generic_notification(
|
|
|
"Invalid format. Use: /leverage [token] [leverage_value]", chat_id=chat_id
|