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