إضافة ActivityPub

آه، من الجيد سماع ذلك! نعم، أعتقد أنك على حق بشأن متابعة شخص ينشر في منتدى، ولكن قد تكون هناك ميزة للنشر على الفيديفيرس وليس في منتدى. على سبيل المثال، يضع NodeBB كل محتوى الفيديفيرس خارج المجتمعات في فئة “غير مصنفة”، لذا إذا نشرت هناك، فهذا يشبه إلى حد كبير النشر على ماستودون. يقوم Mbin أيضًا بشيء مماثل، فقد بدأوا كمُجمِّع للروابط وأضافوا علامة تبويب “التدوين المصغر”. أتفهم أن هذا خارج نطاق Discourse في الوقت الحالي، شكرًا لتوضيح ذلك!

إعجابَين (2)

هناك أشخاص مجانين (مثلي) يريدون استخدام ديسكورس (Discourse) كمنزلهم الأساسي في الفيدفيرس (Fediverse). أريد النشر إلى الفيدفيرس فقط عبر ديسكورس (Discourse).

ألا ينبغي علينا دعم الأشخاص لاستخدام ديسكورس (Discourse) كحل “للعمل في العلن” أو “شيء أفضل من المدونة”؟

نظرًا لأن تلبية رغبات المستخدمين لا تدفع التكاليف، هل فكرتم في التصويت على الميزات عن طريق المال كخيار؟

4 إعجابات

التصويت عن طريق المال مدعوم. يمكنك تمويل التطوير بعد التأكد من أن الميزات الجديدة هي pr-welcome

إعجاب واحد (1)

من ناحية أخرى، هذا بالضبط ما تفعله فيسبوك مع المجموعات وجهات الاتصال وهو أحد الأسباب التي تجعله جذابًا للغاية هناك. لأنك ستتواصل مع جهات الاتصال الخاصة بك على أي حال، وهذا “يجلب” منشورات المجموعة/المجتمع إلى تلك المساحة.

يمكنني أن أتخيل بسهولة شيئًا كهذا ذا قيمة كبيرة لمجتمعي. المجتمعات تجمع الناس معًا وسوف يرغبون في الحفاظ على هذا الاتصال “خارج” المجتمع. إذا سمحت أداة المجتمع لهم بجلب هذا الاتصال الإضافي إلى نفس المساحة/التطبيق، فهذا يمنع هجرة الأشخاص الذين بنوا علاقات قوية داخل المجتمع إلى مساحات اجتماعية أخرى.

أعلم أننا لا نحاول “محاكاة فيسبوك” هنا، ولكن من المفيد التفكير في سبب نجاحه بشكل جيد في بعض الأمور.

أود أن أكون قادرًا على إخبار أعضائي المهاجرين من فيسبوك “انظر، يمكنك إنشاء حساب فيديفيرس والاتصال بأشخاص يعجبونك خارج الموضوع”.
ربما يجب التفكير فيه كوسيلة لتزويد أعضاء المجتمع بمساحة خارج الموضوع تكون أكثر “انفتاحًا”.

من وجهة نظري، سيكون منطقيًا تمامًا. إن الافتقار إلى التكامل بين “الشبكات الاجتماعية” (حسابات الفيديفيرس) والمدونات (ولكن ربط تلك الحسابات بالفيديفيرس قيد التنفيذ) والمجتمعات هو ما يمنع الأدوات المفتوحة مثل ماستودون أو ديسكورس أو ووردبريس من أن تكون بديلاً فعالاً لفيسبوك.

إعجاب واحد (1)

حسناً — ماستودون و ووردبريس يقومان بكل ذلك بالفعل. ديسكورس يقوم بذلك جزئياً فقط والاتجاه هو في الغالب خارجي، ولكنه ليس منصة تواصل اجتماعي.

إعجاب واحد (1)

عند محاولة متابعة @announcements@meta.discourse.org نتلقى رسالة الخطأ التالية:

تحتوي السجلات على تحذيرين:

فشلت معالجة https://meta.discourse.org/ap/actor/68efb2d756abf76171ed302b7ffd3c58: تعذر حل الفاعل

