Библиотека для создания простых окон в Telegram-боте с использованием aiogram 3.+
Project description
from aiogram.types import CallbackQueryfrom aiogram.types import Messagefrom typing import Union
tgwindow
tgwindow — это библиотека для разработки Telegram-ботов с использованием библиотеки aiogram. Она предоставляет удобный способ для создания окон с клавишами, обработки пользовательских запросов, а также улучшает взаимодействие с ботами через встроенные миддлвары и статические окна.
Установка
Для установки библиотеки используйте pip:
pip install tgwindow
Описание
Библиотека tgwindow представляет собой набор инструментов для создания окон с кнопками, отправки сообщений и обработки запросов с использованием миддлваров в Telegram-ботах. В проекте реализованы следующие ключевые компоненты:
- Окна (Window): Классы, управляющие отображением сообщений и кнопок.
- Миддлвары (Middleware): Логика для обработки пользовательских данных до того, как запрос будет обработан.
- Регистрация окон: Позволяет динамически регистрировать окна для обработки.
Пример использования
Пример 1: Создание статического окна с кнопками
from tgwindow import StaticWindow, Inline, Reply
class MyWindow(StaticWindow):
text = "Welcome to My Bot!"
inline_button = Inline("Inline Button", callback_data="inline")
second_button = Inline(ru="Вторая кнопка", en="Second button", callback_data="second")
next_button = Inline(ru="Еще кнопка", en="Any button", url="https://github.com/belyankiss/tgwindow")
class ReplyKB(StaticWindow):
text = "Any text"
one = Reply(ru="Раз")
two = Reply(ru="Два", en="Two")
Пример 2: Создание окна
from typing import Union
from aiogram.types import Message, CallbackQuery
from tgwindow import WindowBase, auto_window
from tgwindow.buttons import Reply
class ExampleWindow(WindowBase):
@auto_window
def hello(self, *args, photo, **kwargs):
# нужно писать *args, **kwargs обязательно
# для отправки фото можете добавить путь к фотографии, либо использовать объект фото телеграмм
self.photo = "path/to/photo"
self.photo = photo
# можете здесь вставлять текст
self.text = "Любой текст"
self.en = "Any text"
self.add_window(MyWindow(self.lang))
@auto_window
def second(self, event: Union[Message, CallbackQuery], lang: str):
self.event = event # можно явно указать, но он добавится автоматически
self.lang = lang # так же можно явно указать. По дефолту ru
# можно добавить кнопок, но они должны быть одного типа!!!
self.add_button(Reply(ru="RU", en="EN"))
self.add_window(ReplyKB(lang))
Пример 3: Использование миддлвара для добавления пользовательских данных
from aiogram import Dispatcher, F
from aiogram.types import Message, CallbackQuery
from tgwindow.middleware import UserMiddleware
dp = Dispatcher(bot)
# Подключение миддлвара для обработки данных пользователя
dp.middleware.setup(UserMiddleware())
@dp.message(F.text == "/start")
# Здесь, чтобы получить доступ к вашему классу, нужно использовать название класса в малом регистре
# lang - язык пользователя. Настраивается в UserMiddleware
async def start(message: Message, examplewindow: ExampleWindow, lang: str):
# Используем данные, добавленные миддлваром
# Есть два вида использования:
# c передачей события:
examplewindow.hello(message, lang=lang) # lang указываем обязательно!
# или можно по-другому:
await message.answer(**examplewindow.hello(lang=lang))
@dp.callback_query(F.data == MyWindow.inline_button)
# или можно так
@dp.callback_query(F.data.startswith(MyWindow.inline_button))
async def check_callback(call: CallbackQuery, examplewindow: ExampleWindow, lang: str):
...
Библиотека также поддерживает уникализацию reply-кнопок и callback_data. Будет возбуждено исключение.
Структура проекта
tgwindow/
│
├── tgwindow/
│ ├── __init__.py # Главный модуль библиотеки
│ ├── windows.py # Окна (классы с кнопками и текстами)
│ ├── buttons.py # Классы для создания кнопок
│ ├── middleware.py # Миддлвары для обработки пользовательских данных
│ ├── registration.py # Реестр для регистрации окон
│ ├── static_window.py # Класс создания статических окон
│ ├── wrapper.py # декоратор
│ └── sender.py # Логика для отправки сообщений
│
├── tests/ # Пример тестов
│
├── setup.py # Конфигурация для установки библиотеки
├── LICENSE # Лицензия
└── README.md # Документация
Как запускать тесты
Для запуска тестов можно использовать pytest:
-
Установите необходимые зависимости:
pip install -r requirements.txt
-
Запустите тесты:
pytest
Лицензия
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tgwindow-2.0.2.tar.gz.
File metadata
- Download URL: tgwindow-2.0.2.tar.gz
- Upload date:
- Size: 15.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e28ee9740746757c9063e0e3dff4052f20fe356092884ecd4c1a5912fe921d53
|
|
| MD5 |
187ffa8aa81bcd6a1e79086aafd8ed04
|
|
| BLAKE2b-256 |
9589ce908bccd51ec6b1ef7bd21612ed14553a4c12ccef4bcbb56e7a72fd294e
|
File details
Details for the file tgwindow-2.0.2-py3-none-any.whl.
File metadata
- Download URL: tgwindow-2.0.2-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ae4ce154e35c441ff73a781d5602d7d9a1eeec0d89e0fb43a9664489e2f68ca
|
|
| MD5 |
f1702a9c177871f63e68539ee9704814
|
|
| BLAKE2b-256 |
b430e62c66f886aff4c1645c845c392d14a8b33d149164e2df86b61f74c07667
|