GoBot is an extensible Go IRC bot for long-running use on one or more IRC networks. It supports TLS/SASL authentication, multiple networks and channels, persistent plugin data, rate-limited responses, games, reminders, source-grounded question answers, URL titles, and Prometheus metrics.
The repository contains example connection settings so you can see the configuration shape. Replace them with the networks, channels, identity, and secrets for your own deployment.
Each configured network connection:
- connects over TLS and can authenticate with SASL PLAIN
- joins any number of configured channels
- listens for channel, private, and invite events
- dispatches messages to enabled plugins
- reconnects with backoff after network failures
- paces outbound messages to avoid flooding
Stateful features store their data in a local BoltDB database. Runtime
counters are exposed through /stats and /metrics; cumulative counters
are also persisted so they survive restarts.
Requirements:
- Go
1.25.12+or a newer supported release - IRC network access
- a writable data directory
- Review
config.yamland add your networks and channels. - Copy
.env.exampleto.envand add secrets such as SASL or API keys. - Build the binary with
make buildor./scripts/build.sh. - Start it from the repository root with
./bin/irc-bot.
For a service-managed deployment, use the systemd and deployment guide. Docker and Docker Compose are also documented there.
| Guide | Covers |
|---|---|
| Deployment | Build, run, systemd, Docker, and first-run workflow |
| Configuration | Multi-network config, channels, invites, rate limits, and formatting |
| Plugins | Built-in plugin behavior and command reference |
| Games and activities | Blackjack, pool, polls, reminders, Duck Hunt, dice, and choices |
| NickServ and SASL | Nickname registration and secure authentication |
| Banter and fortune | Optional banter, quotes, and curated fortune files |
| News | NewsAPI setup and commands |
| Monitoring | /stats, /metrics, Prometheus, and Grafana |
| Security | Deployment and runtime security guidance |
| Development and CI | Project workflow, tests, CI, CodeQL, and Dependabot |
Owners can send GoBot a private reload message to apply reloadable plugin
configuration without dropping the IRC connection. See
Configuration for the
authentication and reload boundaries.
cmd/irc-bot/ application entrypoint
bot/ IRC connection, config, queue, stats, and interfaces
plugins/ built-in plugins and tests
data/foods/ local food, cuisine, and beer suggestion lists
data/fun/ local joke, pun, one-liner, and wisdom catalogs
data/welcome.txt short original join-greeting catalog
data/weapons.txt local high-level firearm and weapons-name catalog
data/sports.txt local sports suggestion list
data/cars.txt local car make/model suggestion list
storage/ BoltDB wrapper used by stateful plugins
quotes/ built-in quote and response files
grafana/ importable Prometheus dashboard and preview
scripts/ build, publishing, and systemd helpers
deploy/systemd/ systemd unit template
CONTRIBUTING.md contribution workflow and local checks
The binary is generated at bin/irc-bot; it is a build artifact, not source
code. See Development and CI for local checks.
MIT