Têtes de joueurs absentes sur Discord (webhook EkaiiMirrorVelocity) — Crafatar HS, changer de fournisseur d'avatar #1
Labels
No labels
feature request
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
admin_ekaii/ekaii-mirror#1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptôme
Depuis quelques jours, les messages postés sur le Discord Ekaii par le pont MC (join/leave, chat, morts, advancements) n'affichent plus la tête du joueur : à la place, une image placeholder de base (cassée). Avant, la tête correspondait au skin du joueur.
Cause (diagnostic du 2026-08-31)
Le pont Discord, c'est EkaiiMirrorVelocity (module
velocity-plugin), pas DiscordSRV (il n'y a plus de jar DiscordSRV sur minis — juste un dossier config orphelin danscreaclone/plugins/).L'URL de l'avatar est codée en dur dans
velocity-plugin/src/main/java/fr/ekaii/mirror/velocity/DiscordPublisher.java:utilisée par
publishChat(avatar_urldu webhook),publishDeath,publishAdvancementetbuildPresenceEmbed(author.icon_url).Crafatar est en panne (côté Crafatar ↔ Mojang, rien à voir avec notre infra) — testé avec les UUID réels de 6 joueurs Ekaii (usercache Survie) :
https://crafatar.com/avatars/<uuid>?overlay&size=64x-storage-type: user errorouserver errorselon les appels, et la même image pour les 6 joueurs (md5 identique = fallback Crafatar)&default=404404: Crafatar avoue qu'il n'a pas le skinhttps://sessionserver.mojang.com/session/minecraft/profile/<uuid>Comme c'est Discord qui va chercher l'image chez Crafatar (le proxy ne fait que passer l'URL), le réseau de minis n'est pas en cause. Rien dans les logs
mc-velocity(le plugin ne loggue pas les échecs webhook), config sans option d'avatar,online-mode = truesur le proxy → aucun changement côté Ekaii ; c'est le fournisseur externe qui a lâché.Fournisseurs alternatifs testés (mêmes 6 UUID, image distincte pour chaque joueur = vrai skin)
https://mc-heads.net/avatar/<uuid>/64https://crafthead.net/helm/<uuid>/64https://minotar.net/helm/<uuid>/64.pnghttps://cravatar.eu/helmavatar/<uuid>/64.pngFix proposé
Remplacer Crafatar par un autre fournisseur (proposition : mc-heads.net, stable,
/avatarinclut déjà le calque casque), et rendre l'URL configurable pour ne pas devoir rebuilder la prochaine fois qu'un service tombe.avec dans
velocity-plugin/src/main/resources/config.yml:(valeur par défaut dans le code = mc-heads si la clé est absente, pour rester compatible avec la config actuelle en prod).
Variante minimale si on ne veut pas toucher à la config : juste remplacer la string, une ligne.
Déploiement
1.4.1 → 1.4.2, commit, tagv1.4.2→ la CI (.forgejo/workflows/build.yml) construit et publie la release avecEkaiiMirrorVelocity-1.4.2.jar.exo/ekaii-mc-stack→plugins/manifest.yml(sectionvelocity) :jar/tag/artifact→1.4.2, commit avecReason:+Broadcast:→ sync GitOps → restart de Velocity (~35 s, chat inter-serveurs et TAB coupés pendant ce temps). À faire à une heure creuse.Rollback : remettre
1.4.1dans le manifest.Statut
v1.4.2ekaii-mc-stackVérification « c'est bien ce plugin qui poste sur Discord ? » (2026-08-31)
velocity/plugins/ekaii-mirror-velocity/config.yml(discord.webhook-url) s'appelleEkaiiSRVcôté Discord et vise le salon1186576981156954122(guild1185979056626356265).creaclone/plugins/DiscordSRV/config.yml, dernier jar vu 2026-05-22, plus aucun jar chargé depuis) visait exactement le même salon pour global/status/awards/deaths/join/leave.discord:du plugin Velocity est datée « Added by deploy 2026-05-22 » : DiscordSRV a été remplacé ce jour-là par EkaiiMirrorVelocity, en réutilisant le webhook existant — d'où le nomEkaiiSRVqui laisse croire que DiscordSRV tourne encore.ChatBridge.java:45→publishChat,HookEventBridge.java:66-68→publishDeath/publishAdvancement,PresenceManager→ embed join/leave.exo/ekaii-bot(NAS) ne poste aucun avatar de joueur (galerie + whitelist uniquement) ; aucun autre repo Forgejo ne fait de pont chat MC ↔ Discord.Contre-vérification indépendante (2026-08-31) — diagnostic CONFIRMÉ, fix déployé
Diagnostic re-testé depuis zéro (autre session, autres requêtes) :
2024af6a…, y compris pour un UUID inventé) avecx-storage-type: server error. Panne confirmée côté Crafatar.&default=404renvoie maintenant 200 (plus de 307), et les comptes anciens très cachés (Notch, jeb_) servent encore leur vrai skin — la panne touche la résolution Mojang, pas le cache historique. Ça ne change rien à la conclusion.SecurityAuditor.java(embeds d'audit), corrigée aussi.Livré :
v1.4.2(main, commit89a20c1) :discord.avatar-urlconfigurable (placeholder{uuid}), défaut mc-heads en code (compatible config existante), utilisé par chat/mort/advancement/présence et les embeds d'audit. Release CI publiée avecEkaiiMirrorVelocity-1.4.2.jar.mc-26.2(le module velocity y était identique, il aurait régressé).v1.4.1en dur → lit maintenant la version de l'annotation@Plugin(bdcd3e2, partira avec la prochaine release).ekaii-mc-stackd2d2750 : manifest 1.4.1→1.4.2 +avatar-urlexplicite dans la config gitops. Sync 11:21:49Z, restart graceful de Velocity (broadcast 30 s, 2 joueurs en ligne), up en ~35 s.Vérification prod :
Loaded plugin ekaii-mirror-velocity 1.4.2,discord=ON, aucun warn[Discord].?wait=trueavec l'icône mc-heads de TyRex1110 : Discord a généré leproxy_icon_url(son media-proxy a bien récupéré l'image) — message de test auto-supprimé.Les anciens messages gardent leur placeholder (cache Discord), seuls les nouveaux ont la tête — attendu.
Rollback si besoin : manifest → 1.4.1.
🤖 Vérifié et déployé par Claude (session autonome, à la demande de Paul).