diff --git a/app/bybit/web_socket.py b/app/bybit/web_socket.py index a0ecc02..b89fb6e 100644 --- a/app/bybit/web_socket.py +++ b/app/bybit/web_socket.py @@ -22,6 +22,7 @@ class WebSocketBot: self.ws_private = None self.user_messages = {} self.user_sockets = {} + self.user_keys = {} self.loop = None self.message_handler = TelegramMessageHandler(telegram_bot) @@ -37,14 +38,23 @@ class WebSocketBot: if not api_key or not api_secret: continue - if tg_id in self.user_sockets: + keys_stored = self.user_keys.get(tg_id) + if tg_id in self.user_sockets and keys_stored == (api_key, api_secret): continue + if tg_id in self.user_sockets: + self.user_sockets.clear() + self.user_messages.clear() + self.user_keys.clear() + logger.info("Closed old websocket for user %s due to key change", tg_id) + success = await self.try_connect_user(api_key, api_secret, tg_id) if success: + self.user_keys[tg_id] = (api_key, api_secret) self.user_messages.setdefault( tg_id, {"position": None, "order": None, "execution": None} ) + logger.info("User %s connected to WebSocket", tg_id) else: await asyncio.sleep(30) @@ -54,7 +64,8 @@ class WebSocketBot: """Clear the user_sockets and user_messages dictionaries.""" self.user_sockets.clear() self.user_messages.clear() - logger.info("Cleared user_sockets and user_messages on shutdown") + self.user_keys.clear() + logger.info("Cleared user_sockets") async def try_connect_user(self, api_key, api_secret, tg_id): """Try to connect a user to the WebSocket.""" diff --git a/app/telegram/handlers/main_settings/additional_settings.py b/app/telegram/handlers/main_settings/additional_settings.py index b60036a..1d1dd4e 100644 --- a/app/telegram/handlers/main_settings/additional_settings.py +++ b/app/telegram/handlers/main_settings/additional_settings.py @@ -907,7 +907,7 @@ async def leverage(message: Message, state: FSMContext) -> None: if leverage_float > max_leverage or leverage_float < min_leverage: await message.answer( - text=f"Кредитное плечо должно быть от {min_leverage} до {max_leverage}.", + text=f"Кредитное плечо должно быть от {min_leverage} до {max_leverage}", reply_markup=kbi.back_to_additional_settings, ) logger.info( @@ -946,7 +946,7 @@ async def leverage(message: Message, state: FSMContext) -> None: ) if req_leverage and req_leverage_to_buy_and_sell: await message.answer( - text=f"Кредитное плечо успешно установлено на {leverage_float}.", + text=f"Кредитное плечо успешно установлено на {leverage_float}", reply_markup=kbi.back_to_additional_settings, ) logger.info( @@ -1036,7 +1036,7 @@ async def set_leverage_to_buy(message: Message, state: FSMContext) -> None: ) if leverage_to_buy_float > max_leverage: await message.answer( - text=f"Кредитное плечо {leverage_to_buy_float} превышает максимальное {max_leverage} для {symbol}.", + text=f"Кредитное плечо {leverage_to_buy_float} превышает максимальное {max_leverage} для {symbol}", reply_markup=kbi.back_to_additional_settings, ) logger.info( @@ -1149,7 +1149,7 @@ async def set_leverage_to_sell(message: Message, state: FSMContext) -> None: ) if leverage_to_sell_float < min_leverage: await message.answer( - text=f"Кредитное плечо {leverage_to_sell_float} ниже минимального {min_leverage} для {symbol}.", + text=f"Кредитное плечо {leverage_to_sell_float} ниже минимального {min_leverage} для {symbol}", reply_markup=kbi.back_to_additional_settings, ) logger.info( @@ -1188,7 +1188,7 @@ async def set_leverage_to_sell(message: Message, state: FSMContext) -> None: if req: await message.answer( text=f"Размер кредитного плеча установлен на {leverage_to_buy_float} для Лонга " - f"и {leverage_to_sell_float} для Шорта .", + f"и {leverage_to_sell_float} для Шорта", reply_markup=kbi.back_to_additional_settings, ) else: @@ -1310,7 +1310,7 @@ async def set_order_quantity(message: Message, state: FSMContext) -> None: if quantity < min_order_qty or quantity > max_order_qty: await message.answer( - text=f"Количество ордера должно быть от {min_order_qty} до {max_order_qty}.", + text=f"Количество ордера должно быть от {min_order_qty} до {max_order_qty}", reply_markup=kbi.back_to_additional_settings, ) return @@ -1321,7 +1321,7 @@ async def set_order_quantity(message: Message, state: FSMContext) -> None: if req: await message.answer( - text=f"Количество ордера установлено на {message.text}.", + text=f"Количество ордера установлено на {message.text}", reply_markup=kbi.back_to_additional_settings, ) else: @@ -1428,7 +1428,7 @@ async def set_martingale_factor(message: Message, state: FSMContext) -> None: if req: await message.answer( - text=f"Коэффициент мартингейла установлен на {message.text}.", + text=f"Коэффициент мартингейла установлен на {message.text}", reply_markup=kbi.back_to_additional_settings, ) else: @@ -1534,7 +1534,7 @@ async def set_max_bets_in_series(message: Message, state: FSMContext) -> None: if req: await message.answer( - text=f"Максимальное количество шагов установлено на {message.text}.", + text=f"Максимальное количество шагов установлено на {message.text}", reply_markup=kbi.back_to_additional_settings, ) else: