Skip to main content

Create most popular widgets for aiogram 3 in few code lines

Project description

aiogram_widgets

Create most popular widgets for aiogram 3x in a few code lines

🔗 Links

MIT License Github PyPI - Package PyPI - Downloads

Features

  • Fully customizable widgets
  • Stateless
  • Automatic handling
  • Supports aiogram ^3.0.0b1

Roadmap

  • Checkboxes and multiselect

  • Calendar

  • Aiogram 2x support

Changelog

Version 1.2.7:

  • Fixed a bug that still required pagination_key option

Version 1.2.6:

  • Fixed a bug that caused uncompability in python versions 3.10 and lower

Version 1.2.5:

  • Added the ability to adjust buttons passing tuple of sizes (works the similar way as in InlineKeyboardBuilder.adjust) in keyboard pagination

Version 1.2.4:

  • Fixed aiogram dependency bug

Version 1.2.3:

  • Fixed typings at Python 3.9
  • pagination_key option now is not required
  • Better types naming

Version 1.2.2:

  • Custom pagination keyboard support
  • Aiogram 3.0.0b8 support
  • README with more examples
  • Live bot example with source code
  • Better types naming

Installation

Pip:

pip install aiogram_widgets

Poetry:

poetry add aiogram_widgets

🤖 Bot example | Bot source code ⚙️

Usage/Examples

Simple keyboard pagination

from aiogram_widgets.pagination import KeyboardPaginator

@router.message(F.text == "/keyboard_pagination")
async def keyboard_pagination(message: Message):
    buttons = [
        InlineKeyboardButton(text=f"Button {i}", callback_data=f"button_{i}")
        for i in range(1, 1001)
    ]
    paginator = KeyboardPaginator(
        data=buttons,
        per_page=20,
        per_row=2
    )


    await message.answer(text="Keyboard pagination", reply_markup=paginator.as_markup())

Keyboard pagination with additional buttons (Same with text pagination)

from aiogram_widgets.pagination import KeyboardPaginator

@router.message(F.text == "/kb_additional_buttons")
async def kb_additional_buttons(message: Message):
    buttons = [
        InlineKeyboardButton(text=f"Button {i}", callback_data=f"button_{i}")
        for i in range(1, 1001)
    ]
    additional_buttons = [
        [
            InlineKeyboardButton(text="Go back 🔙", callback_data="go_back"),
        ]
    ]
    
    paginator = KeyboardPaginator(
        data=buttons,
        additional_buttons=additional_buttons,    
        per_page=20, 
        per_row=2
    )

    await message.answer(
        text="Keyboard pagination with additional buttons",
        reply_markup=paginator.as_markup(),
    )

Keyboard pagination with custom pagination buttons (Same with text pagination)

@router.message(F.text == "/kb_custom_pagination")
async def kb_custom_pagination(message: Message):
    text_data = [f"I am string number {i}" for i in range(1, 1001)]
    pagination_buttons = [
        None, "<-", "->", None
    ]

    paginator = TextPaginator(
        data=text_data,
        pagination_buttons=pagination_buttons,
    )

    current_text_chunk, reply_markup = paginator.current_message_data

    await message.answer(
        text=current_text_chunk,
        reply_markup=reply_markup,
    )

Simple text pagination

from aiogram_widgets.pagination import TextPaginator


@router.message(F.text == "/text_pagination")
async def text_pagination(message: Message):
    text_data = [
        f"I am string number {i}"
        for i in range(1, 1001)
    ]
    
    paginator = TextPaginator(
        data=text_data,
    )

    current_text_chunk, reply_markup = paginator.current_message_data

    await message.answer(
        text=current_text_chunk,
        reply_markup=reply_markup,
    )

Text pagination with custom join

@router.message(F.text == "/text_join")
async def text_custom_join(message: Message):
    text_data = [f"I am string number {i}" for i in range(1, 1001)]

    paginator = TextPaginator(
        data=text_data,
        join_symbol="\n\n",
    )
    current_text_chunk, reply_markup = paginator.current_message_data

    await message.answer(
        text=current_text_chunk,
        reply_markup=reply_markup,
    )

Feedback

I would be very pleased for a star ⭐️

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

aiogram_widgets-1.2.7.tar.gz (6.4 kB view hashes)

Uploaded Source

Built Distribution

aiogram_widgets-1.2.7-py3-none-any.whl (9.0 kB view hashes)

Uploaded Python 3

Supported by

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