56 lines
2.4 KiB
Go
56 lines
2.4 KiB
Go
/*
|
||
Package laniakea provides a modular, extensible framework for building scalable Telegram bots.
|
||
|
||
It offers a fluent API for configuration and separates concerns through several core concepts:
|
||
|
||
- Bot: The central instance managing API communication, update processing, logging,
|
||
rate limiting, and dependency injection. Created via NewBot[T].
|
||
|
||
- Plugins: Organize commands and payloads into reusable units.
|
||
A plugin can have multiple commands and shared middlewares.
|
||
|
||
- Commands: Named bot commands with descriptions, argument validation, and
|
||
execution logic. Automatically registrable across different chat scopes.
|
||
|
||
- Middleware: Functions that intercept and modify updates before they reach plugins.
|
||
Useful for authentication, logging, validation, etc. Return false to stop processing.
|
||
|
||
- MsgContext: Provides access to the incoming update and convenient methods for
|
||
responding, editing, deleting, and translating messages. Includes built-in rate limiting
|
||
and error handling. ⚠️ MarkdownV2 methods require manual escaping via EscapeMarkdownV2().
|
||
|
||
- InlineKeyboard: A fluent builder for constructing inline keyboards with styled buttons,
|
||
icons, URLs, and structured callback data (JSON or Base64).
|
||
|
||
- DraftProvider: Manages ephemeral, multi-step message drafts with automatic ID generation
|
||
(random or linear). Drafts can be built incrementally and flushed atomically.
|
||
|
||
- L10n: Simple key-based localization system with fallback language support.
|
||
|
||
- Runners: Background goroutines for periodic tasks or one‑off initialization,
|
||
with configurable timeouts and async execution.
|
||
|
||
- RateLimiting & Logging: Built‑in rate limiter (respects Telegram's retry_after)
|
||
and structured logging (JSON stdout + optional file output) with request‑level tracing.
|
||
|
||
- Dependency Injection: Pass any custom database context (e.g., *sql.DB) to all handlers
|
||
via the type parameter T in Bot[T].
|
||
|
||
Example usage:
|
||
|
||
bot := laniakea.NewBot[mydb.DBContext](laniakea.LoadOptsFromEnv()).
|
||
DatabaseContext(&myDB).
|
||
AddUpdateType(tgapi.UpdateTypeMessage).
|
||
AddPrefixes("/", "!").
|
||
AddPlugins(&startPlugin, &helpPlugin).
|
||
AddMiddleware(&authMiddleware, &logMiddleware).
|
||
AddRunner(&cleanupRunner).
|
||
AddL10n(l10n.New())
|
||
|
||
bot.Run()
|
||
|
||
All public methods are safe for concurrent use unless stated otherwise.
|
||
Direct field access is not recommended; use provided accessors (e.g., GetDBContext, SetUpdateOffset).
|
||
*/
|
||
package laniakea
|