Skip to content

merousss/aiogram3-listview

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

List view using Inline buttons aiogram3

Preview

til

Usage

from aiogram3_listview import SimpleListView, LV_CallBack    

Basic

data_list1 = random.sample(range(200), 101)    # example: data_list1 = ['foo', 'bar', 'foobar']

lv = SimpleListView(
    data_list=data_list1,    # data
    rows=5,                  # buttons per row
    columns=5,               # buttons per column
    action='handle_lv'       # custom callback action
)


@dp.message(Command(commands=['start']))    # start command
async def start(message: Message):
    await message.answer('Start message', reply_markup = await lv.start_lv())


@dp.callback_query(LV_CallBack.filter())    # listview callback
async def lv_callback(
        callback: CallbackQuery,
        callback_data: LV_CallBack
):
    if callback_data.action == 'handle_lv':
        index = await lv.process_selection(callback, callback_data)

        if index is not None:
            await callback.message.answer(f'index: {index} | item: {data_list1[index]}')

    await callback.answer()

With buttons

data_list1 = random.sample(range(200), 101)

buttons = {                 # 'text' : 'action'
    'meow': 'send_meow',
    'text': 'test'
}

lv = SimpleListView(
    data_list=data_list1,
    rows=5,
    columns=5,
    action='handle_lv',
    buttons=buttons,
    btns_per_row=2
)


@dp.message(Command(commands=['start']))    # start command
async def start(message: Message):
    await message.answer('Start message', reply_markup = await lv.start_lv())


@dp.callback_query(LV_CallBack.filter())    # listview callback
async def lv_callback(
        callback: CallbackQuery,
        callback_data: LV_CallBack
):
    if callback_data.action == 'handle_lv':
        index = await lv.process_selection(callback, callback_data)

        if index is not None:
            await callback.message.answer(f'index: {index} | item: {data_list1[index]}')

        # handle extra buttons
        if callback_data.extra_act == 'send_meow':
            await callback.message.answer('meow')

        if callback_data.extra_act == 'test':
            await callback.message.answer('❤️')

    await callback.answer()

Multiple

data_list1 = random.sample(range(200), 101)
data_list2 = random.sample(range(200), 101)

lv = SimpleListView(
    data_list=data_list1,
    rows=5,
    columns=5,
    action='handle_lv'
)

lv2 = SimpleListView(
    data_list=data_list2,
    rows=6,
    columns=5,
    action='handle_lv2'
)


@dp.message(Command(commands=['start']))    # start command
async def start(message: Message):
    await message.answer('First', reply_markup = await lv.start_lv())

@dp.message(Command(commands=['lv2']))    # 2-nd list view command
async def start(message: Message):
    await message.answer('Second', reply_markup = await lv2.start_lv())


@dp.callback_query(LV_CallBack.filter())    # listview callback
async def lv_callback(
        callback: CallbackQuery,
        callback_data: LV_CallBack
):
    if callback_data.action == 'handle_lv':
        index = await lv.process_selection(callback, callback_data)

        if index is not None:
            await callback.message.answer(f'index: {index} | item: {data_list1[index]}')

    if callback_data.action == 'handle_lv2':
        index = await lv2.process_selection(callback, callback_data)

        if index is not None:
            await callback.message.answer(f'index: {index} | item: {data_list2[index]}')

    await callback.answer()

About

Simple telegram bot list view using Inline Buttons.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages