Skip to main content

Библиотека для создания простых окон в 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:

  1. Установите необходимые зависимости:

    pip install -r requirements.txt
    
  2. Запустите тесты:

    pytest
    

Лицензия

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tgwindow-2.0.0.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tgwindow-2.0.0-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file tgwindow-2.0.0.tar.gz.

File metadata

  • Download URL: tgwindow-2.0.0.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.0

File hashes

Hashes for tgwindow-2.0.0.tar.gz
Algorithm Hash digest
SHA256 ba0093ca447d85fb07d84e154dcdfb5c8f73d40fae232389db43b6c9c9a42fd8
MD5 446d95b00f43415daa7bdb377e0ee3b0
BLAKE2b-256 e849e447402cc4dd55f4d58c3679ab97576924804a54c2b39866953d063f5b29

See more details on using hashes here.

File details

Details for the file tgwindow-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: tgwindow-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.0

File hashes

Hashes for tgwindow-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9383eb8a898eaf6a3d665057ee65eabe5f64d2c8dc344d464d73aa2794d5332f
MD5 73d97873d0a54978f76e46314d13d6ca
BLAKE2b-256 5ca38fc71cc9ca157eb3a8ae2dc6b17e7d6075e5534fd9b1c85ab842f3d8ff57

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page