Stage 01 - bootstrap v2 stable start

This commit is contained in:
2026-04-13 20:47:04 +03:00
commit 551b4bd690
51 changed files with 1190 additions and 0 deletions

View File

@@ -0,0 +1 @@
"""Package marker."""

View File

@@ -0,0 +1 @@
"""Package marker."""

View File

@@ -0,0 +1 @@
"""Package marker."""

View File

@@ -0,0 +1,12 @@
from aiogram import F, Router
from aiogram.types import Message
from src.telegram.menus import AUTO_TEXT
router = Router(name="auto")
@router.message(F.text == "🤖 Авто")
async def open_auto(message: Message) -> None:
await message.answer(AUTO_TEXT)

View File

@@ -0,0 +1,12 @@
from aiogram import F, Router
from aiogram.types import Message
from src.telegram.menus import HOME_TEXT
router = Router(name="home")
@router.message(F.text == "🏠 Главная")
async def open_home(message: Message) -> None:
await message.answer(HOME_TEXT)

View File

@@ -0,0 +1,12 @@
from aiogram import F, Router
from aiogram.types import Message
from src.telegram.menus import JOURNAL_TEXT
router = Router(name="journal")
@router.message(F.text == "📒 Журнал")
async def open_journal(message: Message) -> None:
await message.answer(JOURNAL_TEXT)

View File

@@ -0,0 +1,12 @@
from aiogram import F, Router
from aiogram.types import Message
from src.telegram.menus import MARKET_TEXT
router = Router(name="market")
@router.message(F.text == "📈 Рынок")
async def open_market(message: Message) -> None:
await message.answer(MARKET_TEXT)

View File

@@ -0,0 +1,12 @@
from aiogram import F, Router
from aiogram.types import Message
from src.telegram.menus import PORTFOLIO_TEXT
router = Router(name="portfolio")
@router.message(F.text == "💼 Портфель")
async def open_portfolio(message: Message) -> None:
await message.answer(PORTFOLIO_TEXT)

View File

@@ -0,0 +1,29 @@
from aiogram import F, Router
from aiogram.filters import Command
from aiogram.types import Message
from src.telegram.keyboards.reply import build_main_menu_keyboard
from src.telegram.menus import MAIN_MENU_TEXT, SYSTEM_TEXT
router = Router(name="start")
@router.message(Command("start"))
async def cmd_start(message: Message) -> None:
await message.answer(MAIN_MENU_TEXT, reply_markup=build_main_menu_keyboard())
@router.message(Command("menu"))
async def cmd_menu(message: Message) -> None:
await message.answer(MAIN_MENU_TEXT, reply_markup=build_main_menu_keyboard())
@router.message(Command("help"))
async def cmd_help(message: Message) -> None:
await message.answer(SYSTEM_TEXT, reply_markup=build_main_menu_keyboard())
@router.message(F.text == "Меню")
async def menu_shortcut(message: Message) -> None:
await message.answer(MAIN_MENU_TEXT, reply_markup=build_main_menu_keyboard())

View File

@@ -0,0 +1,21 @@
import platform
from aiogram import F, Router
from aiogram.types import Message
from src.core.constants import APP_NAME, APP_VERSION
from src.telegram.menus import SYSTEM_TEXT
router = Router(name="system")
@router.message(F.text.in_({"⚙️ Система", "⚙ Система"}))
async def open_system(message: Message) -> None:
runtime_info = (
"\n\n<b>Runtime</b>\n"
f"- app: {APP_NAME} {APP_VERSION}\n"
f"- python: {platform.python_version()}\n"
f"- os: {platform.system()} {platform.release()}"
)
await message.answer(SYSTEM_TEXT + runtime_info)

View File

@@ -0,0 +1,12 @@
from aiogram import F, Router
from aiogram.types import Message
from src.telegram.menus import TRADE_TEXT
router = Router(name="trade")
@router.message(F.text == "⚡ Торговля")
async def open_trade(message: Message) -> None:
await message.answer(TRADE_TEXT)

View File

@@ -0,0 +1 @@
"""Package marker."""

View File

@@ -0,0 +1,23 @@
from aiogram.types import KeyboardButton, ReplyKeyboardMarkup
def build_main_menu_keyboard() -> ReplyKeyboardMarkup:
return ReplyKeyboardMarkup(
keyboard=[
[
KeyboardButton(text="🏠 Главная"),
KeyboardButton(text="📈 Рынок"),
KeyboardButton(text="💼 Портфель"),
],
[
KeyboardButton(text="⚡ Торговля"),
KeyboardButton(text="🤖 Авто"),
KeyboardButton(text="📒 Журнал"),
],
[
KeyboardButton(text="⚙️ Система"),
],
],
resize_keyboard=True,
input_field_placeholder="Выбери раздел...",
)

30
app/src/telegram/menus.py Normal file
View File

@@ -0,0 +1,30 @@
MAIN_MENU_TEXT = (
"<b>Dzentra Bot</b>\n\n"
"Новый каркас проекта успешно создан.\n\n"
"Выбери раздел через меню ниже."
)
HOME_TEXT = (
"<b>🏠 Главная</b>\n\n"
"Это главный экран бота.\n\n"
"Сейчас здесь отображается базовый статус:\n"
"- бот запущен\n"
"- меню подключено\n"
"- handlers работают\n"
"- проект на этапе Bootstrap v2\n"
)
SYSTEM_TEXT = (
"<b>⚙️ Система</b>\n\n"
"Системный экран.\n\n"
"<b>Справка</b>\n"
"/start — запуск\n"
"/menu — показать меню\n"
"/help — краткая справка\n"
)
MARKET_TEXT = "<b>📈 Рынок</b>\n\nРаздел пока в разработке."
PORTFOLIO_TEXT = "<b>💼 Портфель</b>\n\nРаздел пока в разработке."
TRADE_TEXT = "<b>⚡ Торговля</b>\n\nРаздел пока в разработке."
AUTO_TEXT = "<b>🤖 Авто</b>\n\nРаздел пока в разработке."
JOURNAL_TEXT = "<b>📒 Журнал</b>\n\nРаздел пока в разработке."

View File

@@ -0,0 +1,21 @@
from aiogram import Dispatcher
from src.telegram.handlers.auto import router as auto_router
from src.telegram.handlers.home import router as home_router
from src.telegram.handlers.journal import router as journal_router
from src.telegram.handlers.market import router as market_router
from src.telegram.handlers.portfolio import router as portfolio_router
from src.telegram.handlers.start import router as start_router
from src.telegram.handlers.system import router as system_router
from src.telegram.handlers.trade import router as trade_router
def setup_routers(dispatcher: Dispatcher) -> None:
dispatcher.include_router(start_router)
dispatcher.include_router(home_router)
dispatcher.include_router(market_router)
dispatcher.include_router(portfolio_router)
dispatcher.include_router(trade_router)
dispatcher.include_router(auto_router)
dispatcher.include_router(journal_router)
dispatcher.include_router(system_router)