Discord: sticker-only and poll-only messages arrive as nothing #62

Closed
opened 2026-09-02 00:04:08 -04:00 by Salastil · 1 comment
Owner

is_empty_message (discord.rs:1988) treats a message with no text, no attachments and no embeds as empty and drops it. Discord's sticker_items and poll fields are never read, so a message that is only a sticker or only a poll is discarded silently — the recipient sees no line at all, not even a placeholder.

Done looks like: at minimum, render a sticker as an image attachment (they are just CDN assets) and a poll as its question plus options. Not voting, not authoring — just not vanishing.

`is_empty_message` (`discord.rs:1988`) treats a message with no text, no attachments and no embeds as empty and drops it. Discord's `sticker_items` and `poll` fields are never read, so a message that is only a sticker or only a poll is discarded silently — the recipient sees no line at all, not even a placeholder. **Done looks like:** at minimum, render a sticker as an image attachment (they are just CDN assets) and a poll as its question plus options. Not voting, not authoring — just not vanishing.
Salastil added the bugcritical labels 2026-09-03 13:11:26 -04:00
Author
Owner

Finished. Both carried no content, no embed and no attachment, so is_empty_message dropped them whole — the worst way for a message to go missing, since nobody knows to look for it and the channel just appears to have gone quiet.

Stickers become pictures, from Discord's own CDN in their own format (PNG or GIF). Lottie stickers are a vector animation format nothing here can draw, so those become sent a sticker: name — not the sticker, but a message that arrived.

Polls become their question and their options, with the per-option emoji where there is one. Voting is Discord's interactive machinery and belongs with #105; what was actually asked is the half that matters, and without it a channel went silent in the middle of a decision.

Covered by five unit tests over real payload shapes — sticker-only, animated, Lottie, a poll, and a poll with no answers (which stays hidden, since a bare marker on a line says less than nothing).

nobilis 63e29f6

Finished. Both carried no content, no embed and no attachment, so `is_empty_message` dropped them whole — the worst way for a message to go missing, since nobody knows to look for it and the channel just appears to have gone quiet. **Stickers** become pictures, from Discord's own CDN in their own format (PNG or GIF). Lottie stickers are a vector animation format nothing here can draw, so those become `sent a sticker: name` — not the sticker, but a message that arrived. **Polls** become their question and their options, with the per-option emoji where there is one. Voting is Discord's interactive machinery and belongs with #105; what was actually asked is the half that matters, and without it a channel went silent in the middle of a decision. Covered by five unit tests over real payload shapes — sticker-only, animated, Lottie, a poll, and a poll with no answers (which stays hidden, since a bare marker on a line says less than nothing). nobilis 63e29f6
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Salastil/moho#62