@@ -8,6 +8,8 @@ from aiogram.types import CallbackQuery, InlineKeyboardMarkup, Message
from aiogram . utils . keyboard import InlineKeyboardBuilder
from src . core . system_status import build_system_text , get_system_snapshot , has_system_alerts
from src . core . config import load_settings
from src . core . constants import APP_NAME , APP_VERSION
from src . trading . journal . service import JournalService
@@ -161,6 +163,77 @@ async def open_system_management(callback: CallbackQuery) -> None:
await callback . answer ( )
@router.callback_query ( F . data == " settings:auto " )
async def open_auto_settings ( callback : CallbackQuery ) - > None :
if callback . message is None :
await callback . answer ( " Сообщение не найдено " , show_alert = True )
return
text = (
" <b>🤖 Автоторговля</b> \n \n "
" <b>СИСТЕМА</b> · Настройки \n \n "
" Статус: — \n "
" Стратегия: — \n "
" Риск: — \n \n "
" В разработке."
)
builder = InlineKeyboardBuilder ( )
builder . button ( text = " ⬅️ Назад " , callback_data = " system:management " )
builder . button ( text = " 🤖 Автоторговля " , callback_data = " auto:home " )
builder . adjust ( 2 )
await callback . message . edit_text ( text , reply_markup = builder . as_markup ( ) )
await callback . answer ( )
@router.callback_query ( F . data == " settings:trade " )
async def open_trade_settings ( callback : CallbackQuery ) - > None :
if callback . message is None :
await callback . answer ( " Сообщение не найдено " , show_alert = True )
return
text = (
" <b>📊 Торговля</b> \n \n "
" <b>СИСТЕМА</b> · Настройки \n \n "
" Инструмент: — \n "
" Тип ордера по умолчанию: — \n "
" Пресеты количества: — \n \n "
" В разработке."
)
builder = InlineKeyboardBuilder ( )
builder . button ( text = " ⬅️ Назад " , callback_data = " system:management " )
builder . button ( text = " 📊 Торговля " , callback_data = " trade:home " )
builder . adjust ( 2 )
await callback . message . edit_text ( text , reply_markup = builder . as_markup ( ) )
await callback . answer ( )
@router.callback_query ( F . data == " settings:general " )
async def open_general_settings ( callback : CallbackQuery ) - > None :
if callback . message is None :
await callback . answer ( " Сообщение не найдено " , show_alert = True )
return
text = (
" <b>🌍 Общие</b> \n \n "
" <b>СИСТЕМА</b> · Настройки \n \n "
" Режим аккаунта: — \n "
" Часовой пояс: — \n "
" Язык интерфейса: ru \n \n "
" В разработке."
)
builder = InlineKeyboardBuilder ( )
builder . button ( text = " ⬅️ Назад " , callback_data = " system:management " )
builder . adjust ( 1 )
await callback . message . edit_text ( text , reply_markup = builder . as_markup ( ) )
await callback . answer ( )
@router.callback_query ( F . data == " settings:journal " )
async def open_journal_settings ( callback : CallbackQuery ) - > None :
if callback . message is None :
@@ -184,7 +257,7 @@ async def open_journal_settings(callback: CallbackQuery) -> None:
builder . button ( text = " 🗄 Архив " , callback_data = " settings:journal_archive " )
builder . button ( text = " 📦 Лимит " , callback_data = " settings:journal_limit " )
builder . button ( text = " ⏳ Хранение " , callback_data = " settings:journal_retention " )
builder . button ( text = " ⬅️ Назад " , callback_data = " system:control " )
builder . button ( text = " ⬅️ Назад " , callback_data = " system:management " )
builder . button ( text = " 📒 Журнал " , callback_data = " journal:1 " )
builder . adjust ( 2 , 2 , 2 )
@@ -195,6 +268,88 @@ async def open_journal_settings(callback: CallbackQuery) -> None:
await callback . answer ( )
@router.callback_query ( F . data == " settings:journal_archive " )
async def open_journal_archive_settings ( callback : CallbackQuery ) - > None :
if callback . message is None :
await callback . answer ( " Сообщение не найдено " , show_alert = True )
return
text = (
" <b>🗄 Архив</b> \n \n "
" <b>СИСТЕМА</b> · Настройки · Журнал \n \n "
" Автоматический архив журнала: — \n "
" Формат архива: — \n "
" Периодичность: — \n \n "
" В разработке."
)
builder = InlineKeyboardBuilder ( )
builder . button ( text = " ⬅️ Назад " , callback_data = " settings:journal " )
builder . button ( text = " 📒 Журнал " , callback_data = " journal:1 " )
builder . adjust ( 2 )
await callback . message . edit_text ( text , reply_markup = builder . as_markup ( ) )
await callback . answer ( )
@router.callback_query ( F . data == " settings:journal_limit " )
async def open_journal_limit_settings ( callback : CallbackQuery ) - > None :
if callback . message is None :
await callback . answer ( " Сообщение не найдено " , show_alert = True )
return
text = (
" <b>📦 Лимит</b> \n \n "
" <b>СИСТЕМА</b> · Настройки · Журнал \n \n "
" Текущий лимит: — \n \n "
" Доступные варианты: "
)
builder = InlineKeyboardBuilder ( )
builder . button ( text = " 1 000 " , callback_data = " settings:journal_limit_stub " )
builder . button ( text = " 5 000 " , callback_data = " settings:journal_limit_stub " )
builder . button ( text = " 10 000 " , callback_data = " settings:journal_limit_stub " )
builder . button ( text = " ∞ " , callback_data = " settings:journal_limit_stub " )
builder . button ( text = " ⬅️ Назад " , callback_data = " settings:journal " )
builder . adjust ( 2 , 2 , 1 )
await callback . message . edit_text ( text , reply_markup = builder . as_markup ( ) )
await callback . answer ( )
@router.callback_query ( F . data == " settings:journal_retention " )
async def open_journal_retention_settings ( callback : CallbackQuery ) - > None :
if callback . message is None :
await callback . answer ( " Сообщение не найдено " , show_alert = True )
return
text = (
" <b>⏳ Хранение</b> \n \n "
" <b>СИСТЕМА</b> · Настройки · Журнал \n \n "
" Текущий срок хранения: — \n \n "
" Доступные варианты: "
)
builder = InlineKeyboardBuilder ( )
builder . button ( text = " 7 дней " , callback_data = " settings:journal_retention_stub " )
builder . button ( text = " 30 дней " , callback_data = " settings:journal_retention_stub " )
builder . button ( text = " 90 дней " , callback_data = " settings:journal_retention_stub " )
builder . button ( text = " ∞ " , callback_data = " settings:journal_retention_stub " )
builder . button ( text = " ⬅️ Назад " , callback_data = " settings:journal " )
builder . adjust ( 2 , 2 , 1 )
await callback . message . edit_text ( text , reply_markup = builder . as_markup ( ) )
await callback . answer ( )
@router.callback_query ( F . data . in_ ( {
" settings:journal_limit_stub " ,
" settings:journal_retention_stub " ,
} ) )
async def journal_settings_stub ( callback : CallbackQuery ) - > None :
await callback . answer ( " Настройка скоро появится " , show_alert = True )
@router.callback_query ( F . data == " system:back " )
async def back_to_system ( callback : CallbackQuery ) - > None :
if callback . message is None :
@@ -216,4 +371,39 @@ async def back_to_system(callback: CallbackQuery) -> None:
@router.callback_query ( F . data == " system:about " )
async def open_system_about ( callback : CallbackQuery ) - > None :
await callback . answer ( " О продукте скоро появится" )
if callback . message is None :
await callback . answer ( " Сообщение не найдено " , show_alert = True )
return
settings = load_settings ( )
journal = JournalService ( )
journal . log_ui_info (
event_type = " system_about_opened " ,
message = " Открыта информация о продукте. " ,
screen = " system " ,
action = " about " ,
user_id = callback . from_user . id if callback . from_user else None ,
chat_id = callback . message . chat . id if callback . message . chat else None ,
)
text = (
" <b>ℹ ️ Информация</b> \n \n "
" <b>СИСТЕМА</b> \n \n "
f " <b> { APP_NAME } </b> \n "
f " Версия: { APP_VERSION } \n "
f " Режим: { ' DEMO ' if ' demo ' in settings . exchange_base_url . lower ( ) else ' LIVE ' } \n "
f " Часовой пояс: { settings . tz } \n \n "
" Торговый Telegram-бот для контроля рынка, портфеля, журнала событий "
" и будущей автоторговли. "
)
builder = InlineKeyboardBuilder ( )
builder . button ( text = " ⬅️ Назад " , callback_data = " system:back " )
builder . adjust ( 1 )
await callback . message . edit_text (
text ,
reply_markup = builder . as_markup ( ) ,
)
await callback . answer ( )