Skip to main content

Полнофункциональный фреймворк для разработки Telegram ботов с DDD, ORM, веб-сервером и Mini Apps

Project description

TgFramework 3.1.2

Мощный фреймворк для разработки Telegram ботов с DDD архитектурой, собственной ORM, веб-сервером, React + TypeScript и поддержкой Mini Apps.

Установка

pip install tgframework-bot python-dotenv

# Для PostgreSQL
pip install psycopg2-binary

Быстрый старт

# 1. Создать проект с React (по умолчанию)
tgframework create-project my_bot

# Или без React
tgframework create-project my_bot --no-react

# 2. Перейти в проект
cd my_bot

# 3. Настроить .env (добавить BOT_TOKEN)

# 4. Установить и собрать frontend (если с React)
cd frontend && npm install && npm run build && cd ..

# 5. Инициализировать БД
tgframework init-db

# 6. Запустить
python main.py

Архитектура DDD/DTO

tgframework/
├── core/           # Конфигурация (.env), исключения
├── orm/            # ORM с SQLite/PostgreSQL, миграции
├── domain/         # Domain модели, DTO, сервисы, репозитории
├── application/    # Handlers, keyboards, filters, middleware
├── infrastructure/ # Rate limiter, utils
├── features/       # Quiz, FSM
├── bot/            # Telegram bot
├── web/            # Веб-сервер, роутинг, контроллеры
├── miniapp/        # Mini Apps support
└── cli/            # Генератор проектов, миграции

Роутинг в стиле Laravel

TgFramework 3.0 включает мощную систему роутинга для веб-части:

from tgframework.web import Router, Controller

router = Router()

# Декораторы
@router.get("/api/users")
async def get_users(request):
    return {"users": [...]}

# Группировка
with router.group(prefix="/api"):
    router.get("/stats", controller.stats)
    router.post("/send", controller.send)

# RESTful ресурсы
router.resource("/products", product_controller)

Контроллеры

from tgframework.web import Controller

class ApiController(Controller):
    async def index(self, request):
        return self.success({"message": "API v3.0"})
    
    async def users(self, request):
        return self.success(users_list)
    
    async def error_example(self, request):
        return self.error("Not found", status=404)

Встроенные endpoints:

  • /api/users - список пользователей
  • /api/users/{id} - детали пользователя
  • /api/stats - статистика бота
  • /miniapp - Mini App интерфейс
  • /admin - админ-панель

Миграции в стиле Laravel

# Инициализация
tgframework init-db

# Применить миграции
tgframework migrate

# Откатить последний батч
tgframework migrate:rollback

# Откатить все
tgframework migrate:reset

# Пересоздать БД
tgframework migrate:fresh

# Статус
tgframework migrate:status

# Создать новую
tgframework make:migration create_products_table

Пример миграции

from tgframework.orm import Migration, DatabaseEngine

class CreateProductsTable(Migration):
    def up(self, engine: DatabaseEngine):
        is_postgres = "postgresql" in engine.connection_string
        
        query = """
            CREATE TABLE products (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                name TEXT NOT NULL,
                price INTEGER NOT NULL
            )
        """
        
        if is_postgres:
            query = query.replace("AUTOINCREMENT", "")
            query = query.replace("INTEGER PRIMARY KEY", "SERIAL PRIMARY KEY")
        
        engine.execute(query)
        engine.commit()
    
    def down(self, engine: DatabaseEngine):
        engine.execute("DROP TABLE IF EXISTS products")
        engine.commit()

ORM с SQLite/PostgreSQL

from tgframework import load_config, create_engine, Session
from tgframework.domain import UserService, UserRepository

config = load_config()
engine = create_engine(config.database.connection_string)
session = Session(engine)

user_service = UserService(UserRepository(session))
users = user_service.get_all_users()

Переключение БД в .env:

# SQLite
DB_ENGINE=sqlite
DB_NAME=bot.db

# PostgreSQL
DB_ENGINE=postgresql
DB_NAME=mybot
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=password

Простой бот

from tgframework import Bot, load_config

config = load_config()
bot = Bot(token=config.bot.token)

@bot.register_command("start")
async def start(update, context):
    await bot.send_message(
        context["chat"]["id"],
        f"Привет, {context['user'].get('first_name')}!"
    )

bot.run()

Бот с БД и веб-сервером

import asyncio
from tgframework import TelegramBot, WebServer, load_config, create_engine, Session

async def main():
    config = load_config()
    engine = create_engine(config.database.connection_string)
    engine.connect()
    
    session = Session(engine)
    bot = TelegramBot(config.bot.token, session)
    
    # Веб-сервер с API и админ-панелью
    if config.web.enabled:
        web_server = WebServer(config, session, bot)
        await web_server.start()
    
    await bot.start_polling()

