Repository: aiogram/aiogram
Pull request #1392 (2024-01-10 11:09:24)

Reworked bot-wide defaults
# Description

Reworked bot-wide globals (like parse_mode and others)


github-actions[bot]: # :x: Changelog is required!

You need to add a brief description of the changes to the `CHANGES` directory.

Changes file should be named like `<issue or PR number>.<category>.rst`,
example `1234.bugfix.rst` where `1234` is the PR or issue number and `bugfix` is the category.

The content of the file should be a brief description of the changes in
the PR in the format of a description of what has been done.

Possible categories are: `feature`, `bugfix`, `doc`, `removal` and `misc`.
codecov[bot]: ## [Codecov](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Comparison is base [(`d394af8`)](https://app.codecov.io/gh/aiogram/aiogram/commit/d394af83bdebe094c440a96c0dc5126632b06aaa?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram) 100.00% compared to head [(`47bd869`)](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram) 100.00%.
> Report is 1 commits behind head on dev-3.x.

<details><summary>Additional details and impacted files</summary>


[![Impacted file tree graph](https://app.codecov.io/gh/aiogram/aiogram/pull/1392/graphs/tree.svg?width=650&height=150&src=pr&token=cFqEr3p9MX&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram)](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram)

```diff
@@            Coverage Diff            @@
##           dev-3.x     #1392   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          409       410    +1     
  Lines        10550     10596   +46     
=========================================
+ Hits         10550     10596   +46     
```

| [Flag](https://app.codecov.io/gh/aiogram/aiogram/pull/1392/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram) | Coverage Δ | |
|---|---|---|
| [unittests](https://app.codecov.io/gh/aiogram/aiogram/pull/1392/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram) | `100.00% <100.00%> (ø)` | |

Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#carryforward-flags-in-the-pull-request-comment) to find out more.

| [Files](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram) | Coverage Δ | |
|---|---|---|
| [aiogram/client/bot.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9jbGllbnQvYm90LnB5) | `100.00% <100.00%> (ø)` | |
| [aiogram/client/default.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9jbGllbnQvZGVmYXVsdC5weQ==) | `100.00% <100.00%> (ø)` | |
| [aiogram/client/session/aiohttp.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9jbGllbnQvc2Vzc2lvbi9haW9odHRwLnB5) | `100.00% <ø> (ø)` | |
| [aiogram/client/session/base.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9jbGllbnQvc2Vzc2lvbi9iYXNlLnB5) | `100.00% <100.00%> (ø)` | |
| [aiogram/methods/copy\_message.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9tZXRob2RzL2NvcHlfbWVzc2FnZS5weQ==) | `100.00% <100.00%> (ø)` | |
| [aiogram/methods/edit\_message\_caption.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9tZXRob2RzL2VkaXRfbWVzc2FnZV9jYXB0aW9uLnB5) | `100.00% <100.00%> (ø)` | |
| [aiogram/methods/edit\_message\_text.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9tZXRob2RzL2VkaXRfbWVzc2FnZV90ZXh0LnB5) | `100.00% <100.00%> (ø)` | |
| [aiogram/methods/forward\_message.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9tZXRob2RzL2ZvcndhcmRfbWVzc2FnZS5weQ==) | `100.00% <100.00%> (ø)` | |
| [aiogram/methods/send\_animation.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9tZXRob2RzL3NlbmRfYW5pbWF0aW9uLnB5) | `100.00% <100.00%> (ø)` | |
| [aiogram/methods/send\_audio.py](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram#diff-YWlvZ3JhbS9tZXRob2RzL3NlbmRfYXVkaW8ucHk=) | `100.00% <100.00%> (ø)` | |
| ... and [41 more](https://app.codecov.io/gh/aiogram/aiogram/pull/1392?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=aiogram) | |

</details>

Patch:
diff --git a/.butcher/methods/copyMessage/default.yml b/.butcher/methods/copyMessage/default.yml
new file mode 100644
index 00000000..4f6fbe94
--- /dev/null
+++ b/.butcher/methods/copyMessage/default.yml
@@ -0,0 +1,2 @@
+parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/copyMessage/replace.yml b/.butcher/methods/copyMessage/replace.yml
deleted file mode 100644
index cc4fe9b2..00000000
--- a/.butcher/methods/copyMessage/replace.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/editMessageCaption/default.yml b/.butcher/methods/editMessageCaption/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/methods/editMessageCaption/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/methods/editMessageCaption/replace.yml b/.butcher/methods/editMessageCaption/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/methods/editMessageCaption/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/methods/editMessageText/default.yml b/.butcher/methods/editMessageText/default.yml
new file mode 100644
index 00000000..becd35ac
--- /dev/null
+++ b/.butcher/methods/editMessageText/default.yml
@@ -0,0 +1,2 @@
+disable_web_page_preview: link_preview_is_disabled
+parse_mode: parse_mode
diff --git a/.butcher/methods/editMessageText/replace.yml b/.butcher/methods/editMessageText/replace.yml
deleted file mode 100644
index ebc1d7e9..00000000
--- a/.butcher/methods/editMessageText/replace.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  disable_web_page_preview:
-    value: UNSET_DISABLE_WEB_PAGE_PREVIEW
diff --git a/.butcher/methods/forwardMessage/default.yml b/.butcher/methods/forwardMessage/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/forwardMessage/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/forwardMessage/replace.yml b/.butcher/methods/forwardMessage/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/forwardMessage/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendAnimation/default.yml b/.butcher/methods/sendAnimation/default.yml
new file mode 100644
index 00000000..4f6fbe94
--- /dev/null
+++ b/.butcher/methods/sendAnimation/default.yml
@@ -0,0 +1,2 @@
+parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/sendAnimation/replace.yml b/.butcher/methods/sendAnimation/replace.yml
index 2c8e719e..ef7db8ff 100644
--- a/.butcher/methods/sendAnimation/replace.yml
+++ b/.butcher/methods/sendAnimation/replace.yml
@@ -1,8 +1,4 @@
 annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
   thumbnail:
     parsed_type:
       type: entity
diff --git a/.butcher/methods/sendAudio/default.yml b/.butcher/methods/sendAudio/default.yml
new file mode 100644
index 00000000..4f6fbe94
--- /dev/null
+++ b/.butcher/methods/sendAudio/default.yml
@@ -0,0 +1,2 @@
+parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/sendAudio/replace.yml b/.butcher/methods/sendAudio/replace.yml
index 2c8e719e..ef7db8ff 100644
--- a/.butcher/methods/sendAudio/replace.yml
+++ b/.butcher/methods/sendAudio/replace.yml
@@ -1,8 +1,4 @@
 annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
   thumbnail:
     parsed_type:
       type: entity
diff --git a/.butcher/methods/sendContact/default.yml b/.butcher/methods/sendContact/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendContact/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendContact/replace.yml b/.butcher/methods/sendContact/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendContact/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendDice/default.yml b/.butcher/methods/sendDice/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendDice/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendDice/replace.yml b/.butcher/methods/sendDice/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendDice/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendDocument/default.yml b/.butcher/methods/sendDocument/default.yml
new file mode 100644
index 00000000..4f6fbe94
--- /dev/null
+++ b/.butcher/methods/sendDocument/default.yml
@@ -0,0 +1,2 @@
+parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/sendDocument/replace.yml b/.butcher/methods/sendDocument/replace.yml
index 2c8e719e..ef7db8ff 100644
--- a/.butcher/methods/sendDocument/replace.yml
+++ b/.butcher/methods/sendDocument/replace.yml
@@ -1,8 +1,4 @@
 annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
   thumbnail:
     parsed_type:
       type: entity
diff --git a/.butcher/methods/sendGame/default.yml b/.butcher/methods/sendGame/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendGame/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendGame/replace.yml b/.butcher/methods/sendGame/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendGame/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendInvoice/default.yml b/.butcher/methods/sendInvoice/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendInvoice/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendInvoice/replace.yml b/.butcher/methods/sendInvoice/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendInvoice/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendLocation/default.yml b/.butcher/methods/sendLocation/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendLocation/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendLocation/replace.yml b/.butcher/methods/sendLocation/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendLocation/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendMediaGroup/default.yml b/.butcher/methods/sendMediaGroup/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendMediaGroup/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendMediaGroup/replace.yml b/.butcher/methods/sendMediaGroup/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendMediaGroup/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendMessage/default.yml b/.butcher/methods/sendMessage/default.yml
new file mode 100644
index 00000000..7f495730
--- /dev/null
+++ b/.butcher/methods/sendMessage/default.yml
@@ -0,0 +1,4 @@
+disable_web_page_preview: link_preview_is_disabled
+parse_mode: parse_mode
+protect_content: protect_content
+link_preview_options: link_preview
diff --git a/.butcher/methods/sendMessage/replace.yml b/.butcher/methods/sendMessage/replace.yml
deleted file mode 100644
index 68d7bef9..00000000
--- a/.butcher/methods/sendMessage/replace.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  disable_web_page_preview:
-    value: UNSET_DISABLE_WEB_PAGE_PREVIEW
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendPhoto/default.yml b/.butcher/methods/sendPhoto/default.yml
new file mode 100644
index 00000000..4f6fbe94
--- /dev/null
+++ b/.butcher/methods/sendPhoto/default.yml
@@ -0,0 +1,2 @@
+parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/sendPhoto/replace.yml b/.butcher/methods/sendPhoto/replace.yml
deleted file mode 100644
index cc4fe9b2..00000000
--- a/.butcher/methods/sendPhoto/replace.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendPoll/default.yml b/.butcher/methods/sendPoll/default.yml
new file mode 100644
index 00000000..482ea7de
--- /dev/null
+++ b/.butcher/methods/sendPoll/default.yml
@@ -0,0 +1,2 @@
+explanation_parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/sendPoll/replace.yml b/.butcher/methods/sendPoll/replace.yml
index 4b39b8ab..be2dac51 100644
--- a/.butcher/methods/sendPoll/replace.yml
+++ b/.butcher/methods/sendPoll/replace.yml
@@ -1,8 +1,4 @@
 annotations:
-  explanation_parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
   close_date:
     parsed_type:
       type: union
diff --git a/.butcher/methods/sendSticker/default.yml b/.butcher/methods/sendSticker/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendSticker/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendSticker/replace.yml b/.butcher/methods/sendSticker/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendSticker/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendVenue/default.yml b/.butcher/methods/sendVenue/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendVenue/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendVenue/replace.yml b/.butcher/methods/sendVenue/replace.yml
deleted file mode 100644
index 39cba814..00000000
--- a/.butcher/methods/sendVenue/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/methods/sendVideo/default.yml b/.butcher/methods/sendVideo/default.yml
new file mode 100644
index 00000000..4f6fbe94
--- /dev/null
+++ b/.butcher/methods/sendVideo/default.yml
@@ -0,0 +1,2 @@
+parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/sendVideo/replace.yml b/.butcher/methods/sendVideo/replace.yml
index 2c8e719e..ef7db8ff 100644
--- a/.butcher/methods/sendVideo/replace.yml
+++ b/.butcher/methods/sendVideo/replace.yml
@@ -1,8 +1,4 @@
 annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
   thumbnail:
     parsed_type:
       type: entity
diff --git a/.butcher/methods/sendVideoNote/default.yml b/.butcher/methods/sendVideoNote/default.yml
new file mode 100644
index 00000000..bb0cb2e2
--- /dev/null
+++ b/.butcher/methods/sendVideoNote/default.yml
@@ -0,0 +1,1 @@
+protect_content: protect_content
diff --git a/.butcher/methods/sendVideoNote/replace.yml b/.butcher/methods/sendVideoNote/replace.yml
index db5fd3eb..ef7db8ff 100644
--- a/.butcher/methods/sendVideoNote/replace.yml
+++ b/.butcher/methods/sendVideoNote/replace.yml
@@ -1,6 +1,4 @@
 annotations:
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
   thumbnail:
     parsed_type:
       type: entity
diff --git a/.butcher/methods/sendVoice/default.yml b/.butcher/methods/sendVoice/default.yml
new file mode 100644
index 00000000..4f6fbe94
--- /dev/null
+++ b/.butcher/methods/sendVoice/default.yml
@@ -0,0 +1,2 @@
+parse_mode: parse_mode
+protect_content: protect_content
diff --git a/.butcher/methods/sendVoice/replace.yml b/.butcher/methods/sendVoice/replace.yml
deleted file mode 100644
index cc4fe9b2..00000000
--- a/.butcher/methods/sendVoice/replace.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  protect_content:
-    value: UNSET_PROTECT_CONTENT
diff --git a/.butcher/types/InlineQueryResultAudio/default.yml b/.butcher/types/InlineQueryResultAudio/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultAudio/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultAudio/replace.yml b/.butcher/types/InlineQueryResultAudio/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultAudio/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultCachedAudio/default.yml b/.butcher/types/InlineQueryResultCachedAudio/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultCachedAudio/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultCachedAudio/replace.yml b/.butcher/types/InlineQueryResultCachedAudio/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultCachedAudio/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultCachedDocument/default.yml b/.butcher/types/InlineQueryResultCachedDocument/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultCachedDocument/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultCachedDocument/replace.yml b/.butcher/types/InlineQueryResultCachedDocument/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultCachedDocument/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultCachedGif/default.yml b/.butcher/types/InlineQueryResultCachedGif/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultCachedGif/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultCachedGif/replace.yml b/.butcher/types/InlineQueryResultCachedGif/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultCachedGif/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultCachedMpeg4Gif/default.yml b/.butcher/types/InlineQueryResultCachedMpeg4Gif/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultCachedMpeg4Gif/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultCachedMpeg4Gif/replace.yml b/.butcher/types/InlineQueryResultCachedMpeg4Gif/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultCachedMpeg4Gif/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultCachedPhoto/default.yml b/.butcher/types/InlineQueryResultCachedPhoto/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultCachedPhoto/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultCachedPhoto/replace.yml b/.butcher/types/InlineQueryResultCachedPhoto/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultCachedPhoto/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultCachedVideo/default.yml b/.butcher/types/InlineQueryResultCachedVideo/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultCachedVideo/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultCachedVideo/replace.yml b/.butcher/types/InlineQueryResultCachedVideo/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultCachedVideo/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultCachedVoice/default.yml b/.butcher/types/InlineQueryResultCachedVoice/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultCachedVoice/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultCachedVoice/replace.yml b/.butcher/types/InlineQueryResultCachedVoice/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultCachedVoice/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultDocument/default.yml b/.butcher/types/InlineQueryResultDocument/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultDocument/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultDocument/replace.yml b/.butcher/types/InlineQueryResultDocument/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultDocument/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultGif/default.yml b/.butcher/types/InlineQueryResultGif/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultGif/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultGif/replace.yml b/.butcher/types/InlineQueryResultGif/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultGif/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultMpeg4Gif/default.yml b/.butcher/types/InlineQueryResultMpeg4Gif/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultMpeg4Gif/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultMpeg4Gif/replace.yml b/.butcher/types/InlineQueryResultMpeg4Gif/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultMpeg4Gif/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultPhoto/default.yml b/.butcher/types/InlineQueryResultPhoto/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultPhoto/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultPhoto/replace.yml b/.butcher/types/InlineQueryResultPhoto/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultPhoto/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultVideo/default.yml b/.butcher/types/InlineQueryResultVideo/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultVideo/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultVideo/replace.yml b/.butcher/types/InlineQueryResultVideo/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultVideo/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InlineQueryResultVoice/default.yml b/.butcher/types/InlineQueryResultVoice/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InlineQueryResultVoice/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InlineQueryResultVoice/replace.yml b/.butcher/types/InlineQueryResultVoice/replace.yml
deleted file mode 100644
index e87fb9b3..00000000
--- a/.butcher/types/InlineQueryResultVoice/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InputMediaAnimation/default.yml b/.butcher/types/InputMediaAnimation/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InputMediaAnimation/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InputMediaAnimation/replace.yml b/.butcher/types/InputMediaAnimation/replace.yml
index fb705c9a..efa1d506 100644
--- a/.butcher/types/InputMediaAnimation/replace.yml
+++ b/.butcher/types/InputMediaAnimation/replace.yml
@@ -15,5 +15,3 @@ annotations:
       references:
         category: types
         name: InputFile
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InputMediaAudio/default.yml b/.butcher/types/InputMediaAudio/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InputMediaAudio/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InputMediaAudio/replace.yml b/.butcher/types/InputMediaAudio/replace.yml
index fb705c9a..efa1d506 100644
--- a/.butcher/types/InputMediaAudio/replace.yml
+++ b/.butcher/types/InputMediaAudio/replace.yml
@@ -15,5 +15,3 @@ annotations:
       references:
         category: types
         name: InputFile
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InputMediaDocument/default.yml b/.butcher/types/InputMediaDocument/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InputMediaDocument/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InputMediaDocument/replace.yml b/.butcher/types/InputMediaDocument/replace.yml
index fb705c9a..efa1d506 100644
--- a/.butcher/types/InputMediaDocument/replace.yml
+++ b/.butcher/types/InputMediaDocument/replace.yml
@@ -15,5 +15,3 @@ annotations:
       references:
         category: types
         name: InputFile
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InputMediaPhoto/default.yml b/.butcher/types/InputMediaPhoto/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InputMediaPhoto/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InputMediaPhoto/replace.yml b/.butcher/types/InputMediaPhoto/replace.yml
index be3f441b..17ac606b 100644
--- a/.butcher/types/InputMediaPhoto/replace.yml
+++ b/.butcher/types/InputMediaPhoto/replace.yml
@@ -9,5 +9,3 @@ annotations:
           references:
             category: types
             name: InputFile
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InputMediaVideo/default.yml b/.butcher/types/InputMediaVideo/default.yml
new file mode 100644
index 00000000..d56d5759
--- /dev/null
+++ b/.butcher/types/InputMediaVideo/default.yml
@@ -0,0 +1,1 @@
+parse_mode: parse_mode
diff --git a/.butcher/types/InputMediaVideo/replace.yml b/.butcher/types/InputMediaVideo/replace.yml
index fb705c9a..efa1d506 100644
--- a/.butcher/types/InputMediaVideo/replace.yml
+++ b/.butcher/types/InputMediaVideo/replace.yml
@@ -15,5 +15,3 @@ annotations:
       references:
         category: types
         name: InputFile
-  parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/.butcher/types/InputTextMessageContent/default.yml b/.butcher/types/InputTextMessageContent/default.yml
new file mode 100644
index 00000000..d973b1cd
--- /dev/null
+++ b/.butcher/types/InputTextMessageContent/default.yml
@@ -0,0 +1,2 @@
+disable_web_page_preview: disable_web_page_preview
+parse_mode: parse_mode
diff --git a/.butcher/types/InputTextMessageContent/replace.yml b/.butcher/types/InputTextMessageContent/replace.yml
deleted file mode 100644
index ebc1d7e9..00000000
--- a/.butcher/types/InputTextMessageContent/replace.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-annotations:
-  parse_mode:
-    value: UNSET_PARSE_MODE
-  disable_web_page_preview:
-    value: UNSET_DISABLE_WEB_PAGE_PREVIEW
diff --git a/.butcher/types/LinkPreviewOptions/default.yml b/.butcher/types/LinkPreviewOptions/default.yml
new file mode 100644
index 00000000..587f6176
--- /dev/null
+++ b/.butcher/types/LinkPreviewOptions/default.yml
@@ -0,0 +1,4 @@
+is_disabled: link_preview_is_disabled
+prefer_small_media: link_preview_prefer_small_media
+prefer_large_media: link_preview_prefer_large_media
+show_above_text: link_preview_show_above_text
diff --git a/.butcher/types/ReplyParameters/default.yml b/.butcher/types/ReplyParameters/default.yml
new file mode 100644
index 00000000..e14c0b0b
--- /dev/null
+++ b/.butcher/types/ReplyParameters/default.yml
@@ -0,0 +1,2 @@
+quote_parse_mode: parse_mode
+allow_sending_without_reply: allow_sending_without_reply
diff --git a/.butcher/types/ReplyParameters/replace.yml b/.butcher/types/ReplyParameters/replace.yml
deleted file mode 100644
index 2426b4b0..00000000
--- a/.butcher/types/ReplyParameters/replace.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-annotations:
-  quote_parse_mode:
-    value: UNSET_PARSE_MODE
diff --git a/CHANGES/1392.feature.rst b/CHANGES/1392.feature.rst
new file mode 100644
index 00000000..9502d6ef
--- /dev/null
+++ b/CHANGES/1392.feature.rst
@@ -0,0 +1,1 @@
+Reworked bot-wide globals like :code:`parse_mode`, :code:`disable_web_page_preview`, and others to be more flexible.
diff --git a/aiogram/client/bot.py b/aiogram/client/bot.py
index a27d2b24..06cae1c4 100644
--- a/aiogram/client/bot.py
+++ b/aiogram/client/bot.py
@@ -3,6 +3,7 @@ from __future__ import annotations
 import datetime
 import io
 import pathlib
+import warnings
 from contextlib import asynccontextmanager
 from typing import (
     Any,
@@ -143,7 +144,6 @@ from ..methods import (
     UploadStickerFile,
 )
 from ..types import (
-    UNSET_PARSE_MODE,
     BotCommand,
     BotCommandScopeAllChatAdministrators,
     BotCommandScopeAllGroupChats,
@@ -233,7 +233,7 @@ from ..types import (
     UserProfilePhotos,
     WebhookInfo,
 )
-from ..types.base import UNSET_DISABLE_WEB_PAGE_PREVIEW, UNSET_PROTECT_CONTENT
+from .default import Default, DefaultBotProperties
 from .session.aiohttp import AiohttpSession
 from .session.base import BaseSession
 
@@ -248,6 +248,7 @@ class Bot:
         parse_mode: Optional[str] = None,
         disable_web_page_preview: Optional[bool] = None,
         protect_content: Optional[bool] = None,
+        default: Optional[DefaultBotProperties] = None,
     ) -> None:
         """
         Bot class
@@ -261,6 +262,8 @@ class Bot:
             If specified it will be propagated into the API methods at runtime.
         :param protect_content: Default protect_content mode.
             If specified it will be propagated into the API methods at runtime.
+        :param default: Default bot properties.
+            If specified it will be propagated into the API methods at runtime.
         :raise TokenValidationError: When token has invalid format this exception will be raised
         """
 
@@ -268,11 +271,29 @@ class Bot:
 
         if session is None:
             session = AiohttpSession()
+        if default is None:
+            default = DefaultBotProperties(
+                parse_mode=parse_mode,
+                link_preview_is_disabled=disable_web_page_preview,
+                protect_content=protect_content,
+            )
 
         self.session = session
-        self.parse_mode = parse_mode
-        self.disable_web_page_preview = disable_web_page_preview
-        self.protect_content = protect_content
+        if (
+            parse_mode is not None
+            or disable_web_page_preview is not None
+            or protect_content is not None
+        ):
+            warnings.warn(
+                "Passing `parse_mode`, `disable_web_page_preview` or `protect_content` "
+                "to Bot initializer is deprecated. This arguments will be removed in 3.5.0 version\n"
+                "Use `default=DefaultBotProperties(...)` instead.",
+                category=DeprecationWarning,
+                stacklevel=2,
+            )
+
+        self.default = default
+
         self.__token = token
         self._me: Optional[User] = None
 
@@ -805,10 +826,10 @@ class Bot:
         message_id: int,
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1302,7 +1323,7 @@ class Bot:
         message_id: Optional[int] = None,
         inline_message_id: Optional[str] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         request_timeout: Optional[int] = None,
@@ -1451,11 +1472,13 @@ class Bot:
         chat_id: Optional[Union[int, str]] = None,
         message_id: Optional[int] = None,
         inline_message_id: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
         link_preview_options: Optional[LinkPreviewOptions] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         request_timeout: Optional[int] = None,
     ) -> Union[Message, bool]:
         """
@@ -1518,7 +1541,7 @@ class Bot:
         message_id: int,
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         request_timeout: Optional[int] = None,
     ) -> Message:
         """
@@ -2137,11 +2160,11 @@ class Bot:
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2203,14 +2226,14 @@ class Bot:
         audio: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         performer: Optional[str] = None,
         title: Optional[str] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2304,7 +2327,7 @@ class Bot:
         last_name: Optional[str] = None,
         vcard: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2356,7 +2379,7 @@ class Bot:
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2403,11 +2426,11 @@ class Bot:
         message_thread_id: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_content_type_detection: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2463,7 +2486,7 @@ class Bot:
         game_short_name: str,
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -2527,7 +2550,7 @@ class Bot:
         send_email_to_provider: Optional[bool] = None,
         is_flexible: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -2616,7 +2639,7 @@ class Bot:
         heading: Optional[int] = None,
         proximity_alert_radius: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2672,7 +2695,7 @@ class Bot:
         media: List[Union[InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo]],
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         allow_sending_without_reply: Optional[bool] = None,
         reply_to_message_id: Optional[int] = None,
@@ -2712,17 +2735,21 @@ class Bot:
         chat_id: Union[int, str],
         text: str,
         message_thread_id: Optional[int] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
-        link_preview_options: Optional[LinkPreviewOptions] = None,
+        link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default(
+            "link_preview"
+        ),
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
         ] = None,
         allow_sending_without_reply: Optional[bool] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         reply_to_message_id: Optional[int] = None,
         request_timeout: Optional[int] = None,
     ) -> Message:
@@ -2771,11 +2798,11 @@ class Bot:
         photo: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2834,13 +2861,13 @@ class Bot:
         allows_multiple_answers: Optional[bool] = None,
         correct_option_id: Optional[int] = None,
         explanation: Optional[str] = None,
-        explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         explanation_entities: Optional[List[MessageEntity]] = None,
         open_period: Optional[int] = None,
         close_date: Optional[Union[datetime.datetime, datetime.timedelta, int]] = None,
         is_closed: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2909,7 +2936,7 @@ class Bot:
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2964,7 +2991,7 @@ class Bot:
         google_place_id: Optional[str] = None,
         google_place_type: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -3028,12 +3055,12 @@ class Bot:
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         supports_streaming: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -3100,7 +3127,7 @@ class Bot:
         length: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -3152,11 +3179,11 @@ class Bot:
         voice: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/client/default.py b/aiogram/client/default.py
new file mode 100644
index 00000000..506cf1e9
--- /dev/null
+++ b/aiogram/client/default.py
@@ -0,0 +1,84 @@
+from __future__ import annotations
+
+import sys
+from dataclasses import dataclass
+from typing import TYPE_CHECKING, Any, Dict, Optional
+
+if TYPE_CHECKING:
+    from aiogram.types import LinkPreviewOptions
+
+
+# @dataclass ??
+class Default:
+    # Is not a dataclass because of JSON serialization.
+
+    __slots__ = ("_name",)
+
+    def __init__(self, name: str) -> None:
+        self._name = name
+
+    @property
+    def name(self) -> str:
+        return self._name
+
+    def __str__(self) -> str:
+        return f"Default({self._name!r})"
+
+    def __repr__(self) -> str:
+        return f"<{self}>"
+
+
+_dataclass_properties: Dict[str, Any] = {}
+if sys.version_info >= (3, 10):
+    # Speedup attribute access for dataclasses in Python 3.10+
+    _dataclass_properties.update({"slots": True, "kw_only": True})
+
+
+@dataclass(**_dataclass_properties)
+class DefaultBotProperties:
+    """
+    Default bot properties.
+    """
+
+    parse_mode: Optional[str] = None
+    """Default parse mode for messages."""
+    disable_notification: Optional[bool] = None
+    """Sends the message silently. Users will receive a notification with no sound."""
+    protect_content: Optional[bool] = None
+    """Protects content from copying."""
+    allow_sending_without_reply: Optional[bool] = None
+    """Allows to send messages without reply."""
+
+    link_preview: Optional[LinkPreviewOptions] = None
+    """Link preview settings."""
+    link_preview_is_disabled: Optional[bool] = None
+    """Disables link preview."""
+    link_preview_prefer_small_media: Optional[bool] = None
+    """Prefer small media in link preview."""
+    link_preview_prefer_large_media: Optional[bool] = None
+    """Prefer large media in link preview."""
+    link_preview_show_above_text: Optional[bool] = None
+    """Show link preview above text."""
+
+    def __post_init__(self) -> None:
+        has_any_link_preview_option = any(
+            (
+                self.link_preview_is_disabled,
+                self.link_preview_prefer_small_media,
+                self.link_preview_prefer_large_media,
+                self.link_preview_show_above_text,
+            )
+        )
+
+        if has_any_link_preview_option and self.link_preview is None:
+            from ..types import LinkPreviewOptions
+
+            self.link_preview = LinkPreviewOptions(
+                is_disabled=self.link_preview_is_disabled,
+                prefer_small_media=self.link_preview_prefer_small_media,
+                prefer_large_media=self.link_preview_prefer_large_media,
+                show_above_text=self.link_preview_show_above_text,
+            )
+
+    def __getitem__(self, item: str) -> Any:
+        return getattr(self, item, None)
diff --git a/aiogram/client/session/aiohttp.py b/aiogram/client/session/aiohttp.py
index b92e32d2..0878e315 100644
--- a/aiogram/client/session/aiohttp.py
+++ b/aiogram/client/session/aiohttp.py
@@ -6,7 +6,6 @@ from typing import (
     TYPE_CHECKING,
     Any,
     AsyncGenerator,
-    AsyncIterator,
     Dict,
     Iterable,
     List,
diff --git a/aiogram/client/session/base.py b/aiogram/client/session/base.py
index 650b44bc..503f5298 100644
--- a/aiogram/client/session/base.py
+++ b/aiogram/client/session/base.py
@@ -38,8 +38,8 @@ from aiogram.exceptions import (
 
 from ...methods import Response, TelegramMethod
 from ...methods.base import TelegramType
-from ...types import UNSET_PARSE_MODE, InputFile
-from ...types.base import UNSET_DISABLE_WEB_PAGE_PREVIEW, UNSET_PROTECT_CONTENT
+from ...types import InputFile
+from ..default import Default
 from ..telegram import PRODUCTION, TelegramAPIServer
 from .middlewares.manager import RequestMiddlewareManager
 
@@ -191,18 +191,9 @@ class BaseSession(abc.ABC):
             return None
         if isinstance(value, str):
             return value
-        if value is UNSET_PARSE_MODE:
-            return self.prepare_value(
-                bot.parse_mode, bot=bot, files=files, _dumps_json=_dumps_json
-            )
-        if value is UNSET_DISABLE_WEB_PAGE_PREVIEW:
-            return self.prepare_value(
-                bot.disable_web_page_preview, bot=bot, files=files, _dumps_json=_dumps_json
-            )
-        if value is UNSET_PROTECT_CONTENT:
-            return self.prepare_value(
-                bot.protect_content, bot=bot, files=files, _dumps_json=_dumps_json
-            )
+        if isinstance(value, Default):
+            default_value = bot.default[value.name]
+            return self.prepare_value(default_value, bot=bot, files=files, _dumps_json=_dumps_json)
         if isinstance(value, InputFile):
             key = secrets.token_urlsafe(10)
             files[key] = value
diff --git a/aiogram/methods/copy_message.py b/aiogram/methods/copy_message.py
index 4fda2cb9..807b9755 100644
--- a/aiogram/methods/copy_message.py
+++ b/aiogram/methods/copy_message.py
@@ -4,8 +4,8 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
-    UNSET_PARSE_MODE,
     ForceReply,
     InlineKeyboardMarkup,
     MessageEntity,
@@ -14,7 +14,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -38,13 +37,13 @@ class CopyMessage(TelegramMethod[MessageId]):
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
     caption: Optional[str] = None
     """New caption for media, 0-1024 characters after entities parsing. If not specified, the original caption is kept"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the new caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the new caption, which can be specified instead of *parse_mode*"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -77,10 +76,10 @@ class CopyMessage(TelegramMethod[MessageId]):
             message_id: int,
             message_thread_id: Optional[int] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/edit_message_caption.py b/aiogram/methods/edit_message_caption.py
index 4c15e6d8..53dff16e 100644
--- a/aiogram/methods/edit_message_caption.py
+++ b/aiogram/methods/edit_message_caption.py
@@ -2,6 +2,7 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Optional, Union
 
+from ..client.default import Default
 from ..types import UNSET_PARSE_MODE, InlineKeyboardMarkup, Message, MessageEntity
 from .base import TelegramMethod
 
@@ -24,7 +25,7 @@ class EditMessageCaption(TelegramMethod[Union[Message, bool]]):
     """Required if *chat_id* and *message_id* are not specified. Identifier of the inline message"""
     caption: Optional[str] = None
     """New caption of the message, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the message caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -42,7 +43,7 @@ class EditMessageCaption(TelegramMethod[Union[Message, bool]]):
             message_id: Optional[int] = None,
             inline_message_id: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             **__pydantic_kwargs: Any,
diff --git a/aiogram/methods/edit_message_text.py b/aiogram/methods/edit_message_text.py
index 756f1951..00269c37 100644
--- a/aiogram/methods/edit_message_text.py
+++ b/aiogram/methods/edit_message_text.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     UNSET_PARSE_MODE,
     InlineKeyboardMarkup,
@@ -11,7 +12,6 @@ from ..types import (
     Message,
     MessageEntity,
 )
-from ..types.base import UNSET_DISABLE_WEB_PAGE_PREVIEW
 from .base import TelegramMethod
 
 
@@ -33,7 +33,7 @@ class EditMessageText(TelegramMethod[Union[Message, bool]]):
     """Required if *inline_message_id* is not specified. Identifier of the message to edit"""
     inline_message_id: Optional[str] = None
     """Required if *chat_id* and *message_id* are not specified. Identifier of the inline message"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the message text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in message text, which can be specified instead of *parse_mode*"""
@@ -41,8 +41,8 @@ class EditMessageText(TelegramMethod[Union[Message, bool]]):
     """Link preview generation options for the message"""
     reply_markup: Optional[InlineKeyboardMarkup] = None
     """A JSON-serialized object for an `inline keyboard <https://core.telegram.org/bots/features#inline-keyboards>`_."""
-    disable_web_page_preview: Optional[bool] = Field(
-        UNSET_DISABLE_WEB_PAGE_PREVIEW, json_schema_extra={"deprecated": True}
+    disable_web_page_preview: Optional[Union[bool, Default]] = Field(
+        Default("link_preview_is_disabled"), json_schema_extra={"deprecated": True}
     )
     """Disables link previews for links in this message
 
@@ -60,11 +60,13 @@ class EditMessageText(TelegramMethod[Union[Message, bool]]):
             chat_id: Optional[Union[int, str]] = None,
             message_id: Optional[int] = None,
             inline_message_id: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             entities: Optional[List[MessageEntity]] = None,
             link_preview_options: Optional[LinkPreviewOptions] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
-            disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+            disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+                "link_preview_is_disabled"
+            ),
             **__pydantic_kwargs: Any,
         ) -> None:
             # DO NOT EDIT MANUALLY!!!
diff --git a/aiogram/methods/forward_message.py b/aiogram/methods/forward_message.py
index d195f465..01d764a3 100644
--- a/aiogram/methods/forward_message.py
+++ b/aiogram/methods/forward_message.py
@@ -2,6 +2,7 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, Optional, Union
 
+from ..client.default import Default
 from ..types import Message
 from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
@@ -27,7 +28,7 @@ class ForwardMessage(TelegramMethod[Message]):
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the forwarded message from forwarding and saving"""
 
     if TYPE_CHECKING:
@@ -42,7 +43,7 @@ class ForwardMessage(TelegramMethod[Message]):
             message_id: int,
             message_thread_id: Optional[int] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             **__pydantic_kwargs: Any,
         ) -> None:
             # DO NOT EDIT MANUALLY!!!
diff --git a/aiogram/methods/send_animation.py b/aiogram/methods/send_animation.py
index fac20375..24482c7d 100644
--- a/aiogram/methods/send_animation.py
+++ b/aiogram/methods/send_animation.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     UNSET_PARSE_MODE,
     ForceReply,
@@ -15,7 +16,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -45,7 +45,7 @@ class SendAnimation(TelegramMethod[Message]):
     """Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """Animation caption (may also be used when resending animation by *file_id*), 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the animation caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -53,7 +53,7 @@ class SendAnimation(TelegramMethod[Message]):
     """Pass :code:`True` if the animation needs to be covered with a spoiler animation"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -89,11 +89,11 @@ class SendAnimation(TelegramMethod[Message]):
             height: Optional[int] = None,
             thumbnail: Optional[InputFile] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             has_spoiler: Optional[bool] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_audio.py b/aiogram/methods/send_audio.py
index a13d8645..43b6a781 100644
--- a/aiogram/methods/send_audio.py
+++ b/aiogram/methods/send_audio.py
@@ -4,8 +4,8 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
-    UNSET_PARSE_MODE,
     ForceReply,
     InlineKeyboardMarkup,
     InputFile,
@@ -15,7 +15,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -38,7 +37,7 @@ class SendAudio(TelegramMethod[Message]):
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
     caption: Optional[str] = None
     """Audio caption, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the audio caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -52,7 +51,7 @@ class SendAudio(TelegramMethod[Message]):
     """Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -84,14 +83,14 @@ class SendAudio(TelegramMethod[Message]):
             audio: Union[InputFile, str],
             message_thread_id: Optional[int] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             duration: Optional[int] = None,
             performer: Optional[str] = None,
             title: Optional[str] = None,
             thumbnail: Optional[InputFile] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_contact.py b/aiogram/methods/send_contact.py
index 9bef3e31..9dd040a5 100644
--- a/aiogram/methods/send_contact.py
+++ b/aiogram/methods/send_contact.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     ForceReply,
     InlineKeyboardMarkup,
@@ -12,7 +13,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -40,7 +40,7 @@ class SendContact(TelegramMethod[Message]):
     """Additional data about the contact in the form of a `vCard <https://en.wikipedia.org/wiki/VCard>`_, 0-2048 bytes"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -75,7 +75,7 @@ class SendContact(TelegramMethod[Message]):
             last_name: Optional[str] = None,
             vcard: Optional[str] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_dice.py b/aiogram/methods/send_dice.py
index 31e0c8de..d8a9ac8d 100644
--- a/aiogram/methods/send_dice.py
+++ b/aiogram/methods/send_dice.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     ForceReply,
     InlineKeyboardMarkup,
@@ -12,7 +13,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -34,7 +34,7 @@ class SendDice(TelegramMethod[Message]):
     """Emoji on which the dice throw animation is based. Currently, must be one of '🎲', '🎯', '🏀', '⚽', '🎳', or '🎰'. Dice can have values 1-6 for '🎲', '🎯' and '🎳', values 1-5 for '🏀' and '⚽', and values 1-64 for '🎰'. Defaults to '🎲'"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -66,7 +66,7 @@ class SendDice(TelegramMethod[Message]):
             message_thread_id: Optional[int] = None,
             emoji: Optional[str] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_document.py b/aiogram/methods/send_document.py
index 2360eef6..718dd346 100644
--- a/aiogram/methods/send_document.py
+++ b/aiogram/methods/send_document.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     UNSET_PARSE_MODE,
     ForceReply,
@@ -15,7 +16,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -39,7 +39,7 @@ class SendDocument(TelegramMethod[Message]):
     """Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """Document caption (may also be used when resending documents by *file_id*), 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the document caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -47,7 +47,7 @@ class SendDocument(TelegramMethod[Message]):
     """Disables automatic server-side content type detection for files uploaded using multipart/form-data"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -80,11 +80,11 @@ class SendDocument(TelegramMethod[Message]):
             message_thread_id: Optional[int] = None,
             thumbnail: Optional[InputFile] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             disable_content_type_detection: Optional[bool] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_game.py b/aiogram/methods/send_game.py
index a055ec9d..73e69795 100644
--- a/aiogram/methods/send_game.py
+++ b/aiogram/methods/send_game.py
@@ -1,11 +1,11 @@
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Any, Optional
+from typing import TYPE_CHECKING, Any, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import InlineKeyboardMarkup, Message, ReplyParameters
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -27,7 +27,7 @@ class SendGame(TelegramMethod[Message]):
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -57,7 +57,7 @@ class SendGame(TelegramMethod[Message]):
             game_short_name: str,
             message_thread_id: Optional[int] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             allow_sending_without_reply: Optional[bool] = None,
diff --git a/aiogram/methods/send_invoice.py b/aiogram/methods/send_invoice.py
index 5bdb31eb..7e0d7955 100644
--- a/aiogram/methods/send_invoice.py
+++ b/aiogram/methods/send_invoice.py
@@ -4,8 +4,8 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import InlineKeyboardMarkup, LabeledPrice, Message, ReplyParameters
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -67,7 +67,7 @@ class SendInvoice(TelegramMethod[Message]):
     """Pass :code:`True` if the final price depends on the shipping method"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -117,7 +117,7 @@ class SendInvoice(TelegramMethod[Message]):
             send_email_to_provider: Optional[bool] = None,
             is_flexible: Optional[bool] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             allow_sending_without_reply: Optional[bool] = None,
diff --git a/aiogram/methods/send_location.py b/aiogram/methods/send_location.py
index 46599575..44a74300 100644
--- a/aiogram/methods/send_location.py
+++ b/aiogram/methods/send_location.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     ForceReply,
     InlineKeyboardMarkup,
@@ -12,7 +13,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -44,7 +44,7 @@ class SendLocation(TelegramMethod[Message]):
     """For live locations, a maximum distance for proximity alerts about approaching another chat member, in meters. Must be between 1 and 100000 if specified."""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -81,7 +81,7 @@ class SendLocation(TelegramMethod[Message]):
             heading: Optional[int] = None,
             proximity_alert_radius: Optional[int] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_media_group.py b/aiogram/methods/send_media_group.py
index ac1bae15..bbf886cc 100644
--- a/aiogram/methods/send_media_group.py
+++ b/aiogram/methods/send_media_group.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     InputMediaAudio,
     InputMediaDocument,
@@ -12,7 +13,6 @@ from ..types import (
     Message,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -34,7 +34,7 @@ class SendMediaGroup(TelegramMethod[List[Message]]):
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
     disable_notification: Optional[bool] = None
     """Sends messages `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent messages from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -64,7 +64,7 @@ class SendMediaGroup(TelegramMethod[List[Message]]):
             ],
             message_thread_id: Optional[int] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             allow_sending_without_reply: Optional[bool] = None,
             reply_to_message_id: Optional[int] = None,
diff --git a/aiogram/methods/send_message.py b/aiogram/methods/send_message.py
index e354429d..fc002ec4 100644
--- a/aiogram/methods/send_message.py
+++ b/aiogram/methods/send_message.py
@@ -4,8 +4,8 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
-    UNSET_PARSE_MODE,
     ForceReply,
     InlineKeyboardMarkup,
     LinkPreviewOptions,
@@ -15,7 +15,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_DISABLE_WEB_PAGE_PREVIEW, UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -35,15 +34,15 @@ class SendMessage(TelegramMethod[Message]):
     """Text of the message to be sent, 1-4096 characters after entities parsing"""
     message_thread_id: Optional[int] = None
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the message text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in message text, which can be specified instead of *parse_mode*"""
-    link_preview_options: Optional[LinkPreviewOptions] = None
+    link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default("link_preview")
     """Link preview generation options for the message"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -58,8 +57,8 @@ class SendMessage(TelegramMethod[Message]):
 
 .. deprecated:: API:7.0
    https://core.telegram.org/bots/api-changelog#december-29-2023"""
-    disable_web_page_preview: Optional[bool] = Field(
-        UNSET_DISABLE_WEB_PAGE_PREVIEW, json_schema_extra={"deprecated": True}
+    disable_web_page_preview: Optional[Union[bool, Default]] = Field(
+        Default("link_preview_is_disabled"), json_schema_extra={"deprecated": True}
     )
     """Disables link previews for links in this message
 
@@ -81,17 +80,21 @@ class SendMessage(TelegramMethod[Message]):
             chat_id: Union[int, str],
             text: str,
             message_thread_id: Optional[int] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             entities: Optional[List[MessageEntity]] = None,
-            link_preview_options: Optional[LinkPreviewOptions] = None,
+            link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default(
+                "link_preview"
+            ),
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
             ] = None,
             allow_sending_without_reply: Optional[bool] = None,
-            disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+            disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+                "link_preview_is_disabled"
+            ),
             reply_to_message_id: Optional[int] = None,
             **__pydantic_kwargs: Any,
         ) -> None:
diff --git a/aiogram/methods/send_photo.py b/aiogram/methods/send_photo.py
index c17d86b5..b10ac8f0 100644
--- a/aiogram/methods/send_photo.py
+++ b/aiogram/methods/send_photo.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     UNSET_PARSE_MODE,
     ForceReply,
@@ -15,7 +16,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -37,7 +37,7 @@ class SendPhoto(TelegramMethod[Message]):
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
     caption: Optional[str] = None
     """Photo caption (may also be used when resending photos by *file_id*), 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the photo caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -45,7 +45,7 @@ class SendPhoto(TelegramMethod[Message]):
     """Pass :code:`True` if the photo needs to be covered with a spoiler animation"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -77,11 +77,11 @@ class SendPhoto(TelegramMethod[Message]):
             photo: Union[InputFile, str],
             message_thread_id: Optional[int] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             has_spoiler: Optional[bool] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_poll.py b/aiogram/methods/send_poll.py
index fd51b17c..eab1b656 100644
--- a/aiogram/methods/send_poll.py
+++ b/aiogram/methods/send_poll.py
@@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     UNSET_PARSE_MODE,
     ForceReply,
@@ -15,7 +16,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -47,7 +47,7 @@ class SendPoll(TelegramMethod[Message]):
     """0-based identifier of the correct answer option, required for polls in quiz mode"""
     explanation: Optional[str] = None
     """Text that is shown when a user chooses an incorrect answer or taps on the lamp icon in a quiz-style poll, 0-200 characters with at most 2 line feeds after entities parsing"""
-    explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE
+    explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the explanation. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     explanation_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the poll explanation, which can be specified instead of *parse_mode*"""
@@ -59,7 +59,7 @@ class SendPoll(TelegramMethod[Message]):
     """Pass :code:`True` if the poll needs to be immediately closed. This can be useful for poll preview."""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -96,13 +96,13 @@ class SendPoll(TelegramMethod[Message]):
             allows_multiple_answers: Optional[bool] = None,
             correct_option_id: Optional[int] = None,
             explanation: Optional[str] = None,
-            explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             explanation_entities: Optional[List[MessageEntity]] = None,
             open_period: Optional[int] = None,
             close_date: Optional[Union[datetime.datetime, datetime.timedelta, int]] = None,
             is_closed: Optional[bool] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_sticker.py b/aiogram/methods/send_sticker.py
index ae6a5091..a29bc770 100644
--- a/aiogram/methods/send_sticker.py
+++ b/aiogram/methods/send_sticker.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     ForceReply,
     InlineKeyboardMarkup,
@@ -13,7 +14,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -37,7 +37,7 @@ class SendSticker(TelegramMethod[Message]):
     """Emoji associated with the sticker; only for just uploaded stickers"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -70,7 +70,7 @@ class SendSticker(TelegramMethod[Message]):
             message_thread_id: Optional[int] = None,
             emoji: Optional[str] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_venue.py b/aiogram/methods/send_venue.py
index 4d8199d9..be9aaf44 100644
--- a/aiogram/methods/send_venue.py
+++ b/aiogram/methods/send_venue.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     ForceReply,
     InlineKeyboardMarkup,
@@ -12,7 +13,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -48,7 +48,7 @@ class SendVenue(TelegramMethod[Message]):
     """Google Places type of the venue. (See `supported types <https://developers.google.com/places/web-service/supported_types>`_.)"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -87,7 +87,7 @@ class SendVenue(TelegramMethod[Message]):
             google_place_id: Optional[str] = None,
             google_place_type: Optional[str] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_video.py b/aiogram/methods/send_video.py
index 70a80a55..89b33b4b 100644
--- a/aiogram/methods/send_video.py
+++ b/aiogram/methods/send_video.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     UNSET_PARSE_MODE,
     ForceReply,
@@ -15,7 +16,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -45,7 +45,7 @@ class SendVideo(TelegramMethod[Message]):
     """Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """Video caption (may also be used when resending videos by *file_id*), 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the video caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -55,7 +55,7 @@ class SendVideo(TelegramMethod[Message]):
     """Pass :code:`True` if the uploaded video is suitable for streaming"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -91,12 +91,12 @@ class SendVideo(TelegramMethod[Message]):
             height: Optional[int] = None,
             thumbnail: Optional[InputFile] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             has_spoiler: Optional[bool] = None,
             supports_streaming: Optional[bool] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_video_note.py b/aiogram/methods/send_video_note.py
index fd4ac48b..0b31a348 100644
--- a/aiogram/methods/send_video_note.py
+++ b/aiogram/methods/send_video_note.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     ForceReply,
     InlineKeyboardMarkup,
@@ -13,7 +14,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -41,7 +41,7 @@ class SendVideoNote(TelegramMethod[Message]):
     """Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -76,7 +76,7 @@ class SendVideoNote(TelegramMethod[Message]):
             length: Optional[int] = None,
             thumbnail: Optional[InputFile] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/methods/send_voice.py b/aiogram/methods/send_voice.py
index d410b765..65dccc6a 100644
--- a/aiogram/methods/send_voice.py
+++ b/aiogram/methods/send_voice.py
@@ -4,6 +4,7 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
+from ..client.default import Default
 from ..types import (
     UNSET_PARSE_MODE,
     ForceReply,
@@ -15,7 +16,6 @@ from ..types import (
     ReplyKeyboardRemove,
     ReplyParameters,
 )
-from ..types.base import UNSET_PROTECT_CONTENT
 from .base import TelegramMethod
 
 
@@ -37,7 +37,7 @@ class SendVoice(TelegramMethod[Message]):
     """Unique identifier for the target message thread (topic) of the forum; for forum supergroups only"""
     caption: Optional[str] = None
     """Voice message caption, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """Mode for parsing entities in the voice message caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """A JSON-serialized list of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -45,7 +45,7 @@ class SendVoice(TelegramMethod[Message]):
     """Duration of the voice message in seconds"""
     disable_notification: Optional[bool] = None
     """Sends the message `silently <https://telegram.org/blog/channels-2-0#silent-messages>`_. Users will receive a notification with no sound."""
-    protect_content: Optional[bool] = UNSET_PROTECT_CONTENT
+    protect_content: Optional[Union[bool, Default]] = Default("protect_content")
     """Protects the contents of the sent message from forwarding and saving"""
     reply_parameters: Optional[ReplyParameters] = None
     """Description of the message to reply to"""
@@ -77,11 +77,11 @@ class SendVoice(TelegramMethod[Message]):
             voice: Union[InputFile, str],
             message_thread_id: Optional[int] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             duration: Optional[int] = None,
             disable_notification: Optional[bool] = None,
-            protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+            protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
             reply_parameters: Optional[ReplyParameters] = None,
             reply_markup: Optional[
                 Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/types/base.py b/aiogram/types/base.py
index dae52156..7ae00524 100644
--- a/aiogram/types/base.py
+++ b/aiogram/types/base.py
@@ -4,6 +4,7 @@ from unittest.mock import sentinel
 from pydantic import BaseModel, ConfigDict, model_validator
 
 from aiogram.client.context_controller import BotContextController
+from aiogram.client.default import Default
 
 
 class TelegramObject(BotContextController, BaseModel):
@@ -41,7 +42,10 @@ class MutableTelegramObject(TelegramObject):
 
 # special sentinel object which used in a situation when None might be a useful value
 UNSET: Any = sentinel.UNSET
-UNSET_PARSE_MODE: Any = sentinel.UNSET_PARSE_MODE
-UNSET_DISABLE_WEB_PAGE_PREVIEW: Any = sentinel.UNSET_DISABLE_WEB_PAGE_PREVIEW
-UNSET_PROTECT_CONTENT: Any = sentinel.UNSET_PROTECT_CONTENT
 UNSET_TYPE: Any = type(UNSET)
+
+# Unused constants are needed only for backward compatibility with external
+# libraries that a working with framework internals
+UNSET_PARSE_MODE: Any = Default("parse_mode")
+UNSET_DISABLE_WEB_PAGE_PREVIEW: Any = Default("link_preview_is_disabled")
+UNSET_PROTECT_CONTENT: Any = Default("protect_content")
diff --git a/aiogram/types/chat_join_request.py b/aiogram/types/chat_join_request.py
index 42990496..074bcc45 100644
--- a/aiogram/types/chat_join_request.py
+++ b/aiogram/types/chat_join_request.py
@@ -5,12 +5,8 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
-from .base import (
-    UNSET_DISABLE_WEB_PAGE_PREVIEW,
-    UNSET_PARSE_MODE,
-    UNSET_PROTECT_CONTENT,
-    TelegramObject,
-)
+from ..client.default import Default
+from .base import TelegramObject
 from .custom import DateTime
 
 if TYPE_CHECKING:
@@ -162,17 +158,21 @@ class ChatJoinRequest(TelegramObject):
         self,
         text: str,
         message_thread_id: Optional[int] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
-        link_preview_options: Optional[LinkPreviewOptions] = None,
+        link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default(
+            "link_preview"
+        ),
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
         ] = None,
         allow_sending_without_reply: Optional[bool] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         reply_to_message_id: Optional[int] = None,
         **kwargs: Any,
     ) -> SendMessage:
@@ -226,17 +226,21 @@ class ChatJoinRequest(TelegramObject):
         self,
         text: str,
         message_thread_id: Optional[int] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
-        link_preview_options: Optional[LinkPreviewOptions] = None,
+        link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default(
+            "link_preview"
+        ),
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
         ] = None,
         allow_sending_without_reply: Optional[bool] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         reply_to_message_id: Optional[int] = None,
         **kwargs: Any,
     ) -> SendMessage:
@@ -295,11 +299,11 @@ class ChatJoinRequest(TelegramObject):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -371,11 +375,11 @@ class ChatJoinRequest(TelegramObject):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -443,14 +447,14 @@ class ChatJoinRequest(TelegramObject):
         audio: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         performer: Optional[str] = None,
         title: Optional[str] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -517,14 +521,14 @@ class ChatJoinRequest(TelegramObject):
         audio: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         performer: Optional[str] = None,
         title: Optional[str] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -594,7 +598,7 @@ class ChatJoinRequest(TelegramObject):
         last_name: Optional[str] = None,
         vcard: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -655,7 +659,7 @@ class ChatJoinRequest(TelegramObject):
         last_name: Optional[str] = None,
         vcard: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -714,11 +718,11 @@ class ChatJoinRequest(TelegramObject):
         message_thread_id: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_content_type_detection: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -781,11 +785,11 @@ class ChatJoinRequest(TelegramObject):
         message_thread_id: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_content_type_detection: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -847,7 +851,7 @@ class ChatJoinRequest(TelegramObject):
         game_short_name: str,
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -897,7 +901,7 @@ class ChatJoinRequest(TelegramObject):
         game_short_name: str,
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -967,7 +971,7 @@ class ChatJoinRequest(TelegramObject):
         send_email_to_provider: Optional[bool] = None,
         is_flexible: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -1077,7 +1081,7 @@ class ChatJoinRequest(TelegramObject):
         send_email_to_provider: Optional[bool] = None,
         is_flexible: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -1172,7 +1176,7 @@ class ChatJoinRequest(TelegramObject):
         heading: Optional[int] = None,
         proximity_alert_radius: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1239,7 +1243,7 @@ class ChatJoinRequest(TelegramObject):
         heading: Optional[int] = None,
         proximity_alert_radius: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1301,7 +1305,7 @@ class ChatJoinRequest(TelegramObject):
         media: List[Union[InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo]],
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         allow_sending_without_reply: Optional[bool] = None,
         reply_to_message_id: Optional[int] = None,
@@ -1348,7 +1352,7 @@ class ChatJoinRequest(TelegramObject):
         media: List[Union[InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo]],
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         allow_sending_without_reply: Optional[bool] = None,
         reply_to_message_id: Optional[int] = None,
@@ -1395,11 +1399,11 @@ class ChatJoinRequest(TelegramObject):
         photo: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1459,11 +1463,11 @@ class ChatJoinRequest(TelegramObject):
         photo: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1528,13 +1532,13 @@ class ChatJoinRequest(TelegramObject):
         allows_multiple_answers: Optional[bool] = None,
         correct_option_id: Optional[int] = None,
         explanation: Optional[str] = None,
-        explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         explanation_entities: Optional[List[MessageEntity]] = None,
         open_period: Optional[int] = None,
         close_date: Optional[Union[datetime.datetime, datetime.timedelta, int]] = None,
         is_closed: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1613,13 +1617,13 @@ class ChatJoinRequest(TelegramObject):
         allows_multiple_answers: Optional[bool] = None,
         correct_option_id: Optional[int] = None,
         explanation: Optional[str] = None,
-        explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         explanation_entities: Optional[List[MessageEntity]] = None,
         open_period: Optional[int] = None,
         close_date: Optional[Union[datetime.datetime, datetime.timedelta, int]] = None,
         is_closed: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1693,7 +1697,7 @@ class ChatJoinRequest(TelegramObject):
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1745,7 +1749,7 @@ class ChatJoinRequest(TelegramObject):
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1798,7 +1802,7 @@ class ChatJoinRequest(TelegramObject):
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1853,7 +1857,7 @@ class ChatJoinRequest(TelegramObject):
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1914,7 +1918,7 @@ class ChatJoinRequest(TelegramObject):
         google_place_id: Optional[str] = None,
         google_place_type: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1987,7 +1991,7 @@ class ChatJoinRequest(TelegramObject):
         google_place_id: Optional[str] = None,
         google_place_type: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2057,12 +2061,12 @@ class ChatJoinRequest(TelegramObject):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         supports_streaming: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2136,12 +2140,12 @@ class ChatJoinRequest(TelegramObject):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         supports_streaming: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2214,7 +2218,7 @@ class ChatJoinRequest(TelegramObject):
         length: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2275,7 +2279,7 @@ class ChatJoinRequest(TelegramObject):
         length: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2333,11 +2337,11 @@ class ChatJoinRequest(TelegramObject):
         voice: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2397,11 +2401,11 @@ class ChatJoinRequest(TelegramObject):
         voice: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/types/chat_member_updated.py b/aiogram/types/chat_member_updated.py
index 488b2a9c..8398d865 100644
--- a/aiogram/types/chat_member_updated.py
+++ b/aiogram/types/chat_member_updated.py
@@ -5,12 +5,8 @@ from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
-from .base import (
-    UNSET_DISABLE_WEB_PAGE_PREVIEW,
-    UNSET_PARSE_MODE,
-    UNSET_PROTECT_CONTENT,
-    TelegramObject,
-)
+from ..client.default import Default
+from .base import TelegramObject
 from .custom import DateTime
 
 if TYPE_CHECKING:
@@ -142,17 +138,21 @@ class ChatMemberUpdated(TelegramObject):
         self,
         text: str,
         message_thread_id: Optional[int] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
-        link_preview_options: Optional[LinkPreviewOptions] = None,
+        link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default(
+            "link_preview"
+        ),
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
         ] = None,
         allow_sending_without_reply: Optional[bool] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         reply_to_message_id: Optional[int] = None,
         **kwargs: Any,
     ) -> SendMessage:
@@ -211,11 +211,11 @@ class ChatMemberUpdated(TelegramObject):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -283,14 +283,14 @@ class ChatMemberUpdated(TelegramObject):
         audio: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         performer: Optional[str] = None,
         title: Optional[str] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -360,7 +360,7 @@ class ChatMemberUpdated(TelegramObject):
         last_name: Optional[str] = None,
         vcard: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -419,11 +419,11 @@ class ChatMemberUpdated(TelegramObject):
         message_thread_id: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_content_type_detection: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -485,7 +485,7 @@ class ChatMemberUpdated(TelegramObject):
         game_short_name: str,
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -555,7 +555,7 @@ class ChatMemberUpdated(TelegramObject):
         send_email_to_provider: Optional[bool] = None,
         is_flexible: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -650,7 +650,7 @@ class ChatMemberUpdated(TelegramObject):
         heading: Optional[int] = None,
         proximity_alert_radius: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -712,7 +712,7 @@ class ChatMemberUpdated(TelegramObject):
         media: List[Union[InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo]],
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         allow_sending_without_reply: Optional[bool] = None,
         reply_to_message_id: Optional[int] = None,
@@ -759,11 +759,11 @@ class ChatMemberUpdated(TelegramObject):
         photo: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -828,13 +828,13 @@ class ChatMemberUpdated(TelegramObject):
         allows_multiple_answers: Optional[bool] = None,
         correct_option_id: Optional[int] = None,
         explanation: Optional[str] = None,
-        explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         explanation_entities: Optional[List[MessageEntity]] = None,
         open_period: Optional[int] = None,
         close_date: Optional[Union[datetime.datetime, datetime.timedelta, int]] = None,
         is_closed: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -908,7 +908,7 @@ class ChatMemberUpdated(TelegramObject):
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -961,7 +961,7 @@ class ChatMemberUpdated(TelegramObject):
         message_thread_id: Optional[int] = None,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1022,7 +1022,7 @@ class ChatMemberUpdated(TelegramObject):
         google_place_id: Optional[str] = None,
         google_place_type: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1092,12 +1092,12 @@ class ChatMemberUpdated(TelegramObject):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         supports_streaming: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1170,7 +1170,7 @@ class ChatMemberUpdated(TelegramObject):
         length: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1228,11 +1228,11 @@ class ChatMemberUpdated(TelegramObject):
         voice: Union[InputFile, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
diff --git a/aiogram/types/inline_query_result_audio.py b/aiogram/types/inline_query_result_audio.py
index 63f06935..f6ce48b2 100644
--- a/aiogram/types/inline_query_result_audio.py
+++ b/aiogram/types/inline_query_result_audio.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -34,7 +34,7 @@ class InlineQueryResultAudio(InlineQueryResult):
     """Title"""
     caption: Optional[str] = None
     """*Optional*. Caption, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the audio caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -67,7 +67,7 @@ class InlineQueryResultAudio(InlineQueryResult):
             audio_url: str,
             title: str,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             performer: Optional[str] = None,
             audio_duration: Optional[int] = None,
diff --git a/aiogram/types/inline_query_result_cached_audio.py b/aiogram/types/inline_query_result_cached_audio.py
index 25aa4d19..85b588e7 100644
--- a/aiogram/types/inline_query_result_cached_audio.py
+++ b/aiogram/types/inline_query_result_cached_audio.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -32,7 +32,7 @@ class InlineQueryResultCachedAudio(InlineQueryResult):
     """A valid file identifier for the audio file"""
     caption: Optional[str] = None
     """*Optional*. Caption, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the audio caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -60,7 +60,7 @@ class InlineQueryResultCachedAudio(InlineQueryResult):
             id: str,
             audio_file_id: str,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_cached_document.py b/aiogram/types/inline_query_result_cached_document.py
index 2325400d..fd03d243 100644
--- a/aiogram/types/inline_query_result_cached_document.py
+++ b/aiogram/types/inline_query_result_cached_document.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -36,7 +36,7 @@ class InlineQueryResultCachedDocument(InlineQueryResult):
     """*Optional*. Short description of the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the document to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the document caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -66,7 +66,7 @@ class InlineQueryResultCachedDocument(InlineQueryResult):
             document_file_id: str,
             description: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_cached_gif.py b/aiogram/types/inline_query_result_cached_gif.py
index aca612c9..c9d6a76e 100644
--- a/aiogram/types/inline_query_result_cached_gif.py
+++ b/aiogram/types/inline_query_result_cached_gif.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -33,7 +33,7 @@ class InlineQueryResultCachedGif(InlineQueryResult):
     """*Optional*. Title for the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the GIF file to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -62,7 +62,7 @@ class InlineQueryResultCachedGif(InlineQueryResult):
             gif_file_id: str,
             title: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_cached_mpeg4_gif.py b/aiogram/types/inline_query_result_cached_mpeg4_gif.py
index e08c9ee7..7c35c813 100644
--- a/aiogram/types/inline_query_result_cached_mpeg4_gif.py
+++ b/aiogram/types/inline_query_result_cached_mpeg4_gif.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -33,7 +33,7 @@ class InlineQueryResultCachedMpeg4Gif(InlineQueryResult):
     """*Optional*. Title for the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the MPEG-4 file to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -62,7 +62,7 @@ class InlineQueryResultCachedMpeg4Gif(InlineQueryResult):
             mpeg4_file_id: str,
             title: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_cached_photo.py b/aiogram/types/inline_query_result_cached_photo.py
index 2fdb94ff..aa6b68bb 100644
--- a/aiogram/types/inline_query_result_cached_photo.py
+++ b/aiogram/types/inline_query_result_cached_photo.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -35,7 +35,7 @@ class InlineQueryResultCachedPhoto(InlineQueryResult):
     """*Optional*. Short description of the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the photo to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the photo caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -65,7 +65,7 @@ class InlineQueryResultCachedPhoto(InlineQueryResult):
             title: Optional[str] = None,
             description: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_cached_video.py b/aiogram/types/inline_query_result_cached_video.py
index 22244ed3..ea6cb0d5 100644
--- a/aiogram/types/inline_query_result_cached_video.py
+++ b/aiogram/types/inline_query_result_cached_video.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -35,7 +35,7 @@ class InlineQueryResultCachedVideo(InlineQueryResult):
     """*Optional*. Short description of the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the video to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the video caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -65,7 +65,7 @@ class InlineQueryResultCachedVideo(InlineQueryResult):
             title: str,
             description: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_cached_voice.py b/aiogram/types/inline_query_result_cached_voice.py
index 323ef356..dea26eab 100644
--- a/aiogram/types/inline_query_result_cached_voice.py
+++ b/aiogram/types/inline_query_result_cached_voice.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -34,7 +34,7 @@ class InlineQueryResultCachedVoice(InlineQueryResult):
     """Voice message title"""
     caption: Optional[str] = None
     """*Optional*. Caption, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the voice message caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -63,7 +63,7 @@ class InlineQueryResultCachedVoice(InlineQueryResult):
             voice_file_id: str,
             title: str,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_document.py b/aiogram/types/inline_query_result_document.py
index 20e3e9cc..48cfd83d 100644
--- a/aiogram/types/inline_query_result_document.py
+++ b/aiogram/types/inline_query_result_document.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -36,7 +36,7 @@ class InlineQueryResultDocument(InlineQueryResult):
     """MIME type of the content of the file, either 'application/pdf' or 'application/zip'"""
     caption: Optional[str] = None
     """*Optional*. Caption of the document to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the document caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -74,7 +74,7 @@ class InlineQueryResultDocument(InlineQueryResult):
             document_url: str,
             mime_type: str,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             description: Optional[str] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
diff --git a/aiogram/types/inline_query_result_gif.py b/aiogram/types/inline_query_result_gif.py
index cf61a4d4..8c2da639 100644
--- a/aiogram/types/inline_query_result_gif.py
+++ b/aiogram/types/inline_query_result_gif.py
@@ -2,6 +2,7 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
 from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
@@ -43,7 +44,7 @@ class InlineQueryResultGif(InlineQueryResult):
     """*Optional*. Title for the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the GIF file to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -77,7 +78,7 @@ class InlineQueryResultGif(InlineQueryResult):
             thumbnail_mime_type: Optional[str] = None,
             title: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_mpeg4_gif.py b/aiogram/types/inline_query_result_mpeg4_gif.py
index 8be8e44e..35f5d17c 100644
--- a/aiogram/types/inline_query_result_mpeg4_gif.py
+++ b/aiogram/types/inline_query_result_mpeg4_gif.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -43,7 +43,7 @@ class InlineQueryResultMpeg4Gif(InlineQueryResult):
     """*Optional*. Title for the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the MPEG-4 file to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -77,7 +77,7 @@ class InlineQueryResultMpeg4Gif(InlineQueryResult):
             thumbnail_mime_type: Optional[str] = None,
             title: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_photo.py b/aiogram/types/inline_query_result_photo.py
index fe577877..b0b9fd03 100644
--- a/aiogram/types/inline_query_result_photo.py
+++ b/aiogram/types/inline_query_result_photo.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -41,7 +41,7 @@ class InlineQueryResultPhoto(InlineQueryResult):
     """*Optional*. Short description of the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the photo to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the photo caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -74,7 +74,7 @@ class InlineQueryResultPhoto(InlineQueryResult):
             title: Optional[str] = None,
             description: Optional[str] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
             input_message_content: Optional[
diff --git a/aiogram/types/inline_query_result_video.py b/aiogram/types/inline_query_result_video.py
index b65ec3b9..d7fd7eed 100644
--- a/aiogram/types/inline_query_result_video.py
+++ b/aiogram/types/inline_query_result_video.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -39,7 +39,7 @@ class InlineQueryResultVideo(InlineQueryResult):
     """Title for the result"""
     caption: Optional[str] = None
     """*Optional*. Caption of the video to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the video caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -78,7 +78,7 @@ class InlineQueryResultVideo(InlineQueryResult):
             thumbnail_url: str,
             title: str,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             video_width: Optional[int] = None,
             video_height: Optional[int] = None,
diff --git a/aiogram/types/inline_query_result_voice.py b/aiogram/types/inline_query_result_voice.py
index edd3157e..df2e81a3 100644
--- a/aiogram/types/inline_query_result_voice.py
+++ b/aiogram/types/inline_query_result_voice.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InlineQueryResultType
-from .base import UNSET_PARSE_MODE
 from .inline_query_result import InlineQueryResult
 
 if TYPE_CHECKING:
@@ -34,7 +34,7 @@ class InlineQueryResultVoice(InlineQueryResult):
     """Recording title"""
     caption: Optional[str] = None
     """*Optional*. Caption, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the voice message caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -65,7 +65,7 @@ class InlineQueryResultVoice(InlineQueryResult):
             voice_url: str,
             title: str,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             voice_duration: Optional[int] = None,
             reply_markup: Optional[InlineKeyboardMarkup] = None,
diff --git a/aiogram/types/input_media_animation.py b/aiogram/types/input_media_animation.py
index fff6da3a..9dcf0a9e 100644
--- a/aiogram/types/input_media_animation.py
+++ b/aiogram/types/input_media_animation.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InputMediaType
-from .base import UNSET_PARSE_MODE
 from .input_media import InputMedia
 
 if TYPE_CHECKING:
@@ -26,7 +26,7 @@ class InputMediaAnimation(InputMedia):
     """*Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """*Optional*. Caption of the animation to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the animation caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -50,7 +50,7 @@ class InputMediaAnimation(InputMedia):
             media: Union[str, InputFile],
             thumbnail: Optional[InputFile] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             width: Optional[int] = None,
             height: Optional[int] = None,
diff --git a/aiogram/types/input_media_audio.py b/aiogram/types/input_media_audio.py
index 61797453..c3722011 100644
--- a/aiogram/types/input_media_audio.py
+++ b/aiogram/types/input_media_audio.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InputMediaType
-from .base import UNSET_PARSE_MODE
 from .input_media import InputMedia
 
 if TYPE_CHECKING:
@@ -26,7 +26,7 @@ class InputMediaAudio(InputMedia):
     """*Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """*Optional*. Caption of the audio to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the audio caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -48,7 +48,7 @@ class InputMediaAudio(InputMedia):
             media: Union[str, InputFile],
             thumbnail: Optional[InputFile] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             duration: Optional[int] = None,
             performer: Optional[str] = None,
diff --git a/aiogram/types/input_media_document.py b/aiogram/types/input_media_document.py
index 87d39e4d..7c24b929 100644
--- a/aiogram/types/input_media_document.py
+++ b/aiogram/types/input_media_document.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InputMediaType
-from .base import UNSET_PARSE_MODE
 from .input_media import InputMedia
 
 if TYPE_CHECKING:
@@ -26,7 +26,7 @@ class InputMediaDocument(InputMedia):
     """*Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """*Optional*. Caption of the document to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the document caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -44,7 +44,7 @@ class InputMediaDocument(InputMedia):
             media: Union[str, InputFile],
             thumbnail: Optional[InputFile] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             disable_content_type_detection: Optional[bool] = None,
             **__pydantic_kwargs: Any,
diff --git a/aiogram/types/input_media_photo.py b/aiogram/types/input_media_photo.py
index d18330ac..ecb3c91d 100644
--- a/aiogram/types/input_media_photo.py
+++ b/aiogram/types/input_media_photo.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InputMediaType
-from .base import UNSET_PARSE_MODE
 from .input_media import InputMedia
 
 if TYPE_CHECKING:
@@ -24,7 +24,7 @@ class InputMediaPhoto(InputMedia):
     """File to send. Pass a file_id to send a file that exists on the Telegram servers (recommended), pass an HTTP URL for Telegram to get a file from the Internet, or pass 'attach://<file_attach_name>' to upload a new one using multipart/form-data under <file_attach_name> name. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """*Optional*. Caption of the photo to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the photo caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -41,7 +41,7 @@ class InputMediaPhoto(InputMedia):
             type: Literal[InputMediaType.PHOTO] = InputMediaType.PHOTO,
             media: Union[str, InputFile],
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             has_spoiler: Optional[bool] = None,
             **__pydantic_kwargs: Any,
diff --git a/aiogram/types/input_media_video.py b/aiogram/types/input_media_video.py
index f4c46b82..b44f6a76 100644
--- a/aiogram/types/input_media_video.py
+++ b/aiogram/types/input_media_video.py
@@ -2,8 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
 
+from ..client.default import Default
 from ..enums import InputMediaType
-from .base import UNSET_PARSE_MODE
 from .input_media import InputMedia
 
 if TYPE_CHECKING:
@@ -26,7 +26,7 @@ class InputMediaVideo(InputMedia):
     """*Optional*. Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass 'attach://<file_attach_name>' if the thumbnail was uploaded using multipart/form-data under <file_attach_name>. :ref:`More information on Sending Files » <sending-files>`"""
     caption: Optional[str] = None
     """*Optional*. Caption of the video to be sent, 0-1024 characters after entities parsing"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the video caption. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     caption_entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in the caption, which can be specified instead of *parse_mode*"""
@@ -52,7 +52,7 @@ class InputMediaVideo(InputMedia):
             media: Union[str, InputFile],
             thumbnail: Optional[InputFile] = None,
             caption: Optional[str] = None,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             caption_entities: Optional[List[MessageEntity]] = None,
             width: Optional[int] = None,
             height: Optional[int] = None,
diff --git a/aiogram/types/input_text_message_content.py b/aiogram/types/input_text_message_content.py
index 419159b5..50487570 100644
--- a/aiogram/types/input_text_message_content.py
+++ b/aiogram/types/input_text_message_content.py
@@ -1,10 +1,10 @@
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Any, List, Optional
+from typing import TYPE_CHECKING, Any, List, Optional, Union
 
 from pydantic import Field
 
-from .base import UNSET_DISABLE_WEB_PAGE_PREVIEW, UNSET_PARSE_MODE
+from ..client.default import Default
 from .input_message_content import InputMessageContent
 
 if TYPE_CHECKING:
@@ -21,14 +21,14 @@ class InputTextMessageContent(InputMessageContent):
 
     message_text: str
     """Text of the message to be sent, 1-4096 characters"""
-    parse_mode: Optional[str] = UNSET_PARSE_MODE
+    parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the message text. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     entities: Optional[List[MessageEntity]] = None
     """*Optional*. List of special entities that appear in message text, which can be specified instead of *parse_mode*"""
     link_preview_options: Optional[LinkPreviewOptions] = None
     """*Optional*. Link preview generation options for the message"""
-    disable_web_page_preview: Optional[bool] = Field(
-        UNSET_DISABLE_WEB_PAGE_PREVIEW, json_schema_extra={"deprecated": True}
+    disable_web_page_preview: Optional[Union[bool, Default]] = Field(
+        Default("disable_web_page_preview"), json_schema_extra={"deprecated": True}
     )
     """*Optional*. Disables link previews for links in the sent message
 
@@ -43,10 +43,12 @@ class InputTextMessageContent(InputMessageContent):
             __pydantic__self__,
             *,
             message_text: str,
-            parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             entities: Optional[List[MessageEntity]] = None,
             link_preview_options: Optional[LinkPreviewOptions] = None,
-            disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+            disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+                "disable_web_page_preview"
+            ),
             **__pydantic_kwargs: Any,
         ) -> None:
             # DO NOT EDIT MANUALLY!!!
diff --git a/aiogram/types/link_preview_options.py b/aiogram/types/link_preview_options.py
index b13a1ccf..665ee9b1 100644
--- a/aiogram/types/link_preview_options.py
+++ b/aiogram/types/link_preview_options.py
@@ -1,5 +1,6 @@
-from typing import TYPE_CHECKING, Any, Optional
+from typing import TYPE_CHECKING, Any, Optional, Union
 
+from ..client.default import Default
 from .base import TelegramObject
 
 
@@ -10,15 +11,15 @@ class LinkPreviewOptions(TelegramObject):
     Source: https://core.telegram.org/bots/api#linkpreviewoptions
     """
 
-    is_disabled: Optional[bool] = None
+    is_disabled: Optional[Union[bool, Default]] = Default("link_preview_is_disabled")
     """*Optional*. :code:`True`, if the link preview is disabled"""
     url: Optional[str] = None
     """*Optional*. URL to use for the link preview. If empty, then the first URL found in the message text will be used"""
-    prefer_small_media: Optional[bool] = None
+    prefer_small_media: Optional[Union[bool, Default]] = Default("link_preview_prefer_small_media")
     """*Optional*. :code:`True`, if the media in the link preview is suppposed to be shrunk; ignored if the URL isn't explicitly specified or media size change isn't supported for the preview"""
-    prefer_large_media: Optional[bool] = None
+    prefer_large_media: Optional[Union[bool, Default]] = Default("link_preview_prefer_large_media")
     """*Optional*. :code:`True`, if the media in the link preview is suppposed to be enlarged; ignored if the URL isn't explicitly specified or media size change isn't supported for the preview"""
-    show_above_text: Optional[bool] = None
+    show_above_text: Optional[Union[bool, Default]] = Default("link_preview_show_above_text")
     """*Optional*. :code:`True`, if the link preview must be shown above the message text; otherwise, the link preview will be shown below the message text"""
 
     if TYPE_CHECKING:
@@ -28,11 +29,17 @@ class LinkPreviewOptions(TelegramObject):
         def __init__(
             __pydantic__self__,
             *,
-            is_disabled: Optional[bool] = None,
+            is_disabled: Optional[Union[bool, Default]] = Default("link_preview_is_disabled"),
             url: Optional[str] = None,
-            prefer_small_media: Optional[bool] = None,
-            prefer_large_media: Optional[bool] = None,
-            show_above_text: Optional[bool] = None,
+            prefer_small_media: Optional[Union[bool, Default]] = Default(
+                "link_preview_prefer_small_media"
+            ),
+            prefer_large_media: Optional[Union[bool, Default]] = Default(
+                "link_preview_prefer_large_media"
+            ),
+            show_above_text: Optional[Union[bool, Default]] = Default(
+                "link_preview_show_above_text"
+            ),
             **__pydantic_kwargs: Any,
         ) -> None:
             # DO NOT EDIT MANUALLY!!!
diff --git a/aiogram/types/message.py b/aiogram/types/message.py
index 41c629af..ab6a6d97 100644
--- a/aiogram/types/message.py
+++ b/aiogram/types/message.py
@@ -11,12 +11,8 @@ from aiogram.utils.text_decorations import (
     markdown_decoration,
 )
 
+from ..client.default import Default
 from ..enums import ContentType
-from .base import (
-    UNSET_DISABLE_WEB_PAGE_PREVIEW,
-    UNSET_PARSE_MODE,
-    UNSET_PROTECT_CONTENT,
-)
 from .custom import DateTime
 from .maybe_inaccessible_message import MaybeInaccessibleMessage
 
@@ -629,11 +625,11 @@ class Message(MaybeInaccessibleMessage):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -707,11 +703,11 @@ class Message(MaybeInaccessibleMessage):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -782,14 +778,14 @@ class Message(MaybeInaccessibleMessage):
         self,
         audio: Union[InputFile, str],
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         performer: Optional[str] = None,
         title: Optional[str] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -858,14 +854,14 @@ class Message(MaybeInaccessibleMessage):
         self,
         audio: Union[InputFile, str],
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         performer: Optional[str] = None,
         title: Optional[str] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -938,7 +934,7 @@ class Message(MaybeInaccessibleMessage):
         last_name: Optional[str] = None,
         vcard: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1001,7 +997,7 @@ class Message(MaybeInaccessibleMessage):
         last_name: Optional[str] = None,
         vcard: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1063,11 +1059,11 @@ class Message(MaybeInaccessibleMessage):
         document: Union[InputFile, str],
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_content_type_detection: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1132,11 +1128,11 @@ class Message(MaybeInaccessibleMessage):
         document: Union[InputFile, str],
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_content_type_detection: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1201,7 +1197,7 @@ class Message(MaybeInaccessibleMessage):
         self,
         game_short_name: str,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -1253,7 +1249,7 @@ class Message(MaybeInaccessibleMessage):
         self,
         game_short_name: str,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -1326,7 +1322,7 @@ class Message(MaybeInaccessibleMessage):
         send_email_to_provider: Optional[bool] = None,
         is_flexible: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -1438,7 +1434,7 @@ class Message(MaybeInaccessibleMessage):
         send_email_to_provider: Optional[bool] = None,
         is_flexible: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         allow_sending_without_reply: Optional[bool] = None,
@@ -1536,7 +1532,7 @@ class Message(MaybeInaccessibleMessage):
         heading: Optional[int] = None,
         proximity_alert_radius: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1605,7 +1601,7 @@ class Message(MaybeInaccessibleMessage):
         heading: Optional[int] = None,
         proximity_alert_radius: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1670,7 +1666,7 @@ class Message(MaybeInaccessibleMessage):
         self,
         media: List[Union[InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo]],
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         allow_sending_without_reply: Optional[bool] = None,
         **kwargs: Any,
@@ -1719,7 +1715,7 @@ class Message(MaybeInaccessibleMessage):
         self,
         media: List[Union[InputMediaAudio, InputMediaDocument, InputMediaPhoto, InputMediaVideo]],
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         allow_sending_without_reply: Optional[bool] = None,
         reply_to_message_id: Optional[int] = None,
@@ -1768,17 +1764,21 @@ class Message(MaybeInaccessibleMessage):
     def reply(
         self,
         text: str,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
-        link_preview_options: Optional[LinkPreviewOptions] = None,
+        link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default(
+            "link_preview"
+        ),
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
         ] = None,
         allow_sending_without_reply: Optional[bool] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         **kwargs: Any,
     ) -> SendMessage:
         """
@@ -1834,17 +1834,21 @@ class Message(MaybeInaccessibleMessage):
     def answer(
         self,
         text: str,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
-        link_preview_options: Optional[LinkPreviewOptions] = None,
+        link_preview_options: Optional[Union[LinkPreviewOptions, Default]] = Default(
+            "link_preview"
+        ),
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
         ] = None,
         allow_sending_without_reply: Optional[bool] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         reply_to_message_id: Optional[int] = None,
         **kwargs: Any,
     ) -> SendMessage:
@@ -1902,11 +1906,11 @@ class Message(MaybeInaccessibleMessage):
         self,
         photo: Union[InputFile, str],
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -1968,11 +1972,11 @@ class Message(MaybeInaccessibleMessage):
         self,
         photo: Union[InputFile, str],
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2040,13 +2044,13 @@ class Message(MaybeInaccessibleMessage):
         allows_multiple_answers: Optional[bool] = None,
         correct_option_id: Optional[int] = None,
         explanation: Optional[str] = None,
-        explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         explanation_entities: Optional[List[MessageEntity]] = None,
         open_period: Optional[int] = None,
         close_date: Optional[Union[datetime.datetime, datetime.timedelta, int]] = None,
         is_closed: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2127,13 +2131,13 @@ class Message(MaybeInaccessibleMessage):
         allows_multiple_answers: Optional[bool] = None,
         correct_option_id: Optional[int] = None,
         explanation: Optional[str] = None,
-        explanation_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        explanation_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         explanation_entities: Optional[List[MessageEntity]] = None,
         open_period: Optional[int] = None,
         close_date: Optional[Union[datetime.datetime, datetime.timedelta, int]] = None,
         is_closed: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2210,7 +2214,7 @@ class Message(MaybeInaccessibleMessage):
         self,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2264,7 +2268,7 @@ class Message(MaybeInaccessibleMessage):
         self,
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2320,7 +2324,7 @@ class Message(MaybeInaccessibleMessage):
         sticker: Union[InputFile, str],
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2377,7 +2381,7 @@ class Message(MaybeInaccessibleMessage):
         sticker: Union[InputFile, str],
         emoji: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2441,7 +2445,7 @@ class Message(MaybeInaccessibleMessage):
         google_place_id: Optional[str] = None,
         google_place_type: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2516,7 +2520,7 @@ class Message(MaybeInaccessibleMessage):
         google_place_id: Optional[str] = None,
         google_place_type: Optional[str] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2589,12 +2593,12 @@ class Message(MaybeInaccessibleMessage):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         supports_streaming: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2670,12 +2674,12 @@ class Message(MaybeInaccessibleMessage):
         height: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         has_spoiler: Optional[bool] = None,
         supports_streaming: Optional[bool] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2751,7 +2755,7 @@ class Message(MaybeInaccessibleMessage):
         length: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2814,7 +2818,7 @@ class Message(MaybeInaccessibleMessage):
         length: Optional[int] = None,
         thumbnail: Optional[InputFile] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2875,11 +2879,11 @@ class Message(MaybeInaccessibleMessage):
         self,
         voice: Union[InputFile, str],
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -2941,11 +2945,11 @@ class Message(MaybeInaccessibleMessage):
         self,
         voice: Union[InputFile, str],
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         duration: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -3187,10 +3191,10 @@ class Message(MaybeInaccessibleMessage):
         chat_id: Union[int, str],
         message_thread_id: Optional[int] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         reply_parameters: Optional[ReplyParameters] = None,
         reply_markup: Optional[
             Union[InlineKeyboardMarkup, ReplyKeyboardMarkup, ReplyKeyboardRemove, ForceReply]
@@ -3253,11 +3257,13 @@ class Message(MaybeInaccessibleMessage):
         self,
         text: str,
         inline_message_id: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         entities: Optional[List[MessageEntity]] = None,
         link_preview_options: Optional[LinkPreviewOptions] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
-        disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW,
+        disable_web_page_preview: Optional[Union[bool, Default]] = Default(
+            "link_preview_is_disabled"
+        ),
         **kwargs: Any,
     ) -> EditMessageText:
         """
@@ -3307,7 +3313,7 @@ class Message(MaybeInaccessibleMessage):
         chat_id: Union[int, str],
         message_thread_id: Optional[int] = None,
         disable_notification: Optional[bool] = None,
-        protect_content: Optional[bool] = UNSET_PROTECT_CONTENT,
+        protect_content: Optional[Union[bool, Default]] = Default("protect_content"),
         **kwargs: Any,
     ) -> ForwardMessage:
         """
@@ -3563,7 +3569,7 @@ class Message(MaybeInaccessibleMessage):
         self,
         inline_message_id: Optional[str] = None,
         caption: Optional[str] = None,
-        parse_mode: Optional[str] = UNSET_PARSE_MODE,
+        parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
         caption_entities: Optional[List[MessageEntity]] = None,
         reply_markup: Optional[InlineKeyboardMarkup] = None,
         **kwargs: Any,
diff --git a/aiogram/types/reply_parameters.py b/aiogram/types/reply_parameters.py
index db2bdcbf..6e4019de 100644
--- a/aiogram/types/reply_parameters.py
+++ b/aiogram/types/reply_parameters.py
@@ -2,7 +2,8 @@ from __future__ import annotations
 
 from typing import TYPE_CHECKING, Any, List, Optional, Union
 
-from .base import UNSET_PARSE_MODE, TelegramObject
+from ..client.default import Default
+from .base import TelegramObject
 
 if TYPE_CHECKING:
     from .message_entity import MessageEntity
@@ -19,11 +20,13 @@ class ReplyParameters(TelegramObject):
     """Identifier of the message that will be replied to in the current chat, or in the chat *chat_id* if it is specified"""
     chat_id: Optional[Union[int, str]] = None
     """*Optional*. If the message to be replied to is from a different chat, unique identifier for the chat or username of the channel (in the format :code:`@channelusername`)"""
-    allow_sending_without_reply: Optional[bool] = None
+    allow_sending_without_reply: Optional[Union[bool, Default]] = Default(
+        "allow_sending_without_reply"
+    )
     """*Optional*. Pass :code:`True` if the message should be sent even if the specified message to be replied to is not found; can be used only for replies in the same chat and forum topic."""
     quote: Optional[str] = None
     """*Optional*. Quoted part of the message to be replied to; 0-1024 characters after entities parsing. The quote must be an exact substring of the message to be replied to, including *bold*, *italic*, *underline*, *strikethrough*, *spoiler*, and *custom_emoji* entities. The message will fail to send if the quote isn't found in the original message."""
-    quote_parse_mode: Optional[str] = UNSET_PARSE_MODE
+    quote_parse_mode: Optional[Union[str, Default]] = Default("parse_mode")
     """*Optional*. Mode for parsing entities in the quote. See `formatting options <https://core.telegram.org/bots/api#formatting-options>`_ for more details."""
     quote_entities: Optional[List[MessageEntity]] = None
     """*Optional*. A JSON-serialized list of special entities that appear in the quote. It can be specified instead of *quote_parse_mode*."""
@@ -39,9 +42,11 @@ class ReplyParameters(TelegramObject):
             *,
             message_id: int,
             chat_id: Optional[Union[int, str]] = None,
-            allow_sending_without_reply: Optional[bool] = None,
+            allow_sending_without_reply: Optional[Union[bool, Default]] = Default(
+                "allow_sending_without_reply"
+            ),
             quote: Optional[str] = None,
-            quote_parse_mode: Optional[str] = UNSET_PARSE_MODE,
+            quote_parse_mode: Optional[Union[str, Default]] = Default("parse_mode"),
             quote_entities: Optional[List[MessageEntity]] = None,
             quote_position: Optional[int] = None,
             **__pydantic_kwargs: Any,


Test patch:
diff --git a/tests/test_api/test_client/test_bot.py b/tests/test_api/test_client/test_bot.py
index d4f2f75f..901beac2 100644
--- a/tests/test_api/test_client/test_bot.py
+++ b/tests/test_api/test_client/test_bot.py
@@ -12,6 +12,7 @@ from aiogram.client.session.aiohttp import AiohttpSession
 from aiogram.client.telegram import TelegramAPIServer
 from aiogram.methods import GetFile, GetMe
 from aiogram.types import File, PhotoSize
+from tests.deprecated import check_deprecated
 from tests.mocked_bot import MockedBot
 
 
@@ -41,6 +42,13 @@ class TestBot:
         assert isinstance(bot.session, AiohttpSession)
         assert bot.id == 42
 
+    def test_init_default(self):
+        with check_deprecated(
+            max_version="3.5.0",
+            exception=TypeError,
+        ):
+            bot = Bot(token="42:Test", parse_mode="HTML")
+
     def test_hashable(self):
         bot = Bot("42:TEST")
         assert hash(bot) == hash("42:TEST")
diff --git a/tests/test_api/test_client/test_session/test_aiohttp_session.py b/tests/test_api/test_client/test_session/test_aiohttp_session.py
index 6740dcc1..4d0e7153 100644
--- a/tests/test_api/test_client/test_session/test_aiohttp_session.py
+++ b/tests/test_api/test_client/test_session/test_aiohttp_session.py
@@ -1,5 +1,13 @@
 import asyncio
-from typing import Any, AsyncContextManager, AsyncGenerator, AsyncIterable, Dict, List
+from typing import (
+    Any,
+    AsyncContextManager,
+    AsyncGenerator,
+    AsyncIterable,
+    Dict,
+    List,
+    Union,
+)
 from unittest.mock import AsyncMock, patch
 
 import aiohttp_socks
@@ -8,6 +16,7 @@ from aiohttp import ClientError
 from aresponses import ResponsesMockServer
 
 from aiogram import Bot
+from aiogram.client.default import Default
 from aiogram.client.session import aiohttp
 from aiogram.client.session.aiohttp import AiohttpSession
 from aiogram.exceptions import TelegramNetworkError
@@ -106,7 +115,7 @@ class TestAiohttpSession:
             str_: str
             int_: int
             bool_: bool
-            unset_: str = UNSET_PARSE_MODE
+            unset_: Union[str, Default] = Default("parse_mode")
             null_: None
             list_: List[str]
             dict_: Dict[str, Any]
@@ -118,7 +127,7 @@ class TestAiohttpSession:
                 str_="value",
                 int_=42,
                 bool_=True,
-                unset_=UNSET_PARSE_MODE,
+                unset_=Default("parse_mode"),
                 null_=None,
                 list_=["foo"],
                 dict_={"bar": "baz"},
diff --git a/tests/test_api/test_client/test_session/test_base_session.py b/tests/test_api/test_client/test_session/test_base_session.py
index 3793f22a..0b078189 100644
--- a/tests/test_api/test_client/test_session/test_base_session.py
+++ b/tests/test_api/test_client/test_session/test_base_session.py
@@ -7,6 +7,7 @@ import pytest
 from pytz import utc
 
 from aiogram import Bot
+from aiogram.client.default import Default, DefaultBotProperties
 from aiogram.client.session.base import BaseSession, TelegramType
 from aiogram.client.telegram import PRODUCTION, TelegramAPIServer
 from aiogram.enums import ChatType, ParseMode, TopicIconColor
@@ -125,15 +126,18 @@ class TestBaseSession:
 
     def test_prepare_value_defaults_replace(self):
         bot = MockedBot(
-            parse_mode=ParseMode.HTML,
-            protect_content=True,
-            disable_web_page_preview=True,
+            default=DefaultBotProperties(
+                parse_mode=ParseMode.HTML,
+                protect_content=True,
+                link_preview_is_disabled=True,
+            )
         )
-        assert bot.session.prepare_value(UNSET_PARSE_MODE, bot=bot, files={}) == "HTML"
+        assert bot.session.prepare_value(Default("parse_mode"), bot=bot, files={}) == "HTML"
         assert (
-            bot.session.prepare_value(UNSET_DISABLE_WEB_PAGE_PREVIEW, bot=bot, files={}) == "true"
+            bot.session.prepare_value(Default("link_preview_is_disabled"), bot=bot, files={})
+            == "true"
         )
-        assert bot.session.prepare_value(UNSET_PROTECT_CONTENT, bot=bot, files={}) == "true"
+        assert bot.session.prepare_value(Default("protect_content"), bot=bot, files={}) == "true"
 
     def test_prepare_value_defaults_unset(self):
         bot = MockedBot()