ActivityPub 插件

你可能需要像我五岁一样向我解释一下。

如果我的组织在 Mastodon 上,网址是 https://example.social/@MyOrganization

我能否在 Discourse 中创建一个类别,显示该组织在 Mastodon 上的所有帖子?

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

并且在 Mastodon 上与这些帖子的任何互动(点赞或回复)都会在 Discourse 该类别中的帖子中显示出来?

并且在 Discourse 中与这些帖子的任何互动都会在 Mastodon 中可见?

在提出后续问题之前,我会等你确认或否定。

1 个赞

我为我确定的所有事情负责。

可以。然后该类别会关注你的 Mastodon 帐户。

回复可以。收藏(星标)不可以,因为它的作用只是在本地向该 Mastodon 用户显示“喜欢”。其他人,比如你的类别或任何关注该用户(即你的组织)的人,都不会看到给定的收藏。

这是我目前遇到的问题,但不是指类别下主题中的评论会传输到 Mastodon。

但是,如果你允许,那么该类别可以从 Mastodon 关注,然后所有发布的内容在 Mastodon 上都是公开的——取决于你的设置,主题和帖子,或者只是主题的第一个帖子。反应不会传输到 Mastodon。

基本上:

  • 如果一个类别关注一个 Mastodon 用户:Discourse 从 Mastodon 获取
  • 如果一个 Mastodon 用户关注一个类别:Mastodon 从 Discourse 获取

所以,从简化的角度来看,重点是:

  • 如果主要目的是告知论坛用户,而 Mastodon 用户只有在关注时才能看到,那么发布发生在主题中,Mastodon 用户只有在有人关注该类别时才能看到(或者他们知道如何作为 ActivityPub 用户找到该类别)。
  • 如果主要目的是告知 Mastodon 用户,而论坛用户只有在关注该类别时才能看到,并且不需要来自该类别的联合参与,那么该类别会关注你的 Mastodon 用户。

几乎是同一件事,但在 Mastodon 上显示的消息不同。

有一点。由于 Mastodon 的限制,几乎所有的 markdown 标签都会按原样显示,这意味着例如粗体在 Mastodon 上不会生效,关注者会看到 **粗体** 而不是 粗体。标签也不会在这里或那里移动。

2 个赞

我有一个 Discourse 沙盒,如果您需要测试人员。

1 个赞

您目前无法关注该账户的原因是它是一个机器人。我们尚未为机器人添加关注支持。

这似乎是由于 mastodonapp.uk 上启用了 Mastodon 的授权获取。我将在接下来的一两天内再次查看此事。

我想指出,当您在 Mastodon 上关注一个哈希标签时,它只会显示您所在服务器上已有的带有该哈希标签的帖子。如果其他 Mastodon 服务器上有带有该哈希标签的帖子,您将看不到它们。换句话说,Mastodon 尚未为其哈希标签添加主要的 ActivityPub 支持(例如,它们不像 Discourse 插件那样为 Discourse 标签创建 Actor)。请参阅文档和这里的讨论这里。这仍然是可能的,但这需要某种中继或轮询。

您需要分享消息本身,我才能告诉您更多信息(即,不仅仅是堆栈跟踪)。当您启用详细日志记录时,该插件将记录处理传入对象失败的情况。处理失败的原因可能有很多,其中许多与 Discourse 无关。在任何时候,Fediverse 都有大量对象在飞来飞去。我可能会将这些处理失败的日志级别更改为“info”,因为我认为它们会向人们暗示插件本身存在问题,而大多数情况下 Discourse 端并没有问题。

是的,它们应该会显示为 Mastodon 上的回复。具体的例子总是最好的,因为我可以分析发生了什么,并解决任何需要解决的问题(如果需要解决的话)。

是的,这就是“完整主题”设置的工作方式。请参阅更多内容

1 个赞

我不知道它与哪些消息有关,但我收到了很多这样的消息。但我会试着弄清楚(我很确定我启用了详细日志记录,但我的记忆非常不可靠)。另一方面,我在任何地方都没有看到任何奇怪的行为。

