[docs]classPlaylistConverter(Transformer):"""Converts a playlist name or ID to a list of matching objects"""
[docs]@classmethodasyncdefconvert(cls,ctx:DISCORD_CONTEXT_TYPE,arg:str)->list[PlaylistModel]:"""Converts a playlist name or ID to a list of matching objects"""try:playlists=awaitctx.pylav.playlist_db_manager.get_playlist_by_name_or_id(arg)exceptEntryNotFoundExceptionase:raisecommands.BadArgument(_("A playlist with the name or identifier `{user_input_variable_do_not_translate}` was not found.").format(user_input_variable_do_not_translate=arg))fromereturnplaylists
[docs]@classmethodasyncdeftransform(cls,interaction:DISCORD_INTERACTION_TYPE,argument:str)->list[PlaylistModel]:"""Transforms a playlist name or ID to a list of matching objects"""ifnotinteraction.response.is_done():awaitinteraction.response.defer(ephemeral=True)ctx=awaitinteraction.client.get_context(interaction)returnawaitcls.convert(ctx,argument)
[docs]@classmethodasyncdefautocomplete(cls,interaction:DISCORD_INTERACTION_TYPE,current:str)->list[Choice]:"""Autocompletes a playlist name or ID to a list of matching objects"""ifnotcurrent:playlists=awaitinteraction.client.pylav.playlist_db_manager.get_bundled_playlists()return[Choice(name=shorten_string(awaite.fetch_name(),max_length=100),value=f"{e.id}")foreinplaylists][:25]try:playlists=awaitinteraction.client.pylav.playlist_db_manager.get_playlist_by_name(current,limit=50)exceptEntryNotFoundException:return[]asyncdef_filter(c:PlaylistModel):name=awaitc.fetch_name()author=awaitc.fetch_author()return(fuzz.partial_ratio(name,current,score_cutoff=75),1ifauthor==interaction.user.idelse0,[-ord(i)foriinname],)extracted=awaitasyncstdlib.heapq.nlargest(asyncstdlib.iter(playlists),n=25,key=_filter)return[Choice(name=shorten_string(awaite.fetch_name(),max_length=100),value=f"{e.id}")foreinextracted]