nostr-poster/README.md

5.2 KiB

Nostr Poster

An automated content posting bot for Nostr networks. This tool allows you to schedule regular posting of images and videos to Nostr relays, supporting both NIP-94 and Blossom upload services.

Nostr Poster

Table of Contents

Priority Order

  1. Bot Profile Management: Complete proper profile creation, editing, and publishing
  2. Relay Management: Improve relay selection and management interface
  3. Test Auto-Posting: Ensure the scheduling system works correctly

To-Do List

Bot Profile Management Enhancements

  • Add upload fields to both the "Create Bot" modal and "Bot Settings" modal
  • Create a consistent interface for profile images across both modals
  • Implement preview functionality for selected images
  • Connect these uploads to the NIP-96/Blossom media servers
  • Ensure proper kind 0 event creation with all required metadata fields
  • Display confirmation after successful publishing with NIP-19 encoded identifiers
  • Add a visual indicator to show when a bot's profile needs publishing (outdated)
  • Create new file input fields in both modals with preview capability
  • Create a shared function for uploading profile images to media servers
  • Update the CreateAndSignMetadataEvent function to include all necessary fields for a proper NIP-01 metadata event
  • Add an explicit "Publish Profile" button to push the kind 0 event to relays

Relay Management Improvements

  • Create a more intuitive relay management interface
  • Add ability to categorize relays (read, write, both)
  • Include relay testing functionality
  • Add a "recommended relays" quick-add option
  • Create a dedicated relay management component in the bot settings modal
  • Add quick-add buttons for popular relays
  • Include relay status indicators
  • Implement relay tests (ping/connection checks)

Post Scheduling and Auto-Posting Testing

  • Add detailed logging for scheduled posts
  • Create a manual trigger for testing scheduled posts
  • Implement a post history view
  • Add a "test now" button that triggers an immediate post attempt
  • Create a dedicated tab or view for post history
  • Implement proper error logging and status tracking

Code Changes Required

  • Modify index.html - Add profile image/banner upload fields
  • Modify main.js - Add functions for handling profile image uploads
  • Create a new component for relay management
  • Modify events.go - Ensure metadata events are properly formatted
  • Modify bot_service.go - Enhance profile publishing logic
  • Modify routes.go - Add endpoints for profile image management

Features

  • Media Management: Upload content to either NIP-94/96 compatible servers or Blossom storage servers
  • Scheduled Posting: Configure posting intervals for automated content sharing
  • Multiple Bot Support: Manage multiple bot identities, each with their own keypair
  • Keypair Management: Create new keypairs or import existing ones
  • Relay Configuration: Configure which relays to publish to for each bot
  • Profile Management: Set up and publish bot profiles (name, bio, avatar, etc.)
  • Content Archiving: Posted content gets archived to avoid duplicate posts

Installation

Requirements

  • Go 1.18 or higher
  • SQLite 3

Building from Source

  1. Clone the repository:
git clone https://github.com/yourusername/nostr-poster.git
cd nostr-poster
  1. Build the application:
make build
  1. Run the application:
make run

Configuration

The application can be configured via a YAML file or environment variables. By default, the config file is located at /config.yaml.

Example Configuration

app_name: "Nostr Poster"
server_port: 8080
log_level: "info"

bot:
  keys_file: "./keys.json"
  content_dir: "./content"
  archive_dir: "./archive"
  default_interval: 60  # minutes

db:
  path: "./nostr-poster.db"

media:
  default_service: "nip94"
  nip94:
    server_url: "https://nostr.build/api/upload/nostr"
    require_auth: true
  blossom:
    server_url: "https://blossom.example.com"

relays:
  - url: "wss://relay.damus.io"
    read: true
    write: true
  - url: "wss://nostr.mutinywallet.com"
    read: true
    write: true
  - url: "wss://relay.nostr.band"
    read: true
    write: true

Usage

Set up a Bot

  1. Navigate to the web interface at http://localhost:8765
  2. Log in with your Nostr extension (NIP-07)
  3. Create a new bot by providing a name and optional keypair
  4. Configure the posting schedule, media upload service, and relays
  5. Add content to the bot's content directory
  6. Enable the bot to start automated posting

Manual Posting

You can also trigger a post manually through the web interface

NIPs Supported

  • NIP-01: Basic protocol flow
  • NIP-07: Browser extension authentication
  • NIP-55: Android signer application (soon TM)
  • NIP-94: File metadata
  • NIP-96: HTTP file storage
  • NIP-98: HTTP authentication

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.