最近,我面临着在电报漫游器中对元素列表进行分页的任务。她很惊讶地发现,对于这种看似典型的任务,PyPi没有单个库。因此,决定纠正这一烦人的遗漏并发布其实现。
您可以通过在控制台中执行以下操作从PyPi安装软件包:
pip install python-telegram-bot-pagination
telegram_bot_pagination包中的InlineKeyboardPaginator类使获取一组用于浏览列表页面的内联按钮变得容易。必须将构造元素列表的页面数以及通过按bot按钮返回的用于生成数据的当前页面和模式传送给构造函数。之后,分页器自己将形成必要的键盘,该键盘可通过markup属性使用。
from telegram_bot_pagination import InlineKeyboardPaginator
paginator = InlineKeyboardPaginator(
10,
current_page=1,
data_pattern='elements#{page}'
)
现在,paginator.markup将为sendMessage Telegram Bot API方法的reply_markup字段返回一个json对象。在这种情况下,将形成五个按钮。如果页面数为五或更少,则按钮将相应地显示。如果只有一页,则标记将为空白。如果页面超过五页,则键盘将包含5个按钮,用于:
例如,如果要创建一个显示字符列表的机器人,要使用包含哈利·波特角色描述的character_pages数组,我们需要一个发送当前列表页面的函数:
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与bot配合使用。
示例的完整代码可以在这里找到。
结果取决于列表中的条目数,如下所示:



谢谢您的关注。我会对任何建设性的批评感到高兴。