""" Autocomplete Utilities Shared autocomplete functions for Discord slash commands. """ from typing import List import discord from discord import app_commands from api_calls import db_get async def cardset_autocomplete( interaction: discord.Interaction, current: str ) -> List[app_commands.Choice[str]]: """ Autocomplete for cardset names using fuzzy search. Args: interaction: Discord interaction object current: Current input from user Returns: List of cardset name choices matching the current input """ if len(current) < 1: return [] try: # Search for cardsets using the /cardsets/search endpoint search_results = await db_get( "cardsets/search", params=[("q", current), ("limit", 25)], timeout=5 ) if not search_results or search_results.get("count", 0) == 0: return [] # Get cardsets from search results cardsets = search_results.get("cardsets", []) # Create choices with cardset names choices = [ app_commands.Choice(name=cardset["name"], value=cardset["name"]) for cardset in cardsets if cardset.get("name") ] return choices except Exception: # Silently fail on autocomplete errors to avoid disrupting user experience return [] async def player_autocomplete( interaction: discord.Interaction, current: str ) -> List[app_commands.Choice[str]]: """ Autocomplete for player names using fuzzy search. Args: interaction: Discord interaction object current: Current input from user Returns: List of player name choices matching the current input """ if len(current) < 2: return [] try: # Search for players using the /players/search endpoint search_results = await db_get( "players/search", params=[ ("q", current), ("limit", 25), ("short_output", True), ("unique_names", True), ], timeout=5, ) if not search_results or search_results.get("count", 0) == 0: return [] # Get players from search results players = search_results.get("players", []) # Create choices with player names choices = [ app_commands.Choice(name=player["p_name"], value=player["p_name"]) for player in players if player.get("p_name") ] return choices except Exception: # Silently fail on autocomplete errors to avoid disrupting user experience return []