Skip to content

Releases: Daiivr/TradeDex

v1.9.1

Choose a tag to compare

@Daiivr Daiivr released this 01 Jul 03:26

🇪🇸 Español

🎨 TradeDex v1.9.1 — Renovación de diseño

Rediseño del sistema visual con la nueva paleta de colores OKLCH, un nuevo tema "Cute" y mejoras en el portal de intercambios.

✨ Novedades

  • Nuevo sistema de color OKLCH para el BotControlPanel y el TradePortal, con colores más vivos y consistentes.
  • Tema "Cute" 🌸 con rosas y morados cálidos, aplicado a logos, títulos y brillos de botones.
  • Terminal de intercambios mejorada con tarjetas de verificación de entrenador y cuenta regresiva de ETA en vivo.

🛠️ Mejoras

  • Reporte de errores mejorado: separación entre pistas de legalidad y líneas inválidas.
  • Controles adaptados al tema (FlatComboBox, FlatNumericUpDown, FlatTextBox).
  • Ticker de actividad refinado para el feed de intercambios en vivo.
  • Cálculo de posición en cola más preciso, teniendo en cuenta los intercambios activos.
  • Claves de localización ampliadas para tooltips por idioma.

🔧 Otros

  • Subida de versión a v1.9.1.
Trade screen 3 Trade screen 4

🇬🇧 English

🎨 TradeDex v1.9.1 — Design Refresh

Overhauls the visual design system with the modern OKLCH color palette, adds a vibrant "Cute" theme, and refines the trade portal interface.

✨ New

  • New OKLCH-based color system for both BotControlPanel and TradePortal, with more vivid and consistent colors.
  • "Cute" theme 🌸 with warm pinks and purples, applied to logos, titles, and button glows.
  • Improved trade terminal with trainer verification cards and live ETA countdown.

🛠️ Improvements

  • Enhanced error reporting: separated legality hints from invalid lines.
  • Theme-aware controls (FlatComboBox, FlatNumericUpDown, FlatTextBox).
  • Refined activity ticker for the live trade feed.
  • Better queue position calculation, now accounting for active trades.
  • Expanded localization keys for language-specific tooltips.

🔧 Other

  • Version bump to v1.9.1.
Trade screen 3 Trade screen 4

v1.9

Choose a tag to compare

@Daiivr Daiivr released this 28 Jun 20:58

English

New

  • Added visual Leaderboard and Trade Leaderboard systems with generated image cards and page navigation.
  • Major profile command upgrade: level card, achievement preview, medal collection, editable bio, and cleaner DM-friendly profile output.
  • Added medal, league, and XP progression support with new visual assets for medals, silhouettes, and leagues.
  • Migrated many Discord responses to Component V2 for a cleaner and more modern presentation.
  • Added new visual components for errors, requests, trade codes, legalization results, and queue messages.

Improvements

  • Added themed collection editors for WinForms.
  • Expanded and reorganized Discord and Trade settings, including league emoji and badge support.
  • Added new English and Spanish localization entries for commands, profiles, errors, medals, leaderboards, and settings.
  • Improved the help command so available commands are shown more clearly while respecting permissions.
  • Improved Discord image handling, attachments, and component-based message output.

Fixes

  • Updated StatNature usage to StatAlignment for compatibility with the current PKHeX version.
  • Fixed and polished several trade/legalization error responses.
  • Improved PKM file handling, validation, and responses when a request cannot be processed.

Español

Novedades

  • Nuevo sistema visual para Leaderboard y Trade Leaderboard con tarjetas generadas como imagen y navegación por páginas.
  • Mejoras grandes al comando profile: tarjeta de nivel, vista de logros, colección de medallas, biografía editable y envío más limpio por DM.
  • Nuevo sistema de medallas, ligas y progreso de XP con assets visuales para medallas, siluetas y ligas.
  • Varias respuestas de Discord fueron migradas a Component V2 para una presentación más moderna y consistente.
  • Nuevos componentes visuales para errores, solicitudes, códigos de trade, legalización y mensajes de cola.

Mejoras

  • Se agregaron editores temáticos para colecciones en WinForms.
  • Se reorganizaron y ampliaron ajustes de Discord y Trade, incluyendo emojis de ligas y soporte para medallas.
  • Se agregaron nuevas traducciones en español e inglés para comandos, perfiles, errores, medallas, leaderboards y ajustes.
  • Mejoras en el comando help para mostrar mejor los comandos disponibles y respetar permisos.
  • Mejor manejo de imágenes, archivos adjuntos y componentes en mensajes de Discord.

Correcciones

  • Actualizado el uso de StatNature a StatAlignment para compatibilidad con la versión actual de PKHeX.
  • Correcciones visuales y funcionales en varios errores de trade/legalización.
  • Mejoras en manejo de archivos PKM, validaciones y respuestas cuando una solicitud no puede procesarse.

v1.8

Choose a tag to compare

@Daiivr Daiivr released this 27 Jun 02:38

TradeDex Update

Added

  • Upgraded Discord integration to the newer Discord.Net component system.
  • Added improved Discord message components for Help, Profile, Info, Status, and Legality Check commands.
  • Added supervised Discord client recovery with automatic reconnect/backoff handling.
  • Added support for trainer overrides using OT, TID, and SID in trade/convert flows.
  • Added validation to reject future-dated MetDate requests.
  • Added test coverage for egg batch edits.

Fixed

  • Fixed egg generation so batch commands like .Scale=, marks, friendship, and custom balls are correctly applied.
  • Fixed egg trades losing requested ball or batch edit data after template parsing.
  • Fixed shiny PID recalculation when trainer info is changed, preserving shiny status correctly.
  • Fixed GameMode dropdown display in the Bots form.
  • Improved final trainer info logging before trades are confirmed.

Improved

  • Refreshed several Discord command responses with cleaner layouts and better readability.
  • Improved WinForms theme handling across child forms, bot controls, logs, and hub views.
  • Added theme color helpers for better dynamic recoloring.
  • Improved English/Spanish localization handling.

Actualización de TradeDex

Añadido

  • Se actualizó la integración de Discord al sistema moderno de componentes de Discord.Net.
  • Se añadieron mejores componentes visuales para los comandos de Help, Profile, Info, Status y Legality Check.
  • Se añadió recuperación automática del cliente de Discord con reconexión supervisada y espera progresiva.
  • Se añadió soporte para sobrescribir datos de entrenador usando OT, TID y SID en trades/conversiones.
  • Se añadió validación para rechazar fechas MetDate futuras.
  • Se añadieron pruebas para los batch edits en huevos.

Corregido

  • Se corrigió la generación de huevos para que comandos como .Scale=, marcas, amistad y balls personalizadas se apliquen correctamente.
  • Se corrigió un problema donde los huevos perdían la ball solicitada o datos de batch edit después de procesar el template.
  • Se corrigió el recálculo del PID shiny al cambiar datos de entrenador, preservando correctamente el shiny.
  • Se corrigió la visualización del selector GameMode en el formulario de Bots.
  • Se mejoró el registro final de datos del entrenador antes de confirmar trades.

Mejorado

  • Se renovaron varias respuestas de comandos de Discord con diseños más limpios y fáciles de leer.
  • Se mejoró el sistema de temas en WinForms para formularios secundarios, controles de bots, logs y hub.
  • Se añadieron helpers de color para mejorar el recoloreado dinámico de temas.
  • Se mejoró el manejo de localización en inglés/español.

v1.7.1

Choose a tag to compare

@Daiivr Daiivr released this 26 May 07:16

English

Language switch — UI redesign

  • Replaced the confusing globe + target-language button. The old control showed the language the user would switch to (e.g. "EN" when the UI was in Spanish), which led users to think the app was already in their preferred language. The new control shows both languages at once with a clear active state.
  • New segmented pill toggle. Two segments, EN and ES, side by side in the title bar. The active language sits on a raised "thumb" tile; the inactive one sits on the recessed track. Clicking the inactive segment switches the language; clicking the active one does nothing.
  • Theme-aware tokens. All colors (track, thumb, border, text) read live from ThemeManager.CurrentColors, so the pill follows the active theme (Graphite / Onyx / Slate / Mono) without any hardcoded values. Re-renders automatically when the theme is switched.
  • Visual hierarchy. Track uses the Background token (darker than the title bar) to read as inset/recessed. Thumb uses the Hover token (brighter than the title bar) to read as raised. Hairline 1px border in the Shadow token, matching every other divider in the app.
  • States.
    • Active text → ForeColor (bright)
    • Inactive text → Muted
    • Inactive on hover → brightens to ForeColor
  • Polish. Rounded pill geometry with anti-aliased corners, double-buffered painting to avoid flicker, vertically centered labels, smaller restrained footprint (62×24) so it sits quietly in the title bar.
  • Drag-safety. Title-bar drag handler ignores clicks on the pill and its inner labels so the window doesn't drag while toggling.

Español

Selector de idioma — rediseño de la UI

  • Se reemplazó el botón confuso de "globo + idioma destino". El control anterior mostraba el idioma al que se iba a cambiar (por ejemplo, "EN" cuando la interfaz estaba en español), lo que hacía creer al usuario que la aplicación ya estaba en su idioma. El nuevo control muestra ambos idiomas a la vez con un estado activo claro.
  • Nuevo toggle segmentado tipo "pill". Dos segmentos, EN y ES, uno al lado del otro en la barra de título. El idioma activo se apoya sobre una pastilla elevada; el inactivo queda sobre la pista hundida. Hacer clic en el segmento inactivo cambia el idioma; hacer clic en el activo no hace nada.
  • Tokens conscientes del tema. Todos los colores (pista, pastilla, borde, texto) se leen en vivo desde ThemeManager.CurrentColors, por lo que el pill sigue el tema activo (Graphite / Onyx / Slate / Mono) sin valores fijos. Se redibuja automáticamente al cambiar de tema.
  • Jerarquía visual. La pista usa el token Background (más oscuro que la barra de título) para leerse como hundida. La pastilla usa el token Hover (más claro que la barra de título) para leerse como elevada. Borde de 1px tipo "hairline" con el token Shadow, igual al resto de divisores de la aplicación.
  • Estados.
    • Texto activo → ForeColor (claro)
    • Texto inactivo → Muted
    • Inactivo al pasar el cursor → se aclara a ForeColor
  • Detalles. Geometría de pill redondeada con esquinas suavizadas, pintado con doble búfer para evitar parpadeos, etiquetas centradas verticalmente, tamaño compacto (62×24) para mantenerlo discreto en la barra de título.
  • Seguridad al arrastrar. El gestor de arrastre de la barra de título ignora los clics sobre el pill y sus etiquetas internas para que la ventana no se mueva al alternar.

v1.7

Choose a tag to compare

@Daiivr Daiivr released this 25 May 08:25

Changelog

Español

Comando Ditto renovado

  • Se rediseñó el comando ditto / dt para generar Dittos personalizables con argumentos opcionales en cualquier orden.
  • Ahora permite configurar:
    • IVs completos, por ejemplo: 31/31/31/31/31/31
    • Idioma
    • Naturaleza
    • Estado Shiny
    • Datos de entrenador: OT/TID/SID[/Gender]
    • Juego de origen compatible: SV, BDSP o SWSH
  • Ejecutar el comando sin argumentos ahora genera un Ditto Shiny automáticamente.
  • Se agregó validación para spreads de IVs inválidos, incluyendo mensajes localizados cuando un valor no está entre 0 y 31.
  • Se agregaron mensajes localizados para argumentos no reconocidos, incluyendo la mención del usuario para identificar claramente la solicitud fallida.
  • Se agregó una advertencia con ⚠️ y mención del usuario cuando el bot no puede crear un Ditto completamente válido y entrega su mejor intento.
  • Se mejoró la detección de nombres con publicidad en solicitudes de Ditto, con respuestas localizadas.
  • Las solicitudes de Ditto conservan los datos personalizados indicados por el usuario sin aplicar AutoOT guardado sobre el resultado.
  • El comando Ditto ahora utiliza el permiso correspondiente a solicitudes especiales/FixOT.

Configuración de carpetas

  • Se movieron las opciones EventsFolder y BattleReadyPKMFolder a la sección centralizada FolderSettings.
  • Se eliminaron las opciones duplicadas de TradeSettings.
  • Los comandos de Discord para eventos y archivos Battle-Ready ahora utilizan directamente las rutas configuradas en FolderSettings.
  • Se agregaron traducciones para los nombres y descripciones de estas carpetas en la interfaz.

Nota de actualización: Si estas rutas estaban configuradas anteriormente dentro de TradeSettings, será necesario volver a configurarlas en la sección FolderSettings.

Correcciones de traducción en ajustes

  • Se corrigieron etiquetas de estadísticas que aparecían parcialmente traducidas, como completados Surprise.
  • Las estadísticas ahora muestran nombres claros en español:
    • Trades sorpresa completados
    • Trades de distribución completados
    • Trades completados
    • Trades FixOT completados
    • Comprobaciones de semilla completadas
    • Clonaciones completadas
    • Dumps completados
  • Se corrigió la etiqueta UseEmbeds para mostrarse correctamente como Usar embeds.

Trade Web: actividad en vivo

  • Se agregó una barra de Actividad en vivo al portal de trades web.
  • La página ahora muestra notificaciones cuando un usuario completa un intercambio, incluyendo:
    • Nombre del usuario
    • Pokémon intercambiado
  • Se incorporó un endpoint de actividad reciente para alimentar las notificaciones del portal.
  • El portal consulta periódicamente las nuevas actividades y muestra los eventos de manera ordenada, sin repetir notificaciones ya vistas.
  • Las notificaciones de actividad están disponibles en español e inglés:
    • Español: Actividad en vivo / acaba de intercambiar un
    • Inglés: Live activity / just traded a

Trade Web: mejora de cierre de sesión

  • Se reemplazó el tooltip nativo del botón de cerrar sesión por el tooltip personalizado utilizado en los botones de ayuda y archivos recientes.
  • El tooltip ahora cambia según el idioma:
    • Español: Cerrar sesion
    • Inglés: Log out
  • Se configuró el botón como type="button" para evitar envíos accidentales del formulario.

Verificación

  • Se verificó la compilación de los proyectos de Discord y WinForms sin errores.
  • Los warnings mostrados durante la compilación ya existían previamente y no corresponden a estos cambios.

English

Renewed Ditto Command

  • Redesigned the ditto / dt command to generate customizable Dittos using optional arguments in any order.
  • The command now supports:
    • Full IV spreads, for example: 31/31/31/31/31/31
    • Language
    • Nature
    • Shiny status
    • Trainer data: OT/TID/SID[/Gender]
    • Compatible origin game selection: SV, BDSP, or SWSH
  • Running the command without arguments now automatically generates a Shiny Ditto.
  • Added validation for invalid IV spreads, including localized feedback when a value is outside the 0 to 31 range.
  • Added localized messages for unrecognized arguments, including a user mention to clearly identify the failed request.
  • Added a ⚠️ warning and user mention when the bot cannot create a fully valid Ditto and sends its best attempt instead.
  • Improved advertising-name detection for Ditto requests, with localized response messages.
  • Ditto requests now preserve user-specified trainer data by avoiding cached AutoOT application on this flow.
  • The Ditto command now uses the appropriate special request/FixOT permission requirement.

Folder Configuration

  • Moved EventsFolder and BattleReadyPKMFolder into the centralized FolderSettings section.
  • Removed duplicated folder options from TradeSettings.
  • Discord commands for events and Battle-Ready files now read their paths directly from FolderSettings.
  • Added localized labels and descriptions for these folder settings in the interface.

Upgrade note: If these paths were previously configured under TradeSettings, they must be configured again under FolderSettings.

Settings Translation Fixes

  • Fixed statistics labels that were previously shown with partial translations, such as completados Surprise.
  • Statistics now display clear Spanish labels:
    • Trades sorpresa completados
    • Trades de distribución completados
    • Trades completados
    • Trades FixOT completados
    • Comprobaciones de semilla completadas
    • Clonaciones completadas
    • Dumps completados
  • Fixed the UseEmbeds setting label so it is correctly displayed as Usar embeds in Spanish.

Trade Web: Live Activity

  • Added a Live activity bar to the web trade portal.
  • The page now displays notifications when a user completes a trade, including:
    • Username
    • Traded Pokemon
  • Added a recent activity endpoint used by the portal to retrieve completed trade events.
  • The portal periodically checks for new activity and displays notifications in order without repeating already-seen events.
  • Live activity notifications are available in both English and Spanish:
    • Spanish: Actividad en vivo / acaba de intercambiar un
    • English: Live activity / just traded a

Trade Web: Logout Improvement

  • Replaced the browser-native logout tooltip with the custom tooltip style already used by the help and recent files buttons.
  • The logout tooltip is now localized:
    • Spanish: Cerrar sesion
    • English: Log out
  • Set the logout control to type="button" to prevent accidental form submissions.

Verification

  • Verified that the Discord and WinForms projects build without errors.
  • Build warnings shown during verification were already present and are unrelated to these changes.

v1.6.3

Choose a tag to compare

@Daiivr Daiivr released this 25 May 03:58

Bot Manager — Auto-refreshing "NEW RELEASE!" banner

🇬🇧 English

Why

The GitHub release check only ran once at startup (Main.cs:367). If a new version was published while the app was open, the "NEW RELEASE!" banner stayed hidden until the user closed and reopened the program.

What changed

  • Background polling timer. A System.Threading.Timer now re-queries the GitHub Releases API every 1 hour while the app is open, in addition to the existing startup check. The interval is exposed as a single constant (UpdateCheckInterval) so it's trivial to tune.
  • Banner appears live. When the periodic check detects a newer version, the result is marshalled to the UI thread via BeginInvoke and the banner animates in without requiring a restart.
  • Per-version dedupe. Added _lastSeenUpdateVersion. Even though the timer fires 24× per day, SetUpdateNotification(...) is only invoked once per new release detected at runtime — no spammy re-animations.
  • No surprise modals. The background call now passes showDialog: false to UpdateChecker.CheckForUpdatesAsync(...), so polling can never pop up an update dialog. The manual "Update" button still uses forceShow: true and behaves exactly as before.
  • Clean shutdown. Timer is disposed on FormClosed and an IsDisposed guard sits inside the callback as a belt-and-braces measure against late callbacks against a disposed UI.

Rate-limit safety

GitHub's unauthenticated API allows 60 requests/hour per IP. One request per hour per running instance is 1 req/hour — comfortably under the limit.

