Releases: Daiivr/TradeDex
Release list
v1.9.1
🇪🇸 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.
![]() |
![]() |
🇬🇧 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.
![]() |
![]() |
v1.9
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
StatNatureusage toStatAlignmentfor 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
StatNatureaStatAlignmentpara 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
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
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,
ENandES, 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
Backgroundtoken (darker than the title bar) to read as inset/recessed. Thumb uses theHovertoken (brighter than the title bar) to read as raised. Hairline 1px border in theShadowtoken, matching every other divider in the app. - States.
- Active text →
ForeColor(bright) - Inactive text →
Muted - Inactive on hover → brightens to
ForeColor
- Active text →
- 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,
ENyES, 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 tokenHover(más claro que la barra de título) para leerse como elevada. Borde de 1px tipo "hairline" con el tokenShadow, 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
- Texto activo →
- 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
Changelog
Español
Comando Ditto renovado
- Se rediseñó el comando
ditto/dtpara 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,BDSPoSWSH
- IVs completos, por ejemplo:
- 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
0y31. - 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
EventsFolderyBattleReadyPKMFoldera la sección centralizadaFolderSettings. - 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ónFolderSettings.
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 completadosTrades de distribución completadosTrades completadosTrades FixOT completadosComprobaciones de semilla completadasClonaciones completadasDumps completados
- Se corrigió la etiqueta
UseEmbedspara mostrarse correctamente comoUsar 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
- Español:
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
- Español:
- 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/dtcommand 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
Shinystatus- Trainer data:
OT/TID/SID[/Gender] - Compatible origin game selection:
SV,BDSP, orSWSH
- Full IV spreads, for example:
- 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
0to31range. - 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
EventsFolderandBattleReadyPKMFolderinto the centralizedFolderSettingssection. - 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 underFolderSettings.
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 completadosTrades de distribución completadosTrades completadosTrades FixOT completadosComprobaciones de semilla completadasClonaciones completadasDumps completados
- Fixed the
UseEmbedssetting label so it is correctly displayed asUsar embedsin 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
- Spanish:
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
- Spanish:
- 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
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.Timernow 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
BeginInvokeand 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: falsetoUpdateChecker.CheckForUpdatesAsync(...), so polling can never pop up an update dialog. The manual "Update" button still usesforceShow: trueand behaves exactly as before. - Clean shutdown. Timer is disposed on
FormClosedand anIsDisposedguard 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
- Open the app.
- Publish a new release on GitHub (or lower
TradeBot.Versionlocally to force the check to find something newer). - 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.Timervuelve 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
BeginInvokey 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: falseaUpdateChecker.CheckForUpdatesAsync(...), así que el polling jamás abre una ventana modal. El botón manual de "Update" sigue usandoforceShow: truey se comporta exactamente igual que antes. - Shutdown limpio. El timer se libera en
FormClosedy un guardIsDisposeddentro 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
- Abre la app.
- Publica un release nuevo en GitHub (o baja
TradeBot.Versionlocalmente para forzar que el check encuentre algo más nuevo). - En ≤ 1 hora el banner "NEW RELEASE!" aparece solo. Sin reiniciar.
v1.6.2
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,
BotServernow computes a single SHA-1 hash (first 10 hex chars) over the combined bytes of the embeddedTradePortal.js,TradePortal.css, andTradePortal.html. This value is cached for the process lifetime under a thread-safe lazy initializer — zero per-request overhead. - HTML token replacement.
TradePortal.htmlnow references its sibling assets via a__ASSET_VER__placeholder:A new helper<link rel="stylesheet" href="/TradePortal.css?v=__ASSET_VER__"> <script src="/TradePortal.js?v=__ASSET_VER__" type="module"></script>
LoadTradePortalHtml()substitutes the placeholder with the liveAssetVersionon every/traderequest, 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.Ticksin 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+Rafter deploying. - Existing Cloudflare allowlist rules still work —
http.request.uri.pathdoes not include the query string, so/TradePortal.css?v=abcstill matcheseq "/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
- Edit
TradePortal.{js,css,html} - Rebuild
- Restart the bot
- 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,
BotServercalcula una sola vez un hash SHA-1 (primeros 10 caracteres hex) sobre los bytes combinados de los recursos embebidosTradePortal.js,TradePortal.cssyTradePortal.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.htmlahora referencia sus assets hermanos con un placeholder__ASSET_VER__:Un nuevo helper<link rel="stylesheet" href="/TradePortal.css?v=__ASSET_VER__"> <script src="/TradePortal.js?v=__ASSET_VER__" type="module"></script>
LoadTradePortalHtml()sustituye el placeholder por elAssetVersionreal 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.Ticksen 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+Rdespués de cada deploy. - Las reglas existentes de Cloudflare siguen funcionando —
http.request.uri.pathno incluye la query string, así que/TradePortal.css?v=abcsigue matcheandoeq "/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
- Editas
TradePortal.{js,css,html} - Rebuild
- Reinicias el bot
- Los usuarios ven el cambio al recargar — sin purge, sin hard refresh
v1.6.1
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
maybeCelebrateTradeso it fires exactly once per trade (same de-duplication guard as the confetti + chime). - Uses the existing
showToastcomponent withtype: 'info'and a longer 6.5 s duration since the message invites the user to take an action. - Translation keys (
tradeFinishedFileSaved) added to both theESandENdictionaries — 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) anddata-tooltip(for the visible chip), withtitlestripped on render. - The
data-i18n-titlehandler inTradePortal.jskeeps both attributes synchronized with the active language and clears any leftovertitle. - 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
:hoverand: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.
- Dark surface (
🇪🇸 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
showToastcontype: '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 diccionariosESyEN— 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) ydata-tooltip(para el chip visible), eliminando eltitleal renderizar. - El handler
data-i18n-titleenTradePortal.jsmantiene ambos atributos sincronizados con el idioma activo y limpia cualquiertitleresidual. - 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.
- Superficie oscura (
v1.6
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
EmbeddedResourceand served viaBotServerat/PokeballNSVG.svgwithimage/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-motionand sit behind the UI (z-index: -1,pointer-events: none).
Bots Form — UX
- The IP address textbox now defaults to
192.168.0.1for 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
EmbeddedResourcey servido desdeBotServeren/PokeballNSVG.svgconimage/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 contranslate, de modo que sólo la pelota llena el orbe a cualquier tamaño. - Todas las animaciones respetan
prefers-reduced-motiony 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.1al crear un bot nuevo. Las configuraciones de bots ya guardadas siguen sobrescribiendo con su IP almacenada.
v1.5.2
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émontext. - Fixed malformed
Pokémontranslation keys by replacing them with properPokémonkeys. - 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émonporPoké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.



