Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 55 additions & 23 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
description: >-
Фреймворк с открытым исходным кодом с гибким и простым функционалом для
создания ботов Telegram.
Фреймворк для создания Telegram-ботов на .NET поверх Telegram.Bot: роутинг
команд через атрибуты, меню, middleware, DI и фоновые задачи.
---

# PRTelegramBot
Expand All @@ -12,46 +12,78 @@ description: >-

[https://github.com/prethink/PRTelegramBot](https://github.com/prethink/PRTelegramBot)

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

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

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

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

* TelegramBot v22.9.0 [https://github.com/TelegramBots/Telegram.Bot](https://github.com/TelegramBots/Telegram.Bot)
* TelegramBot v22.10.2.1 [https://github.com/TelegramBots/Telegram.Bot](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 и других текстовых команд.
* **Работа с slash командами.** Обработка команд типа /get\_1, /users и других текстовых команд, с настраиваемым символом-разделителем аргументов, типизированным доступом к ним через `context.GetSlashArgs<T>()` и поддержкой /start с deeplink.
* **Гибкая работа с inline-командами.** Генератор и парсер inline-команд.
* **Создание меню.** Простое и гибкое создание reply и inline меню.
* **Работа с конфигурационными файлами.** Поддержка конфигурационных файлов для каждого бота с возможностью реализации собственного провайдера конфигураций. По умолчанию используется JSON.
* **Админ-менеджер.** Управление администраторами бота с возможностью реализации собственного админ-менеджера.
* **Менеджер белого списка пользователей.** Гибкое управление белым списком с возможностью добавления методов, игнорируемых белым списком, и реализации собственного менеджера белого списка.
* **Обработка update.** Возможность реализации собственного обработчика update.
* **Система событий.** Гибкая система обработки событий.
* **Многоботная система.** Возможность создания нескольких ботов в одном проекте.
* **Система middleware.** Добавление собственных обработчиков до и после update, аналогично middleware в ASP.NET.
* **Пошаговое выполнение команд.** Возможность выполнения пошаговых наборов reply-команд.
* **Динамическое управление командами.** Возможность добавления и удаления команд в реальном времени с реализацией собственного регистратора команд.
* **Проверки перед выполнением команд.** Внутренние проверки для команд reply, dynamicreply, nextstep, slash и inline.
* **Создание собственных обработчиков для update типа message и callbackQuery.** Реализация своих обработчиков как reply, slash, inlineCallback.
* **Динамическое управление командами.** Возможность добавления и удаления команд в реальном времени с реализацией собственного регистратора команд.
* **Сброс старых update.** Возможность сброса всех старых update перед запуском бота.
* **Пошаговое выполнение команд.** Возможность выполнения пошаговых наборов reply-команд.
* **Подключение к собственным серверам.** Работа ботов через собственные сервера.
* **Создание polling и webhook ботов.** Поддержка различных методов работы с ботами.
* **Встроенный функционал календаря.** Работа с датами и календарями.

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

* **Создание меню.** Простое и гибкое создание 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](https://github.com/karb0f0s/CalendarPicker)

ToonNet [https://www.nuget.org/packages/ToonNet](https://www.nuget.org/packages/ToonNet)
3 changes: 3 additions & 0 deletions docs/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

* [PRTelegramBot](README.md)
* [F.A.Q.](f.a.q..md)
* [Переход на 1.0](perekhod-na-1.0.md)
* [Быстрый старт](bystryi-start/README.md)
* [Webhook](bystryi-start/webhook/README.md)
* [Debugging WebHook](bystryi-start/webhook/debugging-webhook.md)
Expand Down Expand Up @@ -58,6 +59,7 @@
* [ReplyKeyboardBuilder](api/klassy/replykeyboardbuilder.md)
* [KeyboardBuilderBase](api/klassy/keyboardbuilderbase.md)
* [InlineKeyboardBuilder](api/klassy/inlinekeyboardbuilder.md)
* [MessageBuilder](api/klassy/messagebuilder.md)
* [MediaSender](api/klassy/mediasender.md)
* [MediaEditor](api/klassy/mediaeditor.md)
* [MessageCopier](api/klassy/messagecopier.md)
Expand All @@ -76,6 +78,7 @@
* [WhiteListManager](api/klassy/whitelistmanager.md)
* [Фабрики ботов](api/klassy/fabriki-botov.md)
* [InlineCallbackWithConfirmation](api/klassy/inlinecallbackwithconfirmation.md)
* [InlineCopyText](api/klassy/inlinecopytext.md)
* [TCommands](api/klassy/tcommands/README.md)
* [TCommandBase](api/klassy/tcommands/tcommandbase.md)
* [EntityTCommand](api/klassy/tcommands/entitytcommand.md)
Expand Down
56 changes: 56 additions & 0 deletions docs/api/klassy/inlinecopytext.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
description: Inline-кнопка, которая копирует заданный текст в буфер обмена пользователя.
---

# InlineCopyText

Добавлена в версии 1.0.0.

`InlineCopyText` создаёт inline-кнопку, при нажатии на которую Telegram копирует заданный текст в буфер обмена пользователя. Обновление боту при этом не отправляется — всё происходит на стороне клиента, поэтому обработчик такой кнопке не нужен.

Удобно для промокодов, адресов кошельков, реферальных ссылок и всего остального, что пользователь должен куда-то вставить.

Класс находится в `PRTelegramBot.Models.InlineButtons` и является обёрткой над `InlineKeyboardButton.WithCopyText`.

## Конструктор

```csharp
public InlineCopyText(string buttonName, string copyText)
```

| Параметр | Назначение |
| --- | --- |
| `buttonName` | Надпись на кнопке. |
| `copyText` | Текст, который попадёт в буфер обмена. |

Текст, который копируется, доступен и меняется через свойство `CopyText`.

## Пример

```csharp
using PRTelegramBot.Attributes;
using PRTelegramBot.Builders.Keyboard;
using PRTelegramBot.Interfaces;
using PRTelegramBot.Models;
using PRTelegramBot.Models.InlineButtons;
using PRTelegramBot.Services.Messages;

public static class ExampleCopyText
{
[ReplyMenuHandler("Промокод")]
public static async Task Promo(IBotContext context)
{
var keyboard = new InlineKeyboardBuilder()
.AddButton(new InlineCopyText("Скопировать промокод", "WELCOME2026"))
.Build();

var option = new OptionMessage { MenuInlineKeyboardMarkup = keyboard };

await MessageSender.Send(context, "Ваш промокод:", option);
}
}
```

## Ограничения Telegram

Копируемый текст не должен превышать 256 символов. Кнопку нельзя использовать в inline-режиме бота — только в обычных сообщениях.
Loading
Loading