[docs]classNodeConverter(Transformer):"""Converts a node name or ID to a list of matching objects"""
[docs]@classmethodasyncdefconvert(cls,ctx:DISCORD_CONTEXT_TYPE,arg:str)->list[Node]:"""Converts a node name or ID to a list of matching objects"""try:nodes=ctx.pylav.node_manager.nodesexceptEntryNotFoundExceptionase:raisecommands.BadArgument(_("Node with name or identifier `{user_input_variable_do_not_translate}` not found.").format(user_input_variable_do_not_translate=arg))fromeifr:=list(filter(lambdan:arg.lower()inn.name.lower()orarg==f"{n.identifier}",nodes)):returnrraisecommands.BadArgument(_("Node with name or identifier `{user_input_variable_do_not_translate}` not found").format(user_input_variable_do_not_translate=arg))
[docs]@classmethodasyncdeftransform(cls,interaction:DISCORD_INTERACTION_TYPE,argument:str)->list[Node]:"""Transforms a node 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 node name or ID to a list of matching objects"""nodes=interaction.client.pylav.node_manager.nodesifnotcurrent:return[Choice(name=shorten_string(e.name,max_length=100),value=f"{e.identifier}")foreinnodes][:25]def_filter(c):returnfuzz.partial_ratio(c.name,current)extracted=heapq.nlargest(25,nodes,key=_filter)return[Choice(name=shorten_string(e.name,max_length=100),value=f"{e.identifier}")foreinextracted]