如何在电报机器人中实现分页?

时间:2017-12-23 14:55:28

标签: telegram telegram-bot php-telegram-bot

我需要在电报机器人的回复键盘中实现实体列表的分页。

问题是我需要一个show more按钮来加载下一组实体,而我不知道如何获取用户当前正在查看的页面。

下一个问题是如何知道用户当前正在查看哪个实体列表。

在我看来,唯一的方法是将用户的当前状态存储在数据库中或缓存它,但我不知道是否有某种方法可以将其他数据添加到电报回复键盘中按钮或其他一些方法,所以我不必做这项工作。

2 个答案:

答案 0 :(得分:0)

您可以为邮件textcallback_data添加页码,editMessage方法也很有用。

例如,this case使用callback_data传递当前页面和操作。

答案 1 :(得分:0)

我从这个模型开始一次。也许对其他人有帮助:

class PaginationModel(Generic[T]):
    def __init__(self, all_items: Iterable[T] = None, items_per_page: int = 1):
        self.all_items = list(all_items or [])
        self._current_page = 0
        self.items_per_page = items_per_page

    @property
    def _begin(self):
        return self._current_page * self.items_per_page

    @property
    def _end(self):
        return min((self._current_page + 1) * self.items_per_page, self.item_count)

    @property
    def item_count(self):
        return len(self.all_items)

    @property
    def page_items(self) -> List[T]:
        return self.all_items[self._begin : self._end]

    @property
    def current_page_number(self) -> int:
        return self._current_page + 1

    @property
    def has_next_page(self) -> bool:
        return self._end < self.item_count

    @property
    def has_previous_page(self) -> bool:
        return self._begin > 0

    def flip_next_page(self):
        self._current_page += 1

    def flip_previous_page(self):
        self._current_page -=