Stage 01 - bootstrap v2 stable start
This commit is contained in:
1
app/src/telegram/__init__.py
Normal file
1
app/src/telegram/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Package marker."""
|
||||
1
app/src/telegram/callbacks/__init__.py
Normal file
1
app/src/telegram/callbacks/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Package marker."""
|
||||
1
app/src/telegram/handlers/__init__.py
Normal file
1
app/src/telegram/handlers/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Package marker."""
|
||||
12
app/src/telegram/handlers/auto.py
Normal file
12
app/src/telegram/handlers/auto.py
Normal 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)
|
||||
12
app/src/telegram/handlers/home.py
Normal file
12
app/src/telegram/handlers/home.py
Normal 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)
|
||||
12
app/src/telegram/handlers/journal.py
Normal file
12
app/src/telegram/handlers/journal.py
Normal 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)
|
||||
12
app/src/telegram/handlers/market.py
Normal file
12
app/src/telegram/handlers/market.py
Normal 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)
|
||||
12
app/src/telegram/handlers/portfolio.py
Normal file
12
app/src/telegram/handlers/portfolio.py
Normal 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)
|
||||
29
app/src/telegram/handlers/start.py
Normal file
29
app/src/telegram/handlers/start.py
Normal 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())
|
||||
21
app/src/telegram/handlers/system.py
Normal file
21
app/src/telegram/handlers/system.py
Normal 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)
|
||||
12
app/src/telegram/handlers/trade.py
Normal file
12
app/src/telegram/handlers/trade.py
Normal 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)
|
||||
1
app/src/telegram/keyboards/__init__.py
Normal file
1
app/src/telegram/keyboards/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
"""Package marker."""
|
||||
23
app/src/telegram/keyboards/reply.py
Normal file
23
app/src/telegram/keyboards/reply.py
Normal 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
30
app/src/telegram/menus.py
Normal 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Раздел пока в разработке."
|
||||
21
app/src/telegram/routers.py
Normal file
21
app/src/telegram/routers.py
Normal 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)
|
||||
Reference in New Issue
Block a user