标签、机器人等——谢谢,这解释了很多。

我该怎么做?因为这种情况发生在每一个上面,而不是某些上面。

编辑

我不知道这是否有帮助,但这警告出现前一分钟出现了这个:

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

这是我转发的一条消息。

与该警告同时出现的是这个:

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

如果我猜得没错,后者与 handlers::warning 相关,两者都是信息性的,我根本不需要关心它们?

编辑2

是的,问题在于 HTTP 签名。插件需要它,但我的 Mastodon 没有使用它。当双方都禁用它时(也许双方都启用它也会有同样的效果),消息就开始在这里、那里和到处传播了。

我必须更深入地研究使用该设置的实际优缺点。

感谢您将我引向正确的方向!

1 个赞

感谢分享。接下来一天左右,我会再次查看我们对 HTTP 签名的实现,特别是在查看 Mastodon 授权拉取的背景下。也许他们已经改变了签名的处理方式,或者我们需要调整我们的处理方法。

因为我曾设想(仅凭想象,无事实依据)如果我在 Discourse 中启用签名而在 Mastodon 中禁用签名,消息将从 Discourse 发送到 Mastodon(因为该实例不使用 HTTP 签名),但不会从 Mastodon 发送到 Discourse(因为论坛需要 HTTP 签名)。但实际情况却完全相反。

但 Mastodon 的参与者(我的账户)与我的 Discourse 用户相关联,并且我是管理员——这有什么意义吗?

无论如何,当两者都不使用 HTTP 签名时,一切都按预期工作。我对此没意见,但你作为开发者可能会有不同的看法 :smirking_face:

我不确定 HTTP 签名到底有多大的有效好处。在某个时候,不久前,Pixelfed 在使用签名时遇到了 Mastodon 的问题。我们还有第三方——Wordpress。

总之,我离题了。

1 个赞

此帐户在合并并在您的服务器上部署后应该可以发现。

3 个赞

@Jagster 合并后,您的所有回复也会正确显示在 Mastodon 上。

(Mastodon 在其端调整了一些处理方式)

4 个赞

@tvavrda,现在已修复。抱歉,我漏掉了一个步骤。

2 个赞

尝试关注一个分类下的 peertube 账号,但它一直停留在“待定”状态。

日志中是这样的:

POST 请求 https://spectra.video/accounts/spoilerdiacre/inbox 失败:Expected([200, 201, 202]) <=> Actual(403 Forbidden)
https://community.derpandchill.com/ap/actor/ca233d6f9d47cde558877fb7609a6b3a 无法投递到 https://spectra.video/accounts/spoilerdiacre/inbox

我尝试了好几次。我知道它们不同,但如果能自动将视频发布到我的社区就好了。

谢谢你的报告,我会在本周晚些时候进行更仔细的调查。

关于 Discourse 和 Mastodon 之间的联合。有几件事我不明白,我不能或/和期望过高。我放了一些链接。内容是芬兰语的,但内容不重要,我想。

论坛参与者和转发

如果我理解正确,一个分类参与者通过转发来联合话题,因为真正的用户是一个参与者,但事情目前还没有那样运作。所以转发是联合的唯一方式吗?

但这造成了一种情况,即 Mastodon 用户将其视为被转发的内容,而原始发送者是,例如,我的 @Jagster@foorumi.katiska.eu。但他们从不关注转发者账户,而是关注原始账户,就像我的个人论坛账户一样——但他们不能,因为他们看到了批准请求,而我无法做到。所以他们从不关注任何人。

文章与笔记

我不明白我应该期望什么,但我认为它们的工作方式是相反的。

如果我使用笔记形式,Discourse 会将第一个帖子原样联合。像这样:Sokeriton kofeiini voi olla terveellistä - Ihminen, luonto & maailma - Katiskan foorumi (并且像往常一样,ActivityPub 链接等可以正常找到;顺便说一句,我喜欢那种显示它的新方式,即使我没有完全使用它)

