Skip to main content

A Python framework for easily creating Mastodon bots with pluggable content generation and filtering capabilities

Project description

RoboTooter

A Python framework for easily creating Mastodon bots with pluggable content generation and filtering capabilities.

Features

  • Multiple Bot Types: Currently supports Markov chain-based text generation
  • Plugin Architecture: Extensible plugin system for adding new bot types and functionality
  • Flexible Filtering: Extensible filter system for processing input text (Gutenberg, blank line removal, paragraph combining)
  • Mastodon Integration: Built-in support for posting to Mastodon instances
  • CLI Interface: Comprehensive command line interface for bot and plugin management
  • Configuration Management: Simple bot configuration and data management

Why?

I've built a few bots over the years, for fun. Recently I was reminded of a Twitter bot I wrote back in 2019 that generated sentences from a Markov chain generator trained on the text of Conan the Barbarian stories. I decided to reimplement it, this time for Mastodon.

I also wanted to be able to easily create other bots to do other things, and so built a simple plugin architecture.

Examples

  • Conan-o-matic The original reason for this project. Yes, it's silly. I still find it funny.
  • Chapter By Chapter] Posts a chapter a day from Public Domain litereature. Victorian-era Netflix.

Installation

As a Package

# Create a virtual environment
$ python3 -m venv .venv
# Activtate it
$ . .venv/bin/activate
# Install via pip
$ pip install robotooter

From Source

This project uses Poetry for dependency management. To install:

git clone ssh://git@codeberg.org/bfordham/robotooter.git
cd robotooter
poetry install

Quick Start

  1. Configure the framework:

    robotooter configure
    
  2. Create a new bot:

    robotooter create
    
  3. Set up your bot's data (for Markov bots, add a sources.txt file to the bot directory):

    robotooter --bot <bot-name> setup
    
  4. Authorize your bot with Mastodon:

    robotooter --bot <bot-name> authorize
    
  5. Generate content locally:

    robotooter --bot <bot-name> speak
    
  6. Post to Mastodon:

    robotooter --bot <bot-name> toot
    

Bot Types

Markov Bot

The Markov bot generates text using Markov chains trained on source material.

Setup Requirements:

  • Create a sources.txt file in your bot's working directory
  • Each line should contain a URL to a text file to use as training data
  • Run robotooter --bot <bot-name> setup to download and process the sources

Plugin Architecture

RoboTooter now supports a plugin system that allows you to extend the framework with custom bot types and functionality. Plugins inherit from the BasePlugin class and can define their own filters and bot implementations.

Plugin Development:

  • Extend the BasePlugin class to create custom bot types
  • Register plugins using robotooter plugins register <plugin-name>
  • Remove plugins with robotooter plugins remove <plugin-name>

CLI Commands

General Commands

  • robotooter info - Display information about the local setup
  • robotooter configure - Initialize configuration
  • robotooter create - Create a new bot
  • robotooter list - List all configured bots
  • robotooter version - Display the current version
  • robotooter help - Display help information

Bot-Specific Commands

  • robotooter --bot <name> setup - Download and process bot training data
  • robotooter --bot <name> authorize [--force] - Authorize bot with Mastodon
  • robotooter --bot <name> speak [--count N] - Generate content locally
  • robotooter --bot <name> toot - Generate and post content to Mastodon

Plugin Management

  • robotooter plugins register <plugin-name> - Register a new plugin
  • robotooter plugins remove <plugin-name> - Remove a plugin
  • robotooter plugins help - Display plugin management help

Project Structure

src/robotooter/
   bots/                # Bot implementations
       base_bot.py      # Base bot class
       markov/          # Markov chain bot
   cli/                 # Command line interface
   filters/             # Text processing filters
   mastodon_manager.py  # Mastodon API integration
   models.py            # Data models
   util.py              # Utility functions

Development

Requirements

  • Python 3.12+
  • Poetry for dependency management

Development Setup

poetry install --with dev

Running Tests

poetry run pytest

Code Quality

The project uses Ruff for linting and MyPy for type checking:

# Linting
./scripts/lint

# Type checking  
./scripts/type

Dependencies

  • requests: HTTP client for downloading source material
  • markovify: Markov chain text generation
  • mastodon.py: Mastodon API client
  • pydantic: Data validation and settings management
  • jinja2: Template engine

Contributing

If you would like to add features, please feel free. If you use this yourself, please let me know!

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See the LICENSE file for details.

The AGPL-3.0 is a copyleft license that requires anyone who distributes the code or runs it on a server to make the source code available under the same license terms.

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

robotooter-0.2.2.tar.gz (35.3 kB view details)

Uploaded Source

Built Distribution

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

robotooter-0.2.2-py3-none-any.whl (51.3 kB view details)

Uploaded Python 3

File details

Details for the file robotooter-0.2.2.tar.gz.

File metadata

  • Download URL: robotooter-0.2.2.tar.gz
  • Upload date:
  • Size: 35.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.2 Darwin/24.6.0

File hashes

Hashes for robotooter-0.2.2.tar.gz
Algorithm Hash digest
SHA256 390eec99214268693063d0f653d899b1780c806d6b824b4615246bbfc550d34a
MD5 322e5109f579bdd0006c2ac34b893ee0
BLAKE2b-256 99353dc8e3e7728e3480daa93fbaf9243300680e1f7eedea114568514d6d5112

See more details on using hashes here.

File details

Details for the file robotooter-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: robotooter-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 51.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.2 Darwin/24.6.0

File hashes

Hashes for robotooter-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7cfe2394c40534796408be7788332fac784379426054c4041fc5db96affe04b6
MD5 ade2b4440e92467d24607d21aa7fde13
BLAKE2b-256 7777b30a9bcaf8db75874fe57ca35e236a06851237b5cb0762c46a8caf96cd3d

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