Skip to contents

Interacting with Blue Sky: Posts, Replies, and Deletions

In this section, we will cover how to interact with the Blue Sky platform by creating posts (skeets), replying to them, and eventually, if necessary, deleting them.

Load the package

Posting a Skeet

Here’s how you can easily post a skeet to your account:

post <- post_skeet(text = "Posting around")

By running the above command, you’ve successfully created a skeet with the content “Posting around.”

Replying to a Skeet

Engaging with the Blue Sky community often means replying to existing skeets. Here’s how you can craft a reply:

reply <- post_skeet(text = "Replying around", in_reply_to = post$uri)

Notice the in_reply_to parameter? This ensures that our reply is linked to the original post, creating a thread of conversation. If you don’t have the URI of a skeet, a link to it will also do.

Deleting a Skeet

Whether it’s to correct an error, remove outdated information, or any other reason, sometimes you might want to delete a skeet. Here’s how:

delete_skeet(post_url = reply$uri)

Crafting Threads in Blue Sky

Threads are a series of connected posts or “skeets” on Blue Sky. They’re a great way to communicate longer ideas or stories, where each skeet builds on the previous one. In this section, we’ll explore how to create a thread seamlessly.

A thread is essentially a series of individual skeets. Here’s how you can do it programmatically using post_thread:

post_thread(texts = c("This is the first amazing skeet.",
                      "Now I am expanding upon my skeet!",
                      "Conclusion: I skeet therefore I am."))

Following and Unfollowing Users in Blue Sky

One of the fundamental ways to connect with other users is by following them, allowing you to see their posts in your feed. Conversely, if you decide that you no longer want to see updates from a particular user, you can unfollow them.

# Follow a user by their handle
follow(actor = "benguinaudeau.bsky.social")

Support for posting media

Media can be posted by using a path to a file. They can also be included in a thread.

First let’s create some plots that we want to send:

# make a basic plot
plot <- ggplot(mpg, aes(displ, hwy, colour = class)) +
  geom_point()

# save it to a file
f1 <- ggsave(filename = tempfile(pattern = "1", fileext = ".png"), plot = plot)

# a second basic plot
lty <- c("solid", "dashed", "dotted", "dotdash", "longdash", "twodash")
linetypes <- data.frame(
  y = seq_along(lty),
  lty = lty
)
plot2 <- ggplot(linetypes, aes(0, y)) +
  geom_segment(aes(xend = 5, yend = y, linetype = lty)) +
  scale_linetype_identity() +
  geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) +
  scale_x_continuous(NULL, breaks = NULL) +
  scale_y_reverse(NULL, breaks = NULL)

# again we save it to a temporary file
f2 <- ggsave(tempfile(pattern = "2", fileext = ".png"), plot = plot2)

Now we post the pictures in a thread:

post_thread(texts = c("This is the first plot on the ggplot2 website",
                      "This is the second plot on the ggplot2 website",
                      "And this is just text sent from the atrrr package by @jbgruber.bsky.social, @benguinaudeau.bsky.social and @favstats.eu"),
            images = c(f1, f2, ""),
            image_alts = c("first ggplot2 plot",
                           "second ggplot2 plot",
                           ""))