那个显示“阅读更多”,但点击它会在 Mastodon 中打开内容。

这个是一个文章:Onko koiran peitsaaminen aina merkki ongelmasta? - Koiramaailma - Katiskan foorumi
它只显示标题并链接到该话题。所以在 Mastodon 中阅读是不可能的。

编辑:抱歉编辑后的一团糟,但我刚刚意识到这种文章类型是从我的论坛参与者那里显示的,而不是被分类参与者转发的。 它每次都这样做;两个不同的东西:原始和转发 :man_facepalming: 不过那很好。但关注我的论坛参与者仍然因为批准而不可能;它就像一个锁定的账户。

我尝试阅读这个(巨型)话题,我也麻烦问了 ask.discourse.com。展示完整文章的能力是否完全通过链接来实现,而不是显示内容本身?如果是这样,这对 Mastodon 是不必要的,因为它可以显示更长内容,我将使用笔记而不是文章。

讨论的联合

当我联合了一个话题,并且有人在那里评论时,那会很好地显示在该话题下。但如果我在论坛上评论那个话题,它会被联合,但没有人将其视为该话题(或 Mastodon 中的线程)的评论,因为它被分类参与者作为转发发送?

这种情况是(官方)Mastodon 应用会提示说,也许并非所有评论都在此实例中,您应该打开原始实例——而且没有人会这样做。

这是一个话题,我有两个独立的讨论,论坛看到了所有内容,但 Mastodon 不知道在论坛上写的评论:Pikkulasten ruuat? - Retkeily & Melonta - Katiskan foorumi

编辑 这个话题在写这篇文字时大约是 5 天前,并且它被分类参与者转发和发布,而不是我的论坛用户。从那时到现在有什么变化吗(是的,我几乎每天都在重建)。

1 个赞

它不是唯一的方式,但它是类似论坛的平台联合话题/帖子(例如,具有特定标签或类别的帖子)的主要方式。这个过程在被称为 FEP-1b12 的东西中有描述,我们正在与其他实现者一起遵循并致力于此。

抱歉,我不太明白这里的问题是什么。你能试着换个说法吗?

发生这种情况的原因是 Mastodon 停止转换文章的内容,而只是显示原始内容的链接。鉴于 fediverse 中论坛的兴起,例如我们!,现在可能是时候向 Mastodon 提交一个新的 PR 来重新添加该支持了。

是的,最近在这方面发生了一些变化,因为 Mastodon 在他们的后端进行了一些更改。随着我们寻求完善这里的方法,未来可能会有更多变化。如果您能列出不符合您期望的具体示例,例如帖子 1(Discourse)、回复 1(Mastodon)、回复 2(Discourse)等,或者类似的,那将会有帮助。

1 个赞

我没有太多期待,但有一些愿望 :joy:。其他一切现在都清楚了,但那个 boost/writer 之类的东西。我可能不会再有什么问题了。

我说的是它在 Mastodon 中的显示方式。

  • 被类别演员提升
  • 原始的是我在论坛上的用户

当我点击论坛上的演员时,它显示了这个(Mona 应用的截图,但官方 PWA 显示相同,但方式不同)

那个红色图标是关注请求,就像一个锁定的个人资料一样。

然后我进行了重建。

现在官方 PWA 显示了它应该显示的内容:

但是 Mona 仍然显示那个红色图标。

出于某种原因,我和其他人无法关注我的论坛演员,因为那个原因。但现在它已修复(两个系统之间存在一些奇怪的问题 :man_shrugging:)。现在使用的 mastodon 应用没有更新其内容——但这绝对不是你的烦恼。

所以这个帖子只是为了提供信息,展示……一些东西 :joy:

1 个赞

一个小小的功能性建议:我们能否添加一个图形指示器来显示帖子是否来自 ActivityPub 参与者?就像我们看到有人使用电子邮件时会显示一个信封图标一样。

这样做的原因是我的用户感到困惑,因为他们看不到本地论坛用户和 Mastodon 用户之间的区别。

