OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
 
master @ 42 LINES
 
[ HISTORY ]  [ UP ]
 

// Dungeon autocomplete handler

import { getDungeons } from "../indexes/cache.js";
import type { AutocompleteChoice } from "../types.js";
import { DISCORD_LIMITS } from "../constants.js";

/**
 * Handles autocomplete for dungeon selection
 * Fuzzy matches on dungeon name, short name, or slug
 */
export async function autocompleteDungeon(
  query: string,
): Promise<AutocompleteChoice[]> {
  const dungeons = await getDungeons();
  const lowerQuery = query.toLowerCase().trim();

  // if no query, return all dungeons
  if (!lowerQuery) {
    return dungeons
      .slice(0, DISCORD_LIMITS.MAX_AUTOCOMPLETE_CHOICES)
      .map((d) => ({
        name: `${d.name} (${d.short_name})`,
        value: d.slug,
      }));
  }

  // filter dungeons by name, short name, or slug
  const filtered = dungeons
    .filter(
      (d) =>
        d.name.toLowerCase().includes(lowerQuery) ||
        d.short_name.toLowerCase().includes(lowerQuery) ||
        d.slug.toLowerCase().includes(lowerQuery),
    )
    .slice(0, DISCORD_LIMITS.MAX_AUTOCOMPLETE_CHOICES);

  return filtered.map((d) => ({
    name: `${d.name} (${d.short_name})`,
    value: d.slug,
  }));
}

// Dungeon autocomplete handler

import { getDungeons } from "../indexes/cach
e.js";
import type { AutocompleteChoice } from "../
types.js";
import { DISCORD_LIMITS } from "../constants
.js";

/**
 * Handles autocomplete for dungeon selectio
n
 * Fuzzy matches on dungeon name, short name
, or slug
 */
export async function autocompleteDungeon(
  query: string,
): Promise<AutocompleteChoice[]> {
  const dungeons = await getDungeons();
  const lowerQuery = query.toLowerCase().tri
m();

  // if no query, return all dungeons
  if (!lowerQuery) {
    return dungeons
      .slice(0, DISCORD_LIMITS.MAX_AUTOCOMPL
ETE_CHOICES)
      .map((d) => ({
        name: `${d.name} (${d.short_name})`,
        value: d.slug,
      }));
  }

  // filter dungeons by name, short name, or
 slug
  const filtered = dungeons
    .filter(
      (d) =>
        d.name.toLowerCase().includes(lowerQ
uery) ||
        d.short_name.toLowerCase().includes(
lowerQuery) ||
        d.slug.toLowerCase().includes(lowerQ
uery),
    )
    .slice(0, DISCORD_LIMITS.MAX_AUTOCOMPLET
E_CHOICES);

  return filtered.map((d) => ({
    name: `${d.name} (${d.short_name})`,
    value: d.slug,
  }));
}
 
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET