@rf а кто знает где почитать как устроено взаимодействие серверов в федерации? Что бы не протокол, а простыми словами, вот пост, вот так распространяется, вот эти видят и т.д. Подозреваю сервера плеромы и мастодона еще и по разному реализуют взаимодействие.

Пост (Note) оборачивается в активити (Create) и в виде json-объекта отправляется в инбоксы подписчиков. Сервер каждого подписчика проверяет подпись запроса и кладёт пост в локальную БД. В общем-то всё.

Когда-нибудь я допишу эту статью.

@grishka ТАм дело в том, что тут
w3.org/TR/activitypub/#Overvie

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

@3draven приблизительный эквивалент APшного инбокса в клиентском API это notifications, на котором сделана вкладка "Уведомления": docs.joinmastodon.org/methods/

Если в нём нет того, что надо, скорее всего это в Мастодоне вообще не реализовано.

@grishka

@dside @grishka да, я так и подумал пока что, что придется нотификации читать и по ним восстанавливать треды. Либо timelines/public
Подумаю в следующий выходной на тему костылей :)

@3draven а как в твоём представлении выглядело бы решение с инбоксом?

upd: поясню — если тебя интересует получать сообщения, о которых тебе уведомления не приходят (например, если твой тег убрали, убрав тебя из списка получателей), то в инбоксе этого сообщения тоже не будет, несмотря на привязанность к треду. Даже до твоего инстанса может не дойти, и быть доступным только с тех инстансов, обитатели которого тегнуты + с инстансов подписчиков автора ответа (если видимость ответа позволяет).

@dside читаешь инбокс с фильтром since-id или с даты. Оно показывает все, что тебе пришло в качестве ответов других юзеров с момента последней проверки. Читаешь outbox для добывания своих ответов в свои треды. Потом дополняешь локально сохраненные деревья в клиенте тем, что нашел. Сейчас так сделано примерно, но подпиской на стрим с уведомлениями мастодон сервера (вебсокет там). Проблема в том, что приложение периодически выключается и надо считывать посты, что были пока все было выключено.

@3draven м-м. Это звучит как прямое применение dismiss. Тяни все уведомления, dismiss'ай обработанные. Если приложение выключится — уведомления продолжат накапливаться на сервере.

@dside да, я об этом и написал. Не знаю что такое дисмис, но понятно. Я на java клиент написал :) Это несложно все. Костылем больше, костылем меньше.

@dside а, там лучше есть. Если я отменю нотификацию, то ее не получат другие клиенты насколько я понимаю.
Есть /api/v1/notifications и там параметр since_id и потом просто читаешь, что надо. Но я пока не выяснил есть ли в нотификациях уведомления об ответах где юзер не упомянут. То есть болтает двое в треде, упоминает друг друга, но не автора треда. Получит ли автор нотификацию я не знаю. Но тут дело в том, что и сервер такое сообщение может не получить (без подписок). Так что вероятно забью.

@3draven именно уведомление может и получат, оно же отправляется с сервера платформозависимой штукой вроде веб-пуша, UnifiedPush, FCM или APNS. Сервер может отправлять туда же и факт дисмисса, но похоже, что не делает этого (хотя это, возможно, и временно):
github.com/mastodon/mastodon/b
(В модели Notification я на этот счёт тоже ничего не встретил.)

Угу, без тега не получит, насколько я знаю — см. выше по треду.
mastodon.ml/@dside/10965444952
Это можно достать разве что достав сообщение в JSON-LD (вышеприведённым способом с хедером и ссылкой на пост), из него коллекцию replies и обходить в ней все ветки, которые будут в том числе на других доменах. Действия несложные, но их много 👀

@dside @3draven в мастодоовском api есть метод context, который выдаёт весь тред целиком docs.joinmastodon.org/methods/

@shura @dside это да, но мне надо все треды, причем только с определенного айди. Потому как тредов много и все читать долго.

@3draven тогда только ленту собирать и по ленте ходить
@dside

@shura @dside да, я так и подумал, что придется на ней костылить. А под "по ней ходить" ты что имел в виду, там что то еще дополнительно дергать надо, одной ленты мало?

@3draven лента не будет показывать посты, в которых тебя не упомянули, вопрос ведь именно с этого начался
@dside

@shura @dside так, я запутался. А что она показывает тогда? Я думал, что просто поток всех постов сервера, нет?

@3draven а, правильно, я перепутал, думал мы про home говорим. В public должны валить все публичные посты, но туда не попадают подзамочные.
@dside

@shura @dside ну, тогда выходит придется читать этот паблик, выбирать только посты, которые ответы на посты в моих тредах и достраивать деревья. При этом сервер может вообще не получить посты если в них не упомянуты юзера с сервера или они не подписаны на автора ответа. Я это сейчас так понимаю. И при этом не знаю стоит ли паблик читать так как на груженом сервере он огромный. В общем думаю.

@3draven мне кажется проще забить на ответы без упоминания
@dside

