teloxide/crates/teloxide-core/CHANGELOG.md
2023-11-05 23:50:54 +01:00

34 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

  • ChatPermission::can_* helper functions (#851)
  • mentioned_users functions for CallbackQuery, Chat, ChatJoinRequest, ChatMemberUpdated, Game, Message, Poll, Update which return all contained User instances (#850)
  • Message::video_chat_participants_invited (#850)
  • Update::from, a replacement for Update::user (#850)
  • Seconds type, which represents a duration is seconds (#859)
  • VideoChatEnded::duration field that was previously missed (#859)
  • ThreadId newtype over MessageId, used for identifying reply threads (#887)
  • ChatId::as_user (#905)
  • Implement PartialEq<ChatId> for UserId and PartialEq<UserId> for ChatId (#905)
  • ChatId::{MIN, MAX} (#905)

Fixed

  • Return types of edit_message_live_location_inline, stop_message_live_location_inline, and set_game_score_inline: Message => True (#854)
  • Remove latitude and longitude parameters from stop_message_live_location and stop_message_live_location_inline (#854)
  • Fix the type of photo_size,photo_width and photo_height in the send_invoice method (#936)

Changed

  • Types of Option<bool> fields of KeyboardMarkup, KeyboardRemove and ForceReply to bool ([#853][pr853])
  • Type of KeyboardMarkup::input_field_placeholder: Option<String> => String ([#853][pr853])
  • The following fields now use Seconds type instead of u32, u16 or Duration (#859)
    • Animation::duration
    • Audio::duration
    • Chat::message_auto_delete_time
    • Chat::slow_mode_delay
    • InlineQueryResultLocation::live_period
    • Location::live_period
    • MessageAutoDeleteTimerChanged::message_auto_delete_time
    • Poll::open_period
    • Video::duration
    • VideoNote::duration
    • Voice::duration
  • RequestError::MigrateToChatId single fields type to ChatId (#859)
  • RequestError::RetryAfter single fields type to Seconds (#859)
  • CallbackGame, ForumTopicClosed, ForumTopicReopened, GeneralForumTopicHidden, GeneralForumTopicUnhidden and WriteAccessAllowed structures are now defined as named (struct S {}) instead of unit (struct S;) in order to fix their deserialization (#876)
  • Download now uses GAT feature on the Fut and Err associated types, instead of a lifetime on the whole trait (#885)
  • Renamed ForumTopic::message_thread_id into thread_id (#887)
  • ForumTopic::thread_id and Message::thread_id now use ThreadId instead of i32 (#887)
  • message_thread_id method parameters now use ThreadId instead of i32 (#887)
  • DiceEmoji variant order (#887)
  • Dice::value now use u8, instead of i32 (#887)
  • Invoice::total_amount, LabeledPrice::amount, PreCheckoutQuery::total_amount, SuccessfulPayment::total_amout now use u32, instead of i32 (#887)
  • Forward::message_id and Message::forward_from_message_id now use MessageId instead of i32 (#887)
  • Poll::total_voter_count and PollOption::voter_count now use u32 instead of i32 (#887)
  • PollAnswer::option_ids now use u8 instead of i32 (#887)
  • Use u32 for sizes and Seconds for timespans in InlineQueryResult* (#887)
  • SendGame::reply_to_message_id, SendSticker::reply_to_message_id and SendInvoice::reply_to_message_id now use MessageId instead of i32 (#887)
  • Use UpdateId for Update::id (#892)
  • MSRV (Minimal Supported Rust Version) was bumped from 1.64.0 to 1.68.0 (#950)
  • Add proper support for edit_message_caption_inline, copy_message, answer_inline_query, answer_web_app_query, send_media_group, edit_message_media, and edit_message_media_inline to DefaultParseMode adaptor (#961)
    • Note that now DefaultParseMode sets the default on send, instead of request creation
    • DefaultParseMode now also requires that the supported requests implement Clone (as a user you should not notice anything changing)

Deprecated

  • Update::user, use Update::from instead (#850)

Fixed

  • Deserialization of ApiError::CantParseEntities (#839)
  • Deserialization of empty (content-less) messages that can sometimes appear as a part of callback query (#850, issue #873)

0.9.1 - 2023-02-15

Fixed

  • Update::user now handles channel posts, chat member changes and chat join request updates correctly (#835)
  • In cases when teloxide can't deserialize an update, error now includes the full json value (#826)
  • Deserialization of topic messages (#830)

Added

  • ApiError::ImageProcessFailed (#825)

0.9.0 - 2023-01-17

Changed

  • The methods ChatMember::{can_pin_messages, can_invite_users, can_change_info} now take into account the permissions of Restricted chat member kind (#764)
  • The method ChatMemberKind::is_present now takes into account the value of Restricted::is_member field (#764)
  • The following functions were made #[must_use]:
    • MaskPoint::{new, point}
    • StickerKind::{premium_animation, mask_position, custom_emoji_id}
  • Option<bool> fields of Administrator are now bool (#800):
    • can_post_messages
    • can_edit_messages
    • can_pin_messages
    • can_manage_topics

Added

  • Restricted::{is_member, can_change_info, can_invite_users, can_pin_messages, can_send_polls} fields (#764)
  • ChatMember::can_send_polls method (#764)
  • Support for Telegram Bot API version 6.3 ([#789][pr789])
  • Support for Telegram Bot API version 6.4 (#809)

Deprecated

  • ChatMemberKind methods (#800):
    • can_change_info
    • can_invite_users
    • can_pin_messages
    • can_send_messages
    • can_send_media_messages
    • can_send_other_messages
    • can_send_polls
    • can_add_web_page_previews
  • ChatMemberStatus::is_present method (#800)

Fixed

  • ChatMemberKind::can_manage_chat method now correctly returns false for non owner/administrator users (#800)

0.8.0 - 2022-10-03

Added

Changed

  • Removed file_ prefix from File and FileMeta fields #255
  • Animation, Audio, Document, PassportFile, PhotoSize, Video, VideoNote and Voice now contain FileMeta instead of its fields (#253)
    • Combined with File fields renaming, instead of .file_size you can write .file.size and similarly with other fields
  • You can now .await any Request! (#249)
    • Request now requires Self: IntoFuture
    • There is no need for AutoSend anymore
  • MSRV (Minimal Supported Rust Version) was bumped from 1.58.0 to 1.64.0
  • Message id parameters and fields now use MessageId type instead of i32 (#254)
  • Refactored Sticker and related types (#251)

Removed

  • Methods for creating InlineQuery (#246)

Fixed

  • SetWebhook request can now properly send certificate (#250)
  • Serialization of InputSticker::Webm (#252)

Deprecated

  • AutoSend adaptor (#249)

0.7.1 - 2022-08-19

Fixed

  • ErasedRequester<E> now implements Clone even if E is not Clone (#244)

Added

  • From<ApiError>, From<DownloadError> and From<std::io::Error> impls for RequestError (#241)

Changed

  • More functions are now marked with #[must_use] (#242)

0.7.0 - 2022-07-19

Added

  • InlineKeyboardButton::{pay, login, web_app, callback_game, pay} constructors (#231)
  • Support for Telegram Bot API version 6.1 (#233)
  • StickerKind that is now used instead of is_animated and is_video fields of Sticker and StickerSet (#238)

Changed

  • InlineKeyboardButtonKind::Pay's only field now has type True (#231)
  • file_size fields are now always u32 (#237)
  • File is now split into File and FileMeta, the latter is used in UploadStickerFile and Sticker::premium_animation (#237)

Deprecated

  • InlineKeyboardButton::{text, kind} functions (#231)

Removed

  • ChatPrivate::type_ field (#232)

0.6.3 - 2022-06-21

Fixed

  • Fix Message::parse_caption_entities (#229)

0.6.2 - 2022-06-16

Fixed

  • Fix ChatPrivate serialization (#226)
  • Build with particular crates versions (enable "codec" feature of tokio-util) (#225)
  • Remove trailing / from Message::url (on ios it caused problems) (#223)
  • Fix incorrect panic in User::is_channel (#222)

Added

  • Message::{url_of, comment_url, comment_url_of, url_in_thread, url_in_thread_of} functions (#223)
  • Utilities to parse message entities (see Message::parse_entities) ([#217][pr217])

0.6.1 - 2022-06-02

Fixed

  • Deserialization of File when file_path or file_size are missing (#220)
  • Correct how NotFound and UserDeactivated errors are deserialized (#219)

Added

  • is_* methods to ChatMemberStatus analogous to the ChatMember{,Kind} methods (#216)
  • ChatId and UserId to the prelude (#212)

0.6.0 - 2022-04-25

Added

  • Support for Telegram Bot API version 6.0 (#206, #211)
    • Note that some field were renamed
  • Shortcut methods for MessageEntity (#208, #210)

Changed

  • Make KeyboardMarkup creation more convenient (#207)
    • Accept IntoIterator in KeyboardMarkup::append_row.
    • Accept Into<String> instead of String in InlineKeyboardButton::{url, callback, switch_inline_query, switch_inline_query_current_chat}.

0.5.1 - 2022-04-18

Fixed

  • Document the errors module.

0.5.0 - 2022-04-13

Added

  • errors module and errors::AsResponseParameters trait (#130)
  • UserId::{url, is_anonymous, is_channel, is_telegram} convenience functions (#197)
  • User::{tme_url, preferably_tme_url} convenience functions (#197)
  • Me::username and Deref<Target = User> implementation for Me (#197)
  • Me::{mention, tme_url} (#197)
  • AllowedUpdate::ChatJoinRequest (#201)
  • ChatId::{is_user, is_group, is_channel_or_supergroup} functions #198

Changed

  • user.id now uses UserId type, ChatId now represents only chat id, not channel username, all chat_id function parameters now accept Recipient [BC]
  • Improve Throttling adoptor (#130)
    • Freeze when getting RetryAfter(_) error
    • Retry requests that previously returned RetryAfter(_) error
  • RequestError::RetryAfter now has a Duration field instead of i32

Fixed

  • A bug in Message::url implementation (#198)
  • Fix never ending loop that caused programs that used Throttling to never stop, see issue #535 (#130)

0.4.5 - 2022-04-03

Fixed

  • Hide bot token in errors (#200)

0.4.4 - 2022-04-21

Added

  • WrongFileIdOrUrl and FailedToGetUrlContent errors (#188)
  • NotFound error (#190)
  • HasPayload::with_payload_mut function (#189)

0.4.3 - 2022-03-08

Added

  • User::is_telegram function (#186)

Fixed

  • Update::chat() now returns Some(&Chat) for UpdateKind::ChatMember, UpdateKind::MyChatMember, UpdateKind::ChatJoinRequest (#184)
  • get_updates timeouts (partially revert buggy #180) (#185)

0.4.2 - 2022-02-17 [yanked]

Deprecated

  • Message::chat_id use .chat.id field instead (#182)

Fixed

  • Serialization of SendPoll::type_ (it's now possible to send quiz polls) (#181)

Added

  • Payload::timeout_hint method to properly handle long running requests like GetUpdates (#180)

0.4.1 - 2022-02-13

Fixed

  • Deserialization of UntilDate (#178)

0.4.0 - 2022-02-03

Added

  • ApiError::TooMuchInlineQueryResults (#135)
  • ApiError::NotEnoughRightsToChangeChatPermissions (#155)
  • Support for 5.4 telegram bot API (#133)
  • Support for 5.5 telegram bot API (#143, #164)
  • Support for 5.6 telegram bot API (#162)
  • Support for 5.7 telegram bot API (#175)
  • EditedMessageIsTooLong error (#109)
  • UntilDate enum and use it for {Restricted, Banned}::until_date (#117)
  • Limits::messages_per_min_channel (#121)
  • media_group_id field to MediaDocument and MediaAudio (#139)
  • caption_entities method to InputMediaPhoto (#140)
  • User::is_anonymous and User::is_channel functions (#151)
  • UpdateKind::Error (#156)

Changed

  • Refactor InputFile (#167)
    • Make it an opaque structure, instead of enum
    • Add read constructor, that allows creating InputFile from impl AsyncRead
    • Internal changes
  • Refactor errors (#134)
    • Rename DownloadError::NetworkError to Network
    • Rename RequestError::ApiError to Api
    • Remove RequestError::Api::status_code and rename RequestError::Api::kind to 0 (struct to tuple struct)
    • Rename RequestError::NetworkError to Network
    • Implement Error for ApiError
  • Use url::Url for urls, use chrono::DateTime<Utc> for dates in types (#115)
  • Mark ApiError as non_exhaustive (#125)
  • InputFile and related structures now do not implement PartialEq, Eq and Hash (#133)
  • How forwarded messages are represented (#151)
  • RequestError::InvalidJson now has a raw field with raw json for easier debugability (#150)
  • ChatPermissions is now bitflags (#157)
  • Type of WebhookInfo::ip_address from Option<String> to Option<std::net::IpAddr> (#172)
  • Type of WebhookInfo::allowed_updates from Option<Vec<String>> to Option<Vec<AllowedUpdate>> (#174)

Fixed

  • Deserialization of chat migrations, see issue #427 (#143)
  • Type of BanChatMember::until_date: u64 -> chrono::DateTime<Utc> (#117)
  • Type of Poll::correct_option_id: i32 -> u8 (#119)
  • Type of Poll::open_period: i32 -> u16 (#119)
  • Throttle adaptor not honouring chat/min limits (#121)
  • Make SendPoll::type_ optional (#133)
  • Bug with caption_entities, see issue #473
  • Type of response for CopyMessage method (#141, #142)
  • Bad request serialization when the language field of MessageEntityKind::Pre is None (#145)
  • Deserialization of MediaKind::Venue (#147)
  • Deserialization of VoiceChat{Started,Ended} messages (#153)
  • Serialization of BotCommandScope::Chat{,Administrators} (#154)

Removed

  • get_updates_fault_tolerant method and SemiparsedVec (#156)

0.3.3 - 2021-08-03

Fixed

  • Compilation with nightly feature (use type_alias_impl_trait instead of min_type_alias_impl_trait) (#108)

0.3.2 - 2021-07-27

Added

  • ErasedRequester bot adaptor, ErasedRequest struct, {Request, RequesterExt}::erase functions (#105)
  • Trace bot adaptor (#104)
  • HasPayload, Request and Requester implementations for either::Either (#103)

0.3.1 - 2021-07-07

  • Minor documentation tweaks (#102)
  • Remove Self: 'static bound on RequesterExt::throttle (#102)

0.3.0 - 2021-07-05

Added

  • impl Clone for {CacheMe, DefaultParseMode, Throttle} (#76)
  • DefaultParseMode::parse_mode which allows to get currently used default parse mode (#77)
  • Thrrotle::{limits,set_limits} functions (#77)
  • Throttle::{with_settings,spawn_with_settings} and throttle::Settings (#96)
  • Getters for fields nested in Chat (#80)
  • API errors: ApiError::NotEnoughRightsToManagePins, ApiError::BotKickedFromSupergroup (#84)
  • Telegram bot API 5.2 support (#86)
  • Telegram bot API 5.3 support (#99)
  • net::default_reqwest_settings function (#90)

Changed

  • Message::url now returns links to messages in private groups too (#80)
  • Refactor ChatMember methods (#74)
    • impl Deref<Target = ChatMemberKind> to make ChatMemberKind's methods callable directly on ChatMember
    • Add ChatMemberKind::is_{creator,administrator,member,restricted,left,kicked} which check kind along with is_privileged and is_in_chat which combine some of the above.
    • Refactor privilege getters
  • Rename ChatAction::{RecordAudio => RecordVoice, UploadAudio => UploadVoice} (#86)
  • Use url::Url for urls, use chrono::DateTime<Utc> for dates (#97)

Fixed

  • telegram_response: fix issue retry_after and migrate_to_chat_id handling (#94)
  • Type of PublicChatSupergroup::slow_mode_delay field: Option<i32>=> Option<u32> (#80)
  • Add missing Chat::message_auto_delete_time field (#80)
  • Output types of LeaveChat PinChatMessage, SetChatDescription, SetChatPhoto SetChatTitle, UnpinAllChatMessages and UnpinChatMessage: String => True (#79)
  • SendChatAction output type Message => True (#75)
  • GetChatAdministrators output type ChatMember => Vec<ChatMember> (#73)
  • reqwest dependency bringing native-tls in even when rustls was selected (#71)
  • Type of {Restricted,Kicked}::until_date fields: i32 => i64 (#74)
  • Type of PhotoSize::{width,height} fields: i32 => u32 (#100)

0.2.2 - 2020-03-22

Fixed

  • Typo: ReplyMarkup::{keyboad => keyboard} (#69)
    • Note: method with the old name was deprecated and hidden from docs

0.2.1 - 2020-03-19

Fixed

  • Types fields privacy (make fields of some types public) (#68)
    • Dice::{emoji, value}
    • MessageMessageAutoDeleteTimerChanged::message_auto_delete_timer_changed
    • PassportElementError::{message, kind}
    • StickerSet::thumb

0.2.0 - 2020-03-16

Changed

  • Refactor ReplyMarkup (#pr65) (BC)
    • Rename ReplyMarkup::{InlineKeyboardMarkup => InlineKeyboard, ReplyKeyboardMarkup => Keyboard, ReplyKeyboardRemove => KeyboardRemove}
    • Add inline_kb, keyboad, kb_remove and force_reply ReplyMarkup consructors
    • Rename ReplyKeyboardMarkup => KeyboardMarkup
    • Rename ReplyKeyboardRemove => KeyboardRemove
    • Remove useless generic param from ReplyKeyboardMarkup::new and InlineKeyboardMarkup::new
    • Change parameters order in ReplyKeyboardMarkup::append_to_row and InlineKeyboardMarkup::append_to_row
  • Support telegram bot API version 5.1 (see it's changelog) (#pr63) (BC)
  • Support telegram bot API version 5.0 (see it's changelog) (#pr62) (BC)

Added

  • GetUpdatesFaultTolerant - fault toletant version of GetUpdates (#58) (BC)
  • Derive Clone for AutoSend.

Fixed

  • Make MediaContact::contact public (#pr64)
  • set_webhook signature (make allowed_updates optional) (#59)
  • Fix typos in payloads (#57):
    • get_updates: offset i64 -> i32
    • send_location: make live_period optional
  • send_contact signature (phone_number and first_name f64 => String) (#56)

Removed

  • Message::text_owned (#pr62) (BC)

Changed

  • NonStrictVec -> SemiparsedVec.

0.1.1 - 2020-02-17

Fixed

  • Remove dbg! call from internals (#53)

0.1.0 - 2020-02-17

Added

  • #[non_exhaustive] on InputFile since we may want to add new ways to send files in the future (#49)
  • MultipartPayload for future proofing (#49)
  • Support for rustls (#24)
  • #[must_use] attr to payloads implemented by macro (#22)
  • forward-to-deref Requester impls (#39)
  • Bot::{set_,}api_url methods (#26, #35)
  • payloads module
  • RequesterExt trait which is implemented for all Requesters and allows easily wrapping them in adaptors
  • adaptors module (#14)
    • throttle, cache_me, auto_send and full crate features
    • Request throttling - opt-in feature represented by Throttle bot adapter which allows automatically checking telegram limits (#10, #46, #50)
    • Request auto sending - ability to .await requests without need to call .send() (opt-in feature represented by AutoSend bot adapter, #8)
    • get_me caching (opt-in feature represented by CacheMe bot adapter)
  • Requester trait which represents bot-clients (#7, #12, #27)
  • {Json,Multipart}Request the Bot requests types (#6)
  • Output<T> alias to <<T as HasPayload>::Payload as Payload>::Output
  • Payload, HasPayload and Request traits which represent different parts of the request (#5)
  • GetUpdatesNonStrict 'telegram' method, that behaves just like GetUpdates but doesn't #2 fail if one of updates fails to be deserialized
  • Move core code here from the teloxide main repo, for older changes see it's CHANGELOG.md.
    • Following modules were moved:
      • bot
      • requests [except requests::respond function]
      • types
      • errors
      • net [private]
    • client_from_env was moved from teloxide::utils to crate root of teloxide-core
    • To simplify GetUpdates request it was changed to simply return Vec<Update> (instead of Vec<Result<Update, (Value, serde_json::Error)>>)

Changed

  • Cleanup setters in types::* (remove most of them) (#44)
  • Refactor KeyboardButtonPollType (#44)
  • Replace Into<Vec<_>> by IntoIterator<Item = _> in function arguments (#44)
  • Update dependencies (including tokio 1.0) (#37)
  • Refactor file downloading (#30):
    • Make net module public
    • Move Bot::download_file{,_stream} methods to a new Download trait
      • Impl Download for all bot adaptors & the Bot itself
    • Change return type of download_file_stream — return Stream<Result<Bytes>>``, instead of Future<Result<Stream<Result>>>``
    • Add api_url param to standalone versions of download_file{,_stream}
    • Make net::{TELEGRAM_API_URL, download_file{,_stream}} pub
  • Refactor Bot (#29):
    • Move default parse mode to an adaptor (DefaultParseMode)
    • Remove bot builder (it's not usefull anymore, since parse_mode is moved away)
    • Undeprecate bot constructors (Bot::{new, with_client, from_env_with_client})
  • Rename StickerType => InputSticker, {CreateNewStickerSet,AddStickerToSet}::sticker_type} => sticker (#23, #43)
  • Use _: IntoIterator<Item = T> bound instead of _: Into<Vec<T>> in telegram methods which accept collections (#21)
  • Make MessageDice::dice pub (#20)
  • Merge ApiErrorKind and KnownApiErrorKind into ApiError (#13)
  • Refactor ChatMember (#9)
    • Replace a bunch of Option<_> fields with ChatMemberKind
    • Remove setters (users are not expected to create this struct)
    • Add getters
  • Changed internal mechanism of sending multipart requests (#1)
  • Added RequestError::Io(io::Error) to wrap I/O error those can happen while sending files to telegram
  • Make all fields of all methods pub (#3)

Removed

  • unstable-stream feature (now Bot::download_file_stream is accesable by default)
  • old Request trait
  • RequestWithFile, now multipart requests use Request
  • Remove all #[non_exhaustive] annotations (#4)
  • Remove MessageEntity::text_from because it's wrong (#44)