Плагин ActivityPub

:discourse2: Резюме Discourse ActivityPub позволяет публиковать сообщения из Discourse через ActivityPub, чтобы их можно было читать в сервисах, поддерживающих ActivityPub, таких как Mastodon.
:hammer_and_wrench: Ссылка на репозиторий GitHub - discourse/discourse-activity-pub: Adds ActivityPub support to Discourse. · GitHub
:open_book: Руководство по установке Как установить плагины в Discourse

Если вы не знакомы с ActivityPub, начните с просмотра этого короткого видео:

Когда будете готовы приступить к настройке плагина, ознакомьтесь с нашими темами в разделе activitypub Documentation > Integrations

66 лайков
Publishing posts to Mastodon
Federation support for Discourse
Is diversity of opinion of benefit to community health?
Unable to change category
Getting ActivityPub error when trying to edit a post?
2024: The Year in Review
Introducing Discourse Discover
Synchronising/Crossposting topics across different Discourse sites
How could a CI workflow for unofficial plugins be implemented?
Setting up an ActivityPub Actor
Using forum researcher to help organize and split large topics
When goes to a category /latest doesn’t show the actual latest
Using forum researcher to help organize and split large topics
Duplicating an entire topic
Discourse Chat Integrations
Code-level performance testing
Cross-Discourse Quoting
Incoming synchronization between Fediverse publications and Discourse category?
Creating topic will also creates topic into another forum
Multi-instance activity backup + unified multi-site Discourse reader
Changing ownership of a topic doesn’t work
Anyone has discovered/ build a site as multisite (SSO), would like to see the possibilities for inspiration!
Sync topic content in Wordpress and Discourse (feature request)
2023: The Year in Review
How to sync posts between two different Discourse sites, and only for specific users
Federation support for Discourse
ActivityPub between two Discourse instances
Cross platform Discourse aggregator app
Federation support for Discourse
Following an ActivityPub Actor
Federate private categories via ActivityPub
Matrix protocol for chat
Unicode export problems in activitypub plugin
Mailing Lists providers
Can I import replies to posts using RSS Polling and how do I set it up?

Спасибо за вашу работу здесь! С нетерпением жду момента, когда смогу это включить, и благодарю за выпуск версии для тестирования, чтобы мы, имеющие различные настройки, могли внести свой вклад хотя бы в виде тестирования в более широком наборе сценариев.

Размышляя о том, когда включить это на моем сайте, я пытаюсь продумать, какие решения могут стать «односторонними дверями» (то есть необратимыми).

Подкатегории

У меня есть 8 категорий верхнего уровня, но также есть 21 публичная подкатегория. Следить за 29 акторами, чтобы охватить всю публичную активность на сайте, кажется слишком большим количеством. Кроме того, пользователи могут быть удивлены тем, что подписка на категорию не включает подписку на её подкатегории.

Если бы я мог выбрать опцию в настройках ActivityPub для категории «также федерировать публичные подкатегории», я бы это сделал. С точки зрения пользователя решение о отдельной федерации подкатегорий кажется в основном необратимым шагом. Поэтому, если вы рассмотрите возможность добавления опции «также федерировать подкатегории», это поможет мне в планировании. В нашей боковой панели по умолчанию отображаются только категории верхнего уровня, а стандартное поведение Discourse при просмотре категорий — объединение контента всех верхних уровней и подкатегорий, так что это кажется достаточно согласованным с ожиданиями пользователей Discourse.

Федерировать всё!

Мне кажется интересной идея добавить настройку на уровне всего сайта для актора ActivityPub, который федерировал бы все публичные посты на сайте. Я бы использовал её сам. Но я не считаю это «односторонней дверью» — я бы настроил федерацию категорий, как только она будет готова, даже если позже планирую добавить актора «all@» для федерации всего остального.

Ограничения редактирования

Один из моментов, который не очевиден из вашего поста, заключается в том, что можно понять это так, будто редактировать можно только буквальную секцию [note]...[/note]. Для других участников сообщества важно понимать: если вы включаете федерацию, редактирование сейчас отключается для всех постов сразу после их федерации (за исключением постов с буквальной секцией [note]...[/note]); это сообщение появляется только при попытке сохранить редактирование:

