Sto cercando un modo per implementare una categoria come un semplice marketplace dove gli utenti possono acquistare un annuncio (leggere un post).
Sembra che il plugin delle sottoscrizioni consentirà un’aggiunta a pagamento a un gruppo e poi, quando l’abbonamento viene annullato, manualmente o tramite programma, rimuove l’utente.
Quello che sto cercando di fare è una sottoscrizione che permetta un post in una categoria e poi li rimuova dal gruppo autorizzato a postare.
Può essere realizzato solo con il plugin delle sottoscrizioni, o forse tra sottoscrizioni e automazione?
Detto in modo più semplice, voglio vendere post singoli. Le risposte ai post sarebbero gratuite.
Bene, non riesco a programmare da solo, e dato che questo sarebbe una prova di concetto prima che io possa convincere il mio capo a supportarlo, al momento non ho modo di offrire supporto monetario.
Qualcun altro pensa che qualcosa del genere sarebbe utile per la comunità?
Un’altra considerazione è se ci sia qualche comunicazione tra Discourse e il plugin delle iscrizioni che possa tenere traccia di quanti iscritti ha un utente. Sarebbe utile permettere a qualcuno di acquistare più post contemporaneamente anziché comprarne uno, poi postare, poi comprarne un altro, e di nuovo postare.
Certamente, ma sarebbe bello averlo.
Comunque, sembra che questo farebbe il lavoro finché si codificano in modo fisso l’ID della categoria e il nome del gruppo.
Qualche vero programmatore può espandere questo in modo da poter impostare quelle variabili dalla pagina delle impostazioni del 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
# Impostazione del sito per abilitare/disabilitare il 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
# Ascolta gli eventi di creazione dei post
DiscourseEvent.on(:post_created) do |post|
next unless SiteSetting.auto_remove_group_enabled
next unless post&.user # Assicurati che il post abbia un utente
next unless post&.topic&.category_id # Assicurati che il post sia in una categoria
target_category_id = SiteSetting.auto_remove_group_category_id
group_name = SiteSetting.auto_remove_group_name
# Controlla se il post è nella categoria configurata
if post.topic.category_id == target_category_id
begin
group = Group.find_by(name: group_name)
unless group
Rails.logger.error("AutoRemoveGroup: Gruppo '#{group_name}' non trovato")
next
end
user = post.user
if group.users.include?(user)
group.remove(user)
Rails.logger.info("AutoRemoveGroup: Utente #{user.username} rimosso dal gruppo #{group_name} dopo aver postato nella categoria #{target_category_id}")
else
Rails.logger.info("AutoRemoveGroup: Utente #{user.username} non è nel gruppo #{group_name}, nessuna azione intrapresa")
end
rescue StandardError => e
Rails.logger.error("AutoRemoveGroup: Errore durante la rimozione dell'utente dal gruppo: #{e.message}")
end
end
end
end
Sia grok che ask.discourse.com dicono di installare il plugin in /var/discouse/plugins/.
Il problema è che non ho quel percorso, né all’interno né all’esterno del container. Il più vicino che riesco a trovare è all’interno del container dove ho /var/www/discourse/plugins/.
Quando provo a installarlo lì e a ricostruire, scompare.
Ok, quindi il bot dice che è normale per un’installazione self-hosted. Non so come impostare un repository git corretto per installare il plugin nel modo normale. Qualcuno può aiutarmi con questo?
Penso di aver fatto funzionare git, ho installato il plugin e ho riscontrato alcuni errori. Onestamente è qui che mi perdo.
/var/www/discourse/plugins/discourse-auto-remove-group/plugin.rb:9:in `activate!': undefined method `register_site_setting' for an instance of Plugin::Instance (NoMethodError)
Non è possibile avviare Discourse a causa di errori nel plugin in
/var/www/discourse/plugins/discourse-auto-remove-group
Si prega di provare a rimuovere questo plugin e a ricostruire di nuovo!
I, [2025-05-20T16:17:10.306025 #1] INFO -- :
I, [2025-05-20T16:17:10.347496 #1] INFO -- : Terminating async processes
I, [2025-05-20T16:17:10.350251 #1] INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec 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 -- : Sending TERM to exec 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: received fast shutdown request
109:signal-handler (1747757830) Received SIGTERM scheduling shutdown...
109:M 20 May 2025 16:17:10.368 # User requested shutdown...
109:M 20 May 2025 16:17:10.369 * Saving the final RDB snapshot before exiting.
2025-05-20 16:17:10.412 UTC [42] LOG: aborting any active transactions
2025-05-20 16:17:10.438 UTC [42] LOG: background worker "logical replication launcher" (PID 56) exited with exit code 1
2025-05-20 16:17:10.438 UTC [51] LOG: shutting down
2025-05-20 16:17:10.447 UTC [51] LOG: checkpoint starting: shutdown immediate
2025-05-20 16:17:10.526 UTC [51] LOG: checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.001 s, total=0.088 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=4 kB
2025-05-20 16:17:10.540 UTC [42] LOG: database system is shut down
109:M 20 May 2025 16:17:10.947 * DB saved on disk
109:M 20 May 2025 16:17:10.947 # Redis is now ready to exit, bye bye...
FALLITO
--------------------
Pups::ExecError: cd /var/www/discourse
exec fallito con i parametri {"cd"=\u003e"$home", "tag"=\u003e"migrate", "hook"=\u003e"db_migrate", "cmd"=\u003e["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap fallito con codice di uscita 1
** FALLITO IL BOOTSTRAP ** scorri verso l'alto e cerca messaggi di errore precedenti, potrebbero essercene più di uno.
./discourse-doctor può aiutare a diagnosticare il problema.
9fed9596b10ffb4628947e678585b813813ae27a4de746feba16e89f2b9cdc51
```"}
Dovresti inserire l’URL del repository Github nel tuo file app.yml, se stai eseguendo un’installazione in produzione.
Il metodo di clonazione che hai usato funziona più per installazioni di sviluppo, ma non credo che sia quello che stai eseguendo (dato che stai usando il launcher).