Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/trustlessmatt/discord-exporter-bot/llms.txt

Use this file to discover all available pages before exploring further.

The Config dataclass manages all bot settings loaded from environment variables.

Config Class

@dataclass
class Config:
    """Bot configuration loaded from environment variables."""
    discord_token: str
    guild_id: int
    anthropic_api_key: Optional[str] = None
    dokploy_volume_path: Optional[str] = None
    github_repo_url: Optional[str] = None
    github_token: Optional[str] = None
    eastern_tz: ZoneInfo = field(default_factory=lambda: ZoneInfo("America/New_York"))
    digest_model: str = "claude-haiku-4-5-20251001"
    digest_max_tokens: int = 4096
    default_hours: int = 24
    min_hours: int = 1
    max_hours: int = 720
    exports_dir: str = "exports"
    digests_dir: str = "Daily Digests"
    digest_preview_length: int = 1500
    scheduled_hour: int = 0  # 12am ET

Configuration Fields

Required Fields

discord_token
str
required
Discord bot token for authentication. Must be set via DISCORD_TOKEN environment variable.
guild_id
int
required
Discord server (guild) ID to export messages from. Must be set via GUILD_ID environment variable.

Optional Fields

anthropic_api_key
Optional[str]
default:"None"
API key for Claude/Anthropic API integration. Required for digest generation. Set via ANTHROPIC_API_KEY environment variable.
dokploy_volume_path
Optional[str]
default:"None"
Path to Dokploy volume for persistent storage. If set and exists, digests are saved here. Set via DOKPLOY_VOLUME_PATH environment variable.
github_repo_url
Optional[str]
default:"None"
GitHub repository URL for pushing digests (e.g., https://github.com/user/repo.git). Set via GITHUB_REPO_URL environment variable.
github_token
Optional[str]
default:"None"
GitHub personal access token for repository authentication. Set via GITHUB_TOKEN environment variable.

Default Configuration

eastern_tz
ZoneInfo
default:"ZoneInfo(\"America/New_York\")"
Timezone for timestamps. Automatically handles DST transitions.
digest_model
str
default:"\"claude-haiku-4-5-20251001\""
Claude model to use for digest generation.
digest_max_tokens
int
default:"4096"
Maximum tokens for Claude API response.
default_hours
int
default:"24"
Default time range in hours for exports when not specified.
min_hours
int
default:"1"
Minimum allowed hours for export time range.
max_hours
int
default:"720"
Maximum allowed hours for export time range (30 days).
exports_dir
str
default:"\"exports\""
Local directory for saving JSON exports.
digests_dir
str
default:"\"Daily Digests\""
Directory name for saving digest markdown files.
digest_preview_length
int
default:"1500"
Character limit for digest preview in Discord messages.
scheduled_hour
int
default:"0"
Hour of day (0-23) for scheduled digest generation in Eastern Time. Default is midnight (12am ET).

Class Methods

from_env()

@classmethod
def from_env(cls) -> "Config":
    """Load configuration from environment variables."""
Loads configuration from environment variables using python-dotenv.
return
Config
A fully initialized Config instance with values loaded from environment variables.
Raises:
  • ValueError: If DISCORD_TOKEN or GUILD_ID environment variables are not set.
Environment Variables:
VariableRequiredDescription
DISCORD_TOKENYesDiscord bot authentication token
GUILD_IDYesDiscord server ID (numeric)
ANTHROPIC_API_KEYNoClaude API key for digest generation
DOKPLOY_VOLUME_PATHNoPath to persistent volume
GITHUB_REPO_URLNoGitHub repo URL for pushing digests
GITHUB_TOKENNoGitHub authentication token

Example .env File

DISCORD_TOKEN=your_discord_bot_token_here
GUILD_ID=1234567890123456789
ANTHROPIC_API_KEY=sk-ant-api03-...
DOKPLOY_VOLUME_PATH=/var/lib/dokploy/volumes/discord-bot
GITHUB_REPO_URL=https://github.com/username/digests.git
GITHUB_TOKEN=ghp_...
The bot automatically loads .env file from the current directory when Config.from_env() is called.
Never commit your .env file to version control. Add it to .gitignore to protect sensitive tokens.

Build docs developers (and LLMs) love