Source code for pylav.extension.red.ui.selectors.options.nodes

from __future__ import annotations

from pathlib import Path

import discord
from redbot.core.i18n import Translator

from pylav.constants.node_features import SUPPORTED_FEATURES, SUPPORTED_SOURCES
from pylav.helpers.format.strings import shorten_string
from pylav.storage.models.node.real import Node

_ = Translator("PyLav", Path(__file__))


[docs] class SourceOption(discord.SelectOption): def __init__(self, name: str, description: str | None, value: str): super().__init__( label=shorten_string(max_length=100, string=name), description=shorten_string(max_length=100, string=description), value=value, )
SOURCE_OPTIONS = [ SourceOption(name=source, description=None, value=source) for source in SUPPORTED_SOURCES.union(SUPPORTED_FEATURES) ]
[docs] class NodeOption(discord.SelectOption):
[docs] @classmethod async def from_node(cls, node: Node, index: int): data = await node.fetch_all() return cls( label=shorten_string(max_length=100, string=f"{index + 1}. {data['name']}"), description=shorten_string( max_length=100, string=_( "Identifier: {node_identifier_variable_do_not_translate} || SSL: {node_ssl_variable_do_not_translate} || Search-only: {node_config_variable_do_not_translate}" ).format( node_identifier_variable_do_not_translate=node.id, node_ssl_variable_do_not_translate=data["ssl"], node_config_variable_do_not_translate=data["search_only"], ), ), value=f"{node.id}", )