他们为什么要了解这个?我不知道。人们就是这样做的,我希望让他们保持冷静。而且我们也显示了电子邮件的指示,这既不需要,也不是一个非常重要的细节。

当帖子来自远程参与者时,有一个指示器,它是一个蓝色的 AP 图标,与邮件图标在完全相同的位置,在帖子日期旁边。

这用于回复,对于 OP,相同的蓝色图标以及更多详细信息将显示在主题图下方。

1 个赞

现在你这么说了,我能看出来区别了,勉强吧 :joy:

你还记得如何更清晰地更改这两种颜色的 CSS 吗?

编辑

更改这两种颜色也可以有更简单的方法,但正如我的个人资料所示,我只是另一个复制粘贴者。所以我从源头复制了这段代码。

因为我对现实世界中所有三级色等概念一无所知,所以我使用了基本的网页颜色。

.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 个赞

编辑

以下问题与用户 @a.gup.pe 相关。所有联合类别都能找到用户 @koirat@a.gup.pe 并关注它,显示状态为等待。切换页面再返回,显示关注已消失。

但类别可以关注真实用户。

该用户实际上是一个机器人,Discourse 无法关注机器人——但据我所知,它并未将自己标识为机器人。即使问题在于其机器人身份(这算一个词吗?:flushed_face:),Discourse 也不应该让我关注它(除非 Discourse 当时不知道)。无论如何,它不应该在不告知我的情况下终止关注。或者它已经……我还没检查日志,我的错。

编辑2

这是我找到的所有内容。

未能发送到 https://a.gup.pe/u/koirat/inbox
[Discourse Activity Pub] https://foorumi.katiska.eu/ap/actor/b37cda0cddecb02465691872595307dd failed to deliver to 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-----
     (这不重要,只是占地方)
      -----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查找可以找到 a.gup.pe 用户,所以这不可能是原因。


这是个边缘情况,还是我又在尝试做些奇怪的事情?

Discourse 无法关注 Mastodon 列表(Mastodon 上的列表也有自己的问题)。所以我尝试了 a.gup.pe 的“伪用户”。

我通过在我的实例上关注同一个用户创建了 @koirat@a.gup.pe——它会收集使用了标签 #koirat(顺便说一句,芬兰语是“狗”)的推文。这进行得很顺利。

然后我从 Mastodon 发送了一条消息,标签和用户都被提到了。它出现在列表中,关注了 guppe 用户。

在我的 Discourse 中,我要求类别 X 关注用户 @koirat@a.gup.pe。我的另一个类别 Y 正在关注我的用户 @jagster@kvarkki.nexus,它的状态是等待。所以我想我会收到两次消息,一次来自我,一次通过 guppe(哦,该死,是这个原因吗?:thinking:)。

我用户的消息已发布到类别 Y,正如预期的那样。类别 X 没有收到任何由 guppe 用户发送的消息。

当我打开类别 X 的联合时,它不再关注 @koirat@a.gup.pe 了。

所以我的猜测是:

  • @a.gup.pe 的工作方式不同,Discourse 无法理解它
  • 我尝试从 Mastodon 发布两个相同的帖子(这个我可以轻松尝试,只需要几分钟)

这不仅仅是学术问题,因为它将解决 Mastodon 的列表问题。

Discourse 无法正常工作的原因是,当 Discourse 尝试向 a.gup.pe/u/koirat/inbox 发送关注请求时,它收到了一个 500 内部服务器错误的响应。

HTTP/1.1 500 Internal Server Error\r\n

换句话说,Guppe 中存在一个 bug。

我需要指出的是,Discourse 对群组的联合宇宙方法目前仍在不断发展。我正在与 NodeBB、Wordpress、Mastodon 等社区的人们讨论这个问题以及其他一些相关问题。例如,请参阅:

Guppe 将面临的另一个问题是,Mastodon 本身一直在开发一个“群组”功能,这可能会与 Guppe 的方法产生冲突。

4 个赞