diff --git a/README.md b/README.md index 6ff87c9..1dcdb5b 100644 --- a/README.md +++ b/README.md @@ -1 +1,171 @@ -# my_converterbot \ No newline at end of file +# π My Converter Bot + +[](https://www.python.org/) +[](https://docs.aiogram.dev/) +[](LICENSE) + +Π’Π΅Π»Π΅Π³ΡΠ°ΠΌ-Π±ΠΎΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΠΠΠ‘Π’ 7.32-2017 ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². + +## π― Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ + +### ΠΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Markdown β DOCX +- **ΠΠΎΠ»Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΠΠ‘Π’ 7.32-2017**: Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°ΡΡΠ½ΠΎ-ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ +- **ΠΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°**: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠΏΠΈΡΠΊΠΈ, ΡΠ°Π±Π»ΠΈΡΡ, Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° +- **ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ**: ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠ°Ρ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² (1.1.1, 1.1.2) +- **Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ½ΠΎΡΠΊΠ°ΠΌΠΈ**: ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ footnotes Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ +- **ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΠΈΠΏΠΎΠ³ΡΠ°ΡΠΈΠΊΠ°**: Times New Roman 14pt, ΠΌΠ΅ΠΆΡΡΡΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» 1.5 + +### ΠΠ½Π°Π»ΠΈΠ· Π°ΡΡ ΠΈΠ²ΠΎΠ² β TXT +- **ΠΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½Π°Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ**: ΠΏΠΎΠ»Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ UTF-8 ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ +- **ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ**: Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΊΡΠΏΠΎΡΡ ΠΊΠΎΠ΄Π° ΠΈΠ· Π²ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² +- **ΠΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ**: ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΉ (node_modules, __pycache__) +- **ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π±ΠΈΠ½Π°ΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²**: Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ placeholder Π΄Π»Ρ ΠΌΠ΅Π΄ΠΈΠ° + +## π§ Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΡΠ΅ΠΊ + +| ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ | Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ | +|-----------|------------|------------| +| **Bot Framework** | aiogram 3.x | ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Telegram API | +| **Document Processing** | python-docx | ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ DOCX Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠΈΠ»ΡΠΌΠΈ | +| **Parsing Engine** | re (regex) | ΠΠ°ΡΡΠΈΠ½Π³ Markdown ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° | +| **Archive Handling** | zipfile | Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ· Π°ΡΡ ΠΈΠ²ΠΎΠ² | +| **Async Runtime** | asyncio | ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² | + +## π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ + +### Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ +- Python 3.10 ΠΈΠ»ΠΈ Π²ΡΡΠ΅ +- pip package manager +- Telegram Bot Token (ΠΏΠΎΠ»ΡΡΠΈΡΡ Ρ [@BotFather](https://t.me/botfather)) + +### ΠΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ + +```bash +# ΠΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ +git clone https://github.com/EDeev/my_converterbot.git +cd my_converterbot + +# Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ +pip install -r requirements.txt + +# ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠΎΠΊΠ΅Π½Π° +# ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠΉΡΠ΅ bot.py, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π²Π°Ρ BOT_TOKEN +# BOT_TOKEN = "your_telegram_bot_token_here" + +# ΠΠ°ΠΏΡΡΠΊ Π±ΠΎΡΠ° +python bot.py +``` + +## π ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ + +### ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ +- `/start` β ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ +- `/help` β Π΄Π΅ΡΠ°Π»ΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΡΠΌ + +### Π Π°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ + +#### Markdown β DOCX ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ +1. ΠΡΠΏΡΠ°Π²ΡΡΠ΅ `.md` ΡΠ°ΠΉΠ» Π±ΠΎΡΡ +2. Π‘ΠΈΡΡΠ΅ΠΌΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡ ΠΠΠ‘Π’ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ +3. ΠΠΎΠ»ΡΡΠΈΡΠ΅ Π³ΠΎΡΠΎΠ²ΡΠΉ `.docx` Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ + +**ΠΡΠΈΠΌΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Markdown:** +```markdown +# ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ + +ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΠΊΡΡ Ρ **ΠΆΠΈΡΠ½ΡΠΌ** ΠΈ *ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ* ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ[^1]. + +## 1. ΠΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ + +- ΠΡΠ½ΠΊΡ ΡΠΏΠΈΡΠΊΠ° 1 +- ΠΡΠ½ΠΊΡ ΡΠΏΠΈΡΠΊΠ° 2 + +[^1]: Π’Π΅ΠΊΡΡ ΡΠ½ΠΎΡΠΊΠΈ +``` + +#### ZIP β TXT Π°Π½Π°Π»ΠΈΠ· +1. ΠΡΠΏΡΠ°Π²ΡΡΠ΅ `.zip` Π°ΡΡ ΠΈΠ² Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ +2. ΠΠΎΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Ρ ΠΈ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ +3. ΠΠΎΠ»ΡΡΠΈΡΠ΅ `project_structure.txt` Ρ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ + +## βοΈ ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ + +### ΠΠΎΠ΄ΡΠ»ΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° + +``` +my_converterbot/ +βββ bot.py # ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Telegram Π±ΠΎΡΠ° +βββ md_to_docx.py # ΠΠΎΠ½Π²Π΅ΡΡΠ΅Ρ Markdown Ρ ΠΠΠ‘Π’ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ +βββ rep_to_txt.py # ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡ +βββ requirements.txt # Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ +βββ README.md # Π’Π΅ΠΊΡΡΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ +``` + +### DocumentSettings: ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ + +ΠΠ»Π°ΡΡ `DocumentSettings` ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π³ΡΠ°Π½ΡΠ»ΡΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅: +- Π Π°Π·ΠΌΠ΅ΡΡ ΡΡΠΈΡΡΠΎΠ² (14pt ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅ΠΊΡΡ, 16pt Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ) +- ΠΡΡΡΡΠΏΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° (Π»Π΅Π²ΡΠΉ: 3.0 ΡΠΌ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΏΠ»Π΅ΡΠ°) +- Π Π΅ΠΆΠΈΠΌΡ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ (decimal: 1.1.1 ΠΈΠ»ΠΈ simple: 1) +- ΠΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΡΡΠ°Π½ΠΈΡ + +### ΠΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° + +**ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠΎΠ²:** +- Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π· ΠΎΡΡΡΡΠΏΡ +- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π·Π°ΠΌΠ΅Π½Π° bullet points Π½Π° Π΄Π»ΠΈΠ½Π½ΠΎΠ΅ ΡΠΈΡΠ΅ (ΠΠΠ‘Π’) +- Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ + +**Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ½ΠΎΡΠΎΠΊ:** +- Inline ΠΌΠ°ΡΠΊΠ΅ΡΡ `[^1]` β Π²Π΅ΡΡ Π½ΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΡΠ΅ΠΊΡΡΠ΅ +- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ +- Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ + +## π ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈ constraints + +- **ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°**: 20 ΠΠ (Telegram API limitation) +- **ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ **: `.md`, `.zip` +- **ΠΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΠΈ**: UTF-8, UTF-8-sig, CP1251, Latin1 (fallback ΡΠ΅ΠΏΠΎΡΠΊΠ°) + +## π ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ + +- **ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Markdown**: ~0.5-2 ΡΠ΅ΠΊ Π΄Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΠΎ 50 ΡΡΡΠ°Π½ΠΈΡ +- **ΠΠ½Π°Π»ΠΈΠ· ZIP Π°ΡΡ ΠΈΠ²ΠΎΠ²**: ~1-5 ΡΠ΅ΠΊ Π΄Π»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π΄ΠΎ 1000 ΡΠ°ΠΉΠ»ΠΎΠ² +- **ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°**: Π΄ΠΎ 10 ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² + +## π οΈ Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ + +### ΠΠ°ΡΡΠΎΠΌΠΈΠ·Π°ΡΠΈΡ ΠΠΠ‘Π’ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² + +```python +from md_to_docx import MarkdownToDocxConverter, DocumentSettings + +settings = DocumentSettings() +settings.font_name = "Times New Roman" +settings.font_size = 14 +settings.line_spacing = 1.5 +settings.margin_left = 3.0 +settings.auto_numbering_headings = True +settings.numbering_format = "decimal" + +converter = MarkdownToDocxConverter(settings) +converter.convert("input.md", "output.docx") +``` + +## π ΠΠΈΡΠ΅Π½Π·ΠΈΡ + +ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠΌ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT. + +## π¨βπ» ΠΠ²ΡΠΎΡ + +**ΠΠ΅Π΅Π² ΠΠ³ΠΎΡ ΠΠΈΠΊΡΠΎΡΠΎΠ²ΠΈΡ** - Backend Developer +- GitHub: [@EDeev](https://github.com/EDeev) +- Email: egor@deev.space +- Telegram: [@Egor_Deev](https://t.me/Egor_Deev) + +--- + +
Π‘ΠΎΠ·Π΄Π°Π½ΠΎ Ρ β€οΈ ΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ Π΄ΠΎΡΠΎΠ³ΠΎΠ³ΠΎ - deev.space Β©
+