ActivityPub Plugin

For this I know the answer. No, you can’t. We can’t even use that inside Mastodon, Pixelfed etc. And the actual answer is this plugin, or ActivityPub in general, has nothing to do with logins.

But it would be nice. But on otherhand — the idea of ActivityPub is exacly remove the need to login on other services.

1 Like

That is the beauty of a system where there is no algorithm :smirk:. Yes, that is what you have to do, but it works only within one instance. You still need followers.

The widely used analogy of how emails work is true even here. You need someone to send emails, otherwise it would be considered spamming.

I’m decently active in Mastodon, because I said farewell to Meta. I have actually accounts in three different instances. My main account follows my categories and two other follows my main instance account. With that I maximize visibility, and the rest is mercy of other users.

BTW — I have noticed that inability of Mastodon to process markdown and html annoys others a bit.

Is it too early to ask for it to be included in Crowdin for translations?

Good question.

We’ll have to evaluate if this plugin is ok experimentalofficial. If so, we can add it to Crowdin.

Out of curiosity, what language(s) are you thinking of?

5 Likes

Czech. The reason is that while trying to finish a complete localization I try to go through different Czech forums and see how the translations work (sometimes you see different things because of the data combination that you don’t see on your own forum – different plurals used, different plugins etc.).

And I just stumbled upon one forum that has the ActivityPub visible in the user settings. And I want user settings to be fully localized :slight_smile:

4 Likes

Translating manually is always an option. And right now the only option. It took for me something like max 10 minutes. But sure, if it comes automatically is easier for admins.

Yeah, I think we can add this to Crowdin, I’ll make it so.

6 Likes

Topics go into the big world without tags. Is it possible to add tags from Discourse somehow?

It would need to add used tags into a post, but only for the Mastodon direction, and I don’t know if that is even possible, or really needed. Well, it is needed because tags play such a big role in Mastodon (or everywhere in the federated world, I reckon).

Sure, I could just add #tag, but that is a bit awkward because Discourse has its own nice way of using tags.

2 Likes

@Angus I am curious if there is a way to do this too. Do actors coming from the Discourse plugin have a common identifier (like a source: Discourse type of metadata) that can be searched for in the fediverse? Or maybe there’s identifiers for posts?

1 Like

Yes, it would be possible to do that. As you allude, it will raise a few questions as tags serve slightly different roles in Discourse and other platforms. It will need careful consideration.

This is related to the tagging question, but goes beyond it too. There are various layers to this. We could implement a Mastodon-specific approach to improving discovery. We could also implement a “normalised” ActivityPub approach to discovery. On the latter front see

But yes, we can discuss further what the short, medium and long term product goals are and I can develop an implementation strategy taking those various layers into account. I’ve gone ahead and raised this with the relevant ActivityPub folks:

3 Likes

I would like to learn about your thoughts, if and how discourse actors could be addressable from fediverse.

This question came up while I was thinking, how discourse as digital garden could be connected to the fediverse.

If I read something somewhere on fediverse, I would like to be able to forward this to TAG@my.garden or CATEGORY@my.garden.

What should be done with this forwarded content, or, at what places inside discourse should these messages arrive?

If forwarding should be possible for anyone, some review process would have to take place.
If there would be a possibility to link foreign fediverse accounts to one owns, forwarded content could arrive as a draft, to be ready for further incorporation into the garden.

Currently, actors that a tag or category actor is following can post new topics in that tag or category.

If you have a category in your Discourse called “fediverse”, and fediverse@yourforum.com is following an account on Mastodon, say fediverse@mastodon.com, then every time that fediverse@mastodon.com creates a new toot, not in reply to another toot, that toot will become a new topic in your “fediverse” category, and any replies to that toot will become replies in that topic.

Applying that to your case, if the “I” in that sentence is a fediverse account that TAG@my.garden or CATEGORY@my.garden is following then when you either create a new toot, or boost a toot (aka “announce” it), it will become a new topic with TAG or in CATEGORY.

We may add the ability to push content sent to a tag or category actor by an external actor not followed by the tag or category into the review queue. That would be relatively straightforward implementation wise, but filtering would be a significant issue. Reviewing all of the incoming content would not be feasible in quite a few cases.

For example socialhub.activitypub.rocks has twelve Discourse ActivityPub actors (tags and categories). It gets (literally) hundreds of incoming POSTs every minute. If you deployed a review system like that there you would immediately blow up the review queue, making it unusable.

This has some potential as an idea, partly because you can already do this, check out “ActivityPub” in your profile and you’ll see you can link actors on any external Discourse or Mastodon with your Discourse user account. So one way of filtering the incoming of non-followed actors could be content from actors linked to users with sufficient trust on the forum.