طلب GET إلى https://meta.discourse.org/ap/actor/68efb2d756abf76171ed302b7ffd3c58 فشل:

يمكننا متابعة الفاعلين على Mastodon، على الرغم من ذلك.

هل فاتني شيء ما، أو كيف يمكنني التحقيق أكثر؟

يمكنني تأكيد السلوك المتطابق؛ إليك السجلات:

Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:39 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org"}
Completed 200 OK in 36ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 11.8ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:40 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org", "actor_id"=>"57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org"}
Completed 200 OK in 32ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.8ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org", "actor_id"=>"57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org"}
Completed 200 OK in 30ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org", "actor_id"=>"57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org"}
Completed 200 OK in 26ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.3ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org", "actor_id"=>"57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org"}
Completed 200 OK in 24ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.3ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle"=>"@announcements@meta.discourse.org", "actor_id"=>"57934"}
إعجابَين (2)

ما هو إصدار Discourse الذي تستخدمه؟ أستطيع العثور على هذا الفاعل في مثيل Discourse آخر:

إعجاب واحد (1)

نحن على أحدث إصدار 2026.3.0-latest

نحن على 2026.1.2(808b2ac23d) بإصدار الإضافة (d99071e0)

مجرد إضافة هنا. في الإصدار 2026.5.0-latest، ومع وجود كيان فئات يعمل بشكل صحيح، أواجه نفس المشكلة. يمكنني متابعة حسابات Mastodon، لكن لا يمكنني متابعة حسابات Discourse الأخرى.

3 إعجابات

شكرًا على التقرير، سنقوم بالتحقق من ذلك قريبًا.

3 إعجابات

ملاحظة سريعة لإعلامكم بأننا قمنا بإيقاف تشغيل إضافة ActivityPub هنا في الموقع التوجيهي (meta). كانت الإضافة لا تزال في وضع الصيانة، وسنستمر في دعمها من خلال تحديثات الأمان والأداء وإصلاح الأخطاء. وفي هذا الصدد، قمنا بدمج عدة إصلاحات أمنية اليوم في مستودع الإضافة، ونوصي جميع المستخدمين بتحديث الإضافة إلى أحدث إصدار.

في الموقع التوجيهي، للأسف، كانت الفئات المفعّلة بـ ActivityPub تُستخدم من قبل عدد قليل فقط من المستخدمين، وكان هناك بعض الملاحظات من مستخدمين غير نشطين على ActivityPub الذين شعروا بالارتباك بسبب المصطلحات، لذا قررنا تبسيط الأمور وإنهاء تكامل ActivityPub في الموقع التوجيهي.

4 إعجابات

أحد الأسباب وراء قلة المتابعين هو أن المستخدم غير النشط في النقاشات يحتاج إلى معرفة من يجب أن يتابعه. النظام ليس مصمماً لمتابعة سهلة على غرار وسائل التواصل الاجتماعي، بل لمشاركة المحتوى من منتدى إلى الشبكة الموزعة (Fediverse) على أمل أن يشاركه شخص ما هناك (وعلى أي حال، لا يمكن لمستخدم ماستودون أو أي نظام آخر متابعة أي ممثل في ديسكورس).

أنت تعرف عدد المتابعين، لكنك لا تملك أي فكرة عن عدد الأشخاص الذين يشاهدون المنشورات هناك. ولكن بالتأكيد، ميتا (Meta) هي حالة خاصة، لأن المسؤولين على الأرجح موجودون هنا، والمستخدمون العاديون لا يهتمون بالجوانب التقنية لديسكورس. لذا، من هذه النقطة، أفهم هذا القرار.

إعجابَين (2)

مرحباً، أحاول الإبلاغ عن مشكلة في ملحق AP تتعلق بخطأ في تاريخ ووقت النشر published للمنشورات التي يتم نشرها يدوياً عبر زر “نشر جميع المنشورات”.

مثال

https://browser.pub/https://socialhub.activitypub.rocks/ap/object/a8d6c23e6c428313efb9bf20efeb020c

السلوك المتوقع

يشير published إلى تاريخ ووقت النشر الأصلي للمنشور، أي التاريخ والوقت الظاهر محلياً في Discourse (2018).

