diff --git a/CHANGELOG.md b/CHANGELOG.md index 47af4efa..9a34c9c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,9 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support for Telegram Bot API [version 6.0](https://core.telegram.org/bots/api#april-16-2022) - Note that some field were renamed -- Method `MessageEntity::user_mention` ([#208][pr208]) +- Shortcut methods for `MessageEntity` ([#208][pr208], [#210][pr210]) [pr208]: https://github.com/teloxide/teloxide-core/pull/208 +[pr210]: https://github.com/teloxide/teloxide-core/pull/210 ### Changed diff --git a/src/types/message_entity.rs b/src/types/message_entity.rs index 4733258f..8d4e5c40 100644 --- a/src/types/message_entity.rs +++ b/src/types/message_entity.rs @@ -28,9 +28,95 @@ impl MessageEntity { } } + /// Create a message entity representing a bold text. + pub const fn bold(offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::Bold, + offset, + length, + } + } + + /// Create a message entity representing an italic text. + pub const fn italic(offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::Italic, + offset, + length, + } + } + + /// Create a message entity representing an underline text. + pub const fn underline(offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::Underline, + offset, + length, + } + } + + /// Create a message entity representing a strikethrough text. + pub const fn strikethrough(offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::Strikethrough, + offset, + length, + } + } + + /// Create a message entity representing a spoiler text. + pub const fn spoiler(offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::Spoiler, + offset, + length, + } + } + + /// Create a message entity representing a monowidth text. + pub const fn code(offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::Code, + offset, + length, + } + } + + /// Create a message entity representing a monowidth block. + pub const fn pre(language: Option<String>, offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::Pre { language }, + offset, + length, + } + } + + /// Create a message entity representing a clickable text URL. + pub const fn text_link(url: reqwest::Url, offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::TextLink { url }, + offset, + length, + } + } + + /// Create a message entity representing a text mention. + /// + /// # Note + /// + /// If you don't have a complete [`User`] value, please use + /// [`MessageEntity::text_mention_id`] instead. + pub fn text_mention(user: User, offset: usize, length: usize) -> Self { + Self { + kind: MessageEntityKind::TextMention { user }, + offset, + length, + } + } + /// Create a message entity representing a text link in the form of /// `tg://user/?id=...` that mentions user with `user_id`. - pub fn user_mention(user_id: UserId, offset: usize, length: usize) -> Self { + pub fn text_mention_id(user_id: UserId, offset: usize, length: usize) -> Self { Self { kind: MessageEntityKind::TextLink { url: user_id.url() }, offset,