3 Likes

And done: https://discourse.crowdin.com/activity-pub, translators can now contribute translations for the ActivityPub plugin.

2 Likes

Is there some limits which actors a category can follow? I could follow mine, but it can’t find strange ones.

edit

Some my category can find, some account not. Can it come somehow from some setting of an instance :thinking:

A category follows a mastodon account. When a post (written or boosted by followed actor) has an image, that is never included. Is that some technical issue of how Mastodon sends data, how ActivityPub works or how Discourse handles such content?

Something is wrong. There is nothing to translate.

I think there may still be some issues integrating with Mastodon’s Authorized Fetch which we still need to iron out. That may effect the discoverability of accounts on some Mastodon instances. If you could give examples that would help.

We will be looking to improve image support soon.

1 Like

mastodon.social fails every time — and that means I tried accounts from there about half dozen time. That’s why I was wondering if it raises from settings of an instance somehow.

But one account is @ScienceScholar@mastodon.social. Other example could be @GetCarter@mastodonapp.uk.

Just another dream for later phases :face_with_peeking_eye:

If a category could follow (hash)tags from Mastodon… that would be real game changer — yeah, I have absolut no idea if that is even technically possible because a mastodon-instance works very much differently than Discourse, but great feature it would be.

1 Like

What is this:

discourseactivitypub::AP::Handlers::Warning

Message (3765 copies reported)

[Discourse Activity Pub] DiscourseActivityPub::AP::Handlers::Warning

Backtrace

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in block in warn' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in block in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in each' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:231:in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/broadcast_logger.rb:130:in warn' /var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/logger.rb:26:in log’
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/logger.rb:63:in warn' /var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:42:in rescue in block in perform_transactions’
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:35:in block in perform_transactions' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:616:in block in within_new_transaction’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/concurrency/null_lock.rb:9:in synchronize' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/transaction.rb:613:in within_new_transaction’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:361:in transaction' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:234:in block in transaction’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:421:in with_connection' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_handling.rb:296:in with_connection’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/transactions.rb:233:in transaction' /var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:34:in perform_transactions’
/var/www/discourse/plugins/discourse-activity-pub/lib/discourse_activity_pub/ap/activity.rb:26:in process' /var/www/discourse/plugins/discourse-activity-pub/app/jobs/discourse_activity_pub_process.rb:12:in execute’
/var/www/discourse/app/jobs/base.rb:316:in block (2 levels) in perform' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in with_connection’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in with_connection' /var/www/discourse/app/jobs/base.rb:303:in block in perform’
/var/www/discourse/app/jobs/base.rb:299:in each' /var/www/discourse/app/jobs/base.rb:299:in perform’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in execute_job' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in block (2 levels) in process’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in block in invoke' /var/www/discourse/lib/sidekiq/pausable.rb:132:in call’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in block in invoke' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in invoke’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in block in process' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in block (6 levels) in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in local' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in block (5 levels) in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in block in <module:Sidekiq>' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in block (4 levels) in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in stats' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in block (3 levels) in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in call' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in block (2 levels) in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in global' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in block in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in prepare' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in dispatch’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in process' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in process_one’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in run' /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in watchdog’
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread’

I checked logs, because there happened two things that I couldn’t understand. But I’m not sure if those are related to that error/warning.

I had a sub-category, that has settings

  • Post object type = note
  • Publication type = full topic
  • (Visibility = public; grayed, because of full topic)

That category is following my mastodon account. The idea is showing my mastodon-messages in that category.

So I thought if that topic/message originally from Mastodon gets comments, those will be sended as replies to Mastodon. I tried that (because of testing and demonstration) and my reply shows green ActivityPub chevron, so something happened. But I can’t find it anywhere in Mastodon, and it isn’t showing as reply to original mastodon message.

I replies to topic, so next I tried reply to post. Same thing. AP icon is green, but I can’t find it from Mastodon.

My Mastodon account is not following category actor, but that shouldn’t be needed.

Edit. Original mastodon post got a comment from Mastodon, and that showed up in the topic. So that direction works just fine.

Edit2. Or am I understanding this totally wrong now? When a category follows a mastodon actor, it really just follows. That is not kind of bi-directional system. The plugin sends everything that is happening in that category, but that is visible only for those who are following the actor of category. So basically there is two separate one-direction traffics: what that category follows, and other one for those who are following that category?

Then there is another issue, that isn’t related to the plugin at all I reckon. Mona-app gives error 404 when trying to find that category actor. Original web version finds it right away, though.

Never mind, a user error. When I hit enter in the search, it tried search content, not users

sorry about all strange structures of sentences, and totally wrong use of prepositions. AI-proofread gives error 500, perhaps because of details-block.