devel #11
@@ -53,7 +53,7 @@ async def cmd_start(message: Message, state: FSMContext) -> None:
|
|||||||
await rq.create_user_conditional_settings(tg_id=tg_id)
|
await rq.create_user_conditional_settings(tg_id=tg_id)
|
||||||
await message.answer(
|
await message.answer(
|
||||||
text=f"Добро пожаловать, {full_name}!\n\n"
|
text=f"Добро пожаловать, {full_name}!\n\n"
|
||||||
"PHANTOM TRADING - ваш надежный помощник для автоматизации трейдинга😉",
|
"Чат-робот для трейдинга - ваш надежный помощник для анализа рынка и принятия взвешенных решений.😉",
|
||||||
reply_markup=kbi.connect_the_platform,
|
reply_markup=kbi.connect_the_platform,
|
||||||
)
|
)
|
||||||
logger.debug(
|
logger.debug(
|
||||||
|
@@ -6,7 +6,7 @@ from aiogram.types import CallbackQuery, Message
|
|||||||
|
|
||||||
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.helper_functions import is_int
|
from app.helper_functions import is_number, safe_float
|
||||||
from app.telegram.states.states import RiskManagementState
|
from app.telegram.states.states import RiskManagementState
|
||||||
from logger_helper.logger_helper import LOGGING_CONFIG
|
from logger_helper.logger_helper import LOGGING_CONFIG
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ async def set_take_profit_percent(message: Message, state: FSMContext) -> None:
|
|||||||
|
|
||||||
take_profit_percent_value = message.text
|
take_profit_percent_value = message.text
|
||||||
|
|
||||||
if not is_int(take_profit_percent_value):
|
if not is_number(take_profit_percent_value):
|
||||||
await message.answer(
|
await message.answer(
|
||||||
text="Ошибка: введите валидное число.",
|
text="Ошибка: введите валидное число.",
|
||||||
reply_markup=kbi.back_to_risk_management,
|
reply_markup=kbi.back_to_risk_management,
|
||||||
@@ -98,7 +98,7 @@ async def set_take_profit_percent(message: Message, state: FSMContext) -> None:
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
if int(take_profit_percent_value) < 1 or int(take_profit_percent_value) > 100:
|
if safe_float(take_profit_percent_value) < 1 or safe_float(take_profit_percent_value) > 100:
|
||||||
await message.answer(
|
await message.answer(
|
||||||
text="Ошибка: введите число от 1 до 100.",
|
text="Ошибка: введите число от 1 до 100.",
|
||||||
reply_markup=kbi.back_to_risk_management,
|
reply_markup=kbi.back_to_risk_management,
|
||||||
@@ -112,7 +112,7 @@ async def set_take_profit_percent(message: Message, state: FSMContext) -> None:
|
|||||||
|
|
||||||
req = await rq.set_take_profit_percent(
|
req = await rq.set_take_profit_percent(
|
||||||
tg_id=message.from_user.id,
|
tg_id=message.from_user.id,
|
||||||
take_profit_percent=int(take_profit_percent_value),
|
take_profit_percent=safe_float(take_profit_percent_value),
|
||||||
)
|
)
|
||||||
|
|
||||||
if req:
|
if req:
|
||||||
@@ -207,7 +207,7 @@ async def set_stop_loss_percent(message: Message, state: FSMContext) -> None:
|
|||||||
|
|
||||||
stop_loss_percent_value = message.text
|
stop_loss_percent_value = message.text
|
||||||
|
|
||||||
if not is_int(stop_loss_percent_value):
|
if not is_number(stop_loss_percent_value):
|
||||||
await message.answer(
|
await message.answer(
|
||||||
text="Ошибка: введите валидное число.",
|
text="Ошибка: введите валидное число.",
|
||||||
reply_markup=kbi.back_to_risk_management,
|
reply_markup=kbi.back_to_risk_management,
|
||||||
@@ -219,7 +219,7 @@ async def set_stop_loss_percent(message: Message, state: FSMContext) -> None:
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
if int(stop_loss_percent_value) < 1 or int(stop_loss_percent_value) > 100:
|
if safe_float(stop_loss_percent_value) < 1 or safe_float(stop_loss_percent_value) > 100:
|
||||||
await message.answer(
|
await message.answer(
|
||||||
text="Ошибка: введите число от 1 до 100.",
|
text="Ошибка: введите число от 1 до 100.",
|
||||||
reply_markup=kbi.back_to_risk_management,
|
reply_markup=kbi.back_to_risk_management,
|
||||||
@@ -232,7 +232,7 @@ async def set_stop_loss_percent(message: Message, state: FSMContext) -> None:
|
|||||||
return
|
return
|
||||||
|
|
||||||
req = await rq.set_stop_loss_percent(
|
req = await rq.set_stop_loss_percent(
|
||||||
tg_id=message.from_user.id, stop_loss_percent=int(stop_loss_percent_value)
|
tg_id=message.from_user.id, stop_loss_percent=safe_float(stop_loss_percent_value)
|
||||||
)
|
)
|
||||||
|
|
||||||
if req:
|
if req:
|
||||||
@@ -262,130 +262,6 @@ async def set_stop_loss_percent(message: Message, state: FSMContext) -> None:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@router_risk_management.callback_query(F.data == "max_risk_percent")
|
|
||||||
async def max_risk_percent(callback_query: CallbackQuery, state: FSMContext) -> None:
|
|
||||||
"""
|
|
||||||
Handles the 'max_risk_percent' callback query.
|
|
||||||
|
|
||||||
Clears the current FSM state, edits the message text to display the maximum risk percentage options,
|
|
||||||
and shows an inline keyboard for selection.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
callback_query (CallbackQuery): Incoming callback query from Telegram inline keyboard.
|
|
||||||
state (FSMContext): Finite State Machine context for the current user session.
|
|
||||||
|
|
||||||
Logs:
|
|
||||||
Success or error messages with user identification.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
await state.clear()
|
|
||||||
await state.set_state(RiskManagementState.max_risk_percent_state)
|
|
||||||
msg = await callback_query.message.edit_text(
|
|
||||||
text="Введите максимальный процент риска: ",
|
|
||||||
reply_markup=kbi.back_to_risk_management,
|
|
||||||
)
|
|
||||||
await state.update_data(prompt_message_id=msg.message_id)
|
|
||||||
logger.debug(
|
|
||||||
"Command max_risk_percent processed successfully for user: %s",
|
|
||||||
callback_query.from_user.id,
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
await callback_query.answer(
|
|
||||||
text="Произошла ошибка. Пожалуйста, попробуйте позже."
|
|
||||||
)
|
|
||||||
logger.error(
|
|
||||||
"Error processing command max_risk_percent for user %s: %s",
|
|
||||||
callback_query.from_user.id,
|
|
||||||
e,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router_risk_management.message(RiskManagementState.max_risk_percent_state)
|
|
||||||
async def set_max_risk_percent(message: Message, state: FSMContext) -> None:
|
|
||||||
"""
|
|
||||||
Handles user input for setting the maximum risk percentage.
|
|
||||||
|
|
||||||
Updates FSM context with the selected percentage and persists the choice in database.
|
|
||||||
Sends an acknowledgement to user and clears FSM state afterward.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
message (Message): Incoming message from user containing the maximum risk percentage.
|
|
||||||
state (FSMContext): Finite State Machine context for the current user session.
|
|
||||||
|
|
||||||
Logs:
|
|
||||||
Success or error messages with user identification.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
try:
|
|
||||||
data = await state.get_data()
|
|
||||||
if "prompt_message_id" in data:
|
|
||||||
prompt_message_id = data["prompt_message_id"]
|
|
||||||
await message.bot.delete_message(
|
|
||||||
chat_id=message.chat.id, message_id=prompt_message_id
|
|
||||||
)
|
|
||||||
await message.delete()
|
|
||||||
except Exception as e:
|
|
||||||
if "message to delete not found" in str(e).lower():
|
|
||||||
pass # Ignore this error
|
|
||||||
else:
|
|
||||||
raise e
|
|
||||||
|
|
||||||
max_risk_percent_value = message.text
|
|
||||||
|
|
||||||
if not is_int(max_risk_percent_value):
|
|
||||||
await message.answer(
|
|
||||||
text="Ошибка: введите валидное число.",
|
|
||||||
reply_markup=kbi.back_to_risk_management,
|
|
||||||
)
|
|
||||||
logger.debug(
|
|
||||||
"User %s input invalid (not an valid number): %s",
|
|
||||||
message.from_user.id,
|
|
||||||
max_risk_percent_value,
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
if int(max_risk_percent_value) < 1 or int(max_risk_percent_value) > 100:
|
|
||||||
await message.answer(
|
|
||||||
text="Ошибка: введите число от 1 до 100.",
|
|
||||||
reply_markup=kbi.back_to_risk_management,
|
|
||||||
)
|
|
||||||
logger.debug(
|
|
||||||
"User %s input invalid (not an valid number): %s",
|
|
||||||
message.from_user.id,
|
|
||||||
max_risk_percent_value,
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
req = await rq.set_max_risk_percent(
|
|
||||||
tg_id=message.from_user.id, max_risk_percent=int(max_risk_percent_value)
|
|
||||||
)
|
|
||||||
|
|
||||||
if req:
|
|
||||||
await message.answer(
|
|
||||||
text=f"Максимальный процент риска установлен на {max_risk_percent_value}%.",
|
|
||||||
reply_markup=kbi.back_to_risk_management,
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
await message.answer(
|
|
||||||
text="Произошла ошибка при установке максимального процента риска. "
|
|
||||||
"Пожалуйста, попробуйте позже.",
|
|
||||||
reply_markup=kbi.back_to_risk_management,
|
|
||||||
)
|
|
||||||
|
|
||||||
await state.clear()
|
|
||||||
except Exception as e:
|
|
||||||
await message.answer(
|
|
||||||
text="Произошла ошибка при установке максимального процента риска. "
|
|
||||||
"Пожалуйста, попробуйте позже.",
|
|
||||||
reply_markup=kbi.back_to_risk_management,
|
|
||||||
)
|
|
||||||
logger.error(
|
|
||||||
"Error processing command max_risk_percent for user %s: %s",
|
|
||||||
message.from_user.id,
|
|
||||||
e,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@router_risk_management.callback_query(F.data == "commission_fee")
|
@router_risk_management.callback_query(F.data == "commission_fee")
|
||||||
async def commission_fee(callback_query: CallbackQuery, state: FSMContext) -> None:
|
async def commission_fee(callback_query: CallbackQuery, state: FSMContext) -> None:
|
||||||
"""
|
"""
|
||||||
|
Reference in New Issue
Block a user