Bluebird tracks users on X (formerly Twitter) and sends post notifications to Discord.
- Monitor any public user on X — no login required (thanks to dylanpdx/BetterTwitFix).
- Get structured alerts with rich Discord Components.
- Fine-tune alerts using filters like keywords or media-only.
- Deploy effortlessly with Docker or run locally with Python.
Rename config.example.toml
to config.toml
and set your instance configuration(s).
Next, edit and run this example compose.yaml
with docker compose up
.
services:
bluebird:
container_name: bluebird
image: ethanchrisp/bluebird:latest
environment:
LOG_LEVEL: INFO
LOG_DISCORD_WEBHOOK_URL: https://discord.com/api/webhooks/YYYYYYYY/YYYYYYYY
LOG_DISCORD_WEBHOOK_LEVEL: WARNING
volumes:
- /local/path/to/config.toml:/bluebird/config.toml:ro
restart: unless-stopped
Note
Python 3.13 or later required.
-
Install dependencies.
uv sync
-
Rename
.env.example
to.env
and configure your environment. -
Rename
config.example.toml
toconfig.toml
and set your instance configuration(s). -
Run Bluebird
uv run bluebird.py
Each instance within config.toml
can be configured to filter posts from sending notifications.
Key | Description | Type | Required | Example |
---|---|---|---|---|
usernames |
X usernames to track. | Array of Strings | Yes | ["RockstarGames", "CallofDuty", "Mxtive"] |
discord_webhook_url |
Discord Webhook URL to send post notifications to. | String | Yes | https://discord.com/api/webhook/XXXXXXXX/XXXXXXXX |
require_media |
Set to true to only notify of posts with media. |
Boolean | No | true |
require_keyword |
Only notify of the post if one of these words are found. | Array of Strings | No | ["trailer", "new", "announcement", "delay"] |
exclude_reply |
Set to true to skip posts that are replies. |
Boolean | No | true |
exclude_repost |
Set to true to skip posts that are reposts. |
Boolean | No | true |
exclude_keyword |
Skip the post if at least one of these words are found. | Array of Strings | No | ["store", "price", "shop", "bundle"] |