Emoji Reactions
Botões de reação com emojis para as suas publicações. Uma reação por leitor, contagens opcionais, sem cookies e sem guardar IPs em bruto.
Extensão
Emoji Reactions
Botões de reação com emojis para as suas publicações. Uma reação por leitor, contagens opcionais, sem cookies e sem guardar IPs em bruto.
Descrição
O Reactions adiciona botões de reação com emojis (💗 🤔 😗 por predefinição) às suas publicações. Cada leitor escolhe uma reação por publicação: voltar a clicar remove-a, e clicar noutra troca-a.
Funcionalidades
- Até 6 botões, configurados a partir da página de administração (
key=emoji:label). - Etiquetas opcionais junto a cada emoji e contagens públicas opcionais.
- Uma página de administração que lista as suas 10 publicações com mais reações.
- A página de administração segue o idioma da administração (inglês ou japonês).
- Sem base de dados adicional: os dados ficam no armazenamento EmDash próprio do plugin.
- Não pede permissões nem acesso à rede.
Privacidade
- Os leitores são reconhecidos através de um hash SHA-256 do seu endereço IP e do seu User-Agent com um sal aleatório por site. O IP e o User-Agent em si nunca são guardados.
- Guardado por cada voto: o ID da publicação, o hash, a reação escolhida e um carimbo de data/hora. Sem cookies.
Nota: o plugin não mostra nada por si só. Depois de o instalar, adicione o componente
Reactions.astroao modelo das suas publicações (veja Instalação).
Requisitos
- EmDash 1.x no Cloudflare (D1)
- Plano Workers Paid (os plugins em sandbox correm na ligação Worker Loader)
Instalação
1. Instalar o plugin
Instale o Reactions a partir desta página com Open in EmDash, ou compile-o a partir do código-fonte:
pnpm install
pnpm run build # dist/
Ao compilar a partir do código-fonte, adicione o pacote ao seu site (pnpm add file:../emdash-plugin-emoji-reactions) e indique-o em astro.config.mjs em sandboxed: [reactions].
2. Ativar a sandbox de plugins
Os plugins em sandbox precisam da ligação Worker Loader. Em wrangler.jsonc (comentada nos modelos):
"worker_loaders": []
Certifique-se de que src/worker.ts exporta PluginBridge (os modelos *-cloudflare já o fazem) e de que astro.config.mjs define sandboxRunner: sandbox().
3. Adicionar os botões ao modelo de publicações (obrigatório)
Copie site-snippets/Reactions.astro para src/components/ e coloque-o na página da sua publicação:
---
import Reactions from "../../components/Reactions.astro";
// `post` comes from getEmDashEntry()
---
Use post.data.id (o ID da base de dados), não post.id (o slug). Os slugs mudam quando uma publicação é renomeada, e os slugs traduzidos contêm /, que o plugin rejeita.
Propriedades: contentId (obrigatória), heading (uma cadeia vazia oculta-o), label (nome acessível do grupo de botões). Defina --rx-accent no seu CSS para combinar com a sua cor de destaque.
4. Escolher os botões
Abra Reactions na barra lateral da administração e edite o campo, por exemplo:
love=💗:Love, hmm=🤔:Hmm, whistle=😗:Whoa
Até 6 entradas. As chaves começam por uma letra minúscula. As contagens são guardadas por chave: renomear uma chave inicia um botão novo; remover uma oculta-a mas mantém as suas contagens.
Perguntas frequentes
Os botões não aparecem no meu site
- Verifique se
Reactions.astroestá adicionado ao modelo das suas publicações. O plugin em si não mostra nada. - Abra a consola do navegador. As falhas são registadas como
[reactions] state: HTTP 403 CSRF_REJECTED .... - Se copiou
dist/para o seu site em vez de instalar o pacote, verifique sedist/index.mjscontém"routes". Sem isso, o EmDash trata as rotas públicas como privadas e rejeita os pedidos.
Posso ocultar as contagens?
Sim. Desative Show counts na página de administração. As contagens também ficam então fora da API pública, pelo que não podem ser lidas a partir da página. Continuam a ser contadas e permanecem visíveis para si na página de administração.
Duas pessoas na minha casa/escritório contam como um só leitor
Os leitores atrás do mesmo IP com o mesmo navegador são tratados como um. É um botão de reação informal, não um sistema de votação.
Podem fazer spam com o botão?
Cada leitor tem uma reação por publicação, por isso os cliques repetidos apenas a alternam. As rotas, no entanto, são públicas. Se for preciso, adicione uma regra de Cloudflare Rate Limiting para /_emdash/api/plugins/reactions/react.
Funciona no desenvolvimento local?
Sim. Quando não há um IP de cliente disponível, o navegador envia em vez disso um ID aleatório guardado em localStorage (rx-visitor).
Segurança
Comunicar uma vulnerabilidade
Comunique os problemas de segurança em privado através de a comunicação privada de vulnerabilidades do GitHub, e não em issues públicas.
A que o plugin pode aceder
- Sem permissões nem acesso à rede. O plugin não pode ler nem alterar o seu conteúdo, multimédia, utilizadores ou definições fora do seu próprio armazenamento, e não pode chamar outros serviços.
- Só guarda dados no seu próprio armazenamento EmDash: as contagens por publicação, um registo por voto e as definições dos seus botões.
Dados guardados sobre os leitores
- Um hash SHA-256 truncado do endereço IP e do User-Agent do leitor, combinado com um sal aleatório por site. O endereço IP e o User-Agent em si nunca são guardados.
- Por cada voto: o ID da publicação, esse hash, a reação escolhida e um carimbo de data/hora. Sem cookies.
Rotas públicas
state (GET) e react (POST) são públicas. Ambas validam a sua entrada: contentId tem de corresponder a [A-Za-z0-9_\-:.], as reações têm de ser uma chave configurada e os corpos dos pedidos estão limitados a 1 KB. A rota de administração é privada. Para limitar abusos, adicione uma regra de Cloudflare Rate Limiting para /_emdash/api/plugins/reactions/react.
Registo de alterações
0.2.1 — 2026-10-18
- Adicionado o ícone do registo.
0.2.0 — 2026-10-15
Primeira versão no registo de plugins do EmDash.
- Interruptores Show labels e Show counts na página de administração. As etiquetas estão ocultas por predefinição e mantêm-se como dicas e texto para leitores de ecrã. Com as contagens ocultas, a API pública também as omite.
- Requer EmDash 1.x. As definições dos botões passam para
ctx.settings; os botões guardados na 0.1.x são mantidos. - A página de administração segue o idioma da administração (inglês ou japonês). As etiquetas predefinidas passam a estar em inglês (
Love/Hmm/Whoa); as chaves não mudam, por isso as contagens existentes continuam associadas. Reactions.astro: regista as falhas na consola do navegador em vez de as ocultar em silêncio, acrescenta uma propriedadelabele a variável CSS--rx-accent, e documenta a passagem depost.data.id.pnpm run testpassa a terminar com uma compilação, para quedist/inclua sempre as declarações das rotas públicas.
0.1.0
- Versão inicial (não publicada no registo).