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,