Plugin ActivityPub

J’ai essayé d’installer ce plugin et j’obtiens toujours cet avertissement dans /logs :

[Discourse Activity Pub] https://futarino.online/ap/actor/a3838865a250342cf09f7907b653b9d1 failed to schedule https://futarino.online/ap/activity/2628ea98d33a52fd2412f9d59541bb91 for delivery: no recipients

trace :

/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:73:in `log_failure' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:31:in `can_deliver?' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:16:in `perform' 
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/delivery_handler.rb:23:in `perform' 
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:143:in `activity_pub_deliver_activity' 
/var/www/discourse/plugins/discourse-activity-pub/app/models/concerns/discourse_activity_pub/ap/model_callbacks.rb:33:in `perform_activity_pub_activity' 
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:494:in `block (2 levels) in activate!' 
/var/www/discourse/lib/plugin/instance.rb:316:in `public_send' 
/var/www/discourse/lib/plugin/instance.rb:316:in `block (2 levels) in add_to_class' 
/var/www/discourse/plugins/discourse-activity-pub/plugin.rb:502:in `block (2 levels) in activate!' 
/var/www/discourse/lib/plugin/instance.rb:316:in `public_send' 
/var/www/discourse/lib/plugin/instance.rb:316:in `block (2 levels) in add_to_class' 
/var/www/discourse/plugins/discourse-activity-pub/app/controllers/discourse_activity_pub/post_controller.rb:13:in `schedule' 
actionpack-7.0.7/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action' 
actionpack-7.0.7/lib/abstract_controller/base.rb:215:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/rendering.rb:165:in `process_action' 
actionpack-7.0.7/lib/abstract_controller/callbacks.rb:234:in `block in process_action' 
activesupport-7.0.7/lib/active_support/callbacks.rb:118:in `block in run_callbacks' 
/var/www/discourse/app/controllers/application_controller.rb:421:in `block in with_resolved_locale' 
i18n-1.14.1/lib/i18n.rb:322:in `with_locale' 
/var/www/discourse/app/controllers/application_controller.rb:421:in `with_resolved_locale' 
activesupport-7.0.7/lib/active_support/callbacks.rb:127:in `block in run_callbacks' 
activesupport-7.0.7/lib/active_support/callbacks.rb:138:in `run_callbacks' 
actionpack-7.0.7/lib/abstract_controller/callbacks.rb:233:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/rescue.rb:23:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/instrumentation.rb:67:in `block in process_action' 
activesupport-7.0.7/lib/active_support/notifications.rb:206:in `block in instrument' 
activesupport-7.0.7/lib/active_support/notifications/instrumenter.rb:24:in `instrument' 
activesupport-7.0.7/lib/active_support/notifications.rb:206:in `instrument' 
actionpack-7.0.7/lib/action_controller/metal/instrumentation.rb:66:in `process_action' 
actionpack-7.0.7/lib/action_controller/metal/params_wrapper.rb:259:in `process_action' 
activerecord-7.0.7/lib/active_record/railties/controller_runtime.rb:27:in `process_action' 
actionpack-7.0.7/lib/abstract_controller/base.rb:151:in `process' 
actionview-7.0.7/lib/action_view/rendering.rb:39:in `process' 
rack-mini-profiler-3.1.1/lib/mini_profiler/profiling_methods.rb:111:in `block in profile_method' 
actionpack-7.0.7/lib/action_controller/metal.rb:188:in `dispatch' 
actionpack-7.0.7/lib/action_controller/metal.rb:251:in `dispatch' 
actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:49:in `dispatch' 
actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:32:in `serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:50:in `block in serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `each' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `serve' 
actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:852:in `call' 
railties-7.0.7/lib/rails/engine.rb:530:in `call' 
railties-7.0.7/lib/rails/railtie.rb:226:in `public_send' 
railties-7.0.7/lib/rails/railtie.rb:226:in `method_missing' 
actionpack-7.0.7/lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>' 
actionpack-7.0.7/lib/action_dispatch/routing/mapper.rb:48:in `serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:50:in `block in serve' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `each' 
actionpack-7.0.7/lib/action_dispatch/journey/router.rb:32:in `serve' 
actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:852:in `call' 
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:74:in `call' 
rack-2.2.8/lib/rack/tempfile_reaper.rb:15:in `call' 
rack-2.2.8/lib/rack/conditional_get.rb:40:in `call' 
rack-2.2.8/lib/rack/head.rb:12:in `call' 
actionpack-7.0.7/lib/action_dispatch/http/permissions_policy.rb:38:in `call' 
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call' 
/var/www/discourse/lib/middleware/anonymous_cache.rb:389:in `call' 
/var/www/discourse/lib/middleware/gtm_script_nonce_injector.rb:10:in `call' 
rack-2.2.8/lib/rack/session/abstract/id.rb:266:in `context' 
rack-2.2.8/lib/rack/session/abstract/id.rb:260:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/cookies.rb:704:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/callbacks.rb:27:in `block in call' 
activesupport-7.0.7/lib/active_support/callbacks.rb:99:in `run_callbacks' 
actionpack-7.0.7/lib/action_dispatch/middleware/callbacks.rb:26:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/show_exceptions.rb:29:in `call' 
logster-2.13.0/lib/logster/middleware/reporter.rb:40:in `call' 
railties-7.0.7/lib/rails/rack/logger.rb:40:in `call_app' 
railties-7.0.7/lib/rails/rack/logger.rb:27:in `call' 
/var/www/discourse/config/initializers/100-quiet_logger.rb:20:in `call' 
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/remote_ip.rb:93:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/request_id.rb:26:in `call' 
/var/www/discourse/lib/middleware/enforce_hostname.rb:24:in `call' 
rack-2.2.8/lib/rack/method_override.rb:24:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/executor.rb:14:in `call' 
rack-2.2.8/lib/rack/sendfile.rb:110:in `call' 
actionpack-7.0.7/lib/action_dispatch/middleware/host_authorization.rb:131:in `call' 
rack-mini-profiler-3.1.1/lib/mini_profiler.rb:413:in `call' 
message_bus-4.3.8/lib/message_bus/rack/middleware.rb:60:in `call' 
/var/www/discourse/lib/middleware/request_tracker.rb:233:in `call' 
railties-7.0.7/lib/rails/engine.rb:530:in `call' 
railties-7.0.7/lib/rails/railtie.rb:226:in `public_send' 
railties-7.0.7/lib/rails/railtie.rb:226:in `method_missing' 
rack-2.2.8/lib/rack/urlmap.rb:74:in `block in call' 
rack-2.2.8/lib/rack/urlmap.rb:58:in `each' 
rack-2.2.8/lib/rack/urlmap.rb:58:in `call' 
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load' 
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>' 

De plus, je ne trouve pas le compte que j’ai configuré sur Mastodon.

Y a-t-il une solution à ce problème ?

Vous recevez cet avertissement car votre catégorie n’a pas d’abonnés. Il faut au moins un abonné pour qu’une livraison ait lieu.

  1. Copiez le nom d’utilisateur des paramètres de la catégorie.
  2. Recherchez-le sur Mastodon (il devrait apparaître).
  3. Suivez-le avec votre compte Mastodon.

Le problème est que je l’ai recherché et j’ai obtenu un gros 404.
Est-ce parce qu’il faut un certain temps pour qu’il prenne effet ?

Résumé


À quoi ressemblent les paramètres de catégorie ActivityPub ? Pourriez-vous m’en partager une capture d’écran (en particulier le badge d’état) ? Envoyez-la-moi peut-être par message privé afin de ne pas monopoliser ce sujet.

2 « J'aime »

Y a-t-il (ou y aura-t-il) un moyen de mettre d’anciens sujets sur le fediverse également ? J’ai des sujets avec des milliers de réponses et ils ne sont pas fédérés. Je ne sais pas comment on pourrait procéder pour fédérer ces sujets ?

Les administrateurs peuvent désormais déclencher la publication d’un sujet individuel dans une catégorie configurée. Ceci est disponible dans le menu clé du message :

Cependant, nous n’avons pas de système en place pour publier en masse d’anciens sujets et ce n’est pas sur notre liste de priorités. Compte tenu de la nature éphémère des médias sociaux, je ne suis pas sûr qu’il y ait beaucoup d’intérêt pour la publication d’anciens messages sur ActivityPub. Cela dit, cela est probablement réalisable avec une tâche Rake.

6 « J'aime »

Existe-t-il un moyen de faire le chemin inverse, par exemple de Mastodon vers Discourse ?

Nous avons des notes de version automatisées tooted sur notre Mastodon, donc les avoir reflétées dans Discourse serait formidable.

3 « J'aime »

Ce n’est pas pris en charge actuellement, mais c’est dans notre feuille de route et nous prévoyons d’y travailler au cours des 2 à 3 prochains mois.

4 « J'aime »

Ces feuilles de route sont-elles accessibles au public, par exemple sur GitHub ?

2 « J'aime »

Oui, je publierai bientôt une mise à jour ici. (La feuille de route des fonctionnalités ajoutées à ce jour se trouve quelques dizaines de messages plus tôt dans ce sujet.)

4 « J'aime »

Voici ce que nous avons prévu pour le plugin au cours des 2-3 prochains mois :

  • améliorer les performances du plugin (sans changements visibles par l’utilisateur)
  • ajouter de meilleurs éléments d’interface utilisateur à une catégorie activée pour ActivityPub dans Discourse
    • cela signifie inclure plus de détails sur les statistiques ActivityPub de la catégorie, ainsi qu’un flux plus facile pour les utilisateurs souhaitant suivre la catégorie dans leur client ActivityPub
  • permettre aux catégories Discourse de suivre des acteurs externes
    • cela permettrait de synchroniser le contenu ActivityPub vers une catégorie Discourse, y compris la synchronisation Discourse-à-Discourse via ActivityPub, c’est-à-dire qu’une catégorie sur le site Discourse A peut suivre une catégorie sur le site Discourse B (où les deux sites ont le plugin activé et configuré de manière appropriée)
  • corrections de bugs et améliorations des fonctionnalités existantes
    • gestion des problèmes de synchronisation des avatars et des modifications de messages activés pour AP par d’autres utilisateurs (personnel, etc.)
    • si possible, traitement des limitations actuelles concernant les modifications d’auteur et les wikis
17 « J'aime »

Cela pourrait être un développement incroyable (ou du moins le début de quelque chose d’incroyable :-). À l’heure actuelle, les instances de Discourse sont peut-être les lieux de rencontre et de discussion en ligne de la plus haute qualité sur Internet, mais ce sont toutes des îles séparées. Une sorte de fédération entre elles et peut-être avec d’autres types de serveurs (lorsque cela a du sens) ouvrirait une nouvelle fenêtre. Je regarde cela avec une certaine excitation !

8 « J'aime »

Pour vous informer, nous venons de fusionner la PR qui permet à une catégorie Discourse de suivre n’importe quel acteur du fediverse, y compris d’autres catégories Discourse. Oui, cela signifie que vous pouvez désormais fédérer une catégorie entre deux (ou trois, ou plus) Discourses. Il y a quelques autres PR en cours dans le cadre de cette phase, mais celle-ci était importante.

Voici une vidéo de moi fédérant entre deux instances Discourse et une instance Mastodon fonctionnant sur mon ordinateur

29 « J'aime »

J’espère pouvoir attribuer des acteurs ActivityPub par étiquette plutôt que par catégorie. Je pense que cela fonctionnerait également grâce au support du plugin d’intégration de chat, et cela permettrait un filtrage de contenu supplémentaire.

Une autre idée intéressante serait de mettre chaque publication ActivityPub dans une file d’attente pour approbation par les administrateurs et modérateurs avant sa mise en ligne. Ce serait formidable si cela permettait à un groupe de confirmer si le sujet est prêt pour une publication croisée. Il en serait de même pour les réponses, plutôt que de les publier automatiquement depuis le fediverse vers le forum.

Merci dans tous les cas de travailler sur cet excellent plugin.

7 « J'aime »

Puisque cet appel concerne les logiciels ActivityPub, peut-être existe-t-il une catégorie ici sur Meta avec laquelle nous pourrions fédérer Discourse - SocialHub :slight_smile:

4 « J'aime »

Nous apprécions le plugin, mais il y a un bug dans la version actuelle entre le maxlength de l’extrait et le lien vers le forum. Si le maxlength de l’extrait se produit au milieu d’un lien, le lien « Discutez-en sur notre forum » obtient une cible étrange :

Par exemple :

Ceci obtient un lien de forum final :
https://jcheminf.biomedcentral.com/a…<br><br><a href=

Je ne suis pas expert en Ruby, mais je suppose que le code pour recadrer la publication à maxlength devrait vérifier qu’il n’est pas au milieu d’un lien avant d’ajouter la fin « lien vers le forum ».

4 « J'aime »

Je note qu’à partir du commit fb83e554fd, la restriction sur les wikis semble supprimée, et qu’à ce stade, la restriction sur le changement de propriétaire de publication dans les catégories fédérées demeure.

Je ne change pas souvent le propriétaire de publication, mais les publications de description de catégorie sont un exemple qui compte pour moi. Je désigne le modérateur de catégorie le plus actif comme propriétaire lorsque cela change, moment auquel je l’encourage à le mettre à jour le cas échéant. C’est maintenant la plus grande restriction dont je suis conscient qui m’empêche de mettre cela en œuvre.

Je reconnais l’inadéquation du modèle entre Discourse et ActivityPub qui crée cette préoccupation. Serait-il judicieux de mettre en œuvre une action privilégiée (admin ?) « défédérer cette publication » qui enverrait une activité de suppression pour la publication si elle a été fédérée, la marquerait comme ne devant jamais être fédérée, puis autoriserait le changement de propriétaire ?

5 « J'aime »

Je comprends votre cas d’utilisation, mais je ne considère pas cela comme une priorité absolue pour le moment. Pour l’instant, j’aimerais concentrer nos efforts sur le perfectionnement de la fonctionnalité de synchronisation Discourse-à-Discourse, je pense que cela nécessitera une attention considérable au cours des prochaines semaines.

C’est une bonne découverte, merci de signaler le problème. Nous allons nous y pencher.

1 « J'aime »

Ce “remplissage” proviendra-t-il de l’acteur ActivityPub lié ?

Cas d’utilisation :
Peupler une catégorie Discourse avec des avis de conseils déjà publiés sur Mastodon.

3 « J'aime »

Le remplissage a posteriori n’est pas encore pris en charge. J’aimerais le prendre en charge, en particulier pour le scénario de fédération Discourse à Discourse. Ce pourrait être un peu plus délicat à faire pour le cas d’utilisation que vous avez décrit.

8 « J'aime »