teloxide/CHANGELOG.md
2024-11-11 03:07:35 +02:00

26 KiB

Changelog

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

Added

  • filter_boost_added and filter_reply_to_story filters to the MessageFilterExt trait (PR 1131)
  • filter_mention_command filter to the HandlerExt trait (issue 494)
  • filter_business_connection, filter_business_message, filter_edited_business_message, and filter_deleted_business_messages filters to the UpdateFilterExt trait (PR 1146)
  • Syntax sugar for making requests (issue 1143):
    • bot.forward, bot.edit_live_location, bot.stop_live_location, bot.set_reaction, bot.pin, bot.unpin, bot.edit_text, bot.edit_caption, bot.edit_media, bot.edit_reply_markup, bot.stop_poll_message, bot.delete and bot.copy methods to the new crate::sugar::bot::BotMessagesExt trait
    • req.reply_to method to the new crate::sugar::request::RequestReplyExt trait
    • req.disable_link_preview method to the new crate::sugar::request::RequestLinkPreviewExt trait
  • stack_size setter to DispatcherBuilder (PR 1185)
  • utils::render module to render HTML/Markdown-formatted output (PR 1152)
  • Bot::from_env now can read and use TELOXIDE_API_URL environmental variable (PR 1197)

Changed

  • Environment bumps: (PR 1147)
    • MSRV (Minimal Supported Rust Version) was bumped from 1.70.0 to 1.80.0
    • Some dependencies was bumped: sqlx to 0.8.1, tower to 0.5.0, reqwest to 0.12.7
    • tokio version was explicitly specified as 1.39
  • Added new Send and Sync trait bounds to the UListener and Eh generic parameters of try_dispatch_with_listener and dispatch_with_listener (PR 1185) [BC]

Fixed

  • Now Vec in requests serializes into [number] instead of [ {message_id: number} ], forward_messages, copy_messages and delete_messages now work properly
  • Now InlineQueryResultsButton serializes properly (issue 1181)
  • Now ThreadId is able to serialize in multipart requests (PR 1179)
  • Now stack does not overflow on dispatch (issue 1154)

0.13.0 - 2024-08-16

Added

  • Documentation regarding the way captions work for the official clients on SendMediaGroup (PR 992)
  • Add MessageToCopyNotFound error to teloxide::errors::ApiError (PR 917)
  • Dispatcher::try_dispatch_with_listener (PR 913)
  • Missing Message::filter_* functions (PR 982):
    • filter_game
    • filter_venue
    • filter_video
    • filter_video_note
    • filter_voice
    • filter_migration
    • filter_migration_from
    • filter_migration_to
    • filter_new_chat_title
    • filter_new_chat_photo
    • filter_delete_chat_photo
    • filter_group_chat_created
    • filter_supergroup_chat_created
    • filter_channel_chat_created
    • filter_message_auto_delete_timer_changed
    • filter_invoice
    • filter_successful_payment
    • filter_connected_website
    • filter_write_access_allowed
    • filter_passport_data
    • filter_proximity_alert_triggered
    • filter_forum_topic_created
    • filter_forum_topic_edited
    • filter_forum_topic_closed
    • filter_forum_topic_reopened
    • filter_general_forum_topic_hidden
    • filter_general_forum_topic_unhidden
    • filter_video_chat_scheduled
    • filter_video_chat_started
    • filter_video_chat_ended
    • filter_video_chat_participants_invited
    • filter_web_app_data
  • Implement PostgresStorage, a persistent dialogue storage based on PostgreSQL(PR 996).
  • Implement GetChatId for teloxide_core::types::{Chat, ChatJoinRequest, ChatMemberUpdated}.
  • Use deadpool-redis for Redis connection pooling (PR 1081).
  • Add MessageExt::filter_story method for the corresponding MediaKind::Story variant (PR 1087).
  • Add update_listeners::webhooks::Options::path, an option to make the webhook server listen on a different path, which can be useful behind a reverse proxy.
  • Add filter_giveaway, filter_giveaway_completed, filter_giveaway_created and filter_giveaway_winners filters to MessageFilterExt trait (PR 1101)

