Обзор Федерации

Этот документ предназначен для всех, кто хочет знать, как работает федерация Lemmy, не вдаваясь в технические подробности. Он предназначен для предоставления общего принципа работы федерации ActivityPub в Lemmy. Если вы сами реализуете ActivityPub и хотите быть совместимым с Lemmy, прочтите наши ActivityPub API outline.

Соглашения документации

Чтобы не усложнять, иногда вы можете увидеть вещи в формате Create/Note или Delete/Event или Undo/Follow. То, что перед косой чертой - это Activity, а то, что после косой черты - это объект внутри Activity в свойстве object. Итак, это следует читать следующим образом:

  • Create / Note: действие Create, содержащее Note в поле object.
  • Delete / Event: действие Delete, содержащее Event в поле object
  • Undo / Follow: действие Undo, содержащее Follow в поле object

В Lemmy мы используем определенные термины для обозначения элементов ActivityPub. По сути, это наши конкретные реализации хорошо известных концепций ActivityPub:

  • Сообщество: Group
  • Пользователь: Person
  • Пост: Page
  • Комментарий: Note

Этот документ состоит из трех основных разделов:

  • Философия федерации излагает общую модель того, как это должно быть федеративным
  • Действия пользователя описывает, какие действия может предпринять Пользователь для взаимодействия
  • Активность сообщества описывает, что Сообщество делает в ответ на определенные действия Пользователя.

Философия федерации

Основным действующим лицом в «Lemmy» является Сообщество. Каждое сообщество находится в единственном экземпляре и состоит из списка сообщений и списка подписчиков. Основное взаимодействие заключается в том, что Пользователь отправляет пост или комментарий, связанный с публикацией или комментарием в сообществе, который затем аннонсируется об этом всем подписчикам.

В каждом Сообществе есть определенный Пользователь-создатель, который отвечает за установку правил, назначение модераторов и удаление контента, нарушающего правила.

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

Пользователи следят за интересующими их сообществами, чтобы получать сообщения и комментарии. Они также голосуют за сообщения и комментарии, а также создают новые. Комментарии организованы в виде древовидной структуры и обычно сортируются по количеству голосов. Также поддерживаются прямые сообщения между пользователями.

Пользователи могут не подписываться друг на друга, или не следовать за каким либо сообществом.

Наша реализация федерации уже завершена, но на данном этапе, мы не совсем сосредоточились на соблюдении спецификации ActivityPub. В связи с этим, Lemmy, пока, несовместима с реализациями, которые должны давать возможность отправлять и получать рабочую активность. Это то, что мы планируем исправить в ближайшем будущем. Проверить #698 обзор наших несоответствий.

Действия пользователя

Следовать за сообществом

На каждой странице сообщества есть кнопка «Подписаться». Нажатие на нее запускает действие Follow, которое будет отправлено пользователем в почтовый ящик сообщества. Сообщество автоматически ответит на почтовый ящик пользователя действием Accept/Follow. Он также добавит пользователя в свой список подписчиков и предоставит пользователю информацию о сообщениях и комментариях в Сообществе.

Отписаться от Сообщества

После подписки на сообщество кнопка «Подписаться» заменяется на «Отписаться». При нажатии на нее в почтовый ящик Сообщества отправляется действие Accept/Follow. Сообщество удаляет пользователя из списка подписчиков и больше не отправляет ему никаких действий.

Создать пост

Когда пользователь создает новое сообщение в определённом сообществе, оно отправляется как Create/Page в входящие Сообщества.

Создать комментарий

Когда новый комментарий создается для сообщения, идентификатор сообщения и родительский идентификатор комментария (если он существует) указывается в поле in_reply_to. Это позволяет привязать его к нужному посту и построить дерево комментариев. Затем он отправляется во входящие сообщения сообщества как Create/Note

Экземпляр-источник также сканирует комментарий на предмет упоминания любого пользователя и отправляет Create/Note этим Пользователям.

Редактировать Пост

Изменение содержания существующей публикации. Может быть выполнено только создавшим его пользователем.

Редактировать комментарий

Изменение содержания существующего комментария. Может быть выполнено только создавшим его пользователем.

Нравится и Не нравится

Пользователям могут нравится или не нравится любые сообщения или комментарии. Они отправляются Like/Page, Dislike/Note и т.д. в ящик Сообщества.

Удаление

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

Удаления

Модераторы могут удалять сообщения и комментарии из своих сообществ. Администраторы могут удалять любые сообщения или комментарии со всего сайта. Сообщества также могут быть удалены администраторами. Затем элемент скрывается от всех пользователей.

Об удалении сообщается всем подписчикам Сообщества, поэтому они вступают в силу и там. Исключение составляют случаи, когда администратор удаляет элемент из Сообщества, размещенного в другом экземпляре. В этом случае удаление вступает в силу только локально.

Отмена предыдущего действия

Мы ничего не удаляем из нашей базы данных, просто скрываем это от пользователей. Удаленные или удаленные Сообщества/Сообщения/Комментарии имеют кнопку «восстановить». Эта кнопка Undo генерирует восстановление оригинала удалённой активности как объекта, такого как Undo/Remove/Post или Undo/Delete/Community.

Нажатие кнопки "нравится" за публикацию/комментарий, за которую уже проголосовали (или кнопку "не нравится" для публикации/комментария, за которую уже проголосовали), также генерирует сообщение как Undo. В этом случае Undo/Like/Post или Undo/Dislike/Comment.

Создать личное сообщение

В профилях пользователей есть кнопка «Отправить сообщение», которая открывает диалоговое окно, позволяющее отправить личное сообщение этому пользователю. Отправляется как Create/Note во Входящие пользователя. Личные сообщения могут быть адресованы только одному,конкретному Пользователю.

Редактирование личного сообщения

Update/Note изменяет текст предыдущего отправленного сообщения.

Удалить личное сообщение

Delete/Note удаляет личное сообщение.

Восстановить личное сообщение

Undo/Delete/Note возвращает удалённое личное сообщение.

Активность Сообщества

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

Подтверждение подписки

Если Сообщество получает Follow активность, это автоматически активирует ответ Accept/Follow. И добавляет Пользователя в список подписавшихся.

Не следовать

Однажды получив Undo/Follow, Сообщество удаляет Пользователя из списка подписчиков.

Уведомление

Если Сообщество получает какие-либо действия, связанные с публикациями или комментариями (Создать, Обновить, Нравится, Не нравится, Удалить, Убрать, Отменить), оно Уведомляет об этом своих подписчикам. В связи с этим, Уведомление создаётся как действие , и принимается как объект активности. Таким образом, следующие экземпляры будут в курсе любых действий в сообществах, за которыми они следят.

Удалить Сообщество

Если создатель или администратор удаляет Сообщество, это отправляет Delete/Group всем его подписчикам.