# Инструменты, связанные с пагинатором

```python
class jishaku.paginators.PaginatorInterface(bot: Bot | AutoShardedBot, paginator: Paginator, additional_buttons: List[Button[Self]] | None = None, **kwargs: Any)
```

Интерфейс, основанный на сообщениях и реакциях для пагинаторов.

Это позволяет пользователям интерактивно перемещаться по страницам пагинатора и поддерживает вывод в реальном времени.

Пример того, как использовать это со стандартным Paginator:

```python
from discord.ext import commands

from jishaku.paginators import PaginatorInterface

# Где-то в команде...
    # Пагинаторам необходимо иметь уменьшенный max_size, чтобы вместить дополнительный текст, добавляемый интерфейсом.
    paginator = commands.Paginator(max_size=1900)

    # Заполните пагинатор некоторой информацией
    for line in range(100):
        paginator.add_line(f"Line {line + 1}")

    # Создайте и отправьте интерфейс.
    # Поле «владелец» определяет, кто может взаимодействовать с этим интерфейсом. Если это None, любой может использовать его.
    interface = PaginatorInterface(ctx.bot, paginator, owner=ctx.author)
    await interface.send_to(ctx)

    # send_to создает задачу и возвращает поток управления.
    # Оно будет повышено, если интерфейс не может быть создан, например, если в канале нет разрешения на реакцию.
    # После отправки интерфейса добавление строк должно выполняться асинхронно, чтобы интерфейс можно было обновить.
    await interface.add_line("My, the Earth sure is full of things!")

    # Вы также можете проверить, закрыт ли он, используя свойство «закрыто».
    if not interface.closed:
        await interface.add_line("I'm still here!")
```

```python
class PageChangeModal(interface: PaginatorInterface, *args: Any, **kwargs: Any)
```

Модальное окно, предлагающее пользователям изменить номер страницы на

```python
await on_submit(interaction: Interaction, /)
```

