Create overview.md

This commit is contained in:
Andrei Guliaikin 2021-04-18 21:59:19 +02:00 committed by GitHub
parent 1bb7a4ec1e
commit 835a03ba6d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -0,0 +1,123 @@
# Обзор Федерации
Этот документ предназначен для всех, кто хочет знать, как работает федерация Lemmy, не вдаваясь в технические подробности. Он предназначен для предоставления общего принципа работы федерации ActivityPub в Lemmy. Если вы сами реализуете ActivityPub и хотите быть совместимым с Lemmy, прочтите наши [ActivityPub API outline](contributing_apub_api_outline.md).
## Соглашения документации
Чтобы не усложнять, иногда вы можете увидеть вещи в формате `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](https://github.com/LemmyNet/lemmy/issues/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` всем его подписчикам.