Skip to content

feat: module starboard personnalisable#154

Draft
RedsTom wants to merge 13 commits into
masterfrom
feature/starboard
Draft

feat: module starboard personnalisable#154
RedsTom wants to merge 13 commits into
masterfrom
feature/starboard

Conversation

@RedsTom

@RedsTom RedsTom commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Closes #152

Module starboard entièrement personnalisable, utilisant Discord Components v2.

Fonctionnement

  • Surveille les réactions ajoutées/retirées sur les messages
  • Quand un message atteint le seuil de réactions configuré, il est posté dans le channel starboard
  • Le message starboard est mis à jour en temps réel (réactions ajoutées/retirées)
  • Si le score repasse sous le seuil, le message est supprimé ou conservé selon la config

Apparence (Components v2)

Deux containers sont utilisés quand le message original répond à un autre message :

Container de réponse (si reply)

┌──────────────────────────────────┐
│ [pfp] ## ↪ @User · <t:R>          │
│       Contenu du message cité...  │
├──────────────────────────────────┤
│ 🖼️ X pièces jointes      [Btn]   │
└──────────────────────────────────┘

Container du message original

┌──────────────────────────────────┐
│ [pfp] ## @User · <t:R>            │
│       Contenu du message...       │
│       [🖼️ gallery si images]      │
├──────────────────────────────────┤
│ ### ⭐ 5 · 🌟 3                  │
│ -# **X** unique(s)       [Btn]   │
└──────────────────────────────────┘
  • Les pseudos sont des mentions (pings)
  • Le bouton "Voir le message" renvoie vers le message original/cité
  • Tout texte est tronqué à 1000 caractères

Configuration (par serveur)

Option Description
starboardChannel Channel où poster les messages starboard
reactionEmojis Émojis comptabilisés (custom via <:id> ou nom)
reactionCount Seuil de réactions requis
selfStar Autoriser l'auteur à réagir à son propre message
ignoreBotMessages Ignorer les messages des bots
allowedChannels Restreindre à certains channels (vide = tous)
belowThresholdBehavior remove ou keep quand le score repasse sous le seuil
embedColor Couleur d'accent du container

Structure

src/modules/starboard/
├── starboard.module.ts
├── starboard.config.ts
├── listeners/
│   ├── message-reaction-add.listener.ts
│   └── message-reaction-remove.listener.ts
├── services/
│   └── starboard.service.ts
└── models/
    └── starboard.prisma

Technique

  • Race condition : Gérée via Prisma P2002 avec re-fetch et re-check du threshold
  • Partials : Support des messages/réactions antérieurs au démarrage du bot
  • Components v2 : Containers, Sections, TextDisplay, MediaGallery, Button accessories
  • Logs : Format structuré Pino avec { err }

Reposte les messages populaires dans un salon dédié quand ils reçoivent
assez de réactions. Supporte plusieurs émois (dont customs), configuration
par seuil, auto-star, et salons surveillés.
@RedsTom RedsTom marked this pull request as draft June 15, 2026 15:21
- Add optional chaining to prevent crash in guildId resolution
- Add fallback for message.guild/message.guildId (handles
  messageReactionAdd/Remove events where the reaction object
  doesn't have a direct .guild property)
- Remove incorrect arg.roles check (GuildMember.id is user ID, not guild ID)
- Fix missing .guildId accessor on the guildId fallback
@RedsTom RedsTom force-pushed the feature/starboard branch from 4b167fd to 7578496 Compare June 15, 2026 15:36
@RedsTom RedsTom force-pushed the feature/starboard branch from 7578496 to 5478c37 Compare June 15, 2026 15:36
…te, message removal

- Add reactions JSON column to StarboardEntry model
- Replace computeStarCount with computeReactionMetrics (per-emoji + unique users)
- buildStarboardEmbed now shows inline fields per emoji + total unique footer
- createStarboardEntry reacts with all matching emojis
- updateStarboardEntry updates embed and syncs reactions
- removeStarboardEntry deletes the starboard message
@RedsTom RedsTom force-pushed the feature/starboard branch from e31d810 to 60d6299 Compare June 15, 2026 15:52
RedsTom added 8 commits June 15, 2026 18:33
Add Partials to Client constructor and ConfigProvider import
to starboard listeners for self-star feature.
- Replace legacy embed with Discord components v2 containers
- Add reply container with attachment indicator and inline button
- Fix concurrent reaction race condition (P2002 handler)
- Filter author reactions when selfStar is disabled
- Replace plain text name with author ping in headers
- Use h2 for reaction line and header
@RedsTom RedsTom marked this pull request as ready for review June 17, 2026 15:11
…lor fallback

- Extract duplicate threshold branching into applyMetrics method
- Rename reactionCount → uniqueUserCount in Prisma schema
- Add fallback for EMBED_COLORS lookup
- Reorder DB check before metrics computation
@RedsTom RedsTom self-assigned this Jun 17, 2026
@RedsTom RedsTom requested a review from AntoineJT June 17, 2026 15:30
@RedsTom RedsTom added type: module Add a new module or edit an existing one priority: medium scope: add features Add new features labels Jun 17, 2026
@RedsTom RedsTom added this to the Install bot on server milestone Jun 17, 2026
@RedsTom RedsTom marked this pull request as draft June 17, 2026 17:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: medium scope: add features Add new features type: module Add a new module or edit an existing one

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

module: starboard: Système de starboard personnalisable

1 participant