Wiki
猫Table of Contents
- Bot Options and Configuration RU
- Зачем нужен BotOpts
- Три способа собрать BotOpts
- Что обязательно
- Дефолты, которые стоит помнить
- Плейсхолдеры в файлах
- Важные поля
- UpdateTypes
- Prefixes
- ErrorTemplate
- Debug
- UseRequestLogger
- WriteToFile и LoggerBasePath
- UseTestServer и APIURL
- RateLimit и DropRLOverflow
- StrictPayloadType
- MaxWorkers
- Когда выбирать маленький или большой MaxWorkers
- Что читать дальше
Bot Options and Configuration RU
English version: Bot-Options-and-Configuration
Это краткая русскоязычная версия страницы про BotOpts. Полная и наиболее актуальная страница: Bot-Options-and-Configuration.
Зачем нужен BotOpts
BotOpts — это construction-time конфигурация для Bot.
Через него настраиваются:
- токен и API endpoint;
- update types и command prefixes;
- поведение логирования;
- ограничение частоты;
- строгое декодирование данных callback;
- размер worker pool.
Обычный поток:
- собрать
BotOptsвручную, черезLoadOptsFromEnv()или черезLoadBotOptsFile(...); - при необходимости донастроить setter methods;
- передать в
NewBot(...).
Три способа собрать BotOpts
Вручную
opts := (&laniakea.BotOpts{}).
SetToken("TOKEN").
SetPrefixes("/", "!").
SetRateLimit(30).
SetMaxWorkers(32)
Через environment
opts := laniakea.LoadOptsFromEnv()
Это удобно для production, containers и CI.
Из файла
LoadBotOptsFile(...) подходит, когда конфиг бота удобнее хранить в отдельном файле.
Из коробки доступно:
BotOptsFileJSONCodecдля JSON.
codec := laniakea.BotOptsFileJSONCodec{}
opts, err := laniakea.LoadBotOptsFile(codec, "config.json")
if err != nil {
return err
}
При необходимости BotOpts можно сохранить обратно:
if err := laniakea.SaveBotOptsFile(codec, "config.json", opts); err != nil {
return err
}
Перед декодированием loader разворачивает плейсхолдеры вроде {{ TG_TOKEN }} из environment variables.
Из коробки библиотека пока поддерживает только JSON. Для других форматов можно реализовать свой codec через BotOptsFileCodec.
Если нужен другой формат, например TOML, используй BotOptsFileJSONCodec как референсную реализацию собственного codec.
Что обязательно
Обязателен только Token.
Если токен пустой, NewBot(...) вернет ErrTokenRequired.
Дефолты, которые стоит помнить
Prefixesпо умолчанию["/"]RateLimitпо умолчанию30MaxWorkersпо умолчанию32ErrorTemplateпо умолчанию"%s"- журналирование запросов и логирование в файл выключены
- строгое декодирование данных callback выключено
Плейсхолдеры в файлах
LoadBotOptsFile(...) разворачивает плейсхолдеры такого вида:
{{ TG_TOKEN }}
{{API_URL}}
Это происходит до вызова codec.FromBytes(...).
Такой режим удобен, когда:
- структуру конфига хочется хранить в репозитории;
- секреты всё ещё должны приходить из environment;
- нужен свой codec под другой формат файла.
Важные поля
UpdateTypes
Ограничивает, какие update types bot запрашивает у Telegram.
Полезно, когда ты не хочешь принимать лишние update types и шуметь в routing layer.
Prefixes
Определяет command prefixes вроде / или !.
ErrorTemplate
Определяет, как пользователю показываются ошибки, возвращённые обработчиком.
Debug
Включает отладочное логирование.
UseRequestLogger
Включает логирование сырых updates после getUpdates.
WriteToFile и LoggerBasePath
Управляют записью логов в файлы.
UseTestServer и APIURL
Полезны для тестового окружения, proxy или собственного Telegram gateway.
RateLimit и DropRLOverflow
Управляют политикой limiter:
- ждать и доставлять надежнее;
- или сбрасывать лишние запросы ради отзывчивости.
StrictPayloadType
Включает строгую политику декодирования данных callback без запасного варианта между JSON и Base64.
MaxWorkers
Определяет максимальное количество параллельных обработчиков обновлений.
Когда выбирать маленький или большой MaxWorkers
Меньше:
- если обработчики CPU-bound;
- если нижележащие сервисы не выдержат много параллелизма.
Больше:
- если handlers в основном I/O-bound;
- если bot часто ждет БД или внешние API.
Стартовая безопасная точка обычно 16-32.
Что читать дальше
Navigation
Start here
Runtime and Architecture
- Bot-Lifecycle
- Webhook-Runtime
- Middleware
- Runners
- Error-Handling
- Logging
- Update-Routing-Model
- Policies
- Scenes
Interaction and Telegram API
- Inline-Keyboards-and-Payloads
- Auto-Generated-Commands
- Drafts
- Rich-Messages
- Localization
- Rate-Limiting
- tgapi-Overview