No description
Find a file
2026-05-29 15:36:17 +00:00
.forgejo/workflows build-docker-image.yml needs git for "git rev-parse" 2026-05-27 01:20:20 -07:00
admin-tools Fix script bugs. 2026-05-26 09:15:36 -07:00
code_review Resolved "dual-module loading" issue in tests. 2026-05-23 10:49:37 -07:00
data Added scripts to dump and restore database. 2026-05-19 07:16:27 -07:00
docker Improvements for service execution support. 2026-05-27 08:03:19 -07:00
log Added web server access.log. 2026-05-26 07:09:49 -07:00
migrations Moved the test DB from on-disk to in-memory. 2026-05-24 19:38:55 -07:00
profile_graphics Added profile_graphics 2025-11-29 19:04:25 -08:00
resources Prepare for 0.10 release. 2026-05-29 08:33:49 -07:00
src Improve flow for app users. 2026-05-29 08:29:45 -07:00
tests Renamed file tp better omdocate gemeral purpose. 2026-05-24 21:51:23 -07:00
.dockerignore Added pyproject.toml (but without build or dependency info). 2026-05-22 15:25:36 -07:00
.gitignore Move configurations down to resources/config. 2026-05-25 08:23:15 -07:00
alembic.ini Moved database into data/ subdir 2025-11-06 21:59:34 -08:00
CONFIGURATION.md Added web server access.log. 2026-05-26 07:09:49 -07:00
DEVELOPMENT.md Added DEVELOPMENT document. 2026-05-26 18:07:18 -07:00
LICENSE.md Added link to codeberg repo to home page. Added BSD 3-Clause license. 2025-11-12 14:28:22 -08:00
pyproject.toml Bump version from 0.10 to 0.11-SNAPSHOT for next development 2026-05-29 15:36:17 +00:00
README.md Added DEVELOPMENT document. 2026-05-26 18:07:18 -07:00
requirements-dev.txt Implement test framework and several of the test cases. 2025-11-30 10:07:33 -08:00
requirements.txt Update Mastodon.py from 2.1.4 to 2.2.1. Resolves issues with DMs not being sent. 2026-05-22 09:46:44 -07:00
TO_DO.md Cross "user filters" off the TO_DO list. 2026-05-22 11:20:14 -07:00

NotifyBot

NotifyBot watches Mastodon hashtags and DMs you when new posts appear, so you never miss the conversations that matter. It's best for niche or low-traffic hashtags — the ones that slip past your timeline.

Users interact with NotifyBot entirely through Mastodon direct messages — sending commands like subscribe cats to create hashtag subscriptions, and unsubscribe moose to remove them. When a new post appears with a subscribed hashtag, the bot sends a DM notification with a link to view recent posts.

Visit the live instance at: https://notifybot.jampdx.net

See the TO_DO.md file for current issues queue. See the LICENSE.md file for licensing information.

Getting Started

Requires Python 3.12 or later.

Environment

To set up the environment, run:

python3 -m venv .venv  
.venv/bin/pip install -r requirements.txt
.venv/bin/alembic upgrade head 

Mastodon Account

The bot requires a Mastodon account to operate. Different Mastodon instances have different policies on running bots — check your instance's rules before setting up a bot account.

When setting up the account, enable the "This is a bot account" checkbox in the profile settings. This lets other users know they are interacting with an automated account.

Notification Filtering

On Mastodon 4.3 and later, the notification filtering policy must be configured for the bot account, or DMs from users may be silently held for review. To configure this:

  • Log into the bot's Mastodon account in the web interface.
  • Go to the Notifications page.
  • Click the settings icon (vertical sliders) at the top right of the Notifications column to reveal the "Manage notifications from..." settings.
  • Set "Unsolicited private mentions" to "Accept". If this is left at "Filter", the bot may miss a user's first DM after their follow request is accepted.
  • Verify that "People you don't follow" is also set to "Accept", since the bot does not follow its users.
  • Verify that "People not following you" is also set to "Accept", since newly-accepted followers may not yet be recognized as following the bot.

Access Token

You will need an API access token, so the bot can interact with Mastodon. To obtain an access token:

  • Log into the Mastodon account where you will be running the bot.
  • Go to Preferences → Development → New Application.
  • Create a new application with scopes: read, write, follow.
  • Copy the "Your access token" value.

See CONFIGURATION.md for where to store the access token and other settings.

Configuration

The bot is configured by TOML files in the resources/config/ directory. See CONFIGURATION.md for full details.

There are a handful of settings marked CONFIGURE. They are the ones that likely will need to be to set for a new installation.

Execution

To launch the application in development mode:

.venv/bin/python3 src/__main__.py

For production, set the environment variable APP_ENV=prod. See CONFIGURATION.md for details.

Operations

Approving Follow Requests

The bot requires manual approval of new followers. The bot will DM the accounts listed in bot.admins when a new follow request is received. Log into the bot's Mastodon account and review the pending follow requests.

Posting Announcements

To broadcast a message to all subscribed users, post from the bot's Mastodon account using the hashtag configured in bot.announcement_hashtag. Each subscriber will receive a DM with a link to the post. It's good practice to include your personal user handle in the announcement, so you can see any replies.

User Messages

Users can send messages to the bot admin using the message command (e.g. message I like your bot.). The bot will DM the accounts listed in bot.admins when a message is received. Log into the bot's Mastodon account to respond to the message. It's good practice to include your personal user handle in the message, so you can see any replies.

Troubleshooting

Users Not Receiving Responses

If a user reports that the bot is not responding to their DMs, check the bot's Mastodon account for notifications that are being held. If so, approve them, then review the notification filtering policy settings. See the Mastodon Account section for details.

Author

Courtney Rosenthal
email: cr@crosenthal.com
Mastodon: https://pdx.social/@courtney