rename app data API
Align docs, examples, and tests with AppData and NoData Update handler, scene, runner, and plugin generics to the new naming Ignore .codex and record the cleanup in the changelog
This commit is contained in:
+16
-16
@@ -22,8 +22,8 @@
|
||||
* **Поддержка промежуточных слоёв (Middleware):** Выполняйте код до или после команд (например, логирование, проверка доступа).
|
||||
* **Автоматическая генерация команд:** Генерируйте справку и списки команд автоматически.
|
||||
* **Встроенный ограничитель запросов (Rate Limiter):** Защитите бота от превышения лимитов Telegram API (с обработкой `retry_after`).
|
||||
* **Контекст данных:** Передавайте свой контекст базы данных или состояния в обработчики.
|
||||
* **Текучий интерфейс (Fluent Interface):** Стройте цепочки методов для чистой конфигурации (например, `bot.ErrorTemplate(...).AddPlugins(...)`).
|
||||
* **Контекст данных:** Передавайте общие данные приложения или state в обработчики.
|
||||
* **Настраиваемый API:** Комбинируйте `Set...` и `Add...` helper-методы для понятной конфигурации, например `bot.SetErrorTemplate(...).AddPlugins(...)`.
|
||||
|
||||
---
|
||||
|
||||
@@ -54,8 +54,8 @@ import (
|
||||
// echo — это функция-обработчик команды.
|
||||
// Она получает два параметра:
|
||||
// - ctx: контекст сообщения (содержит информацию о сообщении, отправителе, чате и т.д.)
|
||||
// - db: ваш пользовательский контекст базы данных (здесь мы используем NoDB — заглушку)
|
||||
func echo(ctx *laniakea.MsgContext, db laniakea.NoDB) error {
|
||||
// - data: ваши общие данные приложения (здесь мы используем NoData — заглушку без общих зависимостей)
|
||||
func echo(ctx *laniakea.MsgContext, data laniakea.NoData) error {
|
||||
// Отвечаем пользователю текстом, который он прислал, без префикса команды.
|
||||
// ctx.Text содержит сообщение пользователя, из которого удалена часть с командой.
|
||||
ctx.Answer(ctx.Text) // Ввод пользователя БЕЗ команды
|
||||
@@ -67,8 +67,8 @@ func main() {
|
||||
opts := &laniakea.BotOpts{Token: "TOKEN"}
|
||||
|
||||
// 2. Инициализируем новый экземпляр бота.
|
||||
// Используем laniakea.NoDB как тип контекста базы данных (база не нужна для примера).
|
||||
bot, err := laniakea.NewBot[laniakea.NoDB](opts)
|
||||
// Используем laniakea.NoData как тип данных приложения (общие зависимости не нужны для примера).
|
||||
bot, err := laniakea.NewBot[laniakea.NoData](opts)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -77,7 +77,7 @@ func main() {
|
||||
|
||||
// 3. Создаём новый плагин с именем "ping".
|
||||
// Плагины помогают группировать связанные команды и промежуточные обработчики.
|
||||
p := laniakea.NewPlugin[laniakea.NoDB]("ping")
|
||||
p := laniakea.NewPlugin[laniakea.NoData]("ping")
|
||||
|
||||
// 4. Добавляем команду в плагин.
|
||||
// p.NewCommand(echo, "echo") создаёт команду, которая вызывает функцию 'echo' по команде "/echo".
|
||||
@@ -85,15 +85,15 @@ func main() {
|
||||
|
||||
// 5. Добавляем ещё одну команду, используя анонимную функцию (замыкание).
|
||||
// Эта команда просто отвечает "Pong", когда пользователь отправляет "/ping".
|
||||
p.AddCommand(p.NewCommand(func(ctx *laniakea.MsgContext, db laniakea.NoDB) error {
|
||||
p.AddCommand(p.NewCommand(func(ctx *laniakea.MsgContext, data laniakea.NoData) error {
|
||||
ctx.Answer("Pong")
|
||||
return nil
|
||||
}, "ping"))
|
||||
|
||||
// 6. Настраиваем бота: задаём шаблон ошибки и добавляем плагин.
|
||||
// ErrorTemplate устанавливает формат для сообщений об ошибках (где %s будет заменён на текст ошибки).
|
||||
// SetErrorTemplate устанавливает формат для сообщений об ошибках (где %s будет заменён на текст ошибки).
|
||||
// AddPlugins(p) регистрирует наш плагин "ping" в боте.
|
||||
bot = bot.ErrorTemplate("Ошибка\n\n%s").AddPlugins(p)
|
||||
bot = bot.SetErrorTemplate("Ошибка\n\n%s").AddPlugins(p)
|
||||
|
||||
// 7. Автоматически генерируем команды, такие как /start, /help и список всех зарегистрированных команд.
|
||||
// Это необязательно, но очень полезно для большинства ботов.
|
||||
@@ -110,11 +110,11 @@ func main() {
|
||||
|
||||
### Как это работает
|
||||
1. `BotOpts`: Содержит конфигурацию, например, токен API.
|
||||
2. `NewBot[T]`: Создаёт экземпляр бота. Параметр типа T позволяет передать пользовательский контекст базы данных (например, *sql.DB), который будет доступен во всех обработчиках. Используйте laniakea.NoDB, если он не нужен.
|
||||
2. `NewBot[T]`: Создаёт экземпляр бота. Параметр типа T позволяет передать общие данные приложения (например, *sql.DB или контейнер сервисов), которые будут доступны во всех обработчиках. Используйте laniakea.NoData, если они не нужны.
|
||||
3. `NewPlugin`: Создаёт логическую группу для команд и Middleware.
|
||||
4. `AddCommand`: Регистрирует команду. Первый аргумент — функция-обработчик (`func(*MsgContext, T) error`), второй — имя команды (без слеша).
|
||||
5. **Функции-обработчики**: Получают *MsgContext (детали сообщения, методы типа Answer) и ваш контекст базы данных T, а ошибку возвращают для централизованной обработки.
|
||||
6. `ErrorTemplate`: Устанавливает шаблон для сообщений об ошибках. Плейсхолдер %s заменяется на текст ошибки.
|
||||
5. **Функции-обработчики**: Получают *MsgContext (детали сообщения, методы типа Answer) и ваши данные приложения типа T, а ошибку возвращают для централизованной обработки.
|
||||
6. `SetErrorTemplate`: Устанавливает шаблон для сообщений об ошибках. Плейсхолдер %s заменяется на текст ошибки.
|
||||
7. `AutoGenerateCommands`: Регистрирует команды из плагинов в Telegram для поддерживаемых scope.
|
||||
8. `Run()`: Запускает цикл опроса обновлений бота и возвращает ошибку, если старт или polling завершился неуспешно.
|
||||
9. Экземпляр `Bot` одноразовый. После завершения `Run()` или `RunWithContext()` для следующего запуска создавайте новый бот.
|
||||
@@ -157,8 +157,8 @@ func myHandler(ctx *laniakea.MsgContext, db *MyDB) error {
|
||||
- Поля: `Text`, `Args`, `From`, `FromID`, `Msg`, `InlineMsgId`, `CallbackQueryId` и другие.
|
||||
- И много других методов и полей!
|
||||
|
||||
### Контекст базы данных (Database Context)
|
||||
Параметр типа `T` в `NewBot[T]` — мощная функция. Вы можете передать любой тип, но для разделяемых зависимостей вроде пула соединений с БД обычно стоит использовать pointer type.
|
||||
### App Data
|
||||
Параметр типа `T` в `NewBot[T]` — мощная возможность. Вы можете передать любой тип, но для разделяемых зависимостей вроде пула соединений с БД, контейнера сервисов или API-клиента обычно стоит использовать pointer type.
|
||||
|
||||
```go
|
||||
type MyDB struct { /* ... */ }
|
||||
@@ -167,7 +167,7 @@ bot, err := laniakea.NewBot[*MyDB](opts)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
bot.DatabaseContext(db)
|
||||
bot.SetAppData(db)
|
||||
```
|
||||
|
||||
### Сцены и сессии (Scenes and Sessions)
|
||||
|
||||
Reference in New Issue
Block a user