السلوك الفعلي

يشير published إلى تاريخ إنشاء مورد AP، أي التاريخ والوقت الذي تم فيه النقر على زر “نشر” محلياً في Discourse (2026).

إعجاب واحد (1)

في الآونة الأخيرة، تظهر الصور في منشوراتي الموزعة (federated) المنبعثة من موقع Discourse الخاص بي بشكل متكرر في Mastodon. هل هذه مشكلة تتعلق بـ ActivityPub أم بمastodon؟ أم أنها نتيجة إعداد خاطئ من جهتي؟ لست متأكداً من كيفية معالجة هذه المشكلة. إليك مثالان. يبدو أن Mastodon يحاول إنشاء عرض شبكي (grid view) بينما لم يكن العرض الأصلي يحتوي على عرض شبكي.

إعجاب واحد (1)

تم إنشاء تقرير خطأ في تبادل مع ask.discourse.com ( bfa925d )

يفشل البناء أثناء ./launcher rebuild مع NameError: uninitialized constant PrettyText::PrecompiledBundle عند تمكين discourse-activity-pub

البيئة

  • Discourse مُضيف ذاتيًا، تثبيت Docker عبر مُطلق discourse_docker، إعداد متعدد الحاويات (Web + Sidekiq)
  • Ruby 3.4.0، Rails 8.0.5.1
  • الفرع: latest (تم أيضًا إعادة إنتاج السبب الجذري على الكود الحالي)

الخطأ
أثناء الإقلاع، في خطوة rake db:migrate:

rake aborted!
NameError: uninitialized constant PrettyText::PrecompiledBundle (NameError)

    PrecompiledBundle.new(
    ^^^^^^^^^^^^^^^^^
/var/www/discourse/lib/pretty_text.rb:56:in '<module:PrettyText>'

السبب الجذري (تحليل الوكلاء)
في lib/pretty_text.rb:56، داخل module PrettyText، يتم الإشارة إلى الثابت PrecompiledBundle بدون نطاق علوي ::. لذلك يحل Ruby الأمر على أنه PrettyText::PrecompiledBundle (الملف lib/pretty_text/precompiled_bundle.rb)، والذي لا يوجد. يقع الصف الفعلي في /var/www/discourse/lib/precompiled_bundle.rb (نطاق علوي). بدون إضافة، يحدث ترتيب التحميل أن يُعرّفه في الوقت المناسب؛ مع تمكين discourse-activity-pub، يتغير ترتيب التحميل ولا يتوفر الثابت عند تحميل pretty_text.rb.

الدليل

  • يمر البناء بدون أخطاء مع تعطيل جميع الإضافات.
  • بحث ثنائي عبر قائمة الإضافات: يفشل البناء مع تمكين discourse-activity-pub، ويمر عند إزالته/تعطيله.
  • لا تثير أي إضافة أخرى هذه المشكلة.

السلوك المتوقع
بناء نظيف مستقل عن الإضافات الممكّنة، أو على الأقل ثابت/تحميل مُعرّف في lib/pretty_text.rb (مثل ::PrecompiledBundle أو require صريح).

السؤال
هل هذه تفاعل معروف؟ هل هناك خطة لمعالجة ترتيب التحميل، أم يوجد تثبيت/حل بديل موصى به في الوقت الحالي؟

إعجاب واحد (1)

أعتقد أن هذا لا علاقة له بإضافة Activity Pub…

هل يمكنك توسيع نطاق الخطأ المُبلّغ عنه هنا؟ هل تبدأ الترحيلات ثم تصطدم بهذا المشكلة، أم أن هناك ترحيلًا محددًا يفشل؟

أعتقد أن هذا الجزء يتداخل مع ترتيب التحميل لأنه يقع خارج after_initialize

إعجابَين (2)

آه، شكرًا لك على تصحيح معلوماتي. ربما يكون هذا هو الحل: https://github.com/discourse/discourse-activity-pull/338 يُرجى تجربته يا @thoka وإخباري بماذا كانت النتيجة.

إعجاب واحد (1)