Source code for telegram_bot_discussion.ext.pagination.buttons.page_button

from typing import Any, Union


from telegram import Update
from telegram.ext import CallbackContext


from ....bot.bot import Discussion
from ....bot.exceptions import ButtonsHandlerIsNotSet
from ....bot.contextual import Contextual
from ....button import Button
from .page_button_i import PageButtonInterface
from .page_button_meta import PageButtonMeta
from .page_button_params import PageButtonParams


[docs] class PageButton(PageButtonInterface, Button):
[docs] class Meta(PageButtonMeta): ...
query: Any params: PageButtonParams def __init__( self, chat_id: int, query: Any, page: int, ): self.chat_id = chat_id self.query = query self.params = PageButtonParams( action=self.action(), query=query, page=page, ) Button.__init__(self, self.chat_id)
[docs] def get_next_page_button(self) -> "PageButton": button = self.__class__( chat_id=self.chat_id, query=self.query, page=self.params.page + 1, ) button.set_title("»") return button
[docs] def get_prev_page_button(self) -> Union["PageButton", None]: if self.params.page <= 1: return None button = self.__class__( chat_id=self.chat_id, query=self.query, page=self.params.page - 1, ) button.set_title("«") return button
[docs] @classmethod async def on_click( cls, update: Update, context: CallbackContext, ): discussion: Discussion = Contextual[Discussion](context)() buttons_handler = discussion.get_buttons_handler() if not buttons_handler: raise ButtonsHandlerIsNotSet() params = PageButtonParams.fetch( callback_query=update.callback_query, coder=buttons_handler.coder, ) await cls.Meta.page_replica( query=params.query, page=params.page, page_button_class=cls, ).as_reply( update, context, )