Ncore — это высокопроизводительный, легковесный и элегантный асинхронный MTProto-фреймворк для Telegram, написанный на Python с использованием Cython.
Созданный как современная альтернатива перегруженным решениям (таким как Pyrogram или Telethon), Ncore выжимает максимум скорости за счет C-style оптимизаций, отсутствия лишних абстракций и грамотной работы с памятью.
- 🚀 Cython TL-парсер: Ядро парсинга TL-схем на Cython, что дает колоссальный прирост скорости десериализации пакетов по сравнению с чистым Python.
- ⚡️ C-style Python и Zero-copy оптимизации: Никаких "костылей" с конкатенацией строк. Используется высокооптимизированный модуль
struct. Чтение данных из сокетов происходит без лишних аллокаций памяти благодаряmemoryview. - 🛡 Lock-free батчинг: Устойчивая асинхронная группировка запросов (batching) без блокировок, реализованная на базе
asyncio.Event. - 🌊 Автоматический FloodWait: Встроенный механизм обработки ограничений
FLOOD_WAIT_X— фреймворк сам ставит задачу на паузу и прозрачно повторяет запрос. - 🔒 Нативная поддержка прокси: Поддержка SOCKS5 и HTTP прокси с авторизацией прямо "из коробки", без необходимости тянуть тяжелые сторонние библиотеки.
- 🎛 Dual-API Loop Management: Удобное и гибкое управление циклом событий. Вы можете запускать клиент как внутри собственного
asyncio.run(), так и через классическийclient.run(). - 🎯 Продвинутый Regex-роутер: Система обработки команд. Роутер автоматически парсит параметры с учетом типов, поддерживает обязательные аргументы и отлично справляется с динамическими пробелами и переносами строк.
pip install NcoreМинимальный пример запуска бота на Ncore:
import asyncio
from Ncore import Client, Router
# Инициализируем клиент
client = Client(
api_id=12345,
api_hash="your_api_hash",
bot_token="YOUR_BOT_TOKEN"
)
# Инициализируем роутер с префиксами команд
router = Router(prefixes=["/", "!"])
# Пример команды с использованием роутера Ncore
@router.add("start")
async def start_handler(event):
await event.answer("Привет! Я работаю на сверхбыстром Ncore 🚀")
# Запуск клиента
if __name__ == "__main__":
client.run(router=router)Полное руководство по API, механике роутинга, типам параметров и работе с событиями находится в файле DOCUMENTATION.md.
Проект распространяется под лицензией Apache License, Version 2.0. Подробности см. в файле LICENSE.
В проекте используются следующие сторонние библиотеки:
- msgpack (Apache 2.0)
- tgcrypto (LGPLv3 — динамическое связывание)
Сборка:
Для компиляции модуля tl используется Cython (Apache 2.0).