| Resumo | Execute desafios com limite de tempo, placares, publicações automatizadas e concessão de distintivos. | |
| Link do Repositório | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| Guia de Instalação | Como instalar plugins no Discourse |
Versão Atual: 1.3.0 (atualizado em 27/03/2026)
Licença: MIT
A História
Gerencio uma comunidade de saúde e bem-estar que migrou recentemente do Discord para o Discourse. No Discord, criei um bot personalizado para realizar desafios mensais de condicionamento físico — os membros postavam seus treinos diários, o bot rastreava as confirmações, publicava placares semanais e anunciava os vencedores no final de cada mês. Era uma das nossas funcionalidades mais populares.
Após a migração para o Discourse, os membros começaram a pedir o retorno dos desafios. Procurei por um plugin existente, mas não encontrei nenhum. Então, construí um.
O que começou como uma solução rápida se transformou em um sistema de desafios completo que, honestamente, funciona melhor que o bot original do Discord. Como pode ser útil para outras comunidades, estou compartilhando-o aqui.
O Que Ele Faz
O discourse-daily-challenge permite que você execute desafios estruturados e com limite de tempo diretamente no Discourse. Os membros confirmam sua participação postando em um tópico designado com uma hashtag ou uma foto. O plugin rastreia tudo automaticamente.
Funcionalidades Principais
Confirmações Flexíveis
Os membros confirmam sua participação postando no tópico do desafio com a hashtag configurada ou um anexo de foto. Os desafios podem ser configurados para confirmações diárias ou semanais. A janela de confirmação é avaliada no fuso horário configurado do desafio, garantindo o funcionamento correto para comunidades globais.
Placar em Tempo Real e Sequências
O painel do administrador mostra a classificação em tempo real, incluindo o total de confirmações, sequências atuais e porcentagem de conclusão para cada participante. Os rótulos das sequências refletem automaticamente o intervalo do desafio (“Sequência de dias” vs “Sequência de semanas”).
Publicações Automatizadas do Placar
Defina um dia e hora para uma publicação semanal automatizada do placar diretamente no tópico do desafio. Uma publicação final de resultados também é gerada automaticamente no dia seguinte ao término do desafio.
Distintivos Personalizados
Defina um número mínimo de confirmações necessárias para “completar” o desafio. Os participantes elegíveis recebem automaticamente um distintivo personalizado do Discourse quando o desafio termina. O nome do distintivo é preenchido automaticamente a partir do título do tópico.
Múltiplos Desafios Simultâneos
Execute quantos desafios quiser ao mesmo tempo. Cada desafio possui seu próprio tópico, cronograma, fuso horário, distintivo e placar.
Desafios Arquivados
Desafios concluídos são preservados em uma visualização de acordeão arquivada no painel, permitindo que você revise resultados históricos.
Gerenciamento Manual de Confirmações por Administrador
Administradores podem adicionar ou remover confirmações manualmente — útil para capturar postagens perdidas ou resolver disputas.
Gatilho Manual do Placar
Um botão “Publicar Placar Agora” permite que administradores publiquem uma atualização do placar sob demanda, fora da janela agendada.
Acesso de Moderador
Moderadores completos do site podem criar, editar e gerenciar desafios por meio de uma seção dedicada na barra lateral. Pode ser ativado ou desativado nas configurações do site.
Acesso de Moderador de Categoria
Moderadores de categoria podem gerenciar desafios vinculados às suas categorias atribuídas por meio de uma rota dedicada /challenges — sem necessidade de acesso de administrador. Pode ser ativado ou desativado independentemente nas configurações do site.
Instalação
Adicione o seguinte ao seu containers/app.yml em hooks > after_code > exec > cmd:
- git clone https://github.com/R23DPrinting/discourse-daily-challenge.git
Em seguida, reconstrua:
cd /var/discourse && ./launcher rebuild app
Após a instalação inicial, atualizações futuras podem ser aplicadas por meio do botão Atualizar no painel, a menos que indicado de outra forma no registro de alterações.
Configuração
Criando um Desafio
Navegue até Admin → Plugins → Desafios → Desafios do Discourse e clique em Novo Desafio.
| Campo | Descrição |
|---|---|
| ID do Tópico | O tópico do Discourse onde os membros farão as confirmações. O título do tópico preencherá automaticamente o campo de nome do distintivo. |
| Gatilho da Hashtag | Hashtag obrigatória para confirmações (sem o #, ex: treino) |
| Intervalo de Confirmação | Modo de confirmação diário ou semanal |
| Início da Semana | Para desafios semanais: qual dia inicia a semana (Domingo, Segunda ou Sábado) |
| Data de Início | Primeiro dia do desafio (inclusivo) |
| Data de Término | Último dia do desafio (inclusivo) |
| Fuso Horário do Desafio | Fuso horário para avaliar a janela de confirmação (opcional, padrão é UTC) |
| Confirmações Necessárias | Número mínimo de confirmações para ganhar o distintivo de conclusão |
| Descrição | Descrição opcional do desafio |
| Ativar Publicação Semanal do Placar | Alternar publicações semanais automatizadas do placar |
| Dia da Semana da Publicação | Dia da semana para a publicação automatizada do placar |
| Hora da Publicação | Hora (0–23, no fuso horário do desafio) para a publicação automatizada do placar |
| Conceder Distintivo de Conclusão | Alternar a concessão automática do distintivo ao final do desafio |
| Nome do Distintivo | Nome do distintivo a ser criado e concedido — preenchido automaticamente a partir do título do tópico |
Configurações do Site
| Configuração | Padrão | Descrição |
|---|---|---|
daily_challenge_enabled |
true |
Ativar ou desativar globalmente o plugin |
daily_challenge_mod_access_enabled |
true |
Permitir que moderadores completos do site gerenciem desafios |
daily_challenge_category_mod_access_enabled |
true |
Permitir que moderadores de categoria gerenciem desafios em suas categorias atribuídas |
Como Funcionam as Confirmações
- Um membro publica uma resposta no tópico do desafio
- A postagem deve conter a hashtag configurada ou um anexo de foto
- O plugin verifica se o membro já confirmou presença durante o período atual (dia ou semana, dependendo do intervalo do desafio)
- Se não, a confirmação é registrada e o placar é atualizado
- É permitida uma confirmação por membro por período
Administradores podem visualizar e gerenciar todas as confirmações a partir do painel do administrador.
Acesso de Moderador e Moderador de Categoria
Moderadores completos do site podem acessar o gerenciamento de desafios por meio de uma seção DESAFIOS na barra lateral principal (se daily_challenge_mod_access_enabled estiver ativado).
Moderadores de categoria podem acessar uma versão específica em /challenges/dashboard e /challenges/challenges — eles só podem visualizar e gerenciar desafios vinculados a tópicos em suas categorias atribuídas. Isso requer que daily_challenge_category_mod_access_enabled esteja ativado e que o usuário seja designado como moderador de categoria via Admin → Categorias → [Categoria] → Moderação.
Publicações Automatizadas
Placar Semanal
O plugin executa um trabalho em segundo plano a cada hora que verifica se é hora de publicar o placar semanal. Quando o dia e a hora configurados chegam (no fuso horário do desafio), ele cria uma postagem formatada no tópico do desafio mostrando a classificação atual.
Postagem de Resultados Finais
No dia seguinte ao término do desafio, uma postagem final de resultados é publicada automaticamente. Ela lista todos os participantes, suas confirmações totais, status de conclusão e parabeniza os ganhadores de distintivos.
Tabelas do Banco de Dados
daily_challenges— Definições de desafiosdaily_check_ins— Registros individuais de confirmação por usuário, por desafio, por período
Compatibilidade
- Discourse 3.x+
- Testado em instalações auto-hospedadas
- Ruby 3.x, Rails 7.x+
Roadmap (v1.4.0)
- @ChallengeBot comandos de menção — membros podem mencionar a conta do bot @ChallengeBot em tópicos de desafio para obter estatísticas pessoais via DM (
status,leaderboard,streak,help) - DMs de confirmação de confirmação — DM automático após cada confirmação bem-sucedida com informações da sequência atual
- DMs de Lembrete — configuração opcional por desafio; desafios diários enviam um lembrete após 2+ dias perdidos, desafios semanais enviam um lembrete no último dia da semana se ainda não houver confirmação
Registro de Alterações
v1.3.0
- Acesso de moderador de categoria — moderadores de categoria podem criar, editar, excluir e gerenciar confirmações para desafios em suas categorias atribuídas via
/challenges/dashboarde/challenges/challenges— sem necessidade de acesso de administrador - Preenchimento automático do nome do distintivo — o campo de nome do distintivo é preenchido automaticamente a partir do título do tópico quando um ID de tópico é inserido
- Validação do nome do distintivo — o nome do distintivo é obrigatório quando “Conceder distintivo de conclusão” está ativado; retorna um erro adequado em vez de um 500
- Alternâncias separadas para mod/mod de categoria —
daily_challenge_mod_access_enablededaily_challenge_category_mod_access_enabledpodem ser alternados independentemente
v1.2.0
- Intervalo de confirmação configurável — execute desafios diários ou semanais
- Configuração de início da semana — para desafios semanais, escolha se as semanas começam no domingo, segunda ou sábado
- Sequências conscientes do intervalo — rótulos e cálculos de sequência agora refletem o intervalo do desafio
- Acesso de moderador — moderadores completos do site podem gerenciar desafios por meio de uma seção dedicada na barra lateral
- Renomeado para “Desafios do Discourse” na interface do administrador
v1.1.1
- Painel de múltiplos desafios mostrando todos os desafios ativos simultaneamente
- Acordeão de desafios arquivados mostrando resultados históricos
v1.1.0
- Suporte a fuso horário por desafio
- Cronograma de postagem semanal agora é por desafio (dia, hora, alternar ativar/desativar)
v1.0.0
- Lançamento inicial
Feedback e Contribuições
Este plugin foi construído para atender a uma necessidade real em nossa comunidade, e estou compartilhando-o caso possa ajudar a sua. Problemas, PRs e solicitações de recursos são bem-vindos no GitHub.
Se você está gerenciando uma comunidade onde responsabilidade e consistência são importantes — condicionamento físico, aprendizado de idiomas, escrita, hábitos criativos — os desafios diários podem ser uma ferramenta de engajamento genuinamente poderosa. Espero que este plugin facilite trazer isso para sua comunidade no Discourse.




