Plugin ActivityPub

|||
-|-|-|
:discourse2: | Resumo | O Discourse ActivityPub permite que você publique posts do Discourse via ActivityPub para que possam ser lidos em serviços que suportam ActivityPub, como o Mastodon.
:hammer_and_wrench: | Link do Repositório | GitHub - discourse/discourse-activity-pub: Adds ActivityPub support to Discourse.
:open_book: | Guia de Instalação | Como instalar plugins no Discourse

Se você não está familiarizado com ActivityPub, comece assistindo a este vídeo curto:

Quando estiver pronto para começar a configurar o plugin, confira nossos tópicos de activitypub #documentação:integrações:

65 curtidas

Obrigado pelo seu trabalho aqui! Estou realmente ansioso para ativar isso e agradeço por liberá-lo para testes, para que aqueles de nós com várias configurações possam contribuir pelo menos com testes em um conjunto mais amplo de cenários.

Ao pensar em quando ativar isso para o meu site, estou tentando pensar sobre quais seriam as “portas de mão única”.

Subcategorias

Tenho 8 categorias de nível superior, mas, além disso, tenho 21 subcategorias públicas. Ter que seguir 29 atores para acompanhar toda a atividade pública do site parece muito. Além disso, pode ser uma surpresa para os usuários que seguir uma categoria não segue as subcategorias.

Se eu pudesse selecionar uma opção nas configurações de AtividadePub da categoria para “federar também subcategorias públicas”, eu faria isso. Se federar separadamente as subcategorias parece ser uma porta majoritariamente de mão única do ponto de vista do usuário, eu acho. Portanto, se você considerar uma opção de “federar também subcategorias”, isso pode informar meus planos. Nossa barra lateral padrão mostra apenas as categorias de nível superior, e o padrão do Discourse ao visualizá-las é todo o conteúdo de nível superior e subcategoria juntos, então isso parece razoavelmente consistente com as expectativas do Discourse.

Federar tudo!

Acho que seria interessante também adicionar uma configuração em todo o site para um ator de AtividadePub que federe todas as postagens públicas em um site. Eu usaria isso pessoalmente. Mas não vejo isso como uma porta de mão única — eu configuraria a federação de categorias assim que estivesse pronta, mesmo que depois eu adicionasse um ator “all@” para federar tudo.

Limitações de edição

Uma das coisas que não é óbvia em sua postagem é que ela pode ser lida como se apenas a seção literal [note]...[/note] não pudesse ser editada. Para outros aqui, o que isso realmente significa é que, se você federar, a edição está atualmente desativada em todas as postagens assim que elas são federadas (exceto para postagens com uma seção literal [note]...[/note]); esta mensagem aparece apenas quando você tenta salvar sua edição:

Meu site permite intencionalmente que usuários suficientemente confiáveis editem indefinidamente, então não posso ativar isso sem a capacidade de desativar esse controle (ou o controle ser removido porque as edições são federadas). Como um exemplo geral aplicável além de sites confiáveis, qualquer categoria com postagens em modo wiki será quebrada ao configurar a federação para essa categoria.

Tentei excluir uma postagem federada que eu havia tornado um wiki e recebi isto:

No entanto, a postagem foi excluída e a exclusão foi federada.

Personalidade

Seria bom fornecer uma imagem de perfil para cada ator designado. No Mastodon, vejo apenas a imagem do elefante cinza para cada ator de categoria, e eu adoraria adicionar um pouco de personalidade aqui. :smiling_face:

Logs de erro

Recebi dois tipos de erros em meus logs do plugin de atividadepub até agora:

Message (3 copies reported)

NoMethodError (undefined method `ap_type' for nil:NilClass)
(eval):7:in `_fast_attributes'
app/controllers/application_controller.rb:418:in `block in with_resolved_locale'
app/controllers/application_controller.rb:418:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:367:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:18:in `object'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/activity_serializer.rb:18:in `_object'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/activity_serializer.rb:9:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/object.rb:50:in `json'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/collection/ordered_collection_serializer.rb:7:in `map'
plugins/discourse-activity-pub/app/serializers/discourse_activity_pub/ap/collection/ordered_collection_serializer.rb:7:in `ordered_items'
(eval):7:in `_fast_attributes'
Message

Job exception: undefined method `model' for #<DiscourseActivityPubActivity id: 2, ap_id: "https://social.makerforums.info/cf2e1e8d-83e3-447e...", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 3, object_id: "1", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 02:23:13.798564000 +0000", updated_at: "2023-06-01 02:23:13.798564000 +0000">

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/activemodel-7.0.4.3/lib/active_model/attribute_methods.rb:458:in `method_missing'
/var/www/discourse/plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:79:in `after_deliver'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:42:in `perform_request'
/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:13:in `execute'
/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:236:in `block in perform'
/var/www/discourse/app/jobs/base.rb:232:in `each'
/var/www/discourse/app/jobs/base.rb:232:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/sidekiq-6.5.9/lib/sidekiq/processor.rb:202:in `execute_job'

Obrigado novamente pelo seu trabalho nisso!

8 curtidas

Tenho o prazer de dizer que o SocialHub já está rodando:

… toque, toque, toque…

Já deveria ter aparecido no Fediverse… Olhando os logs…

Oh, há problemas com a primeira tentativa de seguir um ator:

  • Job exception: undefined method model’ for #\u003cDiscourseActivityPubActivity id: 2, ap_id: "https://ps.s10y.eu/820e6bf2-ec02-49f8-ab5e-e3cefbb…", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 4, object_id: "2", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 13:30:16.131136000 +0000", updated_at: "2023-06-01 13:30:16.131136000 +0000"\u003e`
  • Job exception: undefined method model’ for #\u003cDiscourseActivityPubActivity id: 8, ap_id: "https://mastodon.social/ce62fd77-fe03-4060-a951-79…", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 8, object_id: "2", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 13:39:14.512966000 +0000", updated_at: "2023-06-01 13:39:14.512966000 +0000"\u003e`
  • Job exception: undefined method model’ for #\u003cDiscourseActivityPubActivity id: 6, ap_id: "https://social.coop/4236c87a-0d22-402d-8546-e37a21…", ap_key: nil, ap_type: "Follow", local: nil, actor_id: 6, object_id: "2", object_type: "DiscourseActivityPubActor", summary: nil, published_at: nil, created_at: "2023-06-01 13:38:54.493118000 +0000", updated_at: "2023-06-01 13:38:54.493118000 +0000"\u003e`
Aqui está o backtrace para o último
active_model-7.0.4.3/lib/active_model/attribute_methods.rb:458:in `method_missing'

/var/www/discourse/plugins/discourse-activity-pub/app/models/discourse_activity_pub_activity.rb:79:in `after_deliver'

/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:42:in `perform_request'

/var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_deliver.rb:13:in `execute'

/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform'

rails_multisite-5.0.0/lib/rails_multisite/connection_management.rb:82:in `with_connection'
/var/www/discourse/app/jobs/base.rb:236:in `block in perform'

/var/www/discourse/app/jobs/base.rb:232:in `each'

/var/www/discourse/app/jobs/base.rb:232:in `perform'

sidekiq-6.5.9/lib/sidekiq/processor.rb:202:in `execute_job'

sidekiq-6.5.9/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'

sidekiq-6.5.9/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'

/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call'

sidekiq-6.5.9/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'

sidekiq-6.5.9/lib/sidekiq/middleware/chain.rb:182:in `invoke'

sidekiq-6.5.9/lib/sidekiq/processor.rb:169:in `block in process'

sidekiq-6.5.9/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_retry.rb:113:in `local'

sidekiq-6.5.9/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'

sidekiq-6.5.9/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/processor.rb:263:in `stats'

sidekiq-6.5.9/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_logger.rb:13:in `call'

sidekiq-6.5.9/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_retry.rb:80:in `global'

sidekiq-6.5.9/lib/sidekiq/processor.rb:124:in `block in dispatch'

sidekiq-6.5.9/lib/sidekiq/job_logger.rb:39:in `prepare'

sidekiq-6.5.9/lib/sidekiq/processor.rb:123:in `dispatch'

sidekiq-6.5.9/lib/sidekiq/processor.rb:168:in `process'

sidekiq-6.5.9/lib/sidekiq/processor.rb:78:in `process_one'

sidekiq-6.5.9/lib/sidekiq/processor.rb:68:in `run'

sidekiq-6.5.9/lib/sidekiq/component.rb:8:in `watchdog'

sidekiq-6.5.9/lib/sidekiq/component.rb:17:in `block in safe_thread'

A Nota não parece aparecer no meu feed :cry:

(sinta-se à vontade para mover esta mensagem para um local mais apropriado)

8 curtidas

A longo prazo, concordo, isso deve ser específico por ator e configurável. Mas no momento, o logotipo do site deve ser captado. Ele é para mim para @feature@meta.discourse.org:

4 curtidas

Ok, provavelmente isso estava relacionado a um dos erros que vi, então. O logotipo do site faz muito sentido para mim.

Pensando sobre isso… Se houvesse a possibilidade de usar a cor da categoria ali, seria incrível, mas não sei se haveria espaço para isso.

4 curtidas

Tentei novamente e…

Parcialmente funcionando: a nota foi encurtada um pouco demais (71 caracteres) do original:

We’ve been waiting for it: now thanks to Angus McLeod and the pavilion team, as well as CDCK, Inc. the company behind #Discourse, the #SocialHub is now federated! You can follow @fediverse@socialhub.activitypub.rocks for general announcements, and @feps@socialhub.activitypub.rocks for Fediverse Enhancement Proposals.
:hugs:

4 curtidas

Recomendação geral:

Pense nisso por alguns dias antes de ativar a integração do Activitypub.
Lembre-se que essas contas serão listadas para sempre no fediverso de redes sociais e podem criar confusão se você perceber que o nome da conta/categoria deve ser alterado posteriormente. :heart:

2 curtidas

Acredito que a longo prazo, seria possível implementar adicionalmente o movimento de contas para renomear o ator para uma categoria. É apenas mais trabalho que tem que ser valioso para alguém disposto a fazer o trabalho, então duvido que seja algo de curto prazo. :smiling_face: Pelo menos, espero que venha depois de outros trabalhos mais valiosos! :grin:

Isso não invalida seu ponto de forma alguma.

3 curtidas

Obrigado pelo feedback, pessoal :slight_smile:

@hellekin Isso abordará as exceções que você estava relatando. @mcdanlj Isso também abordará a segunda exceção que você relatou (mesmo problema).

@mcdanlj O primeiro problema que você relatou é um pouco mais estranho, com que frequência você o está vendo? Você poderia compartilhar mais detalhes?

Obrigado pelo feedback sobre isso, definitivamente consideraremos na fase 2 do trabalho :+1:

Acho que isso provavelmente não acontecerá na fase 2, mas anotado :+1:

A edição é desativada apenas no conteúdo da postagem que compõe a Nota. Se você não usar as tags de Nota, esses são os primeiros 500 caracteres, ou o que quer que você defina em activity pub note excerpt maxlength. Uma das coisas que estou definitivamente considerando para a fase 2 é exigir tags [note][/note] para uma Nota, pois posso ver confusão surgindo disso.

Você pode resolver isso usando tags [note][/note] para separar a Nota do outro conteúdo.

Anotado! Não testamos explicitamente isso com postagens wiki. Ainda não consegui reproduzir seu problema com a exclusão de postagens wiki. Você consegue reproduzi-lo de forma confiável? Adicionei algumas especificações neste PR que estão todas passando para esse cenário, mas estou ansioso para chegar ao fundo desse problema.

O parsing do trecho é atualmente tratado pelo mesmo sistema usado pelo parsing do trecho do tópico no Discourse (para fins da lista de tópicos), que provavelmente é por isso que cortou uma boa parte disso (as listas de tópicos também teriam). Acho que precisaremos usar um parser separado, pois prevejo que isso criará alguns problemas. Aguente firme nesta; será definitivamente abordado na fase 2.

Tenha em mente que você pode alterar o nome de exibição o quanto quiser e que a limitação na alteração do nome de usuário não é exclusiva deste plugin. Portanto, embora o que você diz seja verdade, isso é verdade para uma boa parte do fediverso.

Além disso, não incluí o nome de usuário no ID do Ator, em parte para permitir a possibilidade de adicionar a capacidade de alterar o nome de usuário no futuro.

Os dados ActivityPub do plugin são abstraídos dos dados do Discourse. Não há limitação inerente em alterar o modelo do Discourse (ou seja, qual categoria) ao qual um ator está associado. Você poderia até mesmo associar o ator a um tipo diferente de modelo do Discourse no futuro, ou seja, associar um Ator que você criou para uma categoria a um usuário em vez disso (a relação entre Atores e modelos do Discourse é polimórfica). Não estou dizendo que isso será explicitamente adicionado como recurso, mas mais para dizer que não há limitações rígidas a esse respeito.

Em geral, sim, vale a pena considerar quais categorias você deseja como atores, mas, no geral, esta implementação tem um grau de flexibilidade relativamente alto, então seu grau de preocupação deve ser relativo a esse contexto. Expliquei um pouco mais sobre a natureza do fluxo de dados no plugin, o que elucida ainda mais esse ponto, aqui

Obrigado novamente a todos! É ótimo ter usuários engajados.

5 curtidas

Acho que estava associado à exclusão de posts, já que excluí três posts de teste e houve três instâncias do erro.

Isso o tornaria absolutamente inutilizável para o meu site. Não estou tentando usar o Discourse como uma maneira mais difícil de escrever posts para o fediverso do que simplesmente escrevê-los no Mastodon. Forçar toda a minha comunidade a começar a usar anotações bbcode [note]...[/note], incluindo os novos usuários frequentes do site que buscam ajuda, seria um impeditivo.

Não, definitivamente não posso. Não se trata de mim. Trata-se dos usuários do meu site, que são usuários do Discourse, não usuários do discourse/discourse-activity-pub.git.

É apenas uma edição.

A federação de edições é normal. Pelo que entendi, a maioria das implementações ActivityPub amplamente utilizadas já permite edições há muito tempo. O Mastodon foi o único que resistiu entre as implementações populares até o ano passado, quando finalmente cedeu e permitiu edições.

Reconheço que as edições não faziam parte do lançamento do MVP, mas até que ele federe edições ou me dê a opção de desativar a impossibilidade de editar a nota, não posso ativá-lo para o meu site. Não sei se meu caso de uso é estranho ou normal, é claro.

Meu próprio objetivo ao usar o plugin ActivityPub é facilitar o acompanhamento e o compartilhamento de conteúdo à medida que ele é criado pelos membros da minha comunidade no fórum usando o Discourse. Não é usar o Discourse como um substituto estranho e não editável apenas para posts do Mastodon. :smiling_face:

Entendo que você pretende eventualmente dar suporte à federação de edições, já que a mensagem de erro diz “atualmente não suportado” — isso está correto? Nesse caso, tudo isso é apenas uma limitação temporária e nossas diferenças de caso de uso não são importantes. Mas isso me faz pensar sobre investir esforço na proteção de edições em vez de dar suporte à federação de edições.

Eu tinha esquecido de remover o plugin retort do meu site sandbox quando o removi do meu site de produção. Remover retort corrigiu tanto o log de erros estranho quanto a mensagem de erro estranha. Meu erro!

Isso significa que, como o plugin está hoje, poderíamos usar o mesmo ator para várias categorias? Ou que o modelo de dados é muito flexível e os detalhes de implementação são fáceis de alterar?

Só para constar, no meu caso de uso, minha preferência seria postar tudo sem limitações. Sei que não é assim que outros podem configurá-lo, mas acho que, no final, eu definiria o tamanho máximo para o mesmo que o tamanho máximo de um post no meu Discourse, que é… grande! :smiling_face:

2 curtidas

Entendi, vou investigar mais em breve.

Entendido. Meu comentário foi mais no sentido de que editar conteúdo que não seja uma nota é de fato possível após a publicação no momento. Você está certo de que esta primeira versão não estará isenta de problemas de UX para uso geral por qualquer usuário. No entanto, ela suporta outros usos muito bem, por exemplo, federando anúncios.

Sim, adicionaremos suporte para edição de conteúdo de Nota após a publicação na fase 2. Observe que a edição é atualmente suportada antes que a nota seja publicada. Ao construir algo assim, você tem que reduzir o número de partes móveis o máximo possível.

Não, ainda não. Você poderia explicar um pouco mais o que quer dizer aqui? Você está pensando em ter um ator para todo o site ou está pensando mais na questão da subcategoria?

Sim, embora eu não usasse necessariamente o termo “fácil” :wink:

Estou curioso onde você pretende federar o conteúdo irrestrito? Pergunta genuína; quero entender um pouco mais seu ponto de vista.

2 curtidas

Esqueci de editar isso depois de descobrir que deixar retort no lugar acidentalmente foi a causa do erro. :flushed:

Oops.

Bom o suficiente! :pray:

Não me preocuparei mais com isso, e na fase 2 ajudarei a testar isso.

Eu vaguei sobre ambos, mas era uma questão de baixo valor. Estava apenas curioso sobre o quanto eu poderia levar minha experimentação com meu site de staging, e não queria tentar coisas que já eram conhecidas como impossíveis. :+1:

Vou tentar!

Contexto: Mastodon limita o comprimento da postagem que permitirá aos usuários escrever, mas não o comprimento da postagem que ele exibirá. Eu executo um servidor Mastodon-glitch configurado com um limite de 2000 caracteres; vi várias pessoas postarem sobre a configuração de um limite de 31337 caracteres (porque claro). Vejo postagens longas no meu feed de pessoas que usam pleroma, akkoma, etc.

Temos conteúdo muito legal aparecendo nos Fóruns Maker (meu discourse) de tempos em tempos (na minha opinião, de qualquer forma!), e eu gostaria de promovê-lo no Fediverso em geral para torná-lo acessível a um público mais amplo. Sei que Mastodon tem sido opinativo que 500 caracteres é o comprimento mágico para microblogging — mas ActivityPub não se limita a microblogging. É federação, incluindo, mas não se limitando a microblogging. Quando sigo um ator ActivityPub em minha conta Mastodon, não sou limitado a postagens curtas. Posso ler, comentar e impulsionar postagens mais longas.

Então, “onde você está antecipando a federação” é uma pergunta confusa para mim.

  • Eu impulsionaria o conteúdo do meu servidor Mastodon-glitch. Impulsionamentos não aplicam o limite de caracteres que se aplica à autoria de postagens, mesmo no Mastodon padrão.
  • Eu esperaria que os membros da comunidade seguissem de qualquer servidor ActivityPub (reconhecendo que será mais Mastodon do que outros, pelo menos no momento), e eles não terão todos a mesma opinião sobre o quão longa uma nota ActivityPub deve ser.

Em última análise, como administrador do servidor, eu não tenho controle sobre onde esse conteúdo é federado. Esta é a decisão de cada seguidor. Não é óbvio para mim por que exceptuar vs federar a postagem inteira do discourse como uma nota activitypub seria o padrão, mesmo para seguidores no Mastodon, mas mais ainda em todo o Fediverso.

Não tenho certeza se isso responde à sua pergunta. Mas também não tenho certeza se a entendi bem. :grin: Ficarei feliz em aprofundar isso se você quiser.

2 curtidas

Sem problemas! Fico feliz que tenhamos coberto as exceções por enquanto. Nos avise se você encontrar mais alguma. @hellekin Da mesma forma, nos avise se você encontrar quaisquer outros problemas ou comportamentos estranhos.

Ótimo! Obrigado.

Responde! Obrigado, é um contexto útil para o nosso planejamento da fase 2.

5 curtidas

Estou prestes a atualizar para a versão mais recente. Uma coisa que seria útil é escolher o público: se a postagem será pública ou apenas para seguidores. Agora é o último, então não podemos impulsioná-la e devemos seguir a conta antes de receber avisos. Agradeço isso porque permanece experimental, mas definitivamente deveria ser uma opção para postar publicamente para que possamos anunciar o recurso mais amplamente para os Fedizens :slight_smile:

5 curtidas

Sim, isso é algo que consideraremos na fase 2 :+1:

6 curtidas

Você tem um roteiro público para as fases de desenvolvimento?

3 curtidas

Não há um roteiro público, mas avisarei quando definirmos os detalhes. Quaisquer sugestões razoáveis sobre o que deveria estar nele são bem-vindas! Exemplos de casos de uso específicos como o de @mcdanlj também são sempre úteis.

6 curtidas

Fiz algumas propostas no SocialHub que já foram feitas aqui há algum tempo…

2 curtidas

Eu ainda não tinha chegado ao ponto de notar isso em meus testes de um servidor de staging, mas gostaria de reconhecer que o impulsionamento é central para o meu próprio caso de uso também.

6 curtidas

Tratamento de 410 Gone

Meus logs têm muitos (URL alterado):

[Discourse Activity Pub] GET request to https://activitypub.example/users/missing-account failed: Expected([200, 201, 202, 301, 302, 307, 308]) <=> Actual(410 Gone)

Acredito que isso esteja relacionado a: A recuperação do objeto DEVE responder com o código de status 410 Gone se Tombstone estiver no corpo da resposta, caso contrário, responde com 404 Not Found (server:object-retrieval:deleted-object:410-status): a conta foi movida para outra instância.


Também estou recebendo alguns:



[Discourse Activity Pub] update_stored_from_json failed to save actor. AR errors: Ap has already been taken. Actor JSON: {@context:[https://www.w3.org/ns/activitystreams,https://w3id.org/security/v1,{@manuallyApprovesFollowers:as:manuallyApprovesFollowers,toot:http://joinmastodon.org/ns#,featured:{@id:toot:featured,@type:@id},featuredTags:{@id:toot:featuredTags,@type:@id},alsoKnownAs:{@id:as:alsoKnownAs,@type:@id},movedTo:{@id:as:movedTo,@type:@id},schema:http://schema.org#,PropertyValue:schema:PropertyValue,value:schema:value,discoverable:toot:discoverable,Device:toot:Device,Ed25519Signature:toot:Ed25519Signature,Ed25519Key:toot:Ed25519Key,Curve25519Key:toot:Curve25519Key,EncryptedMessage:toot:EncryptedMessage,publicKeyBase64:toot:publicKeyBase64,deviceId:toot:deviceId,claim:{@type:@id,@id:toot:claim},fingerprintKey:{@type:@id,@id:toot:fingerprintKey},identityKey:{@type:@id,@id:toot:identityKey},devices:{@type:@id,@id:toot:devices},messageFranking:toot:messageFranking,messageType:toot:messageType,cipherText:toot:cipherText,suspended:toot:suspended}],id:https://mas.to/users/rikvipcode,type:Person,following:https://mas.to/users/rikvipcode/following,followers:https://mas.to/users/rikvipcode/followers,inbox:https://mas.to/users/rikvipcode/inbox,outbox:https://mas.to/users/rikvipcode/outbox,featured:https://mas.to/users/rikvipcode/collections/featured,featuredTags:https://mas.to/users/rikvipcode/collections/tags,preferredUsername:rikvipcode,name:,summary:,url:https://mas.to/@rikvipcode,manuallyApprovesFollowers:false,discoverable:false,published:2023-05-04T00:00:00Z,devices:https://mas.to/users/rikvipcode/collections/devices,suspended:true,publicKey:{@id:https://mas.to/users/rikvipcode#main-key,owner:https://mas.to/users/rikvipcode,publicKeyPem:--...


E

[Discourse Activity Pub] GET request to https://mastodon.social/users/ejovoni46709 failed: Expected([200, 201, 202, 301, 302, 307, 308]) <=> Actual(410 Gone)
[Discourse Activity Pub] Failed to process https://mastodon.social/users/ejovoni46709: Could not resolve actor
[Discourse Activity Pub] Failed to process https://mastodon.social/users/ejovoni46709#delete: Could not create actor
[Discourse Activity Pub] Failed to process https://mastodon.social/users/epybisezax9438#delete: Could not find object
3 curtidas