Tiny CLI to post simultaneously to Mastodon and Bluesky
Project description
Not my ex
Tiny CLI to post simultaneously to Mastodon and Bluesky.
Obviously, based on cuducos/from-my-ex
.
It supports:
- Post status updates to both networks with a simple CLI command
- Posting with images
- Including alt text for images
- Setting post language
It does not support:
- Tagging other users (they would have different IDs and servers in each platform)
Getting started
Requirements
- Python 3.9 or newer
- Poetry
Environment variables
To repost in Bluesky
Name | Description | Example | Default value |
---|---|---|---|
NOT_MY_EX_BSKY_AGENT |
Bluesky instance | "https://bsky.social" |
"https://bsky.social" |
NOT_MY_EX_BSKY_EMAIL |
Email used in Bluesky | "cuducos@mailinator.com" |
None |
NOT_MY_EX_BSKY_PASSWORD |
Password used in Bluesky | As created in App Passwords. | None |
Not setting NOT_MY_EX_BSKY_EMAIL
or NOT_MY_EX_BSKY_PASSWORD
disables Bluesky reposting.
To repost in Mastodon
Name | Description | Example | Default value |
---|---|---|---|
NOT_MY_EX_MASTODON_INSTANCE |
Mastodon instance | "https://tech.lgbt" |
"https://mastodon.social" |
NOT_MY_EX_MASTODON_TOKEN |
Mastodon access token | Go to your Settings, Development and then create an app to get the access token. Select the write:statuses and write:media scopes. |
None |
Not setting NOT_MY_EX_MASTODON_TOKEN
disables Mastodon reposting.
Install
$ pip install not-my-ex
Usage
CLI
$ not-my-ex "Magic, madness, heaven, sin " --images /tmp/1989.gif
You can skip --images
or pass multiple images (e.g. --images taylor.jpg --images swift.gif
).
API
from asyncio import gather
from httpx import AsyncClient
from not_my_ex.bluesky import Bluesky
from not_my_ex.mastodon import Mastodon
from not_my_ex.media import Media
from not_my_ex.post import Post
async def main():
media_tasks = tuple(
Media.from_img(path, alt=alt)
for path, alt in (("taylor.jpg", "Taylor"), ("swift.jpg", "Swift"))
)
media = await gather(*media_tasks)
post = Post(text="Magic, madness, heaven, sin ", media=media, lang="en")
async with AsyncClient() as http:
post_tasks = tuple(cls(http).post(post) for cls in (Bluesky, Mastodon))
await gather(*post_tasks)
In Post
, both media
and lang
are optional. In Media
, alt
is optional.
Contributing
The tests include Ruff and Mypy:
$ poetry install
$ poetry run pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
not_my_ex-0.0.4.tar.gz
(19.6 kB
view details)
Built Distribution
not_my_ex-0.0.4-py3-none-any.whl
(21.6 kB
view details)
File details
Details for the file not_my_ex-0.0.4.tar.gz
.
File metadata
- Download URL: not_my_ex-0.0.4.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.5 Darwin/23.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2b71c3813208aab672ff1c136ea89e45d0d56c1b52d2865c9170f7abc52a0802 |
|
MD5 | 19c0394fbd3ca1b27d7e63e804509726 |
|
BLAKE2b-256 | aae7387c56d33e419893850577d4c1ccf137a5ba0a6b718a4b69617eab01e8a4 |
File details
Details for the file not_my_ex-0.0.4-py3-none-any.whl
.
File metadata
- Download URL: not_my_ex-0.0.4-py3-none-any.whl
- Upload date:
- Size: 21.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.5 Darwin/23.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c1ff3ff15e044f08a6004ef9fa42fb04973a657e46a9baf7bc5867f047bb335 |
|
MD5 | ffda6536a1ef67ad95e6fef9aeaafe4e |
|
BLAKE2b-256 | 37459aa5d06be96f50f9cde4102f8a336ca8acf2eb4156721acb0b0135f571d3 |