Desafios Diários do Discourse

:information_source: Resumo Execute desafios com limite de tempo, placares, publicações automatizadas e concessão de distintivos.
:hammer_and_wrench: Link do Repositório GitHub - R23DPrinting/discourse-daily-challenge · GitHub
:open_book: 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

:white_check_mark: 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.

:bar_chart: 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”).

:robot: 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.

:sports_medal: 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.

:card_index_dividers: 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.

:file_folder: 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.

:hammer_and_wrench: Gerenciamento Manual de Confirmações por Administrador
Administradores podem adicionar ou remover confirmações manualmente — útil para capturar postagens perdidas ou resolver disputas.

:pushpin: 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.

:police_officer: 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.

:card_index_dividers: 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

  1. Um membro publica uma resposta no tópico do desafio
  2. A postagem deve conter a hashtag configurada ou um anexo de foto
  3. O plugin verifica se o membro já confirmou presença durante o período atual (dia ou semana, dependendo do intervalo do desafio)
  4. Se não, a confirmação é registrada e o placar é atualizado
  5. É 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 desafios
  • daily_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/dashboard e /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 categoriadaily_challenge_mod_access_enabled e daily_challenge_category_mod_access_enabled podem 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.

:link: GitHub - R23DPrinting/discourse-daily-challenge · GitHub

15 curtidas

Isto é ótimo, obrigado por compartilhar. Quanto aos recursos, eu poderia ver que seria útil para nós se fosse possível especificar o intervalo de desafio como algo diferente de diário, ou seja, escolher uma verificação de desafio semanal em vez de diária durante todo o período do desafio. Também seria ótimo se os moderadores/moderadores de categoria pudessem criar desafios para que não dependesse apenas do administrador configurar as coisas.

1 curtida

Deixe-me ver se entendi as solicitações:

Então, você gostaria de configurar o desafio para, digamos, 1 mês (1 a 30 de abril), mas especificar que ele conta apenas 1 entrada por semana em vez de 1 entrada por dia? Você gostaria que fosse uma semana de domingo a sábado ou a cada 7 dias?

Esta é uma boa ideia. Honestamente, não tenho moderadores na minha comunidade, então não sei como é o painel de administração para eles. Vou criar uma conta de moderador no meu ambiente de desenvolvimento e experimentar.

1 curtida

Sim, exatamente. Nossa comunidade tem um desafio 52 em 52 onde há um desafio semanal por um ano, então check-ins não diários dariam mais flexibilidade para diferentes tipos de desafios.

Discourse Calendar (and Event) permite que o administrador defina o início da semana como sábado, domingo ou segunda-feira, então, se você quiser planejar a compatibilidade com esse plugin no futuro (como gerar eventos de calendário para check-ins ou datas de início/fim?), eu poderia seguir como o Calendar define a semana? Para minha comunidade especificamente, acho que não importa.

Moderadores de categoria, além dos moderadores regulares, seriam muito bons – temos pequenos grupos de interesse que têm suas próprias subcategorias, e seria bom permitir que esses moderadores de categoria executassem desafios separados sem torná-los moderadores completos.

1 curtida

Estas são ótimas ideias. Obrigado por compartilhar! Vou ver o que posso fazer para implementá-las.

1 curtida

Este plugin exige que o plugin gamification esteja ativado, ou você selecionou a tag porque seu plugin é para gamificação em geral?

2 curtidas

Não requer o plugin. Eu apenas selecionei a tag. Desculpe por isso.

2 curtidas

v1.2.0 já está disponível!

Novidades nesta versão:

  • Intervalo de check-in configurável — execute desafios diários ou semanais
  • Configuração do início da semana — para desafios semanais, escolha se as semanas começam no domingo, segunda ou sábado
  • Sequências conscientes do intervalo — os rótulos e cálculos de sequências agora refletem o intervalo do desafio (“sequência semanal” vs “sequência diária”)
  • Acesso de moderador — moderadores completos do site agora podem criar, editar e gerenciar desafios por meio de uma seção dedicada na barra lateral. Isso pode ser ativado ou desativado em Admin → Configurações → Plugins (daily_challenge_mod_access_enabled), permitindo que comunidades que preferem manter o gerenciamento de desafios restrito apenas aos administradores o façam.
  • Renomeado para “Discourse Challenges” na interface de administração
Capturas de tela

Formulário de Desafio — Intervalo de Check-in

Painel — Semana Começa em

Acesso da Barra Lateral de Moderador

Observação: Esta versão requer ./launcher rebuild app para aplicar as migrações do banco de dados — o botão Atualizar no painel não funcionará para esta versão.


