This repository has been archived on 2024-10-14. You can view files and clone it, but cannot push or open issues or pull requests.
pykeyboard/pykeyboard/inline_pagination_keyboard.py
2020-09-06 21:04:39 +03:00

102 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from pyrogram.types import InlineKeyboardMarkup, InlineKeyboardButton
class InlinePaginationKeyboard(InlineKeyboardMarkup):
SYMBOL_FIRST_PAGE = '« {}'
SYMBOL_PREVIOUS_PAGE = ' {}'
SYMBOL_CURRENT_PAGE = '· {} ·'
SYMBOL_NEXT_PAGE = '{} '
SYMBOL_LAST_PAGE = '{} »'
def __init__(self, count_pages: int, current_page: int,
callback_pattern: str):
self.inline_keyboard = list()
super().__init__(inline_keyboard=self.inline_keyboard)
self.count_pages = count_pages
self.current_page = current_page
self.callback_pattern = callback_pattern
self.markup
def add_button(self, text, callback_data):
return InlineKeyboardButton(
text=text,
callback_data=self.callback_pattern.format(
number=callback_data)
)
@property
def left_pagination(self):
return [
self.add_button(
self.SYMBOL_CURRENT_PAGE.format(number), number)
if number == self.current_page else self.add_button(
self.SYMBOL_NEXT_PAGE.format(number), number)
if number == 4 else self.add_button(
self.SYMBOL_LAST_PAGE.format(self.count_pages),
self.count_pages)
if number == 5 else self.add_button(number, number)
for number in range(1, 6)
]
@property
def middle_pagination(self):
return [
self.add_button(
self.SYMBOL_FIRST_PAGE.format(1), 1),
self.add_button(
self.SYMBOL_PREVIOUS_PAGE.format(self.current_page - 1),
self.current_page - 1),
self.add_button(
self.SYMBOL_CURRENT_PAGE.format(self.current_page),
self.current_page),
self.add_button(
self.SYMBOL_NEXT_PAGE.format(self.current_page + 1),
self.current_page + 1),
self.add_button(
self.SYMBOL_LAST_PAGE.format(self.count_pages),
self.count_pages),
]
@property
def right_pagination(self):
return [
self.add_button(
self.SYMBOL_FIRST_PAGE.format(1), 1),
self.add_button(
self.SYMBOL_PREVIOUS_PAGE.format(self.count_pages - 3),
self.count_pages - 3)
] + [
self.add_button(
self.SYMBOL_CURRENT_PAGE.format(number), number)
if number == self.current_page else self.add_button(number, number)
for number in range(self.count_pages - 2, self.count_pages + 1)
]
@property
def full_pagination(self):
return [
self.add_button(number, number)
if number != self.current_page else self.add_button(
self.SYMBOL_CURRENT_PAGE.format(number), number)
for number in range(1, self.count_pages + 1)
]
@property
def build_pagination(self):
if self.count_pages <= 5:
return self.full_pagination
else:
if self.current_page <= 3:
return self.left_pagination
elif self.current_page > self.count_pages - 3:
return self.right_pagination
else:
return self.middle_pagination
def row(self, *args):
self.inline_keyboard.append([button for button in args])
@property
def markup(self):
self.inline_keyboard.append(self.build_pagination)