freamon
aka freamon@lemmy.world, freamon@feddit.nl, and any username from lemmon.website
This account is currently parked, and I’m using https://piefed.social/u/andrew_s
Observation, mostly. Also guesswork and trial-and-error, because I never realised these were all in the docs.
The comments in here are from me running lemmy in a VM, and subscribing to a fake community on a VPS (you can mimic a community with a webfinger response and a bunch of static files). The activities sent by lemmy just went to a basic server, that dumped out the JSON files it received.
I mostly made this post so I could point to something when posting about a Ruby script that can be used to interact with lemmy from the command line. This provides the opportunity to learn about ActivityPub, separate from the more complicated applications that currently implement it.
freamon uses his new-found powers to edit the sidebar
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/update/20f7397d-f124-45aa-a1b2-b8366c17f6db",
"actor": "https://local.com/u/freamon",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"object": {
"type": "Group",
"id": "https://remote.com/c/interesting",
"preferredUsername": "interesting",
"inbox": "https://remote.com/c/interesting/inbox",
"followers": "https://remote.com/c/interesting/followers",
"publicKey": {
"id": "https://remote.com/c/interesting#main-key",
"owner": "https://remote.com/c/interesting",
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAovFqf5abQp7EpeiwTku9\nUkp5nzFIk6ny/89hfMOrZigJR5RUG44J+TFnT8mHompvViDSQXP4qwJ8bVqQySpU\nIXzm4pKy1ykmuh+Ez0yS3/VaUHLYYi8vXhq5yMc70lIBsZ36KnBspFQBNW7ToHMI\nJia9du/2shxq1huApgpUFbVq/I4FLHQSKYVStCxWkJhTakNxvBLvVBroFF8Izwur\n/d79mTV40scCJX/HkgFqlxFYmmrc1/M2P2Ci3VS5u0oebBHwivvm6QTOVCHIIIgc\n7JM1eo/TdJ0QNkSE6YqSAEbSF1M1KODUPmfvyVrOuUCNJ2V64anD2b6tWCIyHlDN\nvwIDAQAB\n-----END PUBLIC KEY-----\n"
},
"name": "An Interesting Community",
"summary": "<h4>An interesting community</h4>\n",
"source": {
"content": "#### An interesting community",
"mediaType": "text/markdown"
},
"sensitive": false,
"attributedTo": "https://remote.com/c/interesting/moderators",
"postingRestrictedToMods": false,
"outbox": "https://remote.com/c/interesting/outbox",
"endpoints": {
"sharedInbox": "https://remote.com/inbox"
},
"featured": "https://remote.com/c/interesting/featured",
"language": [
{
"identifier": "und",
"name": "Undetermined"
},
{
"identifier": "en",
"name": "English"
}
],
"published": "2024-01-01T17:22:16Z",
"updated": "2024-02-13T22:05:25.819020Z"
},
"cc": [
"https://remote.com/c/interesting"
],
"type": "Update",
"audience": "https://remote.com/c/interesting"
}
The community mod at remote.com decides to make freamon a moderator
{
"@context": "https://www.w3.org/ns/activitystreams",
"actor": "https://remote.com/u/mod",
"to": "https://www.w3.org/ns/activitystreams#Public",
"object": "https://local.com/u/freamon",
"target": "https://remote.com/c/interesting/moderators",
"cc": "https://remote.com/c/interesting",
"type": "Add",
"id": "https://remote.com/activities/add/390751ec-9b21-4585-875f-2fb088c69c5a",
"audience": "https://remote.com/c/interesting"
}
Replies to this comment are all moderator actions.
freamon changes his mind again, and undoes the delete
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/undo/91bd96a3-9fb8-4dde-acfb-3d7ee682a41a",
"actor": "https://local.com/u/freamon",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"object": {
"actor": "https://local.com/u/freamon",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"object": "https://local.com/comment/1",
"type": "Delete",
"id": "https://local.com/activities/delete/55f2f17e-6c5d-44f2-ae53-e65c8496dfc3",
"audience": "https://remote.com/c/interesting",
"cc": [
"https://remote.com/c/interesting"
]
},
"type": "Undo",
"audience": "https://remote.com/c/interesting",
"cc": [
"https://remote.com/c/interesting"
]
}
freamon regrets his comment, and deletes it.
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/delete/c08be088-fd16-47fe-a286-3e0c24abc15b",
"actor": "https://local.com/u/freamon",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"object": "https://local.com/comment/1",
"type": "Delete",
"audience": "https://remote.com/c/interesting",
"cc": [
"https://remote.com/c/interesting"
]
}
freamon replies to his own post, with an inline link to the same image, and an emoji
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/create/c394a258-eac5-4555-8b98-823002cbb88c",
"actor": "https://local.com/u/freamon",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"object": {
"type": "Note",
"id": "https://local.com/comment/1",
"attributedTo": "https://local.com/u/freamon",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://remote.com/c/interesting",
"https://local.com/u/freamon"
],
"content": "<p>Comment text<br />\n<img src=\"https://i.imgur.com/T7Z3vUU.jpeg\" alt=\"\" /></p>\n<p>😜</p>\n",
"inReplyTo": "https://local.com/post/3",
"mediaType": "text/html",
"source": {
"content": "Comment text \n![](https://i.imgur.com/T7Z3vUU.jpeg)\n\n 😜 ",
"mediaType": "text/markdown"
},
"published": "2024-02-13T21:48:18.776300Z",
"tag": [
{
"href": "https://local.com/u/freamon",
"name": "@admin@local.com",
"type": "Mention"
}
],
"distinguished": false,
"audience": "https://remote.com/c/interesting"
},
"cc": [
"https://remote.com/c/interesting",
"https://local.com/u/freamon"
],
"tag": [
{
"href": "https://local.com/u/freamon",
"name": "@freamon@local.com",
"type": "Mention"
}
],
"type": "Create",
"audience": "https://remote.com/c/interesting"
}
Note 1: lemmy uses ‘Page’ for a post, and ‘Note’ for a comment, whereas mastodon uses ‘Note’ for both, with ‘inReplyTo’ distinguishing between the two.
Note 2: this is sent to the main community at remote.com, and also to the post’s author (it would appear in his inbox if they weren’t the same person)
freamon creates a post in the interesting community. He adds a title, a body, links to an image, and tags it as in English.
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/create/37f46c10-9fc2-4228-b8ea-3803eb911485",
"actor": "https://local.com/u/freamon",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"object": {
"type": "Page",
"id": "https://local.com/post/3",
"attributedTo": "https://local.com/u/freamon",
"to": [
"https://remote.com/c/interesting",
"https://www.w3.org/ns/activitystreams#Public"
],
"name": "Title Text",
"cc": [],
"content": "<p>Body Text</p>\n",
"mediaType": "text/html",
"source": {
"content": "Body Text",
"mediaType": "text/markdown"
},
"attachment": [
{
"href": "https://i.imgur.com/T7Z3vUU.jpeg",
"type": "Link"
}
],
"commentsEnabled": true,
"sensitive": false,
"published": "2024-02-13T21:46:05.705099Z",
"language": {
"identifier": "en",
"name": "English"
},
"audience": "https://remote.com/c/interesting"
},
"cc": [
"https://remote.com/c/interesting"
],
"type": "Create",
"audience": "https://remote.com/c/interesting"
}
freamon changes his mind about post 2, and undoes his downvote
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/undo/e677b1ba-caaf-4a2f-9472-681705f337a3",
"actor": "https://local.com/u/freamon",
"object": {
"actor": "https://local.com/u/freamon",
"object": "https://remote.com/post/2",
"type": "Like",
"id": "https://local.com/activities/like/70edfad8-dcbb-42cd-8fd2-f674844b8801",
"audience": "https://remote.com/c/interesting"
},
"type": "Undo",
"audience": "https://remote.com/c/interesting"
}
Note: due the expection of unique ‘id’ fields, the encapsulated object isn’t the same, so this is probably best read as ‘undo vote’
The interesting community came with 2 posts. freamon upvotes post 1, and downvotes post 2
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/like/16e6a46e-b80b-4d13-8258-2f724c53ed1c",
"actor": "https://local.com/u/freamon",
"object": "https://remote.com/post/1",
"type": "Like",
"audience": "https://remote.com/c/interesting"
}
{
"@context": [
"https://join-lemmy.org/context.json",
"https://www.w3.org/ns/activitystreams"
],
"id": "https://local.com/activities/dislike/576f119f-5aa5-4f5e-ba48-a79b26f0fae3",
"actor": "https://local.com/u/freamon",
"object": "https://remote.com/post/2",
"type": "Dislike",
"audience": "https://remote.com/c/interesting"
}