Iscriviti per pubblicare un annuncio

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.

Credo che questo set di autorizzazioni consentirebbe ciò che sto chiedendo dato che ‘marketplace’ è il gruppo di sottoscrizione.

Penso che ci vorrebbe un plugin che rimuove gli utenti dal gruppo quando si crea un argomento nella categoria annunci.

Non penso che il plugin di automazione rimuoverà gli utenti dai gruppi.

1 Mi Piace

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.

Dovresti solo dirgli di usare la sua immaginazione per la prova di concetto.

Probabilmente potresti farlo con i webhook e uno di quegli strumenti per webhook come Zapier.

Renderebbe il plugin più complicato.

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

Potrebbe funzionare!

Inizia con Discourse-plugin-skeleton, rendilo il tuo plugin.rb e magari vedi cosa Ask.discourse.com può fare per aiutarti.

E usa add_model_callback invece di Discourse.event. Puoi cercare alcuni esempi nel repository all_the_plugins.

1 Mi Piace

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
```"}

Santo cielo! Dopo diverse altre conversazioni con Ask Discourse e Grok. Il plugin ora funziona.

Suppongo che l’IA sia davvero UTILE a volte.

È brutto, ma confermato che funziona.


1 Mi Piace

Hai una istanza di sviluppo configurata?

Non so nemmeno cosa voglia dire. :sorriso:

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).

Ah sì, è quello che ho fatto.
Ho aggiunto una riga di git clone nel file app.yml e ricostruito per far partire le cose.

2 Mi Piace

Felice che tu abbia fatto funzionare tutto!

Se hai intenzione di sviluppare un plugin, è 1000 volte più veloce configurare Installare Discourse per lo sviluppo usando Docker o Installare Discourse su Windows per lo sviluppo o Linux o Mac.

Ciò significa che puoi modificare un file e premere ricarica sul tuo browser per vedere se ha funzionato. A volte non devi nemmeno ricaricare.

1 Mi Piace