How to verify

  1. Open the app.
  2. Publish a new release on GitHub (or lower TradeBot.Version locally to force the check to find something newer).
  3. Within ≤ 1 hour the "NEW RELEASE!" banner appears on its own. No restart needed.

🇪🇸 Español

Por qué

El check de releases en GitHub se ejecutaba una sola vez al arrancar (Main.cs:367). Si publicabas una versión nueva con la app abierta, el banner "NEW RELEASE!" quedaba oculto hasta que el usuario cerrara y reabriera el programa.

Qué cambió

  • Timer de polling en background. Un System.Threading.Timer vuelve a consultar la API de GitHub Releases cada 1 hora mientras la app está abierta, además del check inicial al arrancar. El intervalo está expuesto como una constante (UpdateCheckInterval) para que sea trivial ajustarlo.
  • El banner aparece en vivo. Cuando el check periódico detecta una versión más reciente, el resultado se envía al hilo UI vía BeginInvoke y el banner se anima sin necesidad de reiniciar.
  • Dedupe por versión. Añadido _lastSeenUpdateVersion. Aunque el timer dispare 24 veces al día, SetUpdateNotification(...) solo se invoca una vez por release nuevo detectado en runtime — sin re-animaciones spammy.
  • Sin diálogos por sorpresa. La llamada en background ahora pasa showDialog: false a UpdateChecker.CheckForUpdatesAsync(...), así que el polling jamás abre una ventana modal. El botón manual de "Update" sigue usando forceShow: true y se comporta exactamente igual que antes.
  • Shutdown limpio. El timer se libera en FormClosed y un guard IsDisposed dentro del callback funciona como red de seguridad contra callbacks tardíos sobre una UI ya disposed.

Seguridad de rate-limits

La API pública de GitHub permite 60 requests/hora por IP sin autenticar. Una request por hora por instancia = 1 req/hora — cómodamente por debajo del límite.

Cómo verificarlo

  1. Abre la app.
  2. Publica un release nuevo en GitHub (o baja TradeBot.Version localmente para forzar que el check encuentre algo más nuevo).
  3. En ≤ 1 hora el banner "NEW RELEASE!" aparece solo. Sin reiniciar.

v1.6.2

Choose a tag to compare

@Daiivr Daiivr released this 25 May 03:25

Trade Portal — Automatic asset cache-busting

🇬🇧 English

Why

Every time TradePortal.js, TradePortal.css, or TradePortal.html changed, users (and Cloudflare) kept serving the stale cached version. New features (tooltips, toast, Poké Ball backgrounds, etc.) would silently fail to appear until someone did a manual Cloudflare purge + browser hard refresh.

What changed

  • Content-hashed asset version token. On server start, BotServer now computes a single SHA-1 hash (first 10 hex chars) over the combined bytes of the embedded TradePortal.js, TradePortal.css, and TradePortal.html. This value is cached for the process lifetime under a thread-safe lazy initializer — zero per-request overhead.
  • HTML token replacement. TradePortal.html now references its sibling assets via a __ASSET_VER__ placeholder:
    <link rel="stylesheet" href="/TradePortal.css?v=__ASSET_VER__">
    <script src="/TradePortal.js?v=__ASSET_VER__" type="module"></script>
    A new helper LoadTradePortalHtml() substitutes the placeholder with the live AssetVersion on every /trade request, and the route now goes through it.
  • Graceful fallback. If hashing the embedded resources fails for any reason, the version falls back to a timestamp-based token (DateTime.UtcNow.Ticks in hex) so cache-busting still works.

