Source code for pylav.extension.red.ui.selectors.generic
from __future__ import annotations
import asyncio
import discord
from pylav.extension.red.ui.selectors.options.generic import EntryOption
from pylav.helpers.format.strings import shorten_string
from pylav.type_hints.bot import DISCORD_COG_TYPE, DISCORD_INTERACTION_TYPE
from pylav.type_hints.generics import ANY_GENERIC_TYPE
[docs]
class EntrySelectSelector(discord.ui.Select):
def __init__(
self,
options: list[EntryOption],
cog: DISCORD_COG_TYPE,
placeholder: str,
mapping: dict[str, ANY_GENERIC_TYPE],
):
super().__init__(
min_values=1,
max_values=1,
options=options,
placeholder=shorten_string(max_length=100, string=placeholder),
)
self.cog = cog
self.mapping = mapping
self.entry: ANY_GENERIC_TYPE = None
self.responded = asyncio.Event()
[docs]
async def callback(self, interaction: DISCORD_INTERACTION_TYPE) -> None:
entry_id = self.values[0]
self.entry: ANY_GENERIC_TYPE = self.mapping.get(entry_id)
self.responded.set()
self.view.stop()
await self.view.on_timeout()