Hex VersionHex Docs

Broadcast

Broadcast is an Elixir library for posting to social media websites, currently with support for Bluesky and Mastodon.

Features

Installation

Add broadcast to your list of dependencies in mix.exs:

def deps do
  [
    {:broadcast, "~> 0.2.0"}
  ]
end

Then run mix deps.get to install dependencies. Broadcast requires Elixir 1.17 or later.

Usage

Post to Multiple Platforms

Post to Bluesky and Mastodon simultaneously with post_all/1:

{:ok, results} = Broadcast.post_all(
  %{
    status: "Hello, world!",
    mastodon_access_token: "your_mastodon_access_token",
    bluesky_handle: "your_bluesky_handle",
    bluesky_password: "your_bluesky_password"
  }
)

Post with Media

Add media attachments to your posts with the media_paths parameter:

{:ok, results} = Broadcast.post_all(
  %{
    status: "Check out this image!",
    mastodon_access_token: "your_mastodon_access_token",
    bluesky_handle: "your_bluesky_handle",
    bluesky_password: "your_bluesky_password",
    media_paths: ["path/to/image.jpg", "path/to/another.png"]
  }
)

Post Replies

Reply to existing posts on both platforms simultaneously:

{:ok, results} = Broadcast.post_all(
  %{
    status: "This is my reply!",
    mastodon_access_token: "your_mastodon_access_token",
    bluesky_handle: "your_bluesky_handle",
    bluesky_password: "your_bluesky_password",
    mastodon_reply_id: "109372843234", # ID of the Mastodon post to reply to
    bluesky_reply: %{
      # Both root and parent are required for Bluesky replies
      root: %{uri: "at://did:123/app.bsky.feed.post/original", cid: "bafyreihg6tz"},
      parent: %{uri: "at://did:123/app.bsky.feed.post/parent", cid: "bafyreiabc123"}
    }
  }
)

Platform-Specific Functions

Mastodon

Post to Mastodon only:

{:ok, result} = Broadcast.post_mastodon_status(
  "mastodon_access_token",
  "Hello world!"
)

Reply to a Mastodon post:

{:ok, result} = Broadcast.post_mastodon_status(
  "mastodon_access_token",
  "This is a reply!",
  [], # Optional media paths
  "109372843234" # ID of the post to reply to
)

Bluesky

Post to Bluesky only:

{:ok, result} = Broadcast.post_bluesky_status(
  "your_bluesky_handle",
  "your_bluesky_password",
  "Hello world!"
)

Reply to a Bluesky post:

reply_info = %{
  root: %{uri: "at://did:123/app.bsky.feed.post/original", cid: "bafyreihg6tz"},
  parent: %{uri: "at://did:123/app.bsky.feed.post/parent", cid: "bafyreiabc123"}
}

{:ok, result} = Broadcast.post_bluesky_status(
  "your_bluesky_handle",
  "your_bluesky_password",
  "This is a reply!",
  [], # Optional media paths
  reply_info
)

License

Broadcast's source code is released under the MIT License.