# π 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 Β©