Result

  • Every rebuild → new content → new hash → new asset URL → Cloudflare and browsers fetch fresh JS/CSS automatically.
  • No more manual Cloudflare purges or Ctrl+Shift+R after deploying.
  • Existing Cloudflare allowlist rules still work — http.request.uri.path does not include the query string, so /TradePortal.css?v=abc still matches eq "/TradePortal.css".
  • HTML keeps its Cache-Control: no-cache (correct, since it's the entry point that carries the new token); JS/CSS can safely live in the edge cache forever because their URL changes whenever their content does.

New developer workflow

  1. Edit TradePortal.{js,css,html}
  2. Rebuild
  3. Restart the bot
  4. Users see the change on next page load — no purge, no hard refresh

🇪🇸 Español

Por qué

Cada vez que cambiaban TradePortal.js, TradePortal.css o TradePortal.html, los usuarios (y Cloudflare) seguían sirviendo la versión vieja desde caché. Funcionalidades nuevas (tooltips, toast, fondo con Pokébolas, etc.) no aparecían hasta hacer purge manual en Cloudflare + hard refresh en el navegador.

Qué cambió

  • Token de versión basado en hash del contenido. Al arrancar el servidor, BotServer calcula una sola vez un hash SHA-1 (primeros 10 caracteres hex) sobre los bytes combinados de los recursos embebidos TradePortal.js, TradePortal.css y TradePortal.html. El valor se cachea durante toda la vida del proceso con un lazy initializer thread-safe — cero overhead por petición.
  • Sustitución de token en el HTML. TradePortal.html ahora referencia sus assets hermanos con un placeholder __ASSET_VER__:
    <link rel="stylesheet" href="/TradePortal.css?v=__ASSET_VER__">
    <script src="/TradePortal.js?v=__ASSET_VER__" type="module"></script>
    Un nuevo helper LoadTradePortalHtml() sustituye el placeholder por el AssetVersion real en cada petición a /trade, y la ruta ahora pasa por ahí.
  • Fallback elegante. Si el hash falla por cualquier razón, la versión cae a un token basado en timestamp (DateTime.UtcNow.Ticks en hex), garantizando que el cache-busting siga funcionando.

Resultado

  • Cada rebuild → contenido nuevo → hash nuevo → URL nueva → Cloudflare y navegadores descargan JS/CSS frescos automáticamente.
  • Adiós a purgar manualmente Cloudflare o pulsar Ctrl+Shift+R después de cada deploy.
  • Las reglas existentes de Cloudflare siguen funcionando — http.request.uri.path no incluye la query string, así que /TradePortal.css?v=abc sigue matcheando eq "/TradePortal.css".
  • El HTML mantiene su Cache-Control: no-cache (correcto, ya que es el entry point que lleva el token nuevo); JS/CSS pueden vivir indefinidamente en la caché del edge porque su URL cambia cuando su contenido cambia.

Nuevo flujo de trabajo

  1. Editas TradePortal.{js,css,html}
  2. Rebuild
  3. Reinicias el bot
  4. Los usuarios ven el cambio al recargar — sin purge, sin hard refresh

v1.6.1

Choose a tag to compare

@Daiivr Daiivr released this 25 May 02:47

Trade Portal — Toast on completion + Styled tooltips

🇬🇧 English

Trade completion toast

  • A toast notification now pops up the moment a trade transitions to finished, telling the user their received file is waiting for them.
    • EN: "Trade complete. Your file is now available in the Recent files tray."
    • ES: "Trade completado. Tu archivo esta disponible en la bandeja de Archivos recientes."
  • Triggered from maybeCelebrateTrade so it fires exactly once per trade (same de-duplication guard as the confetti + chime).
  • Uses the existing showToast component with type: 'info' and a longer 6.5 s duration since the message invites the user to take an action.
  • Translation keys (tradeFinishedFileSaved) added to both the ES and EN dictionaries — adding more languages later only requires translating this same key.

Styled tooltips for help & downloads buttons

  • Replaced the default browser-native title="..." tooltip (the unstyled black box that clashed with the dark theme) on the download (#download-button) and help (#guide-button) buttons.
  • Buttons now expose their label via aria-label (for screen readers) and data-tooltip (for the visible chip), with title stripped on render.
  • The data-i18n-title handler in TradePortal.js keeps both attributes synchronized with the active language and clears any leftover title.
  • New CSS tooltip chip in TradePortal.css:
    • Dark surface (--surface-2), hairline border, soft drop shadow, matching the toast / popover language.
    • Smooth 140 ms fade-in + lift animation on :hover and :focus-visible.
    • Side-aware anchoring so it never clips off-screen on narrow viewports:
      • Download button (left of viewport) → tooltip anchored to its left edge, expands rightward.
      • Help button (right of viewport) → tooltip anchored to its right edge, expands leftward.
    • Auto-hides while the matching popover is open (aria-expanded="true") to avoid redundant labels.

🇪🇸 Español

Toast al completar el trade

  • Aparece un toast en el momento en que un trade pasa al estado finished, indicando al usuario que su archivo recibido le está esperando.
    • ES: "Trade completado. Tu archivo esta disponible en la bandeja de Archivos recientes."
    • EN: "Trade complete. Your file is now available in the Recent files tray."
  • Disparado desde maybeCelebrateTrade, por lo que se muestra exactamente una vez por trade (mismo guard que el confeti y el sonido).
  • Usa el componente existente showToast con type: 'info' y una duración ampliada a 6.5 s, ya que el mensaje invita al usuario a realizar una acción.
  • Claves de traducción (tradeFinishedFileSaved) añadidas a los diccionarios ES y EN — añadir más idiomas en el futuro sólo requiere traducir esta misma clave.

Tooltips con estilo para los botones de ayuda y descargas

  • Reemplazado el tooltip nativo del navegador (title="...", esa cajita negra sin estilo que rompía el tema oscuro) en los botones de descargas (#download-button) y ayuda (#guide-button).
  • Los botones ahora exponen su etiqueta mediante aria-label (para lectores de pantalla) y data-tooltip (para el chip visible), eliminando el title al renderizar.
  • El handler data-i18n-title en TradePortal.js mantiene ambos atributos sincronizados con el idioma activo y limpia cualquier title residual.
  • Nuevo chip de tooltip en CSS (TradePortal.css):
    • Superficie oscura (--surface-2), borde fino, sombra suave — mismo lenguaje visual que los toasts y popovers.
    • Animación de fade-in + ligero desplazamiento vertical de 140 ms al pasar el ratón o al recibir foco con teclado.
    • Anclaje inteligente por lado para que nunca se salga de la pantalla en viewports estrechos:
      • Botón de descargas (izquierda del viewport) → tooltip alineado a su borde izquierdo, expande hacia la derecha.
      • Botón de ayuda (derecha del viewport) → tooltip alineado a su borde derecho, expande hacia la izquierda.
    • Se oculta automáticamente cuando el popover correspondiente está abierto (aria-expanded="true") para no duplicar la información.

v1.6

Choose a tag to compare

@Daiivr Daiivr released this 25 May 02:10

Trade Portal & Bots Form — Visual / Audio / UX Update

🇬🇧 English

Trade Portal — Visual & Audio Polish

Confetti celebration redesign

  • Trade-finished confetti now fires from both bottom corners of the terminal (left + right cannons) instead of a single center burst, mirroring a real two-side cannon effect.
  • 36 pieces per side with converging drift angles so the streams cross in the middle.
  • Increased burst distance and duration for a richer arc.
  • Added a celebration chime played via the Web Audio API on trade completion — a quick C-major arpeggio (C5 → E5 → G5 → C6) on a triangle wave with a soft rising sine shimmer on top. No asset files required; gracefully no-ops if audio is blocked.

Animated background — Poké Ball orbits

  • Added a subtle hex honeycomb grid that drifts slowly across the page (a quiet nod to PKHeX and to the terminal aesthetic). Faded toward the edges with a radial mask so it never reads as busy.
  • Added 10 floating Poké Ball orbs that rise across the viewport on staggered 28–50s loops, gently rotating.
  • Ball artwork sourced from the Poké Ball Mega Pack SVGs added to the Resources folder:
    • Poké Ball, Great Ball, Ultra Ball, Love Ball, Safari Ball, Quick Ball, Dive Ball, Net Ball, Cherish Ball, and an alternate Poké Ball.
  • Registered each SVG as an EmbeddedResource and served via BotServer at /PokeballNSVG.svg with image/svg+xml.
  • The orb wrapper uses overflow:hidden + border-radius:50%, and the <img> is stretched to 290% of orbit height (auto width preserves aspect) and translated back to center, so just the ball fills the orbit cleanly at every size.
  • All animations respect prefers-reduced-motion and sit behind the UI (z-index: -1, pointer-events: none).

Bots Form — UX

  • The IP address textbox now defaults to 192.168.0.1 for new bot entries. Loaded bot configs still override with their saved IP.

🇪🇸 Español

Trade Portal — Mejoras visuales y de audio

Rediseño de la celebración con confeti

  • El confeti al finalizar un trade ahora sale desde ambas esquinas inferiores del terminal (cañones izquierdo + derecho) en lugar de una sola explosión central, simulando un efecto real de dos cañones.
  • 36 piezas por lado con ángulos de dispersión convergentes para que los chorros se crucen en el centro.
  • Aumentadas la distancia y duración del estallido para un arco más rico.
  • Añadido un sonido de celebración reproducido con la Web Audio API al completar un trade — un arpegio rápido en Do mayor (C5 → E5 → G5 → C6) con onda triangular y un brillo sinusoidal ascendente. No requiere archivos de audio; se ignora silenciosamente si el audio está bloqueado.

Fondo animado — Pokébolas flotantes

  • Añadida una sutil retícula hexagonal que se desplaza lentamente por la página (guiño discreto a PKHeX y a la estética terminal). Desvanecida hacia los bordes con una máscara radial para que nunca se vea recargada.
  • Añadidas 10 Pokébolas flotantes que suben por la pantalla en bucles escalonados de 28–50 s, rotando suavemente.
  • Arte de las Pokébolas tomado de los SVG del Poké Ball Mega Pack añadidos a la carpeta Resources:
    • Pokébola, Superball, Ultraball, Amorball, Parkball, Velozball, Buceoball, Mallaball, Cherishball y una Pokébola alternativa.
  • Cada SVG registrado como EmbeddedResource y servido desde BotServer en /PokeballNSVG.svg con image/svg+xml.
  • El contenedor de cada orbe usa overflow:hidden + border-radius:50%, y la <img> se estira al 290% de la altura del orbe (ancho automático conserva la proporción) y se centra con translate, de modo que sólo la pelota llena el orbe a cualquier tamaño.
  • Todas las animaciones respetan prefers-reduced-motion y se sitúan detrás de la UI (z-index: -1, pointer-events: none).

Pantalla de Bots — UX

  • El campo de dirección IP ahora tiene como valor por defecto 192.168.0.1 al crear un bot nuevo. Las configuraciones de bots ya guardadas siguen sobrescribiendo con su IP almacenada.

v1.5.2

Choose a tag to compare

@Daiivr Daiivr released this 23 May 06:28

Changelog

Added

  • Added broader Spanish localization coverage for Discord command help.
  • Added translated command descriptions and parameter labels shown in $help <command>.
  • Added user mention to the “command not found” help response.
  • Added a redesigned Discord profile embed with profile summary, activity stats, level progress, badges, and private trainer info.
  • Added profile action buttons for switching between the profile view and the badges view.

Changed

  • Improved the Discord help embed layout and styling.
  • Updated the help embed command detail view to show cleaner command titles, parameter lists, and examples.
  • Updated the Discord profile command to use a cleaner card-style layout.
  • Updated the profile badges view to show the full badge route and next unlock progress.
  • Updated remaining FusionBot wording to TradeDex in Discord embeds.
  • Updated the Discord info embed branding to show TradeDex instead of FusionBot.
  • Restyled the Discord status embed with a cleaner PokeNexo-style layout.
  • Updated the batch mystery Pokémon trade embed to use one mystery image instead of revealing individual Pokémon sprites.
  • Changed the batch mystery Pokémon embed text to show the requested mystery count, such as “4 mysterious Pokémon,” instead of listing Pokémon names.

Fixed

  • Fixed several $help <command> entries showing English text while the bot language was Spanish.
  • Fixed command parameter names in help examples not using localized labels.
  • Fixed the “command not found” response missing the user mention.
  • Fixed duplicated command summary translations caused by malformed Pokémon text.
  • Fixed malformed Pokémon translation keys by replacing them with proper Pokémon keys.
  • Fixed the profile command showing raw Markdown markers around the last traded Pokémon name.
  • Fixed the profile command sending the “profile sent by DM” confirmation when it was already used inside a DM.
  • Fixed the profile badges view not showing all badge milestones.

Cambios

Agregado

  • Se agregó mayor cobertura de traducciones en español para la ayuda de comandos de Discord.
  • Se agregaron traducciones para descripciones de comandos y nombres de parámetros mostrados en $help <comando>.
  • Se agregó mención del usuario en la respuesta cuando no se encuentra un comando.
  • Se agregó un embed rediseñado para el comando de perfil de Discord con resumen del perfil, actividad, progreso de nivel, insignias e información privada del entrenador.
  • Se agregaron botones de acción para cambiar entre la vista del perfil y la vista de insignias.

Cambiado

  • Se mejoró el diseño y estilo del embed de ayuda de Discord.
  • Se actualizó la vista de detalle del help embed para mostrar títulos, listas de parámetros y ejemplos más limpios.
  • Se actualizó el comando de perfil de Discord con un diseño más limpio tipo tarjeta.
  • Se actualizó la vista de insignias del perfil para mostrar la ruta completa de insignias y el progreso hacia la siguiente.
  • Se actualizaron textos restantes de FusionBot a TradeDex en embeds de Discord.
  • Se actualizó el branding del embed de información para mostrar TradeDex en vez de FusionBot.
  • Se rediseñó el embed de status con un estilo más limpio similar al de PokeNexo.
  • Se actualizó el embed de batch mystery Pokémon para usar una sola imagen misteriosa en vez de revelar los sprites individuales.
  • Se cambió el texto del embed de batch mystery Pokémon para mostrar la cantidad solicitada, por ejemplo “4 Pokémon misteriosos,” en vez de listar los nombres.

Corregido

  • Se corrigieron varias entradas de $help <comando> que seguían mostrando texto en inglés cuando el idioma del bot era español.
  • Se corrigieron nombres de parámetros en ejemplos de ayuda que no usaban etiquetas traducidas.
  • Se corrigió la respuesta de “comando no encontrado” para incluir la mención del usuario.
  • Se corrigieron traducciones duplicadas causadas por texto mal codificado como Pokémon.
  • Se corrigieron claves de traducción mal codificadas reemplazando Pokémon por Pokémon.
  • Se corrigió el comando de perfil mostrando marcadores Markdown alrededor del último Pokémon intercambiado.
  • Se corrigió que el comando de perfil enviara la confirmación de “perfil enviado por MD” cuando ya se usaba dentro de un MD.
  • Se corrigió la vista de insignias del perfil para mostrar todos los hitos de insignias.