All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
1.3.0 - 10-07-2026
Added
defcommandmacro for defining commands with arguments and options- Automatic registration of commands via Telegram
setMyCommands TelegramEx.Errorstruct to describe API errorsTelegramEx.Effectfor pipeline-friendly builders with short-circuiting errorsTelegramEx.Builder.Voicefor sending voice messages by file ID, URL, or local file pathTelegramEx.MimeTypefor resolving uploaded file content types from extensionsaudioandreply_to_messagefields inTelegramEx.Types.Message- Detailed guides for commands, effects, examples, FSM, routers, media, development, and getting started
- Contribution guidelines in
CONTRIBUTING.md
Changed
- Builders now accept either a raw handler context or an existing
TelegramEx.Effect - File payload handling is shared through
TelegramEx.Builder.put_file_payload/3 - Local media uploads now use extension-based MIME types instead of hardcoded content types
- API error responses are returned as structured
TelegramEx.Errorvalues
Fixed
- Added a
from_map/1clause fornilnested messages to avoid failures when optional reply messages are absent - Fixed Dialyzer issues in message conversion specs
1.2.1 - 18-05-2026
Added
TelegramEx.Builder.Pollfor sending polls and quizzes- Proper library documentation
[1.2.0] - 13-04-2026
Added
TelegramEx.Builder.Stickerfor sending stickers (by id, url, file path)TelegramEx.Builder.Locationfor sending geo coordinatesTelegramEx.Builder.Videofor sending videos (by id, url, file path) with duration and cover supportTelegramEx.Builder.Contactfor sending contacts- Example project in
example/folder as quick review of all features - Sending messages to concrete threads in forum chats via
message_thread_id TelegramEx.Routermacro to group handlers by logic into routers
Changed
- All builders now accept
ctxas the first argument and store payload insidectx.payload API.request/1accepts full context map instead of separatetoken,method,payloadarguments- Builders'
send/2delegates toAPI.request/1through context — no moreProcess.get(:token)
[1.1.0] - 27-03-2026
Added
TelegramEx.FSMmodule withdefstate/2macro to make stateful handlers- Multiple bot support via names
- Fallback update handlers
[1.0.0] - 08-03-2026
Added
TelegramExmacro for wrapping user module into GenServer- Polling updates inside
TelegramEx.Server - Applying all user-defined handlers inside
TelegramExto updates inTelegramEx.Server - Performing actions in declarative way with
Message,Photo,Documentbuilders - Reply markup support via
Message.reply_keyboard - Inline markup support via
Message.inline_keyboard - Handling callback queries and messages