user bfcebad6dd feat: background account farming with ephemeral connections
Add RegistrationManager that periodically spawns ephemeral Network
connections to register new NickServ accounts across all configured
networks. Ephemeral connections reuse the existing registration
lifecycle (random nick, email verification, captcha solving) with
two new Network parameters: cred_network (redirect credential storage
to the real network name) and ephemeral (suppress status broadcasts,
skip SASL/IDENTIFY, go straight to REGISTER).

- backlog: add count_verified_creds() query
- config: farm_enabled, farm_interval, farm_max_accounts
- network: cred_network/ephemeral params, credential ref redirection
- farm: new module with sweep loop, per-network cooldown, stats
- router: farm lifecycle integration, farm property
- commands: FARM (status/trigger) and ACCOUNTS (list stored creds)
- tests: 14 farm tests + 5 ephemeral/cred_network network tests

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 18:17:22 +01:00

bouncer

IRC bouncer with SOCKS5 proxy support and persistent message backlog.

Features

  • Multi-network multiplexing: single client connection sees all networks via /network suffixes
  • All outbound connections routed through SOCKS5 proxy
  • Stealth connect: registers with a random pronounceable nick and generic identity
  • Probation window: waits 15s after registration to detect K-lines before revealing real nick
  • Persistent message backlog (SQLite) with replay on reconnect
  • Multiple clients can attach simultaneously
  • Password authentication
  • TLS support for IRC server connections
  • Automatic reconnection with exponential backoff
  • Local DNS resolution with multi-address failover

Quick Start

cd ~/git/bouncer
make dev

cp config/bouncer.example.toml config/bouncer.toml
$EDITOR config/bouncer.toml

bouncer -c config/bouncer.toml -v

Connect

From your IRC client, connect to 127.0.0.1:6667 with:

PASS yourpassword

A single connection gives you all configured networks. Channels and nicks appear with a /network suffix:

Client sees:         Server sends/receives:
#libera/libera  <->  #libera       (on libera network)
#debian/oftc    <->  #debian       (on oftc network)
user123/libera  <->  user123       (on libera network)

How It Works

IRC Client(s) --> [bouncer:6667] --> Router --> [SOCKS5:1080] --> IRC Server(s)
                                       |
                                    Backlog
                                   (SQLite)
  1. Bouncer connects to IRC server via SOCKS5 with a random identity
  2. Survives 15s probation (K-line detection)
  3. Switches to your configured nick
  4. Joins configured channels
  5. Clients connect to bouncer, receive backlog replay and channel state

Podman Deployment

cp config/bouncer.example.toml config/bouncer.toml
$EDITOR config/bouncer.toml

make build
make up
make logs

See docs/DEPLOY.md for full container documentation.

Documentation

Document Description
docs/INSTALL.md Prerequisites and setup
docs/USAGE.md Comprehensive guide
docs/DEPLOY.md Podman container deployment
docs/CHEATSHEET.md Quick reference
docs/DEBUG.md Troubleshooting

Development

make dev      # Install with dev deps
make test     # Run tests
make lint     # Run linter
make fmt      # Format code
Description
No description provided
Readme 403 KiB
Languages
Python 99.6%
Makefile 0.3%
Dockerfile 0.1%