Конечно! Вот пример `README.md` для вашей библиотеки в формате Markdown.
---
# TGWindow
**TGWindow** — это библиотека для удобного создания и управления окнами (сообщениями) в **Telegram** с использованием **Aiogram**. Она предоставляет базовый интерфейс для работы с текстом, кнопками и отправкой сообщений.
---
## Возможности библиотеки
- Удобное создание сообщений с текстом и кнопками.
- Поддержка **Inline** и **Reply** клавиатур.
- Гибкая настройка размеров клавиатур.
- Простое взаимодействие с `Message` и `CallbackQuery`.
---
## Установка
Установите библиотеку через `pip` (если она доступна) или вручную.
```bash
pip install tgwindow
```
---
## Пример использования
### 1. **Создание окна и отправка сообщения**
```python
from datetime import datetime
import asyncio
from aiogram.types import Message, Chat
from src.sender.sender import Send
from src.windows.base_window import BaseWindow
# Создание окна
class HelloWindow(BaseWindow):
def hello(self):
self.text = "Hello, guys!"
self.button("Say Hello")
return self # Возвращаем экземпляр для удобства
# Создание объекта Send
send = Send(event=message)
# Отправка сообщения
async def main():
await send(HelloWindow().hello())
if __name__ == "__main__":
asyncio.run(main())
```
---
### 2. **Добавление кнопок и размера клавиатуры**
```python
class CustomWindow(BaseWindow):
def setup(self):
self.text = "Choose an option:"
self.button(("Option 1", "data_1")) # Inline-кнопки
self.button(("Option 2", "data_2"))
self.size(2) # Кнопки располагаются по 2 в ряд
return self
# Отправка кастомного окна
async def main():
await send(CustomWindow().setup())
if __name__ == "__main__":
asyncio.run(main())
```
---
### 3. **Использование Reply-клавиатуры**
```python
from src.keyboard.base_keyboards import Reply
class MyKeyboard(Reply):
block = "Block user"
away_button = "Away button"
class ReplyWindow(BaseWindow):
def setup(self):
self.text = "Choose a command:"
self.button("/start")
self.button("/help")
self.button("/settings")
return self
class NewWindow(BaseWindow):
def blocker(self):
self.text = "Block user?"
self.button(MyKeyboard())
return self
async def main():
await send(ReplyWindow().setup())
if __name__ == "__main__":
asyncio.run(main())
```
---
## Основные классы
### 1. **`BaseWindow`**
`BaseWindow` — это базовый класс для создания окон. Он предоставляет методы для настройки текста и кнопок.
- **`self.text`** — текст сообщения.
- **`self.button(*args, keyboard=None)`** — добавление кнопок.
- **`self.size(int)`** — настройка количества кнопок в ряду.
- **`self._build()`** — возвращает текст и разметку для отправки.
---
### 2. **`Send`**
`Send` — класс для отправки сообщений.
**Инициализация:**
```python
send = Send(event: Message | CallbackQuery)
```
**Использование:**
```python
await send(window: BaseWindow | tuple[str, keyboard] | str, photo: str | None)
```
---
## Требования
- **Python 3.8+**
- **Aiogram 3.0+**
---
## Лицензия
Этот проект распространяется под лицензией **MIT**. Используйте свободно!
---
## Обратная связь
Если у вас есть вопросы или предложения, создавайте **Issue** или отправляйте PR.
---
Такой `README.md` можно сразу использовать в вашем репозитории.
Raw data
{
"_id": null,
"home_page": "https://github.com/belyankiss/TelegramWindows.git",
"name": "TGWindow",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": null,
"author": "PyExecutor",
"author_email": "belyankiss@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/c0/a3/bc6be6f1d88ed54a02dbdd6e972c56a52f6caa31d30f9a8b206bd1ba352d/tgwindow-0.0.1.tar.gz",
"platform": null,
"description": "\u041a\u043e\u043d\u0435\u0447\u043d\u043e! \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 `README.md` \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Markdown.\r\n\r\n---\r\n\r\n# TGWindow\r\n\r\n**TGWindow** \u2014 \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043d\u0430\u043c\u0438 (\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438) \u0432 **Telegram** \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c **Aiogram**. \u041e\u043d\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.\r\n\r\n---\r\n\r\n## \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\r\n- \u0423\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0438 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438.\r\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 **Inline** \u0438 **Reply** \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440.\r\n- \u0413\u0438\u0431\u043a\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440.\r\n- \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 `Message` \u0438 `CallbackQuery`.\r\n\r\n---\r\n\r\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\r\n\r\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 `pip` (\u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430) \u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e.\r\n\r\n```bash\r\npip install tgwindow\r\n```\r\n\r\n---\r\n\r\n## \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\r\n\r\n### 1. **\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f**\r\n\r\n```python\r\nfrom datetime import datetime\r\nimport asyncio\r\nfrom aiogram.types import Message, Chat\r\nfrom src.sender.sender import Send\r\nfrom src.windows.base_window import BaseWindow\r\n\r\n\r\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430\r\nclass HelloWindow(BaseWindow):\r\n def hello(self):\r\n self.text = \"Hello, guys!\"\r\n self.button(\"Say Hello\")\r\n return self # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430\r\n\r\n\r\n# \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 Send\r\nsend = Send(event=message)\r\n\r\n\r\n# \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\r\nasync def main():\r\n await send(HelloWindow().hello())\r\n\r\n\r\nif __name__ == \"__main__\":\r\n asyncio.run(main())\r\n```\r\n\r\n---\r\n\r\n### 2. **\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b**\r\n\r\n```python\r\nclass CustomWindow(BaseWindow):\r\n def setup(self):\r\n self.text = \"Choose an option:\"\r\n self.button((\"Option 1\", \"data_1\")) # Inline-\u043a\u043d\u043e\u043f\u043a\u0438\r\n self.button((\"Option 2\", \"data_2\"))\r\n self.size(2) # \u041a\u043d\u043e\u043f\u043a\u0438 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043f\u043e 2 \u0432 \u0440\u044f\u0434\r\n return self\r\n\r\n# \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430\r\nasync def main():\r\n await send(CustomWindow().setup())\r\n\r\nif __name__ == \"__main__\":\r\n asyncio.run(main())\r\n```\r\n\r\n---\r\n\r\n### 3. **\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Reply-\u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b**\r\n\r\n```python\r\nfrom src.keyboard.base_keyboards import Reply\r\n\r\n\r\nclass MyKeyboard(Reply):\r\n block = \"Block user\"\r\n away_button = \"Away button\"\r\n\r\n\r\nclass ReplyWindow(BaseWindow):\r\n def setup(self):\r\n self.text = \"Choose a command:\"\r\n self.button(\"/start\")\r\n self.button(\"/help\")\r\n self.button(\"/settings\")\r\n return self\r\n\r\n\r\nclass NewWindow(BaseWindow):\r\n def blocker(self):\r\n self.text = \"Block user?\"\r\n self.button(MyKeyboard())\r\n return self\r\n\r\n\r\nasync def main():\r\n await send(ReplyWindow().setup())\r\n\r\n\r\nif __name__ == \"__main__\":\r\n asyncio.run(main())\r\n```\r\n\r\n---\r\n\r\n## \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b\r\n\r\n### 1. **`BaseWindow`**\r\n`BaseWindow` \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u043a\u043e\u043d. \u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0438 \u043a\u043d\u043e\u043f\u043e\u043a.\r\n\r\n- **`self.text`** \u2014 \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.\r\n- **`self.button(*args, keyboard=None)`** \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a.\r\n- **`self.size(int)`** \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043d\u043e\u043f\u043e\u043a \u0432 \u0440\u044f\u0434\u0443.\r\n- **`self._build()`** \u2014 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u0438 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438.\r\n\r\n---\r\n\r\n### 2. **`Send`**\r\n`Send` \u2014 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.\r\n\r\n**\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:**\r\n```python\r\nsend = Send(event: Message | CallbackQuery)\r\n```\r\n\r\n**\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:**\r\n```python\r\nawait send(window: BaseWindow | tuple[str, keyboard] | str, photo: str | None)\r\n```\r\n\r\n---\r\n\r\n## \u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\r\n- **Python 3.8+**\r\n- **Aiogram 3.0+**\r\n\r\n---\r\n\r\n## \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\r\n\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 **MIT**. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e!\r\n\r\n---\r\n\r\n## \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c\r\n\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 **Issue** \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 PR.\r\n\r\n---\r\n\r\n\u0422\u0430\u043a\u043e\u0439 `README.md` \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0430\u0448\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043e\u043a\u043e\u043d \u0432 \u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u043c \u0431\u043e\u0442\u0435.",
"version": "0.0.1",
"project_urls": {
"Homepage": "https://github.com/belyankiss/TelegramWindows.git"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "45824157ba2083463feb7ee851ca81e58cd11d55dc5db158ec0c96bdf072dbbc",
"md5": "a0f9308160367a4f557b2e466b2434cb",
"sha256": "95ad0615d4974c8199aac05a5b84de56c15d8902964444a7d4edf4f8e461c5e6"
},
"downloads": -1,
"filename": "TGWindow-0.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a0f9308160367a4f557b2e466b2434cb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 7201,
"upload_time": "2024-12-17T07:06:27",
"upload_time_iso_8601": "2024-12-17T07:06:27.389486Z",
"url": "https://files.pythonhosted.org/packages/45/82/4157ba2083463feb7ee851ca81e58cd11d55dc5db158ec0c96bdf072dbbc/TGWindow-0.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c0a3bc6be6f1d88ed54a02dbdd6e972c56a52f6caa31d30f9a8b206bd1ba352d",
"md5": "5047b19a7e57f84e495fe6f9962a4388",
"sha256": "7129626d6c8d10dfa933e8849504e30629e893ff3634a9a618bea06f99187400"
},
"downloads": -1,
"filename": "tgwindow-0.0.1.tar.gz",
"has_sig": false,
"md5_digest": "5047b19a7e57f84e495fe6f9962a4388",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 5867,
"upload_time": "2024-12-17T07:06:29",
"upload_time_iso_8601": "2024-12-17T07:06:29.974891Z",
"url": "https://files.pythonhosted.org/packages/c0/a3/bc6be6f1d88ed54a02dbdd6e972c56a52f6caa31d30f9a8b206bd1ba352d/tgwindow-0.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-17 07:06:29",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "belyankiss",
"github_project": "TelegramWindows",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "tgwindow"
}