Skip to main content

Architecture

Understanding RedHarmony's system design and components.

System Overview

RedHarmony is built with a modular architecture consisting of:

graph TD
A[Main Controller] --> B[Content Generator]
A --> C[Reddit Interface]
A --> D[Database Manager]
B --> E[OpenAI API]
C --> F[Reddit API]
D --> G[SQLite DB]

Core Components

1. Main Controller (main.py)

  • Orchestrates all operations
  • Manages rate limiting
  • Coordinates between components
  • Handles scheduling

2. Content Generation (utils/constant.py)

  • Interfaces with OpenAI API
  • Manages prompt engineering
  • Handles content formatting
  • Ensures quality control

3. Reddit Interface (utils/post.py, utils/comment.py)

  • Manages Reddit API interactions
  • Handles post creation
  • Manages comment interactions
  • Implements vote behavior

4. Database Management (utils/database.py)

  • Tracks all activities
  • Manages persistence
  • Handles data queries
  • Ensures data integrity

Data Flow

  1. Content Creation Flow
sequenceDiagram
Main->>OpenAI: Generate Content
OpenAI->>Main: Return Content
Main->>Reddit: Create Post
Reddit->>Main: Post Created
Main->>Database: Save Activity
  1. Interaction Flow
sequenceDiagram
Main->>Reddit: Monitor Responses
Reddit->>Main: New Comments
Main->>OpenAI: Generate Reply
OpenAI->>Main: Return Reply
Main->>Reddit: Post Comment

Component Interactions

Helper Utilities (utils/helper.py)

  • Provides shared functionality
  • Manages configuration loading
  • Implements common utilities
  • Handles error checking

Vote Management (utils/vote.py)

  • Implements voting strategies
  • Manages vote timing
  • Tracks vote history
  • Ensures natural behavior

Configuration Structure

System Configuration:
├── Environment Variables (.env)
│ ├── API Keys
│ └── Credentials
├── Persona Definitions (accounts.json)
│ ├── Subreddit Targets
│ └── Personality Traits
└── Rate Limits (main.py)
├── Daily Limits
└── Hourly Limits

Database Schema

-- Activity Tracking
CREATE TABLE posts (
id INTEGER PRIMARY KEY,
post_id TEXT UNIQUE,
username TEXT,
subreddit TEXT,
timestamp DATETIME
);

CREATE TABLE comments (
id INTEGER PRIMARY KEY,
comment_id TEXT UNIQUE,
post_id TEXT,
timestamp DATETIME
);