Skip to content

huketo/ddarabot

Repository files navigation

DDaraBot (따라봇)

A self-hosted Bluesky bot that auto-translates your posts into multiple languages

한국어 · 日本語


DDaraBot (따라봇) — ddara (따라, "follow along") + bot (로봇)

A bot that follows your posts and expands them into multiple languages.

No separate bot account needed. DDaraBot uses your own app password to post translated replies from your account — your followers see the translations as if you wrote them yourself.

How It Works

Your post: "오늘 날씨가 좋네요! #ddara"
  ↓ Detected via Jetstream WebSocket
  ↓ Translated via Genkit LLM

Reply (en): "The weather is nice today! 🌐 Translated by #DDaraBot"
Reply (ja): "今日はいい天気ですね! 🌐 Translated by #DDaraBot"
Reply (zh): "今天天气真好! 🌐 Translated by #DDaraBot"
  1. Detects your posts containing #ddara in real-time via Jetstream
  2. Translates into configured target languages using Genkit
  3. Posts translated replies from your account with #DDaraBot tag

Supported LLM Providers

All providers are supported through Genkit's unified API:

Provider Model Example
OpenAI openai/gpt-4o-mini
Anthropic anthropic/claude-sonnet-4-20250514
Google AI googleai/gemini-2.5-flash
Ollama ollama/llama3
Vertex AI vertexai/gemini-2.5-flash

Quick Start

Prerequisites

  • A Bluesky app password
  • An LLM API key (depending on your chosen provider)

Using Docker (recommended)

No build required. Just create a config file and run:

# 1. Download the example config
mkdir -p data
curl -o data/config.toml https://raw.githubusercontent.com/huketo/ddarabot/main/config.example.toml

# 2. Edit data/config.toml with your Bluesky handle, app password, and LLM API key

# 3. Run
docker run -d --restart unless-stopped \
  -v ./data:/app/data \
  huketo/ddarabot:latest

Using Docker Compose

# docker-compose.yml
services:
  ddarabot:
    image: huketo/ddarabot:latest
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    environment:
      - TZ=Asia/Seoul
# Place config.toml in ./data/, then:
docker compose up -d

Build from Source

Requires Go 1.24+.

git clone https://github.com/huketo/ddarabot.git
cd ddarabot
make build

cp config.example.toml config.toml
# Edit config.toml

./bin/ddarabot --config config.toml

Configuration

See config.example.toml for the full reference.

[bluesky]
handle = "my-handle.bsky.social"
app_password = "xxxx-xxxx-xxxx-xxxx"

[translation]
source_language = "ko"
target_languages = ["en", "ja", "zh"]
trigger_hashtag = "ddara"

[llm]
model = "googleai/gemini-2.5-flash"

[llm.googleai]
api_key = "your-api-key"

Your DID is automatically resolved from bluesky.handle at startup — no need to look it up manually.

Environment Variable Overrides

Sensitive values can be injected via environment variables:

Variable Overrides
DDARA_BLUESKY_APP_PASSWORD bluesky.app_password
OPENAI_API_KEY llm.openai.api_key
ANTHROPIC_API_KEY llm.anthropic.api_key
GOOGLE_API_KEY llm.googleai.api_key

CLI

ddarabot --config config.toml            # Run the bot
ddarabot --config config.toml --dry-run  # Translate without posting (test mode)
ddarabot validate --config config.toml   # Validate config + test LLM connection
ddarabot version                         # Print version

Development

make build          # Build binary
make test           # Run tests
make lint           # Check gofmt + go vet
make fmt            # Auto-format code
make release        # Cross-compile for all platforms
make docker-build   # Build Docker image locally
make docker-deploy  # Deploy with docker compose
make clean          # Remove build artifacts

License

MIT

About

A self-hosted Bluesky bot that auto-translates your posts into multiple languages

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors