Plugin ActivityPub

Talvez você tenha que me explicar isso como se eu tivesse 5 anos.

Se minha organização estiver no Mastodon em https://example.social/@MyOrganization

Posso ter uma categoria no Discourse que mostre todas as postagens da organização no Mastodon?

https://discourse.example.org//c/fediverse/67

E quaisquer interações com essas postagens no Mastodon serão representadas nas postagens do Discourse nessa categoria?

E quaisquer interações com essas postagens no Discourse serão visíveis no Mastodon?

Vou esperar você confirmar ou negar antes de fazer minhas perguntas de acompanhamento.

1 curtida

Eu respondo por todos aqueles que conheço com certeza.

Sim, você pode. Então essa categoria segue sua conta do Mastodon.

Respostas sim. Favoritos (estrelas) não, porque a função deles é apenas mostrar essas “curtidas” localmente para esse usuário do Mastodon. Outros, como sua categoria ou quem quer que esteja seguindo esse usuário, ou seja, sua organização, nunca veem os favoritos dados.

Este é o meu problema no momento, mas não no sentido de que os comentários escritos em um tópico em uma categoria não viajam para o Mastodon.

Mas se você permitir, então essa categoria pode ser seguida a partir do Mastodon e, em seguida, tudo o que for escrito é público no Mastodon — dependendo de suas configurações, tópicos e postagens, ou apenas a primeira postagem dos tópicos. Reações não se movem para o Mastodon.

Basicamente:

  • se uma categoria segue um usuário do Mastodon: o Discourse recebe do Mastodon
  • se um usuário do Mastodon segue uma categoria: o Mastodon recebe do Discourse

Então a ênfase é, um ponto de vista simplificado com certeza,

  • se o ponto principal é informar aos usuários do fórum, e os usuários do Mastodon veem apenas se eles seguem, então a publicação acontece em tópicos e os usuários do Mastodon veem apenas se alguém segue essa categoria (ou eles sabem como encontrar essa categoria como um usuário do ActivityPub)
  • se o ponto principal é informar aos usuários do Mastodon, e os usuários do fórum veem se eles seguem essa categoria, e a participação federada não é necessária da categoria, então essa categoria segue seu usuário do Mastodon

Quase a mesma coisa, mas as mensagens são mostradas de forma diferente no Mastodon.

Uma coisa. Devido aos limites do Mastodon, praticamente todas as tags de markdown são mostradas como estão, o que significa que, por exemplo, o negrito não acontece no Mastodon, e os seguidores veem **negrito** em vez de negrito. E as tags não se movem para cá ou para lá.

2 curtidas

Tenho um sandbox do Discourse, se precisar de um beta tester.

1 curtida

O motivo pelo qual você não pode seguir essa conta no momento é porque ela é um bot. Ainda não adicionamos suporte para seguir bots.

Isso parece ser devido ao “Authorized fetch” do Mastodon estar ativado em mastodonapp.uk. Vou verificar isso novamente nos próximos dias.

Observo que, quando você segue uma hashtag no Mastodon, ela só mostrará postagens com essa hashtag que já estão no servidor em que você está. Se houver postagens com essa hashtag em outro servidor Mastodon, você não as verá. Em outras palavras, o Mastodon não adicionou suporte principal ao ActivityPub às suas hashtags (por exemplo, eles não as tornaram Atores como o Plugin Discourse faz para tags do Discourse). Veja a documentação e a discussão aqui. Ainda pode ser possível fazer isso, mas exigirá algum tipo de retransmissão ou talvez sondagem.

[quote=“Jakke Lehtonen, post:390, topic:266794, username:Jagster”]O que é isso:

discourseactivitypub::AP::Handlers::Warning
[/quote]

Você precisará compartilhar a mensagem em si para que eu possa lhe dizer mais (ou seja, não apenas o backtrace). Quando você tiver o log detalhado ativado, o plugin registrará falhas no processamento de objetos recebidos. Pode haver muitas razões para uma falha no processamento, muitas das quais não estão relacionadas ao Discourse. O fediverso tem muitos objetos circulando o tempo todo. Posso alterar o nível de log dessas falhas de processamento para apenas “info”, pois acho que elas sugerem às pessoas um problema com o próprio plugin, quando na maioria dos casos não há problema do lado do Discourse.

Sim, eles devem aparecer como respostas no Mastodon. Exemplos específicos são sempre os melhores, pois posso analisar o que aconteceu e abordar qualquer coisa que precise ser abordada (se algo precisar ser abordado).

[quote=“Ted Johnson, post:391, topic:266794, username:TedJohnson”]Posso ter uma categoria no Discourse que mostre todas as postagens da organização para o Mastodon?

https://discourse.example.org//c/fediverse/67

E quaisquer interações com essas postagens (Favoritar ou Responder) no Mastodon serão representadas nas postagens do Discourse nessa categoria?

E quaisquer interações com essas postagens no Discourse serão visíveis no Mastodon?
[/quote]

Sim, é assim que funciona a configuração “Tópico Completo”. Veja mais em

1 curtida

Não sei a quais mensagens está relacionado, mas recebi muitas delas. Mas tentarei descobrir (tenho certeza de que tenho o log detalhado ativado, mas minha memória é realmente não confiável). Por outro lado, não vejo nenhum comportamento estranho em lugar nenhum.

Tags, bots etc — obrigado, isso explicou muito.

Como faço isso? Porque isso acontece com todos eles, não com alguns.

edit

Não sei se isso ajuda um pouco, mas isso apareceu um minuto antes desse aviso:

[Discourse Activity Pub] Failed to process https://mastodon.social/users/fesshole: Object is not supported

Foi uma mensagem impulsionada por mim.

E com o mesmo timestamp desse aviso estava isto:

[Discourse Activity Pub] Failed to process https://mastodon.social/users/moa333#delete: Object is not ready

Se eu tiver que adivinhar, este último está relacionado ao handlers::warning, e ambos são informativos, e eu não preciso me preocupar com eles?

edit2

Sim, o problema era a assinatura HTTP. O plugin queria, mas meu Mastodon não a usava. Quando desativado em ambas as pontas (talvez ativá-lo em ambos os sites fizesse o mesmo) as mensagens começaram a viajar para cá, para lá e para todo lado.

Preciso investigar mais a fundo quais são os prós e contras reais de usar essa configuração.

Obrigado por me guiar na direção certa!

1 curtida

Obrigado por compartilhar. Nos próximos dias estarei revisando nossa implementação de assinaturas HTTP novamente, no contexto de análise do fetch autorizado do Mastodon. Talvez eles tenham alterado a forma como tratam as assinaturas, ou precisamos ajustar nosso manuseio.

Porque eu pensei (no nível da imaginação, sem fatos) que se eu tivesse assinaturas ativadas no Discourse e desativadas no Mastodon, as mensagens iriam do Discourse para o Mastodon (porque a instância não usa assinaturas HTTP), mas não do Mastodon para o Discourse (porque o fórum quer assinaturas HTTP). Mas o que aconteceu foi totalmente o oposto.

Mas o ator do Mastodon (minha conta) está conectado ao meu usuário do Discourse, e eu sou um administrador — isso pode significar algo?

De qualquer forma, quando ambos não estão usando assinatura HTTP, tudo funciona como esperado. Eu estou bem com isso, mas você como um desenvolvedor pode ter outra história :smirking_face:

Não tenho certeza de quantos benefícios válidos fortes a assinatura HTTP oferece. Em algum momento, não muito tempo atrás, o Pixelfed teve problemas com o Mastodon quando as assinaturas estavam em uso. E nós temos um terceiro jogador também — o Wordpress.

De qualquer forma, estou saindo do tópico agora.

1 curtida

Esta conta deve ser detectável quando isso for mesclado e implantado em seu servidor.

3 curtidas

@Jagster Todas as suas respostas também aparecerão corretamente no Mastodon quando isso for mesclado.

(O Mastodon ajustou alguns tratamentos do lado deles)

4 curtidas

Isso foi corrigido agora, @tvavrda. Desculpe por isso, eu pulei uma etapa no processo.

2 curtidas

Tentando seguir uma conta do peertube em uma categoria, mas não passa de pendente.

Aqui está o que está nos logs

A solicitação POST para https://spectra.video/accounts/spoilerdiacre/inbox falhou: Expected([200, 201, 202]) <=> Actual(403 Forbidden)
https://community.derpandchill.com/ap/actor/ca233d6f9d47cde558877fb7609a6b3a falhou ao entregar para https://spectra.video/accounts/spoilerdiacre/inbox

Eu tentei várias vezes. Eu sei que são diferentes, mas seria bom postar vídeos automaticamente em minha comunidade.

Obrigado pelo relatório, vou investigar mais de perto mais tarde nesta semana.

Sobre a federação entre Discourse e Mastodon. Há algumas coisas que não entendo, não consigo ou/e espero demais. Coloquei alguns links. O conteúdo está em finlandês, mas o conteúdo não é importante, eu acho.

Atores do fórum e boosting

Se entendi direito, um ator de categoria federa um tópico dando um boost nele, porque o usuário real é um ator, mas as coisas simplesmente não funcionam dessa forma, ainda. Então, o boosting é a única maneira de fazer federação?
Mas isso cria uma situação em que um usuário do Mastodon o vê como um boost e o remetente original é, como exemplo, meu @Jagster@foorumi.katiska.eu. Mas eles nunca seguem o usuário que deu o boost, mas sim o original, como minha conta pessoal do fórum — mas eles não podem, porque veem uma solicitação de aprovação, e eu não posso fazer isso. Então, eles nunca seguem ninguém.

Artigo vs. Nota

Não entendo o que devo esperar, mas acho que eles estão funcionando ao contrário.
Se eu usar o formulário Nota, o Discourse federará o primeiro post como está. Assim: Sokeriton kofeiini voi olla terveellistä - Ihminen, luonto & maailma - Katiskan foorumi (e como de costume, links do ActivityPub etc. são encontrados normalmente; aliás, gosto dessa nova maneira de mostrá-lo, mesmo que eu não o use totalmente)
Este mostra “Leia mais”, mas clicar nele abre o conteúdo no Mastodon.

Este é um Artigo: Onko koiran peitsaaminen aina merkki ongelmasta? - Koiramaailma - Katiskan foorumi
Ele mostra apenas o título e links para esse tópico. Portanto, a leitura no Mastodon é impossível.

edit: desculpe pela bagunça após a edição, mas acabei de perceber que este tipo de artigo estava sendo mostrado vindo do meu ator do fórum, não como um boost pelo ator da categoria. Ele faz isso toda vez; duas coisas diferentes: original e boosting :man_facepalming: Isso foi bom, no entanto. Mas seguir meu ator do fórum ainda é impossível por causa da aprovação; ele age como uma conta bloqueada.

Tentei ler este (mega)tópico, e também me incomodei em perguntar no ask.discourse.com. Essa capacidade de mostrar o artigo completo é feita exatamente usando links, não mostrando o conteúdo em si? Se sim, é desnecessário para o Mastodon, porque ele também pode mostrar conteúdos mais longos, e eu usarei nota em vez de artigo.

Federação da discussão

Quando eu federei um tópico, e alguém está comentando nele, isso aparece sob esse tópico normalmente. Mas se eu comentar nesse tópico no fórum, isso será federado, mas ninguém o vê como um comentário desse tópico (ou thread no Mastodon), porque foi enviado como um boost pelo ator da categoria?
É essa a situação em que o aplicativo Mastodon (oficial) diz que talvez nem todos os comentários estejam nesta instância, e você deveria abrir o original — e ninguém nunca o faz.

Este é um tópico onde tive duas discussões independentes onde o fórum viu tudo, mas o Mastodon não sabia sobre os comentários escritos no fórum: Pikkulasten ruuat? - Retkeily & Melonta - Katiskan foorumi
Edit esse tópico tem cerca de 5 dias no momento em que escrevo isso, e foi impulsionado e publicado pelo ator da categoria, não pelo meu usuário do fórum. Algo mudou entre então e agora (sim, estou reconstruindo quase todos os dias).

1 curtida

Não é a única maneira, mas é a principal maneira usada por plataformas semelhantes a fóruns para federar grupos de tópicos/threads (ou seja, com uma tag ou categoria específica). O processo é descrito em algo chamado FEP-1b12, que seguimos e temos trabalhado com outros implementadores.

Desculpe, não entendi bem qual é o problema aqui. Você poderia tentar reformular isso?

A razão pela qual isso acontece é que o Mastodon parou de converter o conteúdo de Artigos e apenas mostra um link para o conteúdo original. Dado o aumento de fóruns no fediverse, por exemplo, nós! pode ser hora de um novo PR para o Mastodon para readicionar esse suporte.

Sim, houve algumas mudanças a esse respeito recentemente, porque o Mastodon fez várias mudanças em seu lado das coisas. Provavelmente haverá mais mudanças à medida que buscamos refinar a abordagem aqui. Se você pudesse apresentar exemplos específicos de coisas que não atendem às suas expectativas, por exemplo, Post 1 (Discourse), Resposta 1 (Mastodon), Resposta 2 (Discourse) etc., ou algo semelhante, isso seria útil.

1 curtida

Não tenho muitas expectativas, mas alguns desejos eu tenho :joy:. Tudo o mais está claro agora, mas essa coisa de boost/escritor. Talvez eu não tenha mais nenhum problema.

Estou falando de como isso aparece no Mastodon.

  • impulsionado pelo ator da categoria
  • o original é meu usuário do fórum

Quando cliquei no meu ator do fórum, apareceu isto (captura de tela do aplicativo Mona, mas o PWA oficial mostrou o mesmo, mas é o jeito dele)

Esse ícone vermelho é solicitação de seguir, o mesmo que se fosse um perfil bloqueado.

Então eu fiz a reconstrução.

Agora o PWA oficial mostra o que deveria:

Mas o Mona ainda mostra aquele ícone vermelho.

Por algum motivo, eu ou qualquer outra pessoa não conseguíamos seguir meu ator do fórum por causa disso. Mas agora está corrigido (algum problema estranho entre os dois sistemas :man_shrugging:). E o aplicativo mastodon usado agora não atualiza seu conteúdo — mas isso não é problema seu de forma alguma.

Então esta postagem foi apenas informativa mostrando… algo :joy:

1 curtida

Uma pequena solicitação de recurso cosmético: poderíamos ter um indicador gráfico para mostrar quando uma postagem vem de um ator do ActivityPub? Assim como vemos um ícone de envelope quando alguém usa e-mail.

O motivo é que meus usuários ficam confusos porque não veem a diferença entre usuários locais do fórum e usuários do Mastodon.

Por que eles deveriam saber disso? Eu não sei. As pessoas agem assim e eu gosto de mantê-las calmas. E também indicamos e-mails, e isso também não é necessário nem é um detalhe importante.

Há um indicador quando uma postagem é de um ator remoto, é um ícone azul AP, no mesmo local exato do ícone de e-mail, perto da data da postagem.

Isso é para respostas, para o OP, o mesmo ícone em azul e mais detalhes são exibidos logo abaixo do mapa do tópico.

1 curtida

Agora que você disse isso, consigo ver a diferença, mal :joy:

Você se lembra do CSS para mudar alguma das cores de forma mais clara?

Editar

Mudar essas duas cores poderia ser mais fácil também, mas como meu perfil diz, sou apenas mais um copy&paste. Então peguei isso da fonte.

Como não tenho o menor entendimento do que todas essas terciárias etc. significam no mundo real, usei cores básicas da web.

.activity-pub-topic-status,
.activity-pub-post-status {

  &.published .d-icon-discourse-activity-pub,
  &.updated .d-icon-discourse-activity-pub {
    color: #808080;
  }
  &.published-remote .d-icon-discourse-activity-pub {
    color: #008000;
  }
}
2 curtidas

EDIT

O problema a seguir está conectado ao usuário @a.gup.pe. Todas as categorias federadas encontram o usuário @koirat@a.gup.pe e o seguem, mostrando o status aguardando. Mudar de página e retornar mostra nada, que o seguimento desapareceu.

As categorias podem seguir humanos reais, no entanto.

Esse ator é, de fato, um bot, e o Discourse não pode seguir bots — mas, até onde sei, ele não se identifica como um bot. E mesmo que o problema fosse a “botice” (isso é uma palavra? :flushed_face:), o Discourse não deveria me deixar segui-lo em primeiro lugar (a menos que o Discourse não soubesse disso no momento). De qualquer forma, ele não deveria encerrar o seguimento sem me avisar. Ou será que encerrou… Eu não verifiquei os logs, minha falha.

EDIT2

Isso foi tudo que encontrei.

falha ao entregar para https://a.gup.pe/u/koirat/inbox
[Discourse Activity Pub] https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd falhou ao entregar para https://a.gup.pe/u/koirat/inbox
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
id: https://foorumi.katiska.eu/ap/activity/e05428a3d5d0d9637c8b191bc4556063
type: Follow
to: https://a.gup.pe/u/koirat
published: '2025-02-23T07:11:19Z'
updated: '2025-02-23T07:11:19Z'
actor: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  id: https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd
  type: Group
  updated: '2025-02-20T08:03:45Z'
  url: https://foorumi.katiska.eu/c/koiramaailma/33
  name: 'Katiska.eu: koiramaailma'
  inbox: https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd/inbox
  outbox: https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd/outbox
  followers: https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd/followers
  preferredUsername: koiramaailma
  publicKey: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
    id: https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd#main-key
    owner: https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd
    publicKeyPem: |
      -----BEGIN PUBLIC KEY-----
     (Isso não é relevante, eu acho. Está apenas ocupando espaço)
      -----END PUBLIC KEY-----
  icon: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
    type: Image
    mediaType: image/png
    url: https://cdnfoorumi.katiska.eu/original/1X/c51c0a678551648d73e3f8729ec95ecd1fc0bb73.png
  "@context": https://www.w3.org/ns/activitystreams
"@context": https://www.w3.org/ns/activity...

Webfinger encontra o usuário a.gup.pe, então esse não pode ser o motivo.

Isso é um caso extremo, ou estou novamente tentando fazer algo estranho?

O Discourse não pode seguir listas do Mastodon (e essas também têm seus próprios problemas no Mastodon). Então, tentei o “pseudo usuário” a.gup.pe em vez disso.

Criei @koirat@a.gup.pe seguindo o mesmo usuário na minha instância — ele coletará toots onde a tag #koirat é usada (cães em finlandês, a propósito). Isso correu bem.

Então, enviei uma mensagem do Mastodon e tanto a tag quanto o usuário foram mencionados. Apareceu na lista, que seguiu o usuário guppe.

No meu Discourse, pedi à categoria X para seguir o usuário @koirat@a.gup.pe. Tenho outra categoria Y seguindo meu ator @jagster@kvarkki.nexus, estava no status aguardando. Então, eu esperava receber essa mensagem duas vezes, uma de mim e outra via guppe (oh, pelo amor de Deus, é esse o problema :thinking:).

A mensagem enviada pelo meu ator foi publicada na categoria Y, como esperado. A categoria X não recebeu nada entregue pelo ator guppe.

Quando abri a federação da categoria X, ela não estava mais seguindo @koirat@a.gup.pe.

Então, quais são os palpites:

  • @a.gup.pe funciona de alguma forma diferente e o Discourse não consegue entendê-lo
  • Tentei publicar dois tópicos idênticos do Mastodon (isso posso tentar facilmente, levará alguns momentos)

Isso não é um problema puramente acadêmico, porque resolveria os problemas de lista do Mastodon.

O motivo de isso não estar funcionando é que, quando o Discourse tenta enviar um Follow para a.gup.pe/u/koirat/inbox, ele está recebendo um erro interno do servidor 500 em resposta.

HTTP/1.1 500 Internal Server Error\r\n

Em outras palavras, há um bug no Guppe.

Observo que a abordagem coletiva do fediverse para grupos está atualmente em evolução. Estou discutindo isso, e algumas outras questões relacionadas, atualmente com pessoas do NodeBB, Wordpress, Mastodon e outros. Veja, por exemplo:

A outra questão que o Guppe enfrentará é que o próprio Mastodon tem trabalhado em um recurso de “Grupo” há algum tempo, o que pode conflitar com a abordagem do Guppe.

4 curtidas