@@ -388,7 +388,7 @@ def group_members_kb(
388388 current_page : int = 1 ,
389389 list_page : int = 1 ,
390390 members_per_page : int = 8 ,
391- ) -> InlineKeyboardMarkup | None :
391+ ) -> InlineKeyboardMarkup :
392392 """Group members management keyboard."""
393393 buttons = []
394394
@@ -436,6 +436,110 @@ def group_members_kb(
436436 )
437437 return InlineKeyboardMarkup (inline_keyboard = buttons )
438438
439+ # Implement pagination
440+ total_members = len (all_members )
441+ total_pages = max (1 , (total_members + members_per_page - 1 ) // members_per_page )
442+ start_index = (current_page - 1 ) * members_per_page
443+ end_index = min (start_index + members_per_page , total_members )
444+
445+ page_members = all_members [start_index :end_index ]
446+
447+ # Add member buttons in pairs
448+ for i in range (0 , len (page_members ), 2 ):
449+ row = []
450+
451+ member = page_members [i ]
452+ role_emoji = (
453+ roles .get (member ["role" ], {}).get ("emoji" , "👤" ) if member ["role" ] else "👤"
454+ )
455+ button_text = f"{ role_emoji } { member ['name' ]} "
456+
457+ row .append (
458+ InlineKeyboardButton (
459+ text = button_text ,
460+ callback_data = GroupMemberDetailMenu (
461+ group_id = group_id ,
462+ member_id = member ["id" ],
463+ member_type = member ["type" ],
464+ page = current_page ,
465+ list_page = list_page ,
466+ ).pack (),
467+ )
468+ )
469+
470+ if i + 1 < len (page_members ):
471+ member = page_members [i + 1 ]
472+ role_emoji = (
473+ roles .get (member ["role" ], {}).get ("emoji" , "👤" )
474+ if member ["role" ]
475+ else "👤"
476+ )
477+ button_text = f"{ role_emoji } { member ['name' ]} "
478+
479+ row .append (
480+ InlineKeyboardButton (
481+ text = button_text ,
482+ callback_data = GroupMemberDetailMenu (
483+ group_id = group_id ,
484+ member_id = member ["id" ],
485+ member_type = member ["type" ],
486+ page = current_page ,
487+ list_page = list_page ,
488+ ).pack (),
489+ )
490+ )
491+
492+ buttons .append (row )
493+
494+ # Add pagination controls if needed
495+ if total_pages > 1 :
496+ pagination_row = []
497+ if current_page > 1 :
498+ pagination_row .append (
499+ InlineKeyboardButton (
500+ text = "◀️" ,
501+ callback_data = GroupMembersMenu (
502+ group_id = group_id ,
503+ page = current_page - 1 ,
504+ list_page = list_page ,
505+ ).pack (),
506+ )
507+ )
508+
509+ pagination_row .append (
510+ InlineKeyboardButton (
511+ text = f"{ current_page } /{ total_pages } " , callback_data = "noop"
512+ )
513+ )
514+
515+ if current_page < total_pages :
516+ pagination_row .append (
517+ InlineKeyboardButton (
518+ text = "▶️" ,
519+ callback_data = GroupMembersMenu (
520+ group_id = group_id ,
521+ page = current_page + 1 ,
522+ list_page = list_page ,
523+ ).pack (),
524+ )
525+ )
526+
527+ buttons .append (pagination_row )
528+
529+ # Back button
530+ buttons .append (
531+ [
532+ InlineKeyboardButton (
533+ text = "↩️ Назад" ,
534+ callback_data = GroupSettingsMenu (
535+ group_id = group_id , menu = "back" , page = list_page
536+ ).pack (),
537+ )
538+ ]
539+ )
540+
541+ return InlineKeyboardMarkup (inline_keyboard = buttons )
542+
439543
440544def group_member_detail_kb (
441545 group_id : int ,
@@ -449,7 +553,7 @@ def group_member_detail_kb(
449553 buttons = [
450554 [
451555 InlineKeyboardButton (
452- text = "🚫 Забанить" ,
556+ text = f "🚫 Забанить { member_name } " ,
453557 callback_data = GroupMemberActionMenu (
454558 group_id = group_id ,
455559 member_id = member_id ,
@@ -460,6 +564,19 @@ def group_member_detail_kb(
460564 ).pack (),
461565 )
462566 ],
567+ [
568+ InlineKeyboardButton (
569+ text = f"👢 Исключить { member_name } " ,
570+ callback_data = GroupMemberActionMenu (
571+ group_id = group_id ,
572+ member_id = member_id ,
573+ action = "kick" ,
574+ member_type = member_type ,
575+ page = page ,
576+ list_page = list_page ,
577+ ).pack (),
578+ )
579+ ],
463580 [
464581 InlineKeyboardButton (
465582 text = "↩️ Назад" ,
0 commit comments