Fixed

  • Use UserId instead of i64 for user_id in html::user_mention and markdown::user_mention (PR 896)
  • Greatly improved the speed of graceful shutdown (^C) (PR 938)
  • Fix typos in documentation (PR 953)
  • Use Seconds instead of String in InlineQueryResultAudio for audio_duration (PR 994)
  • High CPU usage on network errors (PR 1002, Issue 780)
  • Fix app build errors when using items gated behind sqlite-storage with the feature sqlite-storage-rustls (PR 1018)
  • Fix typo in ApiError::ToMuchMessages variant (rename it to TooMuchMessages) (PR 1046)
  • Fix ChatPermission behavior to accurately reflect Telegram's functionality (PR 1068)

Changed

Removed

  • UpdateListener::timeout_hint and related APIs (PR 938)

0.12.2 - 2023-02-15

Fixed

  • docs.rs documentation build

0.12.1 - 2023-02-15

Fixed

  • Allow ChatJoinRequest updates
  • Some example links in documentation

Added

  • Update::filter_chat_join_request
  • sqlite-storage-rustls feature, that allows using sqlite storage without native-tls

Changed

  • Updated teloxide-core to v0.9.1; see its changelog for more

0.12.0 - 2023-01-17

Changed

  • Updated teloxide-macros to v0.7.1; see its changelog for more.
  • Updated teloxide-core to v0.9.0; see its changelog for more.
  • Updated axum to v0.6.0.
  • The module structure
    • teloxide::dispatching::update_listeners => teloxide::update_listeners
    • teloxide::dispatching::repls => teloxide::repls
  • CommandDescriptions::new was made const
  • The following functions were made #[must_use]:
    • DispatcherBuilder::{enable_ctrlc_handler, distribution_function}

