Abonniere, um eine Anzeige zu schalten

Ich suche nach einer Möglichkeit, eine Kategorie als einfachen Marktplatz zu implementieren, auf dem Nutzer eine Anzeige (Post) kaufen können.

Es sieht so aus, als würde das Abonnement-Plugin eine bezahlte Ergänzung zu einer Gruppe ermöglichen, und wenn das Abonnement storniert wird, entweder manuell oder programmatisch, wird der Nutzer entfernt.

Was ich erreichen möchte, ist ein Abonnement, das einen Beitrag in einer Kategorie erlaubt und dann die Nutzer aus der Gruppe entfernt, die zum Posten berechtigt ist.

Kann dies entweder nur mit dem Abonnement-Plugin umgesetzt werden, oder vielleicht in Kombination mit Automatisierungs-Tools?

Kurz gesagt, möchte ich einzelne Beiträge verkaufen. Antworten auf Beiträge wären kostenlos.

Ich glaube, dieser Satz von Berechtigungen würde das erlauben, was ich frage, da ‘marketplace’ die Abonnementgruppe ist.

Ich denke, du benötigst ein Plugin, das sie aus der Gruppe entfernt, wenn du ein Thema in der Anzeigenkategorie erstellst.

Ich glaube nicht, dass das Automatisierungs-Plugin Nutzer aus Gruppen entfernen wird.

1 „Gefällt mir“

Nun, ich kann selbst keinen Code schreiben, und da dies ein Proof of Concept wäre, bevor ich meinen Chef überzeugen könnte, es zu unterstützen, habe ich momentan keine Möglichkeit, finanzielle Unterstützung anzubieten.
Denkt sonst noch jemand, dass so etwas gut für die Gemeinschaft wäre?

Eine weitere Überlegung ist, ob es eine Kommunikation zwischen Discourse und dem Abonnement-Plugin gibt, die verfolgt, wie viele Abonnements ein Nutzer hat. Das wäre hilfreich, um jemandem zu ermöglichen, mehrere Beiträge auf einmal zu kaufen, anstatt eines nach dem anderen zu kaufen und dann zu posten.

Sie müssten ihm einfach sagen, er soll seine Fantasie für das Proof of Concept nutzen.

Sie könnten es wahrscheinlich mit Webhooks und einem dieser Webhook-Tools wie Zapier machen.

Es würde das Plugin komplizierter machen.

Sicher, aber es wäre cool zu haben.
Auf jeden Fall scheint dies die Aufgabe zu erfüllen, solange Sie die Kategorie-ID und den Gruppennamen fest codieren.
Können echte Programmierer dies erweitern, damit Sie diese Variablen auf der Einstellungsseite des Plugins festlegen können?

# 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

# Site setting to enable/disable the 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
  # Listen for post creation events
  DiscourseEvent.on(:post_created) do |post|
    next unless SiteSetting.auto_remove_group_enabled
    next unless post&.user # Ensure post has a user
    next unless post&.topic&.category_id # Ensure post is in a category

    target_category_id = SiteSetting.auto_remove_group_category_id
    group_name = SiteSetting.auto_remove_group_name

    # Check if the post is in the configured category
    if post.topic.category_id == target_category_id
      begin
        group = Group.find_by(name: group_name)
        unless group
          Rails.logger.error("AutoRemoveGroup: Group '#{group_name}' not found")
          next
        end

        user = post.user
        if group.users.include?(user)
          group.remove(user)
          Rails.logger.info("AutoRemoveGroup: Removed user #{user.username} from group #{group_name} after posting in category #{target_category_id}")
        else
          Rails.logger.info("AutoRemoveGroup: User #{user.username} is not in group #{group_name}, no action taken")
        end
      rescue StandardError => e
        Rails.logger.error("AutoRemoveGroup: Error removing user from group: #{e.message}")
      end
    end
  end
end

Das könnte funktionieren!

Beginne mit dem Discourse-plugin-skeleton, mache das zu deinem plugin.rb und schaue vielleicht, was Ask.discourse.com helfen kann.

Und verwende add_model_callback anstelle von Discourse.event. Du kannst im all_the_plugins Repository nach einigen Beispielen suchen.

1 „Gefällt mir“

Sowohl grok als auch ask.discourse.com sagen, dass das Plugin unter /var/discouse/plugins/ installiert werden soll.

Das Problem ist, dass ich diesen Pfad weder innerhalb noch außerhalb des Containers habe. Das Nächstliegende, das ich finden kann, ist innerhalb des Containers /var/www/discourse/plugins/.

Wenn ich versuche, es dort zu installieren und neu zu erstellen, verschwindet es.

Okay, der Bot sagt, das sei normal für eine selbst gehostete Installation. Ich weiß nicht, wie ich ein richtiges Git-Repository einrichten kann, um das Plugin auf normale Weise zu installieren. Kann mir jemand dabei helfen?

Ich glaube, ich habe git eingerichtet, das Plugin installiert und einige Fehler bekommen. Ehrlich gesagt bin ich hier verloren.

/var/www/discourse/plugins/discourse-auto-remove-group/plugin.rb:9:in `activate!': undefinierte Methode `register_site_setting' für eine Instanz von Plugin::Instance (NoMethodError)
Sie können Discourse aufgrund von Fehlern im Plugin unter
/var/www/discourse/plugins/discourse-auto-remove-group nicht starten

Bitte versuchen Sie, dieses Plugin zu entfernen und erneut neu zu erstellen!
I, [2025-05-20T16:17:10.306025 #1]  INFO -- : 
I, [2025-05-20T16:17:10.347496 #1]  INFO -- : Beende asynchrone Prozesse
I, [2025-05-20T16:17:10.350251 #1]  INFO -- : Sende INT an 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 -- : Sende TERM an 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:  Schneller Herunterfahrbefehl empfangen
109:signal-handler (1747757830) Empfing SIGTERM zum Herunterfahren...
109:M 20. Mai 2025 16:17:10.368 # Benutzer hat Herunterfahren angefordert...
109:M 20. Mai 2025 16:17:10.369 * Speichert den letzten RDB-Snapshot vor dem Beenden.
2025-05-20 16:17:10.412 UTC [42] LOG:  Abbruch laufender Transaktionen
2025-05-20 16:17:10.438 UTC [42] LOG:  Hintergrundarbeiter "logischer Replikationsstarter" (PID 56) mit Exit-Code 1 beendet
2025-05-20 16:17:10.438 UTC [51] LOG:  Herunterfahren
2025-05-20 16:17:10.447 UTC [51] LOG:  Prüfpunkte starten: sofortiges Herunterfahren
2025-05-20 16:17:10.526 UTC [51] LOG:  Prüfpunktausführung abgeschlossen: 0 Puffer geschrieben (0.0%); 0 WAL-Dateien hinzugefügt, entfernt, recycelt; Schreibzeit=0.001 s, Synchronisation=0.001 s, Gesamt=0.088 s; Synchronisationsdateien=0, längste=0.000 s, durchschnitt=0.000 s; Entfernung=0 KB, Schätzung=4 KB
2025-05-20 16:17:10.540 UTC [42] LOG:  Datenbanksystem ist heruntergefahren
109:M 20. Mai 2025 16:17:10.947 * Datenbank auf Festplatte gespeichert
109:M 20. Mai 2025 16:17:10.947 # Redis ist jetzt bereit zum Beenden, tschüss...


FEHLERHAFT
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' schlug fehl mit Rückgabewert #<Process::Status: pid 987 exit 1>
Ort des Fehlers: /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
Ausführungsfehler bei den Parametern {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
Bootstrap ist mit Exit-Code 1 fehlgeschlagen
** Bootstrap-Fehler ** Bitte scrollen Sie nach oben und schauen Sie nach früheren Fehlermeldungen, es könnte mehrere geben.
./discourse-doctor kann bei der Diagnose des Problems helfen.
9fed9596b10ffb4628947e678585b813813ae27a4de746feba16e89f2b9cdc51

Heiliger Bimbam! Nach mehreren weiteren Gesprächen mit Ask Discourse und Grok funktioniert das Plugin jetzt.

Ich schätze, KI ist manchmal doch nützlich.

Es ist hässlich, aber es funktioniert.


1 „Gefällt mir“

Haben Sie eine Entwicklungsumgebung eingerichtet?

Ich weiß nicht einmal, was das bedeutet. :leichtes Lächeln:

Sie sollten die Github-Repository-URL in Ihrer app.yml-Datei hinterlegen, wenn Sie eine Produktionsinstallation durchführen.

Die Klonmethode, die Sie verwendet haben, eignet sich eher für Entwicklungsinstallationen, aber ich denke nicht, dass Sie das ausführen (da Sie den Launcher verwenden).

Ah ja, genau das habe ich gemacht.
Ich habe eine git clone-Zeile in die app.yml-Datei eingefügt und neu gebaut, um die Dinge zum Laufen zu bringen.

2 „Gefällt mir“

Freut mich, dass es funktioniert hat!

Wenn Sie ein Plugin entwickeln möchten, ist es 1000-mal schneller, Discourse für die Entwicklung mit Docker zu installieren oder Discourse unter Windows für die Entwicklung zu installieren oder unter Linux oder Mac einzurichten.

Das bedeutet, Sie können eine Datei bearbeiten und im Browser neu laden, um zu sehen, ob es funktioniert hat. Manchmal müssen Sie nicht einmal neu laden.

1 „Gefällt mir“