Quanto ao acesso de moderação por categoria — isso é algo que estamos trabalhando ativamente. O desafio é que o Discourse não concede status de equipe aos moderadores de categoria, o que significa que eles não conseguem acessar rotas de /admin de forma alguma, independentemente do que o plugin faça. Estamos explorando uma rota não administrativa separada especificamente para moderadores de categoria que lhes daria acesso restrito aos desafios em suas categorias. Espere isso na v1.3.0.

1 curtida

Não consigo criar um desafio; ele está retornando erro 500 para qualquer ação.

Isso é estranho. Estou executando em 2 fóruns diferentes sem problemas e fiz bastante teste. Qual versão do Discourse você está usando? Você está na versão mais recente do plugin (1.2.0)?

Você pode fazer SSH no seu servidor, executar alguns comandos e publicar os resultados?

Primeiro, verifique o número da versão do plugin:

./launcher enter app
cat /var/www/discourse/plugins/discourse-daily-challenge/plugin.rb | grep version

Em seguida, tente criar um desafio. Quando você receber o erro 500, execute imediatamente isto na sessão SSH:

./launcher enter app
tail -50 /var/www/discourse/log/production.log

Me avise os resultados e podemos tentar resolver isso.

Discourse 2026.3.0-latest.1 - https://github.com/discourse/discourse version f2781e1455274ea2c011fd1d161ac2ad9fde72bd

# version: 1.2.0
# required_version: 2.7.0
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:05 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "2", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar\",\"action\":\"reply                                                                                        \",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\                                                                                        "composerTime\":25298,\"typingTime\":3900,\"locale\":\"\"}", "owner" => "fee91ce                                                                                        037e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.1ms)
Started GET "/t/os-melhores-blogs-de-games-no-brasil/15399?__cf_chl_rt_tk=5M6_rd                                                                                        _fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYR                                                                                        CQNnUboE4.po6L1TFk1E" for 164.52.120.12 at 2026-03-26 20:49:06 +0000
Processing by TopicsController#show as */*
  Parameters: {"__cf_chl_rt_tk" => "5M6_rd_fq46BL9PZ6VvZRAVdIsJ84aL9XIfa1Re_paQ-                                                                                        1773238724-1.0.1.1-g20DH5dkOVXOIHhKYVpNwYRCQNnUboE4.po6L1TFk1E", "slug" => "os-m                                                                                        elhores-blogs-de-games-no-brasil", "topic_id" => "15399"}
  Rendered layout layouts/application.html.erb (Duration: 107.3ms | GC: 1.4ms)
Completed 200 OK in 192ms (Views: 109.0ms | ActiveRecord: 0.0ms (0 queries, 0 ca                                                                                        ched) | GC: 2.4ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:11 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "3", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar com o comportamento                                                                                         \",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\                                                                                        ",\"metaData\":null,\"composerTime\":31344,\"typingTime\":4600,\"locale\":\"\"}"                                                                                        , "owner" => "fee91ce037e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started GET "/leaderboard" for 2804:1e68:c201:632a:1161:4504:ea4d:9983 at 2026-0                                                                                        3-26 20:49:15 +0000
Processing by DiscourseGamification::GamificationLeaderboardController#respond a                                                                                        s JSON
Completed 200 OK in 30ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:16 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "4", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não vou me estressar com o comportamento                                                                                         das outras pessoas \",\"action\":\"reply\",\"categoryId\":14,\"tags\":[],\"arche                                                                                        typeId\":\"regular\",\"metaData\":null,\"composerTime\":36481,\"typingTime\":510                                                                                        0,\"locale\":\"\"}", "owner" => "fee91ce037e64ec297a500af13091165", "force_save"                                                                                         => "false"}
Completed 200 OK in 11ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started GET "/leaderboard/6?period=daily" for 2804:1e68:c201:632a:1161:4504:ea4d                                                                                        :9983 at 2026-03-26 20:49:19 +0000
Processing by DiscourseGamification::GamificationLeaderboardController#respond a                                                                                        s JSON
  Parameters: {"period" => "daily", "id" => "6"}
Completed 200 OK in 20ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Processing by UserAvatarsController#show as PNG
  Parameters: {"hostname" => "segredin.com", "username" => "mary", "size" => "28                                                                                        8", "version" => "8962_2"}
Completed 418  in 8ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached)                                                                                         | GC: 0.0ms)
Sent file /var/www/discourse/public/uploads/default/optimized/2X/8/86ba5981dfff7                                                                                        6df7de0f2141a1a87ad805e2c5c_2_288x288.jpeg (0.2ms)
Started GET "/latest.json" for 2804:79d4:f008:68f:fd8c:855b:db16:bbee at 2026-03                                                                                        -26 20:49:23 +0000
Processing by ListController#latest as JSON
Completed 200 OK in 143ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cach                                                                                        ed) | GC: 6.8ms)
Started GET "/t/17746/1.json?track_visit=true&forceLoad=true" for 2804:79d4:f008                                                                                        :68f:fd8c:855b:db16:bbee at 2026-03-26 20:49:31 +0000
Processing by TopicsController#show as JSON
  Parameters: {"track_visit" => "true", "forceLoad" => "true", "topic_id" => "17                                                                                        746", "post_number" => "1"}
