> For the complete documentation index, see [llms.txt](https://prethink.gitbook.io/prtelegrambot/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prethink.gitbook.io/prtelegrambot/ru/readme.md).

# PRTelegramBot

> #### <mark style="color:$info;">**Если проект был вам полезен, вы можете поддержать его развитие на Boosty:**</mark> [<mark style="color:orange;">**https://boosty.to/prethink**</mark>](https://boosty.to/prethink) <mark style="color:$info;">**Звезда ⭐**</mark> [<mark style="color:blue;">**репозиторию**</mark>](https://github.com/prethink/PRTelegramBot) <mark style="color:$info;">**тоже будет отличной поддержкой.**</mark>

## Исходники

<https://github.com/prethink/PRTelegramBot>

Документация актуальна для версии 1.0.0

Переходите с 0.9.x? Начните с [страницы миграции](/prtelegrambot/ru/perekhod-na-1.0.md) — в 1.0 есть ломающие изменения.

{% hint style="info" %}
Есть также [английская версия документации](https://prethink.gitbook.io/prtelegrambot/) — она пока неполная и пополняется.
{% endhint %}

## ⚛️ Ядро фреймворка

***Внимание! В основе PRTelegramBot лежит библиотека*** [***TelegramBot***](https://github.com/TelegramBots/Telegram.Bot)***, поэтому вы можете использовать все функции которые задействует эта библиотека.*** [***Документация***](https://telegrambots.github.io/book/)

* TelegramBot v22.10.2.1 <https://github.com/TelegramBots/Telegram.Bot>
* Поддерживается [Bot API 10.2](https://core.telegram.org/bots/api)

Библиотека собрана под .NET 6.0 и работает на любой более новой версии.

## 💎 Функционал

### Команды и роутинг

* **Работа с reply командами.** Поддержка простых текстовых команд.
* **Работа с динамическими командами ответа.** Текстовые команды, загружаемые из конфигурационного файла без необходимости компиляции.
* **Обработка команд с параметрами.** Возможность работы с командами, содержащими параметры в скобках, например, "Тест (1)".
* **Работа с slash командами.** Обработка команд типа /get\_1, /users и других текстовых команд, с настраиваемым символом-разделителем аргументов, типизированным доступом к ним через `context.GetSlashArgs<T>()` и поддержкой /start с deeplink.
* **Гибкая работа с inline-командами.** Генератор и парсер inline-команд.
* **Пошаговое выполнение команд.** Возможность выполнения пошаговых наборов reply-команд.
* **Динамическое управление командами.** Возможность добавления и удаления команд в реальном времени с реализацией собственного регистратора команд.
* **Проверки перед выполнением команд.** Внутренние проверки для команд reply, dynamicreply, nextstep, slash и inline.
* **Создание собственных обработчиков для update типа message и callbackQuery.** Реализация своих обработчиков как reply, slash, inlineCallback.

### Меню, клавиатуры и сообщения

* **Создание меню.** Простое и гибкое создание reply и inline меню.
* **Билдеры клавиатур.** `ReplyKeyboardBuilder` и `InlineKeyboardBuilder` для удобного построения клавиатур: строки, столбцы, пустые кнопки-заполнители и кнопки запросов (контакт, локация, опрос, чат, пользователи, WebApp).
* **Билдер сообщений.** `MessageBuilder` собирает текст по шаблону с позиционными аргументами и именованными токенами вида `{QA}`, в том числе с ленивым вычислением значений.
* **Inline-подтверждения.** `InlineCallbackWithConfirmation` оборачивает кнопку так, что перед выполнением у пользователя запрашивается подтверждение.
* **Постраничная работа с сообщениями.** Управление сообщениями с постраничной навигацией.
* **Сообщения-заглушки.** `MessageAwaiter` отправляет сообщение на время обработки данных и удаляет его после.
* **Встроенный функционал календаря.** Работа с датами и календарями.
* **Работа с медиа.** `MediaSender` и `MediaEditor` для фото, групп фото, файлов и медиа по ссылке; `MessageCopier` для копирования сообщений.

### Запуск и инфраструктура

* **Создание polling и webhook ботов.** Поддержка различных методов работы с ботами.
* **Работа как hosted service.** Бот является `IHostedService` и встраивается напрямую в ASP.NET Core и Generic Host.
* **Многоботная система.** Возможность создания нескольких ботов в одном проекте.
* **Подключение к собственным серверам.** Работа ботов через собственные сервера.
* **Сброс старых update.** Возможность сброса всех старых update перед запуском бота.
* **Фоновые задачи.** Периодические задачи с метаданными, лимитами повторов и ошибок, с поддержкой DI.
* **Работа с dependency injection.** Поддержка внедрения зависимостей.
* **Scope выполнения.** `CurrentScope` даёт доступ к текущему боту, его контексту и сервисам в любом месте кода, вызванного обновлением Telegram.
* **Логирование.** Работает с `ILogger` / `ILoggerFactory` — из билдера или из DI, со встроенным fallback.

### Пользователи и доступ

* **Админ-менеджер.** Управление администраторами бота с возможностью реализации собственного админ-менеджера.
* **Менеджер белого списка пользователей.** Гибкое управление белым списком с возможностью добавления методов, игнорируемых белым списком, и реализации собственного менеджера белого списка.
* **Ограничение доступа к методам.** Возможность ограничения доступа к определенным методам.
* **Хранение кэша пользователей.** Работа с пользовательским кэшем.
* **Утилиты для групп.** `GroupUtils` проверяет, является ли пользователь участником, администратором или создателем группы.

### Расширяемость

* **Система middleware.** Добавление собственных обработчиков до и после update, аналогично middleware в ASP.NET.
* **Система событий.** Гибкая система обработки событий.
* **Шина событий.** `PREventBus` и глобальные подписчики для рассылки событий по всему приложению.
* **Обработка update.** Возможность реализации собственного обработчика update.
* **Конвертеры inline-данных.** `IInlineMenuConverter` позволяет выбрать, как формируется `callback_data`; встроенный `FileInlineConverter` хранит данные в файлах и обходит ограничение Telegram в 64 байта.
* **Сменные сериализаторы.** `JsonSerializerWrapper` или `ToonSerializerWrapper` для данных inline-кнопок — ToonNet даёт более компактный `callback_data`.
* **Работа с конфигурационными файлами.** Поддержка конфигурационных файлов для каждого бота с возможностью реализации собственного провайдера конфигураций. По умолчанию используется JSON.
* **Парсинг из конфигурационных файлов.** Парсинг сообщений, команд и кнопок из конфигурационных файлов.
* **Функционал предоставляемый telegram.bot.**

## 🧱 Интегрированные пакеты

CalendarPicker | karb0f0s <https://github.com/karb0f0s/CalendarPicker>

ToonNet <https://www.nuget.org/packages/ToonNet>