Эта функция является [*сопрограммой* ](https://docs.python.org/3/library/asyncio-task.html#coroutine).

Вызывается при отправке модального окна.

* Параметры: **взаимодействие** ( `Interaction`) — Взаимодействие, которое отправило это модальное окно.

```python
await add_line ( * args : Any , ** kwargs : Any )
```

Прокси-функция, которая позволяет этому PaginatorInterface оставаться привязанным к последней странице. если оно уже есть.

```python
await button_close_callback(interaction: Interaction)
```

Кнопка закрытия интерфейса

```python
button_close_label(_button: Button[Self]) → str
```

Метка закрытия пагинатора (постоянная)

```python
button_current_label(_button: Button[Self]) → str
```

Ярлык текущей страницы (изменения при обновлении страницы)

```python
button_definitions() → List[Button[Self]]
```

Это переопределяемая функция, которую вы можете использовать для удаления кнопок или изменения их порядка.

Если вам нужно только добавить кнопки, рассмотрите возможность передачи *дополнительных\_буттонов* в конструктор.

```python
await button_goto_callback(interaction: Interaction)
```

Кнопка для перехода непосредственно на страницу

```python
button_goto_label(_button: Button[Self]) → str
```

Метка выбора страницы (постоянная)

```python
await button_last_callback(interaction: Interaction)
```

Кнопка для отправки интерфейса на последнюю страницу

```python
button_last_label(_button: Button[Self]) → str
```

Метка Endstop для перехода к последней странице (изменение количества страниц)

```python
await button_next_callback(interaction: Interaction)
```

Кнопка для отправки интерфейса на следующую страницу

```python
button_next_label(_button: Button[Self]) → str
```

Метка со стрелкой вправо для перехода на следующую страницу (постоянная)

```python
await button_previous_callback(interaction: Interaction)
```

Кнопка для отправки интерфейса на предыдущую страницу

```python
button_previous_label(_button: Button[Self]) → str
```

Метка со стрелкой влево для перехода на предыдущую страницу (постоянная)

```python
await button_start_callback(interaction: Interaction)
```

Кнопка для отправки интерфейса на первую страницу

```python
property closed
```

Этот интерфейс закрыт?

```python
property display_page
```

Возвращает текущую страницу, на которой находится интерфейс пагинатора.

```python
await interaction_check(*args: Any)
```

Проверка, определяющая, следует ли учитывать это взаимодействие.

```python
property page_count
```

Возвращает количество страниц внутреннего разбиения на страницы.

```python
property page_size: int
```

Свойство, возвращающее размер страницы, рассчитанное на основе свойств разбиения на страницы.

```python
property pages
```

Возвращает страницы пагинатора без преждевременного закрытия активной страницы.

```python
property send_kwargs: Dict[str, Any]
```

Свойство, которое возвращает кварги, перенаправленные для отправки/редактирования при обновлении страницы.

Поскольку это должно быть совместимо как с discord.TextChannel.send, так и с discord.Message.edit, это должен быть словарь, содержащий «контент», «встроить» или и то, и другое.

```renpy
await send_lock_delayed()
```

Сопрограмма, которая возвращает значение через 1 секунду после снятия блокировки отправки. Это помогает уменьшить количество спама, который быстро достигает пределов скорости.

```python
await send_to(destination: Messageable)
```

Отправляет сообщение в указанный пункт назначения с помощью этого интерфейса.

Это автоматически создаст для вас задачу реагирования.

```python
await wait_loop()
```

Ожидает обновления интерфейса. Это не следует вызывать вручную — это обрабатывается send\_to.

```python
class jishaku.paginators.PaginatorEmbedInterface(*args: Any, **kwargs: Any)
```

Подкласс PaginatorInterface, который включает контент в Embed.

```python
property page_size: int
```

Свойство, возвращающее размер страницы, рассчитанное на основе свойств разбиения на страницы.

Если оно превышает max\_page\_size, при создании экземпляра возникает исключение.

```python
property send_kwargs: Dict[str, Any]
```

Свойство, которое возвращает кварги, перенаправленные для отправки/редактирования при обновлении страницы.

Поскольку это должно быть совместимо как с discord.TextChannel.send, так и с discord.Message.edit, это должен быть словарь, содержащий «контент», «встроить» или и то, и другое.

```python
class jishaku.paginators.FilePaginator(fp: BinaryIO, line_span: Tuple[int, int] | None = None, language_hints: Tuple[str, ...] = (), **kwargs: Any)
```

Пагинатор кодовых блоков с выделенным синтаксисом, считываемых из файла.

Параметры:&#x20;

* **fp** – Файлоподобный (реализует fp.read) для чтения данных для этого пагинатора.
* **line\_span** (*Optional\[Tuple\[*[*int*](https://docs.python.org/3/library/functions.html#int)*,* [*int*](https://docs.python.org/3/library/functions.html#int)*]]*) - Размах строки для чтения из файла. Если нет, читается весь файл.
* **language\_hints** (*Tuple\[*[*str*](https://docs.python.org/3/library/stdtypes.html#str)*, ...]*) - Кортеж строк, которые могут указывать на язык этого файла. Это могут быть имена файлов, типы MIME или сообщения. Шебанг, присутствующий в реальном файле, всегда будет иметь приоритет над этим.

```python
class jishaku.paginators.WrappedPaginator(*args: Any, wrap_on: Tuple[str, ...] = ('\n', ' '), include_wrapped: bool = True, force_wrap: bool = False, **kwargs: Any)
```

Пагинатор, позволяющий автоматически переносить строки, если они не помещаются.

Это полезно при разбиении на страницы непредсказуемого вывода, поскольку позволяет разбивать строки на большие фрагменты данных.

Разделители имеют приоритет в порядке их кортежа.

Параметры:

* **wrap\_on** ([*tuple*](https://docs.python.org/3/library/stdtypes.html#tuple)) - Кортеж разделителей-оберток.
* **include\_wrapped** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) - Включать ли разделитель в конце переносимой строки.
* **force\_wrap** ([*bool*](https://docs.python.org/3/library/functions.html#bool)) - Если это правда, строки будут разделены в максимальных точках, если обрезка невозможна с помощью любого предоставленного разделителя.

```python
add_line(line: str = '', *, empty: bool = False)
```

Добавляет строку на текущую страницу.

Если строка превышает max\_size, возникает исключение.

Параметры:

* **line** ([`str`](https://docs.python.org/3/library/stdtypes.html#str)) - Строка для добавления.
* **empty** ([`bool`](https://docs.python.org/3/library/functions.html#bool)) - Указывает, следует ли добавить еще одну пустую строку.

Поднимает:

* [**RuntimeError**](https://docs.python.org/3/library/exceptions.html#RuntimeError) **-** Линия была слишком велика для текущего max\_size.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mayaais-organization.gitbook.io/dobro-pozhalovat/instrumenty-svyazannye-s-paginatorom.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
