واجهت مؤخرًا مهمة ترقيم قائمة بالعناصر في بوت برقية. وقد فوجئت عندما وجدت أنه لمثل هذه المهمة التي تبدو نموذجية ، ليس لدى PyPi مكتبة واحدة. لذلك ، تقرر تصحيح هذا الإغفال المزعج ونشر تنفيذه.
يمكنك تثبيت الحزمة من PyPi عن طريق التنفيذ في وحدة التحكم:
pip install python-telegram-bot-pagination
تسهل فئة InlineKeyboardPaginator من حزمة telegram_bot_pagination الحصول على مجموعة من الأزرار المضمنة للتنقل عبر صفحات القائمة. من الضروري أن تنقل إلى المصمم عدد الصفحات التي تنقسم إليها قائمة العناصر ، بالإضافة إلى الصفحة والنمط الحاليين لتوليد البيانات التي يتم إرجاعها بالضغط على زر الروبوت. بعد ذلك ، سيشكل paginator نفسه لوحة المفاتيح الضرورية ، والتي ستكون متاحة من خلال خاصية الترميز.
from telegram_bot_pagination import InlineKeyboardPaginator
paginator = InlineKeyboardPaginator(
10,
current_page=1,
data_pattern='elements#{page}'
)
سيقوم paginator.markup الآن بإرجاع كائن json لحقل response_markup لطريقة sendMessage Telegram Bot API. في هذه الحالة ، سيتم تشكيل خمسة أزرار. إذا كان عدد الصفحات خمس أو أقل ، فستكون الأزرار في المقابل. إذا كانت هناك صفحة واحدة فقط ، فسيكون الترميز فارغًا. إذا كان هناك أكثر من خمس صفحات ، فستحتوي لوحة المفاتيح على 5 أزرار لـ:
- الصفحة الأولى؛
- الصفحة السابقة؛
- الصفحه الحاليه؛
- الصفحة التالية؛
- آخر صفحة.
على سبيل المثال ، إذا كان هناك مصفوفة من حرف_الصفحات تحتوي على أوصاف لشخصيات هاري بوتر لإنشاء روبوت يعرض قائمة من الشخصيات ، فنحن بحاجة إلى وظيفة ترسل صفحة القائمة الحالية:
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'
)
ومعالج الأزرار في البوت:
@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)
* يستخدم المثال pyTelegramBotAPI للعمل مع البوت.
يمكن العثور على الرمز الكامل للمثال هنا .
ستبدو النتيجة ، وفقًا لعدد الإدخالات في القائمة ، كما يلي:



شكرا للانتباه. سأكون سعيدًا بأي نقد بناء.