@rf а кто знает где почитать как устроено взаимодействие серверов в федерации? Что бы не протокол, а простыми словами, вот пост, вот так распространяется, вот эти видят и т.д. Подозреваю сервера плеромы и мастодона еще и по разному реализуют взаимодействие.
@grishka ТАм дело в том, что тут
https://www.w3.org/TR/activitypub/#Overview
описано то, чего нет, так как эндпоинты inbox в мастодоне не реализованы судя по всему. Так что задачка, что мне нужна, а именно периодически ходить и проверять ответы в беседах что бы следить за их развитием, в данный момент простым способом не решается. Такие дела.
@3draven приблизительный эквивалент APшного инбокса в клиентском API это notifications, на котором сделана вкладка "Уведомления": https://docs.joinmastodon.org/methods/notifications/#get
Если в нём нет того, что надо, скорее всего это в Мастодоне вообще не реализовано.
@3draven а как в твоём представлении выглядело бы решение с инбоксом?
upd: поясню — если тебя интересует получать сообщения, о которых тебе уведомления не приходят (например, если твой тег убрали, убрав тебя из списка получателей), то в инбоксе этого сообщения тоже не будет, несмотря на привязанность к треду. Даже до твоего инстанса может не дойти, и быть доступным только с тех инстансов, обитатели которого тегнуты + с инстансов подписчиков автора ответа (если видимость ответа позволяет).
@dside читаешь инбокс с фильтром since-id или с даты. Оно показывает все, что тебе пришло в качестве ответов других юзеров с момента последней проверки. Читаешь outbox для добывания своих ответов в свои треды. Потом дополняешь локально сохраненные деревья в клиенте тем, что нашел. Сейчас так сделано примерно, но подпиской на стрим с уведомлениями мастодон сервера (вебсокет там). Проблема в том, что приложение периодически выключается и надо считывать посты, что были пока все было выключено.
@3draven м-м. Это звучит как прямое применение dismiss. Тяни все уведомления, dismiss'ай обработанные. Если приложение выключится — уведомления продолжат накапливаться на сервере.
@dside да, я об этом и написал. Не знаю что такое дисмис, но понятно. Я на java клиент написал :) Это несложно все. Костылем больше, костылем меньше.
@dside а, там лучше есть. Если я отменю нотификацию, то ее не получат другие клиенты насколько я понимаю.
Есть /api/v1/notifications и там параметр since_id и потом просто читаешь, что надо. Но я пока не выяснил есть ли в нотификациях уведомления об ответах где юзер не упомянут. То есть болтает двое в треде, упоминает друг друга, но не автора треда. Получит ли автор нотификацию я не знаю. Но тут дело в том, что и сервер такое сообщение может не получить (без подписок). Так что вероятно забью.
@dside @3draven в мастодоовском api есть метод context, который выдаёт весь тред целиком https://docs.joinmastodon.org/methods/statuses/#context
@shura @dside ну, тогда выходит придется читать этот паблик, выбирать только посты, которые ответы на посты в моих тредах и достраивать деревья. При этом сервер может вообще не получить посты если в них не упомянуты юзера с сервера или они не подписаны на автора ответа. Я это сейчас так понимаю. И при этом не знаю стоит ли паблик читать так как на груженом сервере он огромный. В общем думаю.
@shura @dside ну, например ты можешь написать клиент, который будет регать приложения на инстансах бесконечно и за пару месяцев забить базу мелкого инстанса под потолок :) Или вот регать аккаунты на разные почты автоматом и использовать федиверс как спамбота (не проверял, но должно сработать). Куда бы я ни залез в этот мастодон поглубже, везде косяки. Не говоря уж о крайне низком качестве документации конечно, это вообще песня :)
@3draven именно уведомление может и получат, оно же отправляется с сервера платформозависимой штукой вроде веб-пуша, UnifiedPush, FCM или APNS. Сервер может отправлять туда же и факт дисмисса, но похоже, что не делает этого (хотя это, возможно, и временно):
https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/notifications_controller.rb#L26-L29
(В модели Notification я на этот счёт тоже ничего не встретил.)
Угу, без тега не получит, насколько я знаю — см. выше по треду.
https://mastodon.ml/@dside/109654449528865203
Это можно достать разве что достав сообщение в JSON-LD (вышеприведённым способом с хедером и ссылкой на пост), из него коллекцию replies и обходить в ней все ветки, которые будут в том числе на других доменах. Действия несложные, но их много 👀