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.1.tar.gz (15.5 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.1-py3-none-any.whl (19.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tgwindow-2.0.1.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

Hashes for tgwindow-2.0.1.tar.gz
Algorithm Hash digest
SHA256 18986487d27194cf7217841b8886e9d9b4a02b7d420680372dc2ea0e8b2f4206
MD5 76e278d3d1edbdf4cfa075954d8adee6
BLAKE2b-256 684622acafc8fcb4fafea49b45e870a9e3a0bcda74831a0bf4f5f51462bf0078

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tgwindow-2.0.1-py3-none-any.whl
  • Upload date:
  • Size: 19.4 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6da6de083cf60e66473fe9de935207b09dbe47afa12238bdd2bf731cd485192b
MD5 d58216f16ef40852e9f45fe87f31e48e
BLAKE2b-256 3c3cd6dcfaba779030efe4f058dba725778d9f1eb2b40dc12355c80a0a2e760f

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