@@ -234,6 +234,9 @@ class PageGroup:
234
234
The description shown on the corresponding PaginatorMenu dropdown option.
235
235
emoji: Union[:class:`str`, :class:`discord.Emoji`, :class:`discord.PartialEmoji`]
236
236
The emoji shown on the corresponding PaginatorMenu dropdown option.
237
+ default: Optional[:class:`bool`]
238
+ Whether the page group should be the default page group initially shown when the paginator response is sent.
239
+ Only one ``PageGroup`` can be the default page group.
237
240
show_disabled: :class:`bool`
238
241
Whether to show disabled buttons.
239
242
show_indicator: :class:`bool`
@@ -266,6 +269,7 @@ def __init__(
266
269
label : str ,
267
270
description : Optional [str ] = None ,
268
271
emoji : Union [str , discord .Emoji , discord .PartialEmoji ] = None ,
272
+ default : Optional [bool ] = None ,
269
273
show_disabled : Optional [bool ] = None ,
270
274
show_indicator : Optional [bool ] = None ,
271
275
author_check : Optional [bool ] = None ,
@@ -282,6 +286,7 @@ def __init__(
282
286
self .description : Optional [str ] = description
283
287
self .emoji : Union [str , discord .Emoji , discord .PartialEmoji ] = emoji
284
288
self .pages : Union [List [str ], List [Union [List [discord .Embed ], discord .Embed ]]] = pages
289
+ self .default : Optional [bool ] = default
285
290
self .show_disabled = show_disabled
286
291
self .show_indicator = show_indicator
287
292
self .author_check = author_check
@@ -340,6 +345,8 @@ class Paginator(discord.ui.View):
340
345
The page group select menu associated with this paginator.
341
346
page_groups: Optional[List[:class:`PageGroup`]]
342
347
List of :class:`PageGroup` objects the user can switch between.
348
+ default_page_group: Optional[:class:`int`]
349
+ The index of the default page group shown when the paginator is initially sent. Defined by setting ``default`` to ``True`` on a :class:`PageGroup`.
343
350
current_page: :class:`int`
344
351
A zero-indexed value showing the current page number.
345
352
page_count: :class:`int`
@@ -379,12 +386,17 @@ def __init__(
379
386
self .show_menu = show_menu
380
387
self .menu_placeholder = menu_placeholder
381
388
self .page_groups : Optional [List [PageGroup ]] = None
389
+ self .default_page_group : int = 0
382
390
383
391
if all (isinstance (pg , PageGroup ) for pg in pages ):
384
392
self .page_groups = self .pages if show_menu else None
385
- self .pages : Union [
386
- List [str ], List [Page ], List [Union [List [discord .Embed ], discord .Embed ]]
387
- ] = self .page_groups [0 ].pages
393
+ if sum (pg .default is True for pg in self .page_groups ) > 1 :
394
+ raise ValueError ("Only one PageGroup can be set as the default." )
395
+ for pg in self .page_groups :
396
+ if pg .default :
397
+ self .default_page_group = self .page_groups .index (pg )
398
+ break
399
+ self .pages : List [Page ] = self .get_page_group_content (self .page_groups [self .default_page_group ])
388
400
389
401
self .page_count = max (len (self .pages ) - 1 , 0 )
390
402
self .buttons = {}
@@ -413,9 +425,12 @@ def __init__(
413
425
414
426
async def update (
415
427
self ,
416
- pages : Optional [Union [List [str ], List [Page ], List [Union [List [discord .Embed ], discord .Embed ]]]] = None ,
428
+ pages : Optional [
429
+ Union [List [PageGroup ], List [Page ], List [str ], List [Union [List [discord .Embed ], discord .Embed ]]]
430
+ ] = None ,
417
431
show_disabled : Optional [bool ] = None ,
418
432
show_indicator : Optional [bool ] = None ,
433
+ show_menu : Optional [bool ] = None ,
419
434
author_check : Optional [bool ] = None ,
420
435
menu_placeholder : Optional [str ] = None ,
421
436
disable_on_timeout : Optional [bool ] = None ,
@@ -438,6 +453,8 @@ async def update(
438
453
Whether to show disabled buttons.
439
454
show_indicator: :class:`bool`
440
455
Whether to show the page indicator when using the default buttons.
456
+ show_menu: :class:`bool`
457
+ Whether to show a select menu that allows the user to switch between groups of pages.
441
458
author_check: :class:`bool`
442
459
Whether only the original user of the command can change pages.
443
460
menu_placeholder: :class:`str`
@@ -470,6 +487,16 @@ async def update(
470
487
self .pages : Union [List [PageGroup ], List [str ], List [Page ], List [Union [List [discord .Embed ], discord .Embed ]]] = (
471
488
pages if pages is not None else self .pages
472
489
)
490
+ self .show_menu = show_menu if show_menu is not None else self .show_menu
491
+ if pages is not None and all (isinstance (pg , PageGroup ) for pg in pages ):
492
+ self .page_groups = self .pages if self .show_menu else None
493
+ if sum (pg .default is True for pg in self .page_groups ) > 1 :
494
+ raise ValueError ("Only one PageGroup can be set as the default." )
495
+ for pg in self .page_groups :
496
+ if pg .default :
497
+ self .default_page_group = self .page_groups .index (pg )
498
+ break
499
+ self .pages : List [Page ] = self .get_page_group_content (self .page_groups [self .default_page_group ])
473
500
self .page_count = max (len (self .pages ) - 1 , 0 )
474
501
self .current_page = 0
475
502
# Apply config changes, if specified
@@ -769,6 +796,10 @@ def update_custom_view(self, custom_view: discord.ui.View):
769
796
for item in custom_view .children :
770
797
self .add_item (item )
771
798
799
+ def get_page_group_content (self , page_group : PageGroup ) -> List [Page ]:
800
+ """Returns a converted list of `Page` objects for the given page group based on the content of its pages."""
801
+ return [self .get_page_content (page ) for page in page_group .pages ]
802
+
772
803
@staticmethod
773
804
def get_page_content (page : Union [Page , str , discord .Embed , List [discord .Embed ]]) -> Page :
774
805
"""Converts a page into a :class:`Page` object based on its content."""
@@ -1123,8 +1154,11 @@ async def callback(self, interaction: discord.Interaction):
1123
1154
author_check = page_group .author_check ,
1124
1155
disable_on_timeout = page_group .disable_on_timeout ,
1125
1156
use_default_buttons = page_group .use_default_buttons ,
1157
+ default_button_row = page_group .default_button_row ,
1126
1158
loop_pages = page_group .loop_pages ,
1127
1159
custom_view = page_group .custom_view ,
1160
+ timeout = page_group .timeout ,
1128
1161
custom_buttons = page_group .custom_buttons ,
1162
+ trigger_on_display = page_group .trigger_on_display ,
1129
1163
interaction = interaction ,
1130
1164
)
0 commit comments