Python Telegram Pagination Bot

Baru-baru ini, saya menghadapi tugas membuat daftar elemen dalam bot telegram. Dan dia terkejut menemukan bahwa untuk tugas yang tampaknya tipikal, PyPi tidak memiliki perpustakaan tunggal. Karena itu, diputuskan untuk memperbaiki kelalaian yang mengganggu ini dan mempublikasikan implementasinya.


Anda dapat menginstal paket dari PyPi dengan mengeksekusi di konsol:


pip install python-telegram-bot-pagination

Kelas InlineKeyboardPaginator dari paket telegram_bot_pagination memudahkan untuk mendapatkan satu set tombol sebaris untuk menavigasi melalui halaman daftar. Penting untuk mentransfer ke perancang jumlah halaman ke mana daftar elemen dibagi, serta halaman saat ini dan pola untuk menghasilkan data yang dikembalikan dengan menekan tombol bot. Setelah itu, paginator sendiri akan membentuk keyboard yang diperlukan, yang akan tersedia melalui properti markup.


from telegram_bot_pagination import InlineKeyboardPaginator

paginator = InlineKeyboardPaginator(
        10,
        current_page=1,
        data_pattern='elements#{page}'
    )

Sekarang paginator.markup akan mengembalikan objek json untuk bidang reply_markup metode sendMessage Telegram Bot API. Dalam hal ini, lima tombol akan dibentuk. Jika jumlah halaman lima atau kurang, maka tombol akan sesuai. Jika hanya ada satu halaman, maka markup akan kosong. Jika ada lebih dari lima halaman, maka keyboard akan berisi 5 tombol untuk:


  • halaman pertama;
  • halaman sebelumnya;
  • halaman saat ini;
  • halaman selanjutnya;
  • halaman terakhir.

Misalnya, jika ada array character_pages yang berisi deskripsi karakter Harry Potter untuk membuat bot yang menampilkan daftar karakter, kita memerlukan fungsi yang mengirim halaman daftar saat ini:


def send_character_page(message, page=1):
    paginator = InlineKeyboardPaginator(
        len(character_pages),
        current_page=page,
        data_pattern='character#{page}'
    )

    bot.send_message(
        message.chat.id,
        character_pages[page-1],
        reply_markup=paginator.markup,
        parse_mode='Markdown'
    )

Dan penangan tombol di bot:



@bot.callback_query_handler(func=lambda call: call.data.split('#')[0]=='character')
def characters_page_callback(call):
    page = int(call.data.split('#')[1])
    bot.delete_message(
        call.message.chat.id,
        call.message.message_id
    )
    send_character_page(call.message, page)

* Contoh ini menggunakan pyTelegramBotAPI untuk bekerja dengan bot.


Kode lengkap untuk contoh dapat ditemukan di sini .


Hasilnya, tergantung pada jumlah entri dalam daftar, akan terlihat seperti ini:





Terimakasih atas perhatiannya. Saya akan senang dengan kritik yang membangun.


All Articles