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.
Core Implementation
- replace hex format
Essential Settings
- Make enable button functional
- Proper nostr Profile:
- Bio
- NIP-05
- Username/display name
- Zap address
- PFP/banner upload
- Posting interval controls
- Content album selection
Content System
- Create upload/organization page
- Implement manual post interface:
- Text
- Media upload
- Kind:20 posts
Bot Interaction
- Develop basic bot feed:
- Display Comments
- Reply
Validation
- Test NSEC key import
- Test manual posts:
-[x] Text only
- blossom Media upload
- NIP-94 uploads
- Verify bot reply works
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
- Clone the repository:
git clone https://github.com/yourusername/nostr-poster.git
cd nostr-poster
- Build the application:
make build
- 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
- Navigate to the web interface at
http://localhost:8765
- Log in with your Nostr extension (NIP-07)
- Create a new bot by providing a name and optional keypair
- Configure the posting schedule, media upload service, and relays
- Add content to the bot's content directory
- 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.
Description
Languages
Go
57.6%
JavaScript
26.9%
HTML
11.8%
CSS
3%
Makefile
0.7%