Estou procurando uma maneira de implementar uma categoria como um marketplace simples, onde os usuários possam comprar um anúncio (ler postagem).
Parece que o plugin de assinaturas permitirá uma adição paga a um grupo, e então, quando a assinatura for cancelada, manual ou programaticamente, ela remove o usuário.
O que estou tentando fazer é uma assinatura que permita uma postagem em uma categoria e depois remova-os do grupo permitido para postar.
Isso pode ser realizado apenas com o plugin de assinaturas, ou talvez entre assinaturas e automação?
Dito de forma mais simples, quero vender postagens individuais. Respostas às postagens seriam gratuitas.
Bem, eu não consigo programar por conta própria, e como isso seria uma prova de conceito antes de conseguir convencer meu chefe a apoiá-lo, não tenho como oferecer suporte financeiro no momento.
Mais alguém acha que algo assim seria útil para a comunidade?
Outra consideração, há alguma comunicação entre o Discourse e o plugin de assinaturas que poderia rastrear quantas assinaturas um usuário possui? Seria útil permitir que alguém compre várias postagens de uma só vez, em vez de comprar uma, postar, depois comprar outra e postar novamente.
Com certeza, mas seria legal ter.
De qualquer forma, parece que isso faria o trabalho, desde que você codifique o ID da categoria e o nome do grupo.
Algum programador de verdade pode expandir isso para que você possa definir essas variáveis na página de configurações do plugin?
# name: discourse-auto-remove-group
# version: 0.1
# authors: tknospdr
# url: https://github.com/tknospdr/discourse-auto-remove-group
enabled_site_setting :auto_remove_group_enabled
# Configuração do site para habilitar/desabilitar o plugin
register_site_setting :auto_remove_group_enabled, type: :boolean, default: false
register_site_setting :auto_remove_group_category_id, type: :integer, default: 0
register_site_setting :auto_remove_group_name, type: :string, default: ""
after_initialize do
# Ouvir eventos de criação de post
DiscourseEvent.on(:post_created) do |post|
next unless SiteSetting.auto_remove_group_enabled
next unless post&.user # Garante que o post tenha um usuário
next unless post&.topic&.category_id # Garante que o post esteja em uma categoria
target_category_id = SiteSetting.auto_remove_group_category_id
group_name = SiteSetting.auto_remove_group_name
# Verifica se o post está na categoria configurada
if post.topic.category_id == target_category_id
begin
group = Group.find_by(name: group_name)
unless group
Rails.logger.error("AutoRemoveGroup: Grupo '#{group_name}' não encontrado")
next
end
user = post.user
if group.users.include?(user)
group.remove(user)
Rails.logger.info("AutoRemoveGroup: Usuário #{user.username} removido do grupo #{group_name} após postar na categoria #{target_category_id}")
else
Rails.logger.info("AutoRemoveGroup: Usuário #{user.username} não está no grupo #{group_name}, nenhuma ação tomada")
end
rescue StandardError => e
Rails.logger.error("AutoRemoveGroup: Erro ao remover usuário do grupo: #{e.message}")
end
end
end
end
Tanto o grok quanto o ask.discourse.com dizem para instalar o plugin em /var/discouse/plugins/.
O problema é que não tenho esse caminho, nem dentro nem fora do contêiner. O mais próximo que consigo encontrar é dentro do contêiner, tenho /var/www/discourse/plugins/.
Quando tento instalá-lo lá e reconstruir, ele desaparece.
Ok, então o bot diz que isso é normal para uma instalação auto-hospedada. Não sei como configurar um repositório git adequado para instalar o plugin da maneira normal. Alguém pode me ajudar com isso?
Acho que consegui fazer o git funcionar, instalei o plugin e encontrei alguns erros. Honestamente, é aqui que estou perdido.
/var/www/discourse/plugins/discourse-auto-remove-group/plugin.rb:9:in `activate!': método indefinido `register_site_setting' para uma instância de Plugin::Instance (NoMethodError)
Você não consegue iniciar o Discourse devido a erros no plugin em
/var/www/discourse/plugins/discourse-auto-remove-group
Por favor, tente remover este plugin e reconstruir novamente!
I, [2025-05-20T16:17:10.306025 #1] INFO -- :
I, [2025-05-20T16:17:10.347496 #1] INFO -- : Encerrando processos assíncronos
I, [2025-05-20T16:17:10.350251 #1] INFO -- : Enviando INT para HOME=/var/lib/postgresql USER=postgres executar chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/15/bin/postmaster -D /etc/postgresql/15/main pid: 42
I, [2025-05-20T16:17:10.351238 #1] INFO -- : Enviando TERM para executar chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 109
2025-05-20 16:17:10.351 UTC [42] LOG: solicitação de desligamento rápido recebida
109:signal-handler (1747757830) Recebeu SIGTERM agendando desligamento...
109:M 20 Mai 2025 16:17:10.368 # Usuário solicitou desligamento...
109:M 20 Mai 2025 16:17:10.369 * Salvando o snapshot final RDB antes de sair.
2025-05-20 16:17:10.412 UTC [42] LOG: abortando quaisquer transações ativas
2025-05-20 16:17:10.438 UTC [42] LOG: trabalhador de fundo "logical replication launcher" (PID 56) saiu com código de saída 1
2025-05-20 16:17:10.438 UTC [51] LOG: desligando
2025-05-20 16:17:10.447 UTC [51] LOG: início do checkpoint: desligamento imediato
2025-05-20 16:17:10.526 UTC [51] LOG: checkpoint concluído: escreveu 0 buffers (0,0%); 0 arquivo WAL adicionado, removido, reciclado; escrita=0.001 s, sincronização=0.001 s, total=0.088 s; arquivos de sincronização=0, mais longo=0.000 s, média=0.000 s; distância=0 kB, estimativa=4 kB
2025-05-20 16:17:10.540 UTC [42] LOG: sistema de banco de dados desligado
109:M 20 Mai 2025 16:17:10.947 * Banco salvo no disco
109:M 20 Mai 2025 16:17:10.947 # Redis agora está pronto para sair, tchau tchau...
FALHOU
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' falhou com retorno #<Process::Status: pid 987 saída 1>
Localização da falha: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec falhou com os parâmetros {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap falhou com código de saída 1
** FALHA AO BOOTSTRAP ** por favor, role para cima e procure por mensagens de erro anteriores, pode haver mais de uma.
./discourse-doctor pode ajudar a diagnosticar o problema.
9fed9596b10ffb4628947e678585b813813ae27a4de746feba16e89f2b9cdc51
Você deve colocar o URL do repositório do Github no seu arquivo app.yml, se estiver executando uma instalação de produção.
O método de clonagem que você usou funciona mais para instalações de desenvolvimento, mas não acho que seja isso que você está executando (já que você está usando o launcher).