The message receipt has been sorted

This commit is contained in:
algizn97
2025-11-02 17:13:36 +05:00
parent 78f21e6718
commit dbf0a30d54
2 changed files with 255 additions and 237 deletions

View File

@@ -1,9 +1,10 @@
import logging.config import logging.config
import math import math
import json
import app.telegram.keyboards.inline as kbi import app.telegram.keyboards.inline as kbi
import database.request as rq import database.request as rq
from app.bybit.get_functions.get_instruments_info import get_instruments_info from app.bybit.get_functions.get_instruments_info import get_instruments_info
from app.bybit.get_functions.get_positions import get_active_positions_by_symbol
from app.bybit.logger_bybit.logger_bybit import LOGGING_CONFIG from app.bybit.logger_bybit.logger_bybit import LOGGING_CONFIG
from app.bybit.open_positions import trading_cycle, trading_cycle_profit from app.bybit.open_positions import trading_cycle, trading_cycle_profit
from app.bybit.set_functions.set_tp_sl import set_tp_sl_for_position from app.bybit.set_functions.set_tp_sl import set_tp_sl_for_position
@@ -56,7 +57,10 @@ class TelegramMessageHandler:
async def format_execution_update(self, message, tg_id): async def format_execution_update(self, message, tg_id):
try: try:
logger.info("Execution update: %s", json.dumps(message))
execution = message.get("data", [{}])[0] execution = message.get("data", [{}])[0]
exec_type = format_value(execution.get("execType"))
if exec_type == "Trade" or exec_type == "BustTrade":
closed_size = format_value(execution.get("closedSize")) closed_size = format_value(execution.get("closedSize"))
symbol = format_value(execution.get("symbol")) symbol = format_value(execution.get("symbol"))
exec_price = format_value(execution.get("execPrice")) exec_price = format_value(execution.get("execPrice"))
@@ -89,7 +93,11 @@ class TelegramMessageHandler:
tg_id=tg_id, symbol=symbol, fee=safe_float(exec_fee) tg_id=tg_id, symbol=symbol, fee=safe_float(exec_fee)
) )
get_total_fee = 0
if user_auto_trading is not None:
get_total_fee = user_auto_trading.total_fee get_total_fee = user_auto_trading.total_fee
total_fee = safe_float(exec_fee) + safe_float(get_total_fee) total_fee = safe_float(exec_fee) + safe_float(get_total_fee)
exec_pnl = format_value(execution.get("execPnl")) exec_pnl = format_value(execution.get("execPnl"))
@@ -103,8 +111,14 @@ class TelegramMessageHandler:
user_deals_data = await rq.get_user_deal_by_symbol( user_deals_data = await rq.get_user_deal_by_symbol(
tg_id=tg_id, symbol=symbol tg_id=tg_id, symbol=symbol
) )
if user_deals_data is None:
commission_fee = "Yes_commission_fee"
commission_place = "Commission_for_qty"
else:
commission_fee = user_deals_data.commission_fee or "Yes_commission_fee" commission_fee = user_deals_data.commission_fee or "Yes_commission_fee"
commission_place = user_deals_data.commission_place or "Commission_for_qty" commission_place = user_deals_data.commission_place or "Commission_for_qty"
current_series = user_deals_data.current_series current_series = user_deals_data.current_series
current_step = user_deals_data.current_step current_step = user_deals_data.current_step
order_quantity = user_deals_data.order_quantity order_quantity = user_deals_data.order_quantity
@@ -182,12 +196,27 @@ class TelegramMessageHandler:
position_idx=0) position_idx=0)
if ress: if ress:
take_profit_truncated = await truncate_float(take_profit_price, 6) take_profit_truncated = await truncate_float(take_profit_price, 6)
stop_loss_truncated = await truncate_float(stop_loss_price, 6)
text += (f"Движение: {side_rus}\n" text += (f"Движение: {side_rus}\n"
f"Тейк-профит: {take_profit_truncated}\n" f"Тейк-профит: {take_profit_truncated}\n"
f"Стоп-лосс: {stop_loss_truncated}\n"
) )
if stop_loss_price is not None:
stop_loss_truncated = await truncate_float(stop_loss_price, 6)
else:
stop_loss_truncated = None
if stop_loss_truncated is not None:
text += f"Стоп-лосс: {stop_loss_truncated}\n"
else:
deals = await get_active_positions_by_symbol(
tg_id=tg_id, symbol=symbol
)
position = next((d for d in deals if d.get("symbol") == symbol), None)
if position:
liq_price = position.get("liqPrice", 0)
text += f"Цена ликвидации: {liq_price}\n"
else: else:
text += (f"Движение: {side_rus}\n" text += (f"Движение: {side_rus}\n"
"Не удалось установить ТП и СЛ\n") "Не удалось установить ТП и СЛ\n")

View File

@@ -25,7 +25,6 @@ class WebSocketBot:
self.user_keys = {} self.user_keys = {}
self.loop = None self.loop = None
self.message_handler = TelegramMessageHandler(telegram_bot) self.message_handler = TelegramMessageHandler(telegram_bot)
self.last_execution_seq = {}
async def run_user_check_loop(self): async def run_user_check_loop(self):
"""Run a loop to check for users and connect them to the WebSocket.""" """Run a loop to check for users and connect them to the WebSocket."""
@@ -106,17 +105,7 @@ class WebSocketBot:
await self.message_handler.format_order_update(message, tg_id) await self.message_handler.format_order_update(message, tg_id)
async def handle_execution_update(self, message, tg_id): async def handle_execution_update(self, message, tg_id):
"""Handle execution updates.""" """Handle execution updates without duplicate processing."""
data_items = message.get('data', [])
if not data_items:
return
for exec_data in data_items:
seq = exec_data.get('seq')
if tg_id not in self.last_execution_seq:
self.last_execution_seq[tg_id] = -1
if seq <= self.last_execution_seq[tg_id]:
continue
self.last_execution_seq[tg_id] = seq
await self.message_handler.format_execution_update(message, tg_id) await self.message_handler.format_execution_update(message, tg_id)
@staticmethod @staticmethod