@shura @dside да, я сейчас так и сделал в текущей версии клиента :)

@3draven что за клиент? Мастодоновский?
@dside

@shura @dside ну да, пишу для развлечения одну штуку. Пока не допишу, не хочу вдаваться в подробности :)

@3draven я тоже с мастодоном и ap заигрываю :-)
@dside

@shura @dside пока что я пришел к выводу, что мастодон это довольно кривое поделие. Но альтернатив лучше все равно нет :)

@3draven да, одни только эти кривые треды чего стоят. А вот в остальном вроде ничего
@dside

@shura @dside ну, например ты можешь написать клиент, который будет регать приложения на инстансах бесконечно и за пару месяцев забить базу мелкого инстанса под потолок :) Или вот регать аккаунты на разные почты автоматом и использовать федиверс как спамбота (не проверял, но должно сработать). Куда бы я ни залез в этот мастодон поглубже, везде косяки. Не говоря уж о крайне низком качестве документации конечно, это вообще песня :)

@3draven но это же не проблема именно мастодона. Ты тоже самое можешь делать в любых распределённых системах
@dside

Follow

@shura @dside неправда. Приложения всегда аппрувит админ инстанса по нормальному. Попробуй зарегать свое приложение в фейсбуке например. Аккаунты нельзя начать регать без капчи нигде, скрытой или явной.

@3draven фейсбук - не распределённая система. Возможно капча и в мастодоне появится, просто он ещё не дорос
@dside

@shura @dside баг на капчу уже лет пять висит. А фейсбук распределенная система с одним админом просто.

@3draven с одним админом, одним входом и одним клиентом. Это же не сеть серверов с разными владельцами, это просто кластер.
@dside

@shura @dside совершенно верно. Потому, в случае множества инстансов логично было бы аппрувить регистрацию приложений админу инстанса, создать ретеншен полиси. Это то, что приходит в голову немедленно...если писал что то сложнее бложика :) А если головой подумать, то и вообще можно много чего придумать. Или вот, к слову о ретеншене. Мастодон не умеет сам чистить кэш, это надо делать кроном по расписанию. То есть между вызовами крона случился пик активности и твой инстанс сдох :)

@shura @dside да, клиент фейсбука не один, ты можешь написать свой, только апрув получи.

@3draven Представь, в мастодоне нужно было бы получить аппрув от КАЖДОГО инстанса
@dside

@shura @dside зачем? Твой клиент коннектится всегда к одному инстансу. Во время регистрации твоего аккаунта или входа твое приложение каждый раз регается как новый клиент. Как такое вообще выдумать могли, мне неясно :)

@3draven А потом ты захотел аккаунт на другом инстансе... Опять к админу с поклоном идти?
@dside

@shura @dside в зависимости от политики инстанса. Так же сейчас регистрации открыты где-то, где-то нет для аккаунтов. При этом, на самом деле регистрация приложений сейчас зачем нужна если ты можешь буквально каждый заход на сервер ее снова сделать через открытое всем ветрам апи? Каков смысл этого процесса сечас? Никакого, просто забить базу шоб було по сути.

@shura @dside тут надо понимать, что это дважды кривая реализация. Приложение админ (клиент под андроид, клиент под айос, прогу васи) должен аппрувить один раз за жизнь инстанса. То, что с клиентом под андроид пришло 5млн юзеров должно требовать олин аппрув у первого юзера в жизни.

@shura @dside потому как clientid clientsecret в oauth придумали что бы на инстансе можно было забанить зловредную прогу васи целиком.

@3draven @shura а вася берёт публичные client_id и client_secret из какого-нибудь Tusky и случается *хрррясь*

@dside @shura берет конечно, сейчас ты так же можешь маскироваться под чужой клиент. Потому в oauth оговорено много всего разного на тему разных flow аутентификации. Но. Мы говорим о том, что бессмысленный по сути процесс сейчас может завалить мелкий инстанс. Маскировка же васи это другой вопрос.

@3draven > сейчас ты так же можешь маскироваться под чужой клиент

Поскольку реквизиты случайные, нет, не могу.

Впрочем, более осмысленным это процесс не делает, да.

@shura

@dside @shura а, я не о том, что в мастодоне нагородили, там да. Я про oauth.

@3draven @shura @dside

у тебя коммерческие требования к некоммерческому проекту.

хорошо за деньги не так тяжело сделать, а вот хорошо и бесплатно - сильно сильно сложнее =)

@kurator88 @shura @dside да нет требований, я же написал, что кривое, но лучше все равно нет. Пишут и бесплатно отлично, просто так сложилось.

@3draven да я этот мастодон даже из их докера не смог запустить, а ты уж про какие-то совсем сложные вещи пишешь
@dside

Sign in to participate in the conversation
MustUdon

I like Twitter, but, Mastodon it is so excited! Feel free to register it is server just for fun! Usefull links https://instances.social https://www.reddit.com/r/Mastodon/comments/yugh2o/some_useful_mastodon_lists/?utm_source=share&utm_medium=web2x&context=3