A Bluesky bot that notifies you when you get blocked, added to lists, or when specific accounts make posts.
- Block Notifications: Get notified when someone blocks you
- List Notifications: Get notified when you're added to lists
- Post Monitoring: Get notified when specific accounts make posts
- Easy to Use: Users interact with the bot via DMs with simple commands
- Node.js (v22+)
- pnpm 12
-
Clone the repository:
git clone https://github.com/ImLunaHey/lunafications.git cd lunafications -
Install dependencies:
pnpm install --frozen-lockfile
-
Set up environment variables: Create a
.envfile with:BSKY_USERNAME=your_username.bsky.social BSKY_PASSWORD=your_password_or_app_password SQLITE_LOCATION=path/to/database.db # Optional, defaults to in-memoryNote: For the password, you can use either your full account password or an app password with DM permissions.
-
Start the bot:
pnpm start
For deployment on platforms like Railway, it's recommended to:
- Set the environment variables in your deployment platform
- Use a persistent storage path for your SQLite database, e.g.,
/data/bsky.db - Mount a volume to the
/datadirectory to ensure database persistence across redeployments
The service also listens on PORT (Railway supplies this automatically, otherwise it defaults to 3000). /health is always available. The dashboard remains disabled unless both of its secrets are configured.
Generate fresh secrets locally:
pnpm run dashboard:generate-secretsAdd both printed values to Railway as DASHBOARD_SESSION_SECRET and DASHBOARD_OAUTH_PRIVATE_KEY. Railway's RAILWAY_PUBLIC_DOMAIN is used automatically for OAuth. For another host, set DASHBOARD_PUBLIC_URL to its public HTTPS origin, without a path.
The dashboard uses Bluesky OAuth and only accepts the immutable DID belonging to @imlunahey.com. Other accounts are rejected even if the handle changes or is impersonated. Sessions last 12 hours, are stored as keyed hashes, and the dashboard is read-only.
The bot provides instructions to end-users through its profile bio and responds to the following commands:
menu: Display available commandsnotify blocks: Enable block notificationsnotify lists: Enable list notificationsnotify all: Enable all notificationsnotify posts @username: Get notified when a specific user makes a posthide blocks: Disable block notificationshide lists: Disable list notificationshide posts @username: Stop monitoring a specific user's postshide all: Disable all notificationssettings: View current notification settings
pnpm testpnpm run coveragepnpm run coverage:watchISC
Profile image and banner by @ex.trathi.cc