На моем сайте намеренно разрешено неограниченное редактирование достаточно доверенным пользователям, поэтому я не могу включить эту функцию без возможности отключить этот контроль (или без его удаления, если редактирование уже федерировано). В качестве общего примера, применимого даже за пределами таких доверительных сайтов, любая категория с постами в режиме wiki будет нарушена при настройке федерации для этой категории.

Я попытался удалить федерированный пост, который я сделал wiki-постом, и получил следующее:

Однако пост был удален, и это удаление было федерировано.

Персонализация

Было бы здорово предоставить аватарку для каждого назначенного актора. В Mastodon я вижу только серую картинку слона для каждого актора категории, и мне бы очень хотелось добавить здесь немного индивидуальности. :smiling_face:

Журналы ошибок

В моих логах плагина activitypub пока я встречал два вида ошибок:

Сообщение (3 копии)

NoMethodError (не определен метод `ap_type' для nil:NilClass)
(eval):7:in `_fast_attributes'
app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
app/controllers/application_controller.rb:418:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:367:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Трассировка стека

plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:18:in `object'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/activity_serializer.rb:18:in `_object'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/activity_serializer.rb:9:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/object.rb:50:in `json'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/collection/ordered_collection_serializer.rb:7:in `map'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/collection/ordered_collection_serializer.rb:7:in `ordered_items'
(eval):7:in `_fast_attributes'
Сообщение

Исключение задачи: не определен метод `model' для #<DiscourseActivityPubActivity id: 2, ap_id: "https://social.makerforums.info/cf2e1e8d-83e3-447e...", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 3, object_id: "1", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 02:23:13.798564000 +0000", updated_at: "2023-06-01 02:23:13.798564000 +0000">


Трассировка стека

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activemodel-7.0.4.3/lib/active_model/attribute_methods.rb:458:in `method_missing'
/var/www/discourse/plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:79:in `after_deliver'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:42:in `perform_request'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:13:in `execute'
/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:236:in `block in perform'
/var/www/discourse/app/jobs/base.rb:232:in `each'
/var/www/discourse/app/jobs/base.rb:232:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.9/lib/sidekiq/processor.rb:202:in `execute_job'

Еще раз спасибо за вашу работу над этим!

8 лайков

Я рад сообщить, что SocialHub уже работает:

… тук, тук, тук…

Оно должно было уже появиться во Федиверсе… Смотрю логи…

О, есть проблемы с первой попыткой подписаться на актора:

  • Job exception: undefined method 'model' for #<DiscourseActivityPubActivity id: 2, ap_id: "https://ps.s10y.eu/820e6bf2-ec02-49f8-ab5e-e3cefbb...", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 4, object_id: "2", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 13:30:16.131136000 +0000", updated_at: "2023-06-01 13:30:16.131136000 +0000">
  • Job exception: undefined method 'model' for #<DiscourseActivityPubActivity id: 8, ap_id: "https://mastodon.social/ce62fd77-fe03-4060-a951-79...", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 8, object_id: "2", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 13:39:14.512966000 +0000", updated_at: "2023-06-01 13:39:14.512966000 +0000">
  • Job exception: undefined method 'model' for #<DiscourseActivityPubActivity id: 6, ap_id: "https://social.coop/4236c87a-0d22-402d-8546-e37a21...", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 6, object_id: "2", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 13:38:54.493118000 +0000", updated_at: "2023-06-01 13:38:54.493118000 +0000">
Вот трассировка стека для последнего
ctivemodel-7.0.4.3/lib/active_model/attribute_methods.rb:458:in `method_missing'

/var/www/discourse/plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:79:in `after_deliver'

/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:42:in `perform_request'

/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:13:in `execute'

/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'

rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:236:in `block in perform'

/var/www/discourse/app/jobs/base.rb:232:in `each'

/var/www/discourse/app/jobs/base.rb:232:in `perform'

sidekiq-6.5.9/lib/sidekiq/processor.rb:202:in `execute_job'

sidekiq-6.5.9/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'

sidekiq-6.5.9/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'

/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call'

sidekiq-6.5.9/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'

sidekiq-6.5.9/lib/sidekiq/middleware/chain.rb:182:in `invoke'

sidekiq-6.5.9/lib/sidekiq/processor.rb:169:in `block in process'

sidekiq-6.5.9/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_retry.rb:113:in `local'

sidekiq-6.5.9/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'

sidekiq-6.5.9/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/processor.rb:263:in `stats'

sidekiq-6.5.9/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_logger.rb:13:in `call'

sidekiq-6.5.9/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_retry.rb:80:in `global'

sidekiq-6.5.9/lib/sidekiq/processor.rb:124:in `block in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_logger.rb:39:in `prepare'

sidekiq-6.5.9/lib/sidekiq/processor.rb:123:in `dispatch'

sidekiq-6.5.9/lib/sidekiq/processor.rb:168:in `process'

sidekiq-6.5.9/lib/sidekiq/processor.rb:78:in `process_one'

sidekiq-6.5.9/lib/sidekiq/processor.rb:68:in `run'

sidekiq-6.5.9/lib/sidekiq/component.rb:8:in `watchdog'

sidekiq-6.5.9/lib/sidekiq/component.rb:17:in `block in safe_thread'

Заметка, похоже, не появилась в моей ленте :cry:

(не стесняйтесь переместить это сообщение в более подходящее место)

8 лайков

В долгосрочной перспективе я согласен: это должно быть специфично для каждого актора и настраиваемым. Но на данный момент логотип сайта должен подхватываться. У меня это работает для @feature@meta.discourse.org:

4 лайка

Хорошо, вероятно, это было связано с одной из ошибок, которые я видел. Логотип сайта имеет для меня большой смысл.

Думаю об этом… Если бы была возможность использовать цвет категории здесь, это было бы здорово, но я не знаю, есть ли для этого место.

4 лайка

Я повторил попытку и…

Частично работает: заметка сократилась чуть слишком сильно (71 символ) по сравнению с оригиналом:

Мы ждали этого: теперь благодаря Энгусу Маклеоду и команде pavilion, а также компании CDCK, Inc., стоящей за #Discourse, #SocialHub теперь федеративен! Вы можете подписаться на @fediverse@socialhub.activitypub.rocks для общих объявлений и на @feps@socialhub.activitypub.rocks для предложений по улучшению Fediverse.
:hugs:

4 лайка

Общая рекомендация:

Посидите несколько дней перед тем, как включить интеграцию с ActivityPub.
Помните, что эти аккаунты будут перечислены вечно во фидиверсе социальных сетей и могут вызвать путаницу, если вы поймете, что имя аккаунта/категории нужно изменить постфактум. :heart:

2 лайка

Я считаю, что в долгосрочной перспективе можно будет дополнительно реализовать перемещение аккаунтов для переименования актора категории. Это просто больше работы, которая должна быть ценной для того, кто готов её выполнить, поэтому я сомневаюсь, что это произойдёт в краткосрочной перспективе. :smiling_face: По крайней мере, я надеюсь, что это случится позже, чем другие более важные задачи! :grin:

Это никак не опровергает вашу точку зрения.

3 лайка

Спасибо за обратную связь, ребята :slight_smile:

@hellekin Это исправит исключения, о которых вы сообщали. @mcdanlj Это также устранит второе исключение, о котором вы сообщали (та же проблема).

@mcdanlj Первая проблема, о которой вы сообщали, немного страннее: как часто вы её встречаете? Не могли бы вы предоставить больше деталей?

Спасибо за отзыв по этому поводу, обязательно учтём это на втором этапе работы :+1:

Думаю, это вряд ли произойдёт на втором этапе, но noted :+1:

Редактирование отключено только для содержимого поста, составляющего Note. Если вы не используете теги Note, это первые 500 символов или то, что вы установили в activity pub note excerpt maxlength. Одно из того, что я определённо рассматриваю для второго этапа, — это требовать использование тегов [note][/note] для Note, так как я вижу, как может возникнуть путаница.

Вы можете решить это, используя теги [note][/note] для разделения Note от остального содержимого.

Принято! Мы явно не тестировали это с постами в режиме wiki. Мне пока не удалось воспроизвести вашу проблему с удалением постов в режиме wiki. Можете ли вы надёжно воспроизвести её? Я добавил несколько тестов в этот PR, и все они проходят для этого сценария, но очень хочу разобраться в этом вопросе.

Анализ выдержки в настоящее время обрабатывается той же системой, что используется для анализа выдержки темы в Discourse (для целей списка тем), поэтому, вероятно, именно поэтому было вырезано довольно много текста (выдержки списка тем тоже были бы такими). Думаю, нам, возможно, понадобится использовать отдельный парсер, так как я预见, что это создаст несколько проблем. Потерпите немного с этим; это обязательно будет исправлено на втором этапе.

Имейте в виду, что вы можете менять отображаемое имя сколько угодно раз, и ограничение на изменение имени пользователя не уникально для этого плагина. Так что, хотя то, что вы говорите, верно, это верно для значительной части фидиверса.

Более того, я не включил имя пользователя в ID актора, частично чтобы позволить возможность добавления функции изменения имени пользователя в будущем.

Данные ActivityPub плагина абстрагированы от данных Discourse. Нет никакой внутренней ограничения на изменение модели Discourse (то есть какой категории) с которой связан актор. Вы даже могли бы в будущем связать актора с другим типом модели Discourse, то есть связать актора, созданного для категории, с пользователем вместо этого (отношение между акторами и моделями Discourse является полиморфным). Не утверждаю, что эти функции будут явно добавлены, но скорее хочу сказать, что в этом отношении нет жёстких ограничений.

В целом, да, стоит подумать, какие категории вы хотите как акторов, но в целом эта реализация обладает относительно высокой степенью гибкости, поэтому степень вашей обеспокоенности должна быть относительна этому контексту. Я немного подробнее объяснил природу потока данных в плагине, что ещё больше проясняет этот момент, здесь:

Ещё раз спасибо всем! Отлично иметь вовлечённых пользователей.

5 лайков

Думаю, это было связано с удалением постов, так как я удалил три тестовых поста, и было три случая этой ошибки.

Это сделало бы его абсолютно непригодным для моего сайта. Я не пытаюсь использовать Discourse как более сложный способ написания постов для фидиверса, чем просто писать их в Mastodon. Попытка заставить всё моё сообщество начать использовать аннотации bbcode [note]...[/note], включая частых новых пользователей сайта, ищущих помощь, была бы провальной идеей.

Нет, я определённо не могу. Дело не во мне. Оно касается пользователей моего сайта, которые являются пользователями Discourse, а не пользователями репозитория discourse/discourse-activity-pub.git.

Это просто редактирование.

Федерация редактирования — это нормально. Насколько я понимаю, большинство широко используемых реализаций ActivityPub уже давно позволяют редактирование. Mastodon был странным исключением среди популярных реализаций до прошлого года, когда они наконец сдались и разрешили редактирование.

Я понимаю, что редактирование не входило в релиз MVP, но пока оно либо не начнёт федерировать редактирование, либо не даст мне возможность отключить невозможность редактирования заметки, я не могу включить это для своего сайта. Конечно, я не знаю, является ли мой случай использования странным или нормальным.

Моя собственная цель использования плагина ActivityPub — облегчить отслеживание и обмен контентом по мере его создания участниками моего форума на Discourse. Это не использование Discourse как странной замены Mastodon только для постов без возможности редактирования. :smiling_face:

Как я понимаю, вы всё же намерены в конечном итоге поддержать федерацию редактирования, поскольку сообщение об ошибке гласит «в настоящее время не поддерживается» — так ли это? В таком случае, это всё лишь временное ограничение, и наши различия в сценариях использования не важны. Но это заставляет меня задуматься о затратах усилий на защиту редактирования против поддержки федерации редактирования.

Я забыл удалить плагин retort с моего песочничного сайта, когда удалил его с моего продакшн-сайта. Удаление retort исправило и странную ошибку в логе, и странное сообщение об ошибке. Моя ошибка!

Означает ли это, что в текущем состоянии плагина мы могли бы использовать одного и того же актора для нескольких категорий? Или что модель данных очень гибкая, а детали реализации легко изменить?

Кстати, в моём случае использования я предпочёл бы публиковать всё целиком без каких-либо ограничений. Я знаю, что другие могут настроить это иначе, но в итоге я бы установил максимальный размер таким же, как максимальный размер поста на моём Discourse, а он… большой! :smiling_face:

2 лайка

Понял, скоро займусь этим подробнее.

Понял. Мой комментарий касался того, что редактирование контента, не являющегося заметками, в настоящее время действительно возможно после публикации. Вы правы: эта первая версия не будет лишена проблем с пользовательским опытом при общем использовании любым пользователем. Однако она довольно хорошо поддерживает другие сценарии, например, федерацию объявлений.

Да, мы добавим поддержку редактирования контента типа Note после публикации на этапе 2. Обратите внимание, что редактирование в настоящее время поддерживается до публикации заметки. Когда вы создаёте что-то подобное, необходимо свести к минимуму количество движущихся частей.

Нет, пока нет. Не могли бы вы немного подробнее объяснить, что вы имеете в виду? Вы думаете о создании актора для всего сайта или вас больше интересует проблема подкатегорий?

Да, хотя я бы не стал обязательно использовать слово «легко» :wink:

Мне интересно, где вы планируете федерировать неограниченный контент? Искренний вопрос: я хочу немного лучше понять вашу точку зрения.

2 лайка

Я забыл убрать это после того, как обнаружил, что оставление retort на месте по ошибке и стало причиной ошибки. :flushed:

Ой.

Отлично! :pray:

Больше я об этом не беспокоюсь, а на втором этапе помогу протестировать эту функцию.

Я вскользь задумывался и об одном, и о другом, но это был вопрос низкой важности. Мне просто было интересно, насколько далеко я могу зайти с экспериментами на тестовом сайте, и я не хотел пробовать то, что уже известно как невозможное. :+1:

Попытаюсь объяснить!

Контекст: Mastodon ограничивает длину поста, которую пользователи могут создать, но не длину поста, которую они могут просмотреть. Я запускаю сервер Mastodon-glitch, настроенный на лимит в 2000 символов; я видел, как несколько человек писали о настройке лимита в 31337 символов (потому что конечно). Я вижу длинные посты в своей ленте от пользователей pleroma, akkoma и других.

На Maker Forums (мой Discourse) время от времени появляется действительно крутой контент (по моему скромному мнению!), и я хотел бы продвигать его в Фединверсе в целом, чтобы сделать его доступным для более широкой аудитории. Я знаю, что Mastodon придерживается мнения, что 500 символов — это магическая длина для микроблогинга, но ActivityPub не ограничивается микроблогингом. Это федерация, включающая, но не ограничивающаяся микроблогингом. Когда я подписываюсь на аккаунт ActivityPub в своём аккаунте Mastodon, это не ограничивается короткими постами. Я могу читать, комментировать и репостить более длинные посты.

Так что вопрос «где вы планируете федерировать» кажется мне запутанным.

  • Я буду репостить контент со своего сервера Mastodon-glitch. Репосты не применяют лимит символов, который действует при создании постов даже в стандартном Mastodon.
  • Я ожидаю, что участники сообщества будут подписываться с любого сервера ActivityPub (понимая, что сейчас это будет в основном Mastodon, а не другие платформы), и у них не будет единого мнения о том, какой должна быть длина заметки в ActivityPub.

В конечном счёте, как администратор сервера, я не контролирую, куда этот контент будет федерирован. Это решение каждого подписчика. Мне не очевидно, почему исключение или федерация всего поста Discourse как заметки ActivityPub должно быть настройкой по умолчанию даже для подписчиков на Mastodon, не говоря уже о всем Фединверсе.

Не уверен, что ответил на ваш вопрос. Но и сам я не до конца понимаю его. :grin: С радостью обсудим это глубже, если вы хотите.

2 лайка

Не переживайте! Рад, что мы пока разобрались с исключениями. Дайте знать, если заметите что-то ещё. @hellekin, точно так же, сообщите, если столкнётесь с другими проблемами или странным поведением.

Отлично! Спасибо.

Да, отвечает! Спасибо, это полезный контекст для нашего планирования второй фазы.

5 лайков

Я вот-вот обновлюсь до последней версии. Было бы полезно иметь возможность выбирать аудиторию: будет ли пост публичным или только для подписчиков. Сейчас по умолчанию стоит вариант только для подписчиков, поэтому мы не можем его продвигать, и пользователям нужно подписаться на аккаунт, чтобы получать уведомления. Я ценю это, так как функция ещё находится в экспериментальной стадии, но определённо стоит добавить опцию публикации для всех, чтобы мы могли шире рекламировать эту возможность среди федеривцев :slight_smile:

5 лайков

Да, мы будем рассматривать это на втором этапе :+1:

6 лайков

У вас есть публичный план разработки по этапам?

3 лайка

Публичного плана разработки нет, но я сообщу вам, как только мы определимся с деталями. Мы с радостью рассмотрим любые разумные предложения по содержанию! Конкретные примеры вариантов использования, подобные примеру от @mcdanlj, также всегда очень полезны.

6 лайков

Я сделал несколько предложений в SocialHub, которые уже были высказаны здесь некоторое время назад…

2 лайка

Я ещё не дошёл до этого момента в тестировании с тестового сервера, но хочу отметить, что функция продвижения также является центральной для моего сценария использования.

6 лайков

Обработка статуса 410 Gone

В моих логах много записей об изменённых URL:

[Discourse Activity Pub] GET-запрос к https://activitypub.example/users/missing-account завершился ошибкой: Ожидалось([200, 201, 202, 301, 302, 307, 308]) <==> Фактически(410 Gone)

Полагаю, это связано со следующим: при извлечении объекта в случае наличия Tombstone в теле ответа должен возвращаться статус 410 Gone, иначе — 404 Not Found (server:object-retrieval:deleted-object:410-status): учётная запись была перенесена на другой инстанс.


Также получаю несколько ошибок вида:



[Discourse Activity Pub] update_stored_from_json не удалось сохранить актора. Ошибки AR: Ap уже занят. JSON актора: {"@context":["https://www.w3.org/ns/activitystreams","https://w3id.org/security/v1",{"manuallyApprovesFollowers":"as:manuallyApprovesFollowers","toot":"http://joinmastodon.org/ns#","featured":{"@id":"toot:featured","@type":"@id"},"featuredTags":{"@id":"toot:featuredTags","@type":"@id"},"alsoKnownAs":{"@id":"as:alsoKnownAs","@type":"@id"},"movedTo":{"@id":"as:movedTo","@type":"@id"},"schema":"http://schema.org#","PropertyValue":"schema:PropertyValue","value":"schema:value","discoverable":"toot:discoverable","Device":"toot:Device","Ed25519Signature":"toot:Ed25519Signature","Ed25519Key":"toot:Ed25519Key","Curve25519Key":"toot:Curve25519Key","EncryptedMessage":"toot:EncryptedMessage","publicKeyBase64":"toot:publicKeyBase64","deviceId":"toot:deviceId","claim":{"@type":"@id","@id":"toot:claim"},"fingerprintKey":{"@type":"@id","@id":"toot:fingerprintKey"},"identityKey":{"@type":"@id","@id":"toot:identityKey"},"devices":{"@type":"@id","@id":"toot:devices"},"messageFranking":"toot:messageFranking","messageType":"toot:messageType","cipherText":"toot:cipherText","suspended":"toot:suspended"}],"id":"https://mas.to/users/rikvipcode","type":"Person","following":"https://mas.to/users/rikvipcode/following","followers":"https://mas.to/users/rikvipcode/followers","inbox":"https://mas.to/users/rikvipcode/inbox","outbox":"https://mas.to/users/rikvipcode/outbox","featured":"https://mas.to/users/rikvipcode/collections/featured","featuredTags":"https://mas.to/users/rikvipcode/collections/tags","preferredUsername":"rikvipcode","name":"","summary":"","url":"https://mas.to/@rikvipcode","manuallyApprovesFollowers":false,"discoverable":false,"published":"2023-05-04T00:00:00Z","devices":"https://mas.to/users/rikvipcode/collections/devices","suspended":true,"publicKey":{"id":"https://mas.to/users/rikvipcode#main-key","owner":"https://mas.to/users/rikvipcode","publicKeyPem":"--...


И

[Discourse Activity Pub] GET-запрос к https://mastodon.social/users/ejovoni46709 завершился ошибкой: Ожидалось([200, 201, 202, 301, 302, 307, 308]) <==> Фактически(410 Gone)
[Discourse Activity Pub] Не удалось обработать https://mastodon.social/users/ejovoni46709: Не удалось найти актора
[Discourse Activity Pub] Не удалось обработать https://mastodon.social/users/ejovoni46709#delete: Не удалось создать актора
[Discourse Activity Pub] Не удалось обработать https://mastodon.social/users/epybisezax9438#delete: Объект не найден
3 лайка