asyncio.run(main())

React + TypeScript (Новое в 3.1.2!)

from tgframework.miniapp import ReactRenderer, get_telegram_user_photo_url

# Инициализация
renderer = ReactRenderer('/path/to/build')

# Server-Side Props для React
props = {
    'user': {
        'user_id': 123,
        'first_name': 'John',
        'photo_url': get_telegram_user_photo_url(bot_token, 123)
    },
    'page': 'home'
}

# Рендеринг React приложения
return renderer.render(props)

Frontend (React + TypeScript):

// Получаем server props
const serverProps = (window as any).__SERVER_PROPS__ || {};

// Отображаем аватарку
{user.photo_url ? (
  <img src={user.photo_url} alt={user.first_name} />
) : (
  <div className="avatar-placeholder">{user.first_name[0]}</div>
)}

Полная документация: REACT_GUIDE.md

Mini Apps

from tgframework.miniapp import MiniAppValidator

validator = MiniAppValidator(bot_token)
validated = validator.validate_init_data(init_data)

CLI Команды

# Создание проекта
tgframework create-project my_bot

# Миграции
tgframework init-db                    # Инициализация
tgframework migrate                    # Применить
tgframework migrate:rollback           # Откатить
tgframework migrate:refresh            # Обновить
tgframework migrate:fresh              # Пересоздать
tgframework migrate:status             # Статус
tgframework make:migration name        # Создать

Конфигурация (.env)

# Bot
BOT_TOKEN=your_token
BOT_MODE=polling

# Database  
DB_ENGINE=sqlite          # или postgresql
DB_NAME=bot.db
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=

# Web
WEB_ENABLED=true
WEB_HOST=0.0.0.0
WEB_PORT=8080
WEB_SECRET_KEY=secret
ADMIN_ENABLED=true

# Mini App
MINIAPP_ENABLED=false
MINIAPP_URL=

Новое в 3.1.2

React + TypeScript интеграция

  • ReactRenderer - Server-Side Rendering с props
  • get_telegram_user_photo_url() - автоматическая загрузка аватарок
  • TypeScript компоненты с типизацией
  • Vite сборка с Hot Module Replacement
  • Telegram Web App SDK - полная интеграция
  • Готовые компоненты - Header, Profile, Stats, ActionGrid
# Создать проект с React
tgframework create-project my_bot
cd my_bot/frontend
npm install && npm run build

Возможности

Core

  • Конфигурация через .env
  • Специализированные исключения

ORM

  • SQLite и PostgreSQL support
  • Query Builder
  • Миграции в стиле Laravel
  • Session management

Domain (DDD)

  • Domain модели
  • DTO для передачи данных
  • Repositories для работы с БД
  • Services для бизнес-логики

Application

  • Handlers (commands, callbacks, messages)
  • Keyboards (Inline, Reply)
  • Filters
  • Middleware
  • State Machine
  • Pagination

Infrastructure

  • Rate Limiter
  • Utils (форматирование, парсинг)

Features

  • Quiz система
  • FSM (Finite State Machine)

Web

  • Роутинг в стиле Laravel
  • Controllers (API, Admin, Mini App)
  • Telegram авторизация
  • CORS support

Mini Apps

  • React + TypeScript - современный frontend
  • Server-Side Props - передача данных из Python
  • Telegram аватарки - автоматическое получение
  • Валидация initData
  • Telegram Web App SDK

Документация

Лицензия

MIT License

Авторы

TgFramework Team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tgframework_bot-3.1.2.tar.gz (70.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tgframework_bot-3.1.2-py3-none-any.whl (76.5 kB view details)

Uploaded Python 3

File details

Details for the file tgframework_bot-3.1.2.tar.gz.

File metadata

  • Download URL: tgframework_bot-3.1.2.tar.gz
  • Upload date:
  • Size: 70.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for tgframework_bot-3.1.2.tar.gz
Algorithm Hash digest
SHA256 449469edb0d253fd12dfe3fcd310edf0e65e05675ad6a13e29424315ae70b990
MD5 2a6db72d2e26c125790d4a0decd5ab64
BLAKE2b-256 5a089250e018c1bfc1152068f2f508d205611c24facb1d3e54dfa522229e9dad

See more details on using hashes here.

File details

Details for the file tgframework_bot-3.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for tgframework_bot-3.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f3ee901d078ff575314fd08223c1e42d7afc4b969c20de1f354d7b24991cc22e
MD5 a01a2804dc309a1a6651601a4ba899fe
BLAKE2b-256 6b5d397bc434340b840104380e75b14371e9f22979a9563343547293a3fa8811

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page