Skip to main content

Yet another cross-posting tool in Python

Project description

Barkr

Barkr[^1] is a social media cross-posting tool written in Python: set it up and never worry about manually posting the same message to multiple channels ever again!

With Barkr you can setup a series of channels (e.g. social media accounts) to read messages from and / or post messages to. You can mix and match read / write modes, and add multiple accounts of the same type of channel as well without worrying that the same message will be re-posted to a channel it comes from.

Note that Barkr is limited to text posts only. Want to see that change? Start a discussion on a new issue!

[^1]: "Barkr" (missing "e") as in "entity that barks". See: dogs.

Motivation

I wrote Barkr for a personal use case after noting how much fragmentation there currently is (as of 2023) in the social media space, as a way to reduce the cost of engaging with multiple social media platforms, and also as a (very simple) way to practice using threads in Python.

Installation

Use the package manager pip to install barkr.

pip install barkr

Usage

Create a Python script and specify all the channels you want to use. Channel connections are present in the barkr.connections module.

A simple script showcasing how to set up three Mastodon connections with multiple modes that can run in the background is outlined below:

from barkr.main import Barkr

from barkr.connections import (
    ConnectionMode,
    BlueskyConnection,
    DiscordConnection,
    MastodonConnection,
    RSSConnection,
    TelegramConnection,
    TwitterConnection,
    WebhookConnection,
)

from barkr.models import Message

barkr = Barkr(
    [
        # Barkr will read new messages posted by this account, and queue them to
        # other accounts on write mode, but will not post anything to it.
        MastodonConnection(
            "Read only connection",
            [ConnectionMode.READ],
            "<ACCESS TOKEN HERE>",
            "<INSTANCE URL HERE>",
        ),
        # Barkr will write queued messages to this account, but will not read anything
        # new posted to this account or queue anything from this account to other ones.
        DiscordConnection(
            "Write only connection",
            [ConnectionMode.WRITE],
            "<BOT TOKEN ID HERE>",
            "<CHANNEL ID HERE>",
        ),
        # Barkr will read new messages from this account to be queued onto others, and will
        # post new messages from other channels into this one as well.
        BlueskyConnection(
            "R/W connection",
            [ConnectionMode.READ, ConnectionMode.WRITE],
            "<BLUESKY HANDLE HERE>",
            "<PASSWORD / APP PASSWORD HERE>",
        ),
        # Another example using Twitter -- note that the TwitterConnection only
        # supports write-only mode through the Twitter V2 API
        TwitterConnection(
            "Write only Twitter Connection",
            [ConnectionMode.WRITE],
            "<CONSUMER KEY HERE>",
            "<CONSUMER SECRET HERE>",
            "<ACCESS KEY HERE>",
            "<ACCESS SECRET HERE>",
            "<BEARER TOKEN HERE>",
        ),
        # One more, showcasing a Telegram write-only connection
        TelegramConnection(
            "Write only Telegram connection",
            [ConnectionMode.WRITE],
            "<TELEGRAM BOT TOKEN HERE>",
            "<TELEGRAM CHAT / CHANNEL ID HERE>",
        ),
        # You can also read from an RSS feed!
        RSSConnection(
            "Read only RSS connection",
            [ConnectionMode.READ],
            "<RSS FEED URL HERE>"
        ),
        # And post messages to a custom webhook as well!
        WebhookConnection(
            "Write only Webhook connection",
            [ConnectionMode.WRITE],
            "<WEBHOOK URL HERE>",
        ),
    ]
)

# Blocking: will start reading and writing threads to keep the connections in sync
barkr.start()

# Non-blocking, if you only need to write messages to your connections
barkr.write_message(
    Message(
        id="123456",
        message="Hello, world!",
    )
)

Always keep in mind proper secret management practices when using Barkr: instead of hardcoding access tokens / cookies / user and passwords, use tools like environment variables, dotenv or other secret managers!

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Contributions for issues that are already open by maintainers are welcome and encouraged.

Please make sure to update tests as appropriate; a minimum coverage of 80% is expected (and enforced by Github Actions!).

License

This project is licensed under the GNU Affero General Public License v3.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

barkr-0.14.2.tar.gz (38.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

barkr-0.14.2-py3-none-any.whl (47.5 kB view details)

Uploaded Python 3

File details

Details for the file barkr-0.14.2.tar.gz.

File metadata

  • Download URL: barkr-0.14.2.tar.gz
  • Upload date:
  • Size: 38.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for barkr-0.14.2.tar.gz
Algorithm Hash digest
SHA256 fe1787e4c6b9549bdc7e5699fd161d6d03288ddde8a81c2e9c6b55e907d2e202
MD5 aae20d1887c06eeb4efd3b2237e1d569
BLAKE2b-256 23b8b6b13adceb1987e13612a5517ae6dc3ce5a3b0d48b467e712cda9aac7d1d

See more details on using hashes here.

File details

Details for the file barkr-0.14.2-py3-none-any.whl.

File metadata

  • Download URL: barkr-0.14.2-py3-none-any.whl
  • Upload date:
  • Size: 47.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for barkr-0.14.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6d9be4013b91bd4e520a63d1cc9bab99a0fe7949755485cbca2a3fa53143e14f
MD5 ee170560c246f34e8e248dbbdec416f4
BLAKE2b-256 29d558fb2060c35c86c0917c71bcefde331ee1505ed8f02139fe8394ce6b49d7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page