Removed

  • rocksdb-storage feature and associated items (See PR #761 for reasoning) [BC]

Deprecated

  • teloxide::dispatching::{update_listeners, repls} (see in the "Changed" section)

0.11.3 - 2022-11-28

Fixed

  • Add another missing feature gate for dispatching::repls import (issue #770)

0.11.2 - 2022-11-18

Fixed

  • Add missing feature gate for dispatching::repls import (issue #770)

0.11.1 - 2022-10-31 [yanked]

This release was yanked because it accidentally breaks backwards compatibility.

Added

  • The rocksdb-storage feature -- enables the RocksDB support (PR #753)
  • teloxide::dispatching::repls::CommandReplExt, teloxide::prelude::CommandReplExt (issue #740)

Deprecated

  • teloxide::dispatching::repls::{commands_repl, commands_repl_with_listener}, teloxide::utils::command::BotCommands::ty (use CommandReplExt instead)

0.11.0 - 2022-10-07

Changed

  • Updated teloxide-macros to v0.7.0; see its changelog for more
  • Updated teloxide-core to v0.8.0; see its changelog for more
  • UpdateListener now has an associated type Err instead of a generic
  • AsUpdateStream now has an associated type StreamErr instead of a generic
  • Rename dispatching::stop_token::{AsyncStopToken, AsyncStopFlag} => stop::{StopToken, StopFlag}
  • Replace the generic error type E with RequestError for REPLs (repl(_with_listener), commands_repl(_with_listener))
  • The following functions are now #[must_use]:
    • BotCommands::ty.
    • CommandDescriptions::{new, global_description, username, username_from_me}.
    • teloxide::filter_command.
    • teloxide::dispatching::dialogue::enter.
  • BotCommands::parse now accept bot_username as &str

Added

  • requests::ResponseResult to prelude

Removed

  • dispatching::stop_token::StopToken trait (all uses are replaced with stop::StopToken structure)
  • Some previously deprecated items
    • enable_logging!, enable_logging_with_filter!
    • HandlerFactory, HandlerExt::dispatch_by

0.10.1 - 2022-07-22

Fixed

  • Mark the following functions with #[must_use] (PR 457):
    • TraceStorage::into_inner.
    • AsyncStopToken::new_pair.
    • AsyncStopFlag::is_stopped.
    • All from crate::utils::{html, markdown}.
  • Rendering of GIFs in lib.rs and crates.io (PR 681).

0.10.0 - 2022-07-21

Added

  • Security checks based on secret_token param of set_webhook to built-in webhooks.
  • dispatching::update_listeners::{PollingBuilder, Polling, PollingStream}.
  • DispatcherBuilder::enable_ctrlc_handler method.

Fixed

  • Dispatcher no longer "leaks" memory for every inactive user (PR 657).
  • Allow specifying a path to a custom command parser in parse_with (issue 668).

Changed

  • Add the Key: Clone requirement for impl Dispatcher [BC].
  • dispatching::update_listeners::{polling_default, polling} now return a named, Polling<_> type.
  • Update teloxide-core to v0.7.0 with Bot API 6.1 support, see its changelog for more information [BC].

Deprecated

  • The dispatching::update_listeners::polling function.
  • Dispatcher::setup_ctrlc_handler method.

0.9.2 - 2022-06-07

Fixed

  • Fix Api Unknown error (Can't parse entities) on message created with utils::markdown::user_mention_or_link if user full name contains some escapable symbols eg '.'

0.9.1 - 2022-05-27

Fixed

  • Fix #[command(rename = "...")] for custom command names (issue 633).

0.9.0 - 2022-04-27

Added

  • The dispatching::filter_command function (also accessible as teloxide::filter_command) as a shortcut for dptree::entry().filter_command().
  • Re-export dptree::case! as teloxide::handler! (the former is preferred for new code).

Changed

  • Update teloxide-core to v0.6.0 with Bot API 6.0 support [BC].

0.8.2 - 2022-04-26

Fixed

  • Fix the broken #[derive(DialogueState)] (function return type dptree::Handler).

0.8.1 - 2022-04-24

Added

  • Implement GetChatId for Update.
  • The dialogue::enter() function as a shortcut for dptree::entry().enter_dialogue().

0.8.0 - 2022-04-18

Removed

  • The old dispatching system and related stuff: dispatching, utils::UpState, prelude, repls2, crate::{dialogues_repl, dialogues_repl_with_listener}, and #[teloxide(subtransition)] [BC].

Added

  • The new API for dialogue handlers: teloxide::handler! (issue 567).
  • Built-in webhooks support via teloxide::dispatching::update_listeners::webhooks module.
  • Dialogue::chat_id for retrieving a chat ID from a dialogue.

Changed

  • Updated teloxide-core from version 0.4.5 to version 0.5.0 [BC]
  • Rename dispatching2 => dispatching [BC].
  • Rename prelude2 => prelude [BC].
  • Move update_listeners, stop_token, IdleShutdownError, and ShutdownToken from the old dispatching to the new dispatching (previously dispatching2).
  • Replace crate::{commands_repl, commands_repl_with_listener, repl, repl_with_listener} with those of the new dispatching [BC].
  • UpdateListener::StopToken is now always Send [BC].
  • Rename BotCommand trait to BotCommands [BC].
  • BotCommands::descriptions now returns CommandDescriptions instead of String [BC].
  • Mark Dialogue::new as #[must_use].

Fixed

  • Concurrent update handling in the new dispatcher (issue 536).

Deprecated

  • HandlerFactory and HandlerExt::dispatch_by in favour of teloxide::handler!.

0.7.3 - 2022-04-03

Fixed

  • Update teloxide-core to version 0.4.5 to fix a security vulnerability. See more in teloxide-core release notes.

0.7.2 - 2022-03-23

Added

  • The Storage::erase default function that returns Arc<ErasedStorage>.
  • ErasedStorage, a storage with an erased error type.
  • Allow the storage generic S be ?Sized in Dialogue and HandlerExt::enter_dialogue.

Deprecated

  • enable_logging! and enable_logging_with_filter! macros

Fixed

  • Log UpdateKind::Error in teloxide::dispatching2::Dispatcher.
  • Don't warn about unhandled updates in repls2 (issue 557).
  • parse_command and parse_command_with_prefix now ignores case of the bot username

0.7.1 - 2022-03-09

Fixed

  • Compilation with non-default features

0.7.0 - 2022-02-09

Fixed

  • Dispatcher wasn't Send. Make DispatcherBuilder::{default_handler, error_handler} accept a handler that implements Send + Sync (PR 517).

0.6.1 - 2022-02-06

Fixed

  • docs.rs documentation build

0.6.0 - 2022-02-06

Added

  • BotCommand::bot_commands to obtain Telegram API commands (issue 262).
  • The dispatching2 and prelude2 modules. They present a new dispatching model based on dptree.

Changed

  • Require that AsUpdateStream::Stream is Send.
  • Restrict a user crate by CARGO_CRATE_NAME instead of CARGO_PKG_NAME in enable_logging! and enable_logging_with_filter!.
  • Updated teloxide-core to v0.4.0, see its changelog.

Deprecated

  • The dispatching and prelude modules.

Fixed

  • Infinite retries while stopping polling listener (issue 496)
  • polling{,_default} and it's Stream and StopToken not being Send (and by extension fix the same problem with repls)

0.5.3 - 2021-10-25

Fixed

  • Compilation when the ctrlc_handler feature is disabled (issue 462)

0.5.2 - 2021-08-25

Fixed

  • Depend on a correct futures version (v0.3.15).

0.5.1 - 2021-08-05

Changed

  • Improved log messages when ^C is received with ^C handler set up

0.5.0 - 2021-07-08

Added

  • Storage::get_dialogue to obtain a dialogue indexed by a chat ID.
  • InMemStorageError with a single variant DialogueNotFound to be returned from InMemStorage::remove_dialogue.
  • RedisStorageError::DialogueNotFound and SqliteStorageError::DialogueNotFound to be returned from Storage::remove_dialogue.
  • A way to shutdown dispatcher
    • Dispatcher::shutdown_token function.
    • ShutdownToken with a shutdown function.
  • Dispatcher::setup_ctrlc_handler function (issue 153).
  • IdleShutdownError
  • Automatic update filtering (issue 389).
  • Added reply shortcut to every kind of messages (PR 404).

Changed

  • Do not return a dialogue from Storage::{remove_dialogue, update_dialogue}.
  • Return an error from Storage::remove_dialogue if a dialogue does not exist.
  • Require D: Clone in dialogues_repl(_with_listener) and InMemStorage.
  • Automatically delete a webhook if it was set up in update_listeners::polling_default (thereby making it async, issue 319).
  • polling and polling_default now require R: 'static
  • Refactor UpdateListener trait:
    • Add a StopToken associated type.
      • It must implement a new StopToken trait which has the only function fn stop(self);
    • Add a stop_token function that returns Self::StopToken and allows stopping the listener later (issue 166).
    • Remove blanked implementation.
    • Remove Stream from super traits.
    • Add AsUpdateStream to super traits.
      • Add an AsUpdateStream trait that allows turning implementors into streams of updates (GAT workaround).
    • Add a timeout_hint function (with a default implementation).
  • Dispatcher::dispatch and Dispatcher::dispatch_with_listener now require mutable reference to self.
  • Repls can now be stopped by ^C signal.
  • Noop and AsyncStopTokenstop tokens.
  • StatefulListener.
  • Emit not only errors but also warnings and general information from teloxide, when set up by enable_logging!.
  • Use i64 instead of i32 for user_id in html::user_mention and markdown::user_mention.
  • Updated to teloxide-core v0.3.0 (see it's changelog for more)

Fixed

  • Remove the reqwest dependency. It's not needed after the teloxide-core integration.
  • A storage persistence bug (issue 304).
  • Log errors from Storage::{remove_dialogue, update_dialogue} in DialogueDispatcher (issue 302).
  • Mark all the functions of Storage as #[must_use].

0.4.0 - 2021-03-22

Added

  • Integrate teloxide-core.
  • Allow arbitrary error types to be returned from (sub)transitions (issue 242).
  • The respond function, a shortcut for ResponseResult::Ok(()).
  • The sqlite-storage feature -- enables SQLite support.
  • Dispatcher::{my_chat_members_handler, chat_members_handler}

Deprecated

  • UpdateWithCx::answer_str

Fixed

  • Hide SubtransitionOutputType from the docs.

Changed

  • Export teloxide_macros::teloxide in prelude.
  • dispatching::dialogue::serializer::{JSON -> Json, CBOR -> Cbor}
  • Allow bot_name be N, where N: Into<String> + ... in commands_repl & commands_repl_with_listener.
  • 'Edit methods' (namely edit_message_live_location, stop_message_live_location, edit_message_text, edit_message_caption, edit_message_media and edit_message_reply_markup) are split into common and inline versions (e.g.: edit_message_text and edit_inline_message_text). Instead of ChatOrInlineMessage common versions accept chat_id: impl Into<ChatId> and message_id: i32 whereas inline versions accept inline_message_id: impl Into<String>. Also note that return type of inline versions is True (issue 253, pr 257)
  • ChatOrInlineMessage is renamed to TargetMessage, it's ::Chat variant is renamed to ::Common, #[non_exhaustive] annotation is removed from the enum, type of TargetMessage::Inline::inline_message_id changed i32 => String. TargetMessage now implements From<String>, get_game_high_scores and set_game_score use Into<TargetMessage> to accept Strings. (issue 253, pr 257)
  • Remove ResponseResult from prelude.

0.3.4 - 2020-01-13

Fixed

  • Failing compilation with serde::export (issue 328).

0.3.3 - 2020-10-30

Fixed

  • The dice field from MessageDice is public now (issue 306)

0.3.2 - 2020-10-23

Added

0.3.1 - 2020-08-25

Added

  • Bot::builder method (PR 269).

0.3.0 - 2020-07-31

Added

  • Support for typed bot commands (issue 152).
  • BotBuilder, which allows setting a default ParseMode.
  • The Transition, Subtransition, SubtransitionOutputType traits.
  • A nicer approach to manage dialogues via #[derive(Transition)] + #[teloxide(subtransition)] (see examples/dialogue_bot).
  • The redis-storage feature -- enables the Redis support.
  • The cbor-serializer feature -- enables the CBOR serializer for dialogues.
  • The bincode-serializer feature -- enables the Bincode serializer for dialogues.
  • The frunk feature -- enables teloxide::utils::UpState, which allows mapping from a structure of field1, ..., fieldN to a structure of field1, ..., fieldN, fieldN+1.
  • Upgrade to v4.9 Telegram bots API.
  • teloxide::utils::client_from_env -- constructs a client from the TELOXIDE_TOKEN environmental variable.
  • Import Transition, TransitionIn, TransitionOut, UpState to teloxide::prelude.
  • Import repl, commands_repl to teloxide.
  • Let users inspect an unknown API error using ApiErrorKind::Unknown(String). All the known API errors are placed into KnownApiErrorKind.
  • Setters to all the API types.
  • teloxide::dispatching::dialogue::serializer -- various serializers for memory storages. The Serializer trait, Bincode, CBOR, JSON.
  • teloxide::{repl, repl_with_listener, commands_repl, commands_repl_with_listener, dialogues_repl, dialogues_repl_with_listener}
  • InputFile::Memory
  • Option to hide a command from description (issue 217).
  • Respect the TELOXIDE_PROXY environment variable in Bot::from_env.

Deprecated

  • Bot::{from_env_with_client, new, with_client}

Changed

  • DialogueDispatcherHandlerCx -> DialogueWithCx.
  • DispatcherHandlerCx -> UpdateWithCx.
  • Now provided description of unknown telegram error, by splitting ApiErrorKind at ApiErrorKind and ApiErrorKindKnown enums (issue 199).
  • Extract Bot from Arc (issue 216).
  • Mark all the API types as #[non_exhaustive].
  • Replace all mime_type: String with MimeWrapper.

Fixed

  • Now methods which can send file to Telegram return tokio::io::Result<T>. Before that it could panic (issue 216).
  • If a bot wasn't triggered for several days, it stops responding (issue 223).

0.2.0 - 2020-02-25

Added

  • The functionality to parse commands only with a correct bot's name (breaks backwards compatibility) (Issue 168).
  • This CHANGELOG.md.

Fixed

  • Fix parsing a pinned message (Issue 167).
  • Replace LanguageCode with String, because the official Telegram documentation doesn't specify a concrete version of IETF language tag.
  • Problems with the poll_type field (Issue 178).
  • Make polling_default actually a long polling update listener (PR 182).

Removed

0.1.0 - 2020-02-19

Added

  • This project.