Completed 200 OK in 114ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cach                                                                                        ed) | GC: 1.8ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:32 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "5", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo k\",\"action\":\"reply\",\"ca                                                                                        tegoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"compos                                                                                        erTime\":46059,\"typingTime\":8500,\"locale\":\"\"}", "owner" => "fee91ce037e64e                                                                                        c297a500af13091165", "force_save" => "false"}
Completed 200 OK in 13ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:36 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "6", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo julgar \",\"action\":\"reply\                                                                                        ",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"                                                                                        composerTime\":50400,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce0                                                                                        37e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 10ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Started POST "/drafts.json" for 2804:1b0:f442:e48c:3056:bd27:b4ae:52b3 at 2026-0                                                                                        3-26 20:49:37 +0000
Processing by DraftsController#create as JSON
  Parameters: {"draft_key" => "topic_17746", "sequence" => "7", "data" => "{\"re                                                                                        ply\":\"@Discipulo na minha opinião eu não consigo julgar \",\"action\":\"reply\                                                                                        ",\"categoryId\":14,\"tags\":[],\"archetypeId\":\"regular\",\"metaData\":null,\"                                                                                        composerTime\":51596,\"typingTime\":9100,\"locale\":\"\"}", "owner" => "fee91ce0                                                                                        37e64ec297a500af13091165", "force_save" => "false"}
Completed 200 OK in 10ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cache                                                                                        d) | GC: 0.0ms)
Processing by TopicsController#timings as */*
  Parameters: {"timings" => {"1" => "59036"}, "topic_time" => "59036", "topic_id                                                                                        " => "17746"}
Completed 418  in 8ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached)                                                                                         | GC: 0.0ms)

Hmmmm. Esse log não mostra o erro 500. Quando exatamente o erro ocorre? Você vê algum erro na tela ou apenas a mensagem genérica “Algo deu errado”? Você está se certificando de preencher todos os campos? Especialmente o ID do tópico?

Pode tentar criar um desafio novamente e executar isso assim que ver o erro 500? Vamos aumentar um pouco o tamanho:

./launcher enter app
tail -100 /var/www/discourse/log/production.log | grep -A 30 "500\|Error\|exception"

(post excluído pelo autor)

Espere, vou habilitar novamente.

Ahhh. Acho que vejo o problema. O nome da insígnia deveria ser extraído do título do tópico, mas acho que cometi um erro na minha última atualização. Você pode tentar preencher o campo do nome da insígnia e ver se funciona? Também vou lançar uma correção assim que chegar em casa.

2 curtidas

Algo novo? Atualizei aqui e ainda nada

Olá. Desculpe. Esqueci de atualizar este post ontem à noite. Fiz um push de uma atualização que incluiu a correção para os distintivos (junto com algumas outras melhorias). Se você for em Admin > Atualizar Discourse, deverá ver que há uma atualização disponível.

Em breve farei um post completo com as alterações.

2 curtidas

Tenho certeza de que estou fazendo isso da maneira errada

Primeira dúvida: o ID do tópico pode ser existente ou preciso criar um novo?
Entendi que a tag não tem #.

O início e o fim podem ser alguns dias ou semanas, ou posso definir até dezembro, por exemplo?

De qualquer forma, aguardo suas explicações, pois gostei deste plugin e estou aqui para fornecer feedbacks.

Deve ser um ID de tópico existente ao qual sua conta tenha acesso (presumo que você seja um administrador, então isso não deve ser um problema). Exemplo: Se a URL do tópico for:

https://community.com/t/test-formatting/722

O ID de tópico que você deve inserir é: 722

Ao digitar o número, o nome do tópico deve aparecer abaixo para confirmar que você inseriu o ID correto.

Você está correto. Digite a hashtag sem o #. Se quiser usar #testtag, basta digitar testtag na caixa.

As datas de início e fim podem ser as que você desejar.

activerecord (8.0.5) lib/active_record/inheritance.rb:76:in 'ActiveRecord::Inheritance::ClassMethods#new'
plugins/discourse-daily-challenge/app/controllers/discourse_daily_challenge/admin_daily_challenges_controller.rb:26:in 'DiscourseDailyChallenge::AdminDailyChallengesController#create'

minha primeira configuração

E meus logs recentes