Je cherche une façon d’implémenter une catégorie en tant que simple marché où les utilisateurs peuvent acheter une publicité (lire un post).
Il semble que le plugin des abonnements permette d’ajouter un paiement à un groupe, et ensuite, lorsque l’abonnement est annulé, manuellement ou de manière programmatique, cela retire l’utilisateur.
Ce que j’essaie d’accomplir, c’est un abonnement qui permettra de publier dans une catégorie puis de les retirer du groupe autorisé à publier.
Cela peut-il être réalisé uniquement avec le plugin des abonnements, ou peut-être en combinant abonnements et automatisation ?
Pour faire court, je veux vendre des posts individuels. Les réponses aux posts seraient gratuites.
Eh bien, je ne peux pas coder moi-même, et comme ce serait une preuve de concept avant que je ne puisse convaincre mon patron de le soutenir, je n’ai pas de moyen d’offrir un soutien monétaire pour le moment.
Quelqu’un d’autre pense qu’une chose comme ça serait bénéfique pour la communauté ?
Une autre considération, est-ce qu’il y a une communication entre Discourse et le plugin d’abonnements qui pourrait suivre le nombre d’abonnements d’un utilisateur ? Cela serait utile pour permettre à quelqu’un d’acheter plusieurs publications en une seule fois plutôt que d’acheter une, de poster, puis d’acheter une autre et de poster à nouveau.
C’est sûr, mais ce serait cool à avoir.
Quoi qu’il en soit, il semble que cela ferait l’affaire tant que vous codez en dur l’ID de catégorie et le nom du groupe.
Des vrais codeurs peuvent-ils développer cela afin que vous puissiez définir ces variables à partir de la page des paramètres du 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
# Paramètre du site pour activer/désactiver le 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
# Écoute les événements de création de post
DiscourseEvent.on(:post_created) do |post|
next unless SiteSetting.auto_remove_group_enabled
next unless post&.user # S'assurer que le post a un utilisateur
next unless post&.topic&.category_id # S'assurer que le post est dans une catégorie
target_category_id = SiteSetting.auto_remove_group_category_id
group_name = SiteSetting.auto_remove_group_name
# Vérifier si le post est dans la catégorie configurée
if post.topic.category_id == target_category_id
begin
group = Group.find_by(name: group_name)
unless group
Rails.logger.error("AutoRemoveGroup: Groupe '#{group_name}' introuvable")
next
end
user = post.user
if group.users.include?(user)
group.remove(user)
Rails.logger.info("AutoRemoveGroup: Utilisateur #{user.username} retiré du groupe #{group_name} après avoir posté dans la catégorie #{target_category_id}")
else
Rails.logger.info("AutoRemoveGroup: L'utilisateur #{user.username} n'est pas dans le groupe #{group_name}, aucune action effectuée")
end
rescue StandardError => e
Rails.logger.error("AutoRemoveGroup: Erreur lors du retrait de l'utilisateur du groupe : #{e.message}")
end
end
end
end
Grok et ask.discourse.com disent tous deux d’installer le plugin dans /var/discouse/plugins/.
Le problème est que je n’ai pas ce chemin, ni à l’intérieur ni à l’extérieur du conteneur. Le plus proche que je puisse trouver est à l’intérieur du conteneur, j’ai /var/www/discourse/plugins/.
Lorsque j’essaie de l’installer là et de reconstruire, il disparaît.
D’accord, donc le bot dit que c’est normal pour une installation auto-hébergée. Je ne sais pas comment configurer un dépôt git approprié pour installer le plugin de la manière normale. Quelqu’un peut-il m’aider avec ça ?
Je pense avoir lancé git, installé le plugin et rencontré quelques erreurs. C’est honnêtement là où je suis perdu.
/var/www/discourse/plugins/discourse-auto-remove-group/plugin.rb:9:in `activate!': méthode indéfinie `register_site_setting' pour une instance de Plugin::Instance (NoMethodError)
Vous ne pouvez pas démarrer Discourse à cause d'erreurs dans le plugin à
/var/www/discourse/plugins/discourse-auto-remove-group
Veuillez essayer de supprimer ce plugin et de reconstruire à nouveau !
I, [2025-05-20T16:17:10.306025 #1] INFO -- :
I, [2025-05-20T16:17:10.347496 #1] INFO -- : Résiliation des processus asynchrones
I, [2025-05-20T16:17:10.350251 #1] INFO -- : Envoi de INT à HOME=/var/lib/postgresql USER=postgres exécuter 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 -- : Envoi de TERM à exécuter 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 : réception de la demande d'arrêt rapide
109:signal-handler (1747757830) réception de SIGTERM planification de l'arrêt...
109:M 20 mai 2025 16:17:10.368 # L'utilisateur a demandé l'arrêt...
109:M 20 mai 2025 16:17:10.369 * Sauvegarde du dernier instantané RDB avant la sortie.
2025-05-20 16:17:10.412 UTC [42] LOG : annulation de toutes transactions actives
2025-05-20 16:17:10.438 UTC [42] LOG : arrière-plan travailleur "logical replication launcher" (PID 56) a quitté avec le code de sortie 1
2025-05-20 16:17:10.438 UTC [51] LOG : fermeture en cours
2025-05-20 16:17:10.447 UTC [51] LOG : début du point de contrôle : fermeture immédiate
2025-05-20 16:17:10.526 UTC [51] LOG : point de contrôle terminé : écrit 0 tampons (0.0%) ; 0 fichier WAL ajouté, 0 supprimé, 0 recyclé ; écriture=0.001 s, synchronisation=0.001 s, total=0.088 s ; fichiers de synchronisation=0, le plus long=0.000 s, moyenne=0.000 s ; distance=0 kB, estimation=4 kB
2025-05-20 16:17:10.540 UTC [42] LOG : système de base de données arrêté
109:M 20 mai 2025 16:17:10.947 * La base de données est enregistrée sur disque
109:M 20 mai 2025 16:17:10.947 # Redis est prêt à sortir, au revoir...
ÉCHEC
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' a échoué avec le retour #Process::Status: pid 987 sortant 1
Lieu de l'échec : /usr/local/lib/ruby/gems/3.3.0/gems/pups-1.2.1/lib/pups/exec_command.rb:132:in `spawn'
exec failed avec les paramètres {"cd"=>"$home", "tag"=>"migrate", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
L'initialisation a échoué avec le code de sortie 1
** ÉCHEC DE L'INITIALISATION ** veuillez faire défiler vers le haut et rechercher les messages d'erreur précédents, il peut y en avoir plusieurs.
./discourse-doctor peut aider à diagnostiquer le problème.
9fed9596b10ffb4628947e678585b813813ae27a4de746feba16e89f2b9cdc51
Vous devriez placer l’URL du dépôt Github dans votre fichier app.yml, si vous effectuez une installation en production.
La méthode de clonage que vous avez utilisée convient davantage pour des installations en développement, mais je ne pense pas que ce soit ce que vous exécutez (puisque vous utilisez le launcher).
Cela signifie que vous pouvez modifier un fichier et actualiser votre navigateur pour voir si cela a fonctionné. Parfois, vous n’avez même pas besoin d’actualiser.