REPOSITORY / ScuroNeko/Laniakea
Releases
-
1.0.0 RC 10 Pre-Release
released this
2026-03-25 18:07:41 +03:00 | 57 commits to dev since this releaseAdded
Plugin.AddUpdateHandlerfor routing non-command Telegram updates bytgapi.UpdateType.- Derived
tgapi.Update.Typeassignment during JSON decoding, plustgapi.UpdateTypeUnknownfor unmatched payloads. tgapi.API.OpenFileByLink(...)andOpenFileByLinkWithContext(...)for streaming downloads from Telegram's file server.- Regression tests for update dispatch, keyboard builders, localization fallback, runners, rate limiting, parse mode encoding, streaming downloads, and context isolation.
- Regression tests for bot single-run enforcement, nil plugin registration,
L10nconcurrent access,API.Close()idle-connection cleanup, andtgapiworker-pool edge cases. SEMVER.mddocumenting versioning expectations for the project.
Changed
NewBotnow returns(*Bot[T], error)instead of terminating the host process on configuration or startup failures.RunandRunWithContextnow return errors;RunWithContextreturnsErrNoPrefixesandErrNoPluginsfor invalid bot configuration.- Polling retries now use exponential backoff instead of busy-looping on repeated
getUpdatesfailures. Botis now explicitly single-use; repeatedRun()orRunWithContext(...)calls returnErrBotAlreadyRun.- Database context wiring now uses
Tconsistently instead of forcing*T; shared dependencies should typically use pointer types such as*sql.DB. DatabaseContext,GetDBContext, andDbLoggerwere updated to the newT-based dependency model.DatabaseContext(...)now warns once whenTis a value type, to highlight likely unintended copying of shared dependencies.AddDatabaseLoggerWriter(...)now skips unset and nil database contexts instead of calling the writer with invalid values.L10nis now safe for concurrent use and copies added dictionary entries to avoid external mutation after registration.- Plugin registration now snapshots commands, payloads, middlewares, and update handlers so later mutations of the original
*Plugindo not leak into the bot. AddPlugins(...)now skips nil plugin pointers instead of panicking.GetUpdateTypes()now returns a copy instead of exposing internal slice state.- Update handling now normalizes
MsgContextfor more Telegram update kinds and routes plugin-level update handlers with isolated context copies. message,channel_post, andcallback_queryremain on the command/payload flow; non-command updates can be handled through plugin update handlers.- Command auto-generation now validates Telegram command names with the correct character set and
1..32length limit, and emits commands in deterministic sorted order. - Builder-style APIs were normalized to value returns for
NewCommandArg,NewMiddleware,NewRunner, andNewCallbackData. MenuButtonreplacedBaseMenuButton, andGetChatMenuButton(...)now returns the renamed type.- Several Telegram DTOs were tightened for optionality and serialization correctness, including
InputPaidMedia,MenuButton, optional gift fields, and message entity slices. tgapi.NewRequest(...),NewRequestWithChatID(...),NewUploaderRequest(...), andNewUploaderRequestWithChatID(...)are now documented as low-level unsafe escape hatches rather than internal helpers.tgapi.API.Close()now closes idle HTTP connections before releasing logger resources.- Multipart form encoding now writes scalar field bytes directly instead of converting through temporary strings.
- README, README_RU, package docs, and exported godoc were updated to match the current APIs and concurrency/lifecycle model.
- Version constants were bumped to
v1.0.0-rc.10.
Fixed
- Required command arguments are now enforced by declared argument index, not only by total required count.
ParseNonenow omitsparse_modefrom JSON requests instead of serializing"None".- Upload file type detection is now case-insensitive for file extensions.
- Draft creation no longer panics when no limiter is configured, and draft flushing now rejects zero chat IDs before sending invalid requests.
- Channel posts with
SenderChatno longer panic in the command path and now preserve the expectedMsgContextfields. - File logger initialization now falls back to stdout loggers instead of terminating the process on logger setup failures.
GetChatMenuButtonandSetChatMenuButtonnow serializechat_idcorrectly when omitted.- Update decoding tests now match the canonical
deleted_business_messagesmodel and no longer rely on the removed singular alias.
Breaking Changes
NewBot[T](opts)now returns(*Bot[T], error).Run()now returnserror.RunWithContext(ctx)now returnserror.Run()andRunWithContext(ctx)are now single-use per bot instance; create a newBotafter they return.- Database context handlers now receive
Tinstead of*T. For shared dependencies, instantiate the bot with a pointer type, for exampleBot[*sql.DB]. DatabaseContext(...)now takesTinstead of*T.GetDBContext()now returnsTinstead of*T.DbLogger[T]now receivesTinstead of*T.NewCommandArg(...),NewMiddleware(...),NewRunner(...), andNewCallbackData(...)now return values instead of pointers.BaseMenuButtonwas renamed toMenuButton, andGetChatMenuButton(...)now returnsMenuButton.tgapi.Updateno longer exposes the deprecatedDeletedBusinessMessagealias; useDeletedBusinessMessages.
Tests
- Added coverage for polling backoff helpers, command sorting, database logger safety checks, update handler routing, update-context isolation, channel posts with
SenderChat, parse mode encoding, streaming downloads, and rate limiter behavior.
Full Changelog: v1.0.0-rc.9...v1.0.0-rc.10
Downloads