16
16
from .loggers import Loggers
17
17
from .helpers import get_localized_string , get_interaction_locale , is_hex_colour , hex_to_colour , url_to_playable , ms_to_str
18
18
from .responder import respond
19
- from .types import Track , Playlist , VideoSearchViewMode
19
+ from .types import Track , Playlist , VideoSearchViewMode , QueueEditViewMode
20
20
21
21
if TYPE_CHECKING :
22
22
from .client import RinBot
@@ -710,9 +710,10 @@ async def callback_next(self, interaction: Interaction) -> None:
710
710
await interaction .response .edit_message (view = self )
711
711
712
712
class QueueEditView (nextcord .ui .View ):
713
- def __init__ (self , locale : str , player : Player ) -> None :
713
+ def __init__ (self , locale : str , player : Player , mode : QueueEditViewMode ) -> None :
714
714
super ().__init__ (timeout = 60 )
715
715
716
+ self .mode = mode
716
717
self .locale = locale
717
718
self .player = player
718
719
self .current_page = 0
@@ -724,7 +725,7 @@ def __init__(self, locale: str, player: Player) -> None:
724
725
self .next_button .callback = self .callback_next
725
726
726
727
self .select = self .create_select ()
727
- self .select .callback = self .callback_select
728
+ self .select .callback = self .callback_select if mode . value == 0 else self . callback_select_skip
728
729
729
730
self .add_item (self .select )
730
731
if len (self .queue_parts ) > 1 :
@@ -753,11 +754,11 @@ def create_select(self) -> nextcord.ui.Select:
753
754
754
755
return nextcord .ui .Select (
755
756
placeholder = get_localized_string (
756
- self .locale , 'INTERFACE_QUEUE_EDIT_PLACEHOLDER'
757
+ self .locale , 'INTERFACE_QUEUE_EDIT_PLACEHOLDER' if self . mode . value == 0 else 'INTERFACE_QUEUE_EDIT_SKIP_PLACEHOLDER'
757
758
),
758
759
options = options ,
759
760
min_values = 1 ,
760
- max_values = len (options )
761
+ max_values = len (options ) if self . mode . value == 0 else 1
761
762
)
762
763
763
764
def update_buttons (self ) -> None :
@@ -770,7 +771,7 @@ def update_select(self) -> None:
770
771
label = track .title , value = str (i ),
771
772
description = get_localized_string (
772
773
self .locale , 'INTERFACE_VIDEO_SEARCH_TRACK_DESC' ,
773
- uploader = track .author
774
+ duration = ms_to_str ( track . length ), uploader = track .author
774
775
)
775
776
)
776
777
for i , track in enumerate (self .queue_parts [self .current_page ])
@@ -796,6 +797,26 @@ async def callback_select(self, interaction: Interaction) -> None:
796
797
self .stop ()
797
798
await interaction .response .edit_message (embed = embed , view = None )
798
799
800
+ async def callback_select_skip (self , interaction : Interaction ) -> None :
801
+ index = int (self .select .values [0 ])
802
+ selected_track = self .queue_parts [self .current_page ][index ]
803
+ to_remove = self .player .queue [:self .player .queue .index (selected_track )]
804
+
805
+ for track in to_remove :
806
+ self .player .queue .remove (track )
807
+
808
+ await self .player .skip (force = True )
809
+
810
+ embed = Embed (
811
+ description = get_localized_string (
812
+ self .locale , 'INTERFACE_QUEUE_EDIT_SKIP_SKIPPED'
813
+ ),
814
+ colour = Colour .green ()
815
+ )
816
+
817
+ self .stop ()
818
+ await interaction .response .edit_message (embed = embed , view = None )
819
+
799
820
async def callback_prev (self , interaction : Interaction ) -> None :
800
821
self .current_page -= 1
801
822
self .update_buttons ()
0 commit comments