| Resumo | Execute desafios de check-in diários com tempo limitado, tabelas de classificação, publicações automatizadas e prêmios de emblema. | |
| Link do Repositório | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| Guia de Instalação | Como instalar plugins no Discourse |
A História
Eu administro uma comunidade de saúde e bem-estar que recentemente migrou do Discord para o Discourse. No Discord, eu havia criado um bot personalizado para realizar desafios de fitness mensais — os membros postavam seus treinos diários, o bot rastreava os check-ins, publicava tabelas de classificação semanais e anunciava os vencedores no final de cada mês. Era um dos nossos recursos mais populares.
Após a migração para o Discourse, os membros começaram a pedir os desafios de volta. Procurei por um plugin existente e não encontrei nada. Então, eu construí um.
O que começou como uma solução rápida se transformou em um sistema de desafios completo que, honestamente, funciona melhor do que o bot original do Discord. Como pode ser útil para outras comunidades, estou compartilhando-o aqui.
Recursos
- Check-ins por hashtag ou foto — os membros fazem check-in postando a hashtag do desafio (ex:
#AbrilFitness) ou carregando uma imagem no tópico do desafio. Ambos acionam um check-in válido. - Um check-in por dia — aplicado nos níveis de aplicação e banco de dados. A janela diária de cada usuário é baseada no fuso horário do seu perfil.
- Fuso horário por desafio — defina o fuso horário do desafio independentemente do fuso horário do seu servidor para que nenhum membro seja prejudicado à meia-noite UTC.
- Painel de administração em tempo real — mostra todos os desafios ativos simultaneamente com contagem de participantes, média de check-ins, rastreamento de sequência (streak), porcentagem de conclusão e uma tabela de classificação ranqueada.
- Múltiplos desafios simultâneos — execute vários desafios ao mesmo tempo, cada um com seu próprio tópico, hashtag, cronograma e emblema.
- Desafios arquivados — desafios concluídos preservados em um arquivo expansível mostrando estatísticas finais, vencedores e taxas de conclusão.
- Publicações automatizadas de tabela de classificação semanal — publicadas no tópico do desafio em um dia e hora configuráveis no fuso horário do próprio desafio.
- Publicação de resultados finais — postada automaticamente no dia seguinte ao término do desafio, listando todos que atingiram a meta de check-ins.
- Prêmios de emblema personalizados — cria automaticamente um emblema do Discourse para cada desafio e o concede aos participantes elegíveis quando o desafio termina.
- Gerenciamento de check-ins pelo administrador — adicione ou remova check-ins para qualquer usuário diretamente no painel de administração.
- Gatilho manual da tabela de classificação — publique a tabela de classificação a qualquer momento na página de detalhes do desafio.
- Data final inclusiva — se você definir a data final para 31 de março, os check-ins em 31 de março contam.
Configuração
Criando um Desafio
Vá para Admin → Plugins → Desafio Diário (Daily Challenge) → Desafios (Challenges) → Novo Desafio (New Challenge)
Insira um ID de Tópico para vincular o desafio a um tópico existente. O plugin exibirá o título do tópico como confirmação. Preencha o gatilho de hashtag, as datas de início e fim e o número de check-ins necessários para completar o desafio.
Defina o Fuso Horário do Desafio (Challenge timezone) para o fuso horário principal da sua comunidade para garantir que os limites de data sejam avaliados corretamente para seus membros.
Se você deseja publicações automáticas de tabela de classificação semanal, ative a chave seletora (toggle) e defina o dia e a hora. Se desejar um emblema de conclusão, ative a chave seletora e insira um nome de emblema (ex: “Campeão de Fitness de Abril”).
Clique em Salvar desafio (Save challenge) — se a concessão de emblemas estiver ativada, o emblema é criado automaticamente.
Executando um Desafio
Uma vez criado, o desafio está imediatamente ativo. Os membros postam no tópico vinculado com a hashtag ou uma imagem para fazer o check-in. O painel de administração (Admin → Plugins → Desafio Diário (Daily Challenge) → Painel (Dashboard)) exibe estatísticas em tempo real para todos os desafios ativos.
Dicas
- Peça aos membros para definirem seu fuso horário em Perfil → Preferências → Interface → Fuso Horário (Timezone) para janelas de check-in diárias precisas.
- Use o botão Publicar Tabela de Classificação Agora (Post Leaderboard Now) na página de detalhes do desafio para acionar uma publicação da tabela de classificação a qualquer momento.
- Use a seção Check-ins na página de detalhes do desafio para adicionar ou remover manualmente check-ins para qualquer usuário.
Configurações
| Nome | Descrição |
|---|---|
| daily_challenge_enabled | Chave mestre de ligar/desligar para o plugin |
| Topic ID | O tópico onde os participantes postam os check-ins |
| Hashtag trigger | A hashtag a ser monitorada, sem o # |
| Start date | Primeiro dia em que os check-ins são aceitos |
| End date | Último dia em que os check-ins são aceitos (inclusivo) |
| Check-ins needed | Número de check-ins necessários para completar o desafio e se qualificar para o emblema |
| Description | Nota interna opcional sobre o desafio (não mostrada aos participantes) |
| Challenge timezone | Fuso horário usado para limites de data e cronograma de publicação semanal |
| Enable weekly leaderboard post | Ativa/desativa publicações semanais automáticas |
| Post day of week | Dia em que a publicação semanal é publicada |
| Post hour (0-23) | Hora em que a publicação semanal é publicada no fuso horário do desafio |
| Award completion badge | Ativa/desativa a criação e concessão automática de emblemas |
| Badge name | Nome do emblema criado para este desafio |
Próximos Passos
Planejamento para a v2:
- Confirmação por DM após cada check-in com estatísticas atuais
- DMs de lembrete diário para participantes que ainda não fizeram check-in
- Comandos de @menção para verificar estatísticas pessoais
Suporte e Solicitações de Recursos
Se você encontrar algum problema ou tiver ideias para novos recursos, abra uma issue no GitHub ou responda a este tópico.