Skip to main content

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

Project description

TgFramework 3.0

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

Установка

pip install tgframework-bot python-dotenv

# Для PostgreSQL
pip install psycopg2-binary

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

# 1. Создать проект
tgframework create-project my_bot

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

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

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

# 5. Запустить
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())

Mini Apps

from tgframework.miniapp import MiniAppValidator, ReactRenderer

validator = MiniAppValidator(bot_token)
renderer = ReactRenderer()

# Валидация
validated = validator.validate_init_data(init_data)

# Рендеринг с серверными переменными
html = renderer.render("app.html", context={
    "user": user_data,
    "api_url": "https://api.example.com"
})

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=

Возможности

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/Next.js рендеринг
  • Server-side props

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

Лицензия

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.0.1.tar.gz (64.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.0.1-py3-none-any.whl (69.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tgframework_bot-3.0.1.tar.gz
  • Upload date:
  • Size: 64.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.0.1.tar.gz
Algorithm Hash digest
SHA256 0bf03875c33ce8ace3614077b465dfa4fa14aefb04e6ade1011cf55b0667b182
MD5 143aaa07b5ae0a69b89096d1b605e75f
BLAKE2b-256 89f02902e12b587107df32303425d94f1b2a4740745bc018ef0505a67c599695

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tgframework_bot-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 026c0a0049afbb8d14caab420ba723aabd3b81b79d596fb00c60ff7642d20e84
MD5 979dc1168608c26f26fa5c3547189bcd
BLAKE2b-256 440a3af57340839f109fc1082747688f7d5a1cf583ce6bb97e0fb20553a80b25

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