Thanks for your interest! annoybots is a framework for chat "nuisance" bots — one Go binary, many config-defined personalities. Bug reports, new transports, and quality-of-life fixes are all welcome.
make build # go build -trimpath -o bin/annoybot ./cmd/annoybot
make test # go test ./...
make lint # golangci-lint runTo run a bot locally, copy an example config and point the binary at it (export
the *_env secrets it references first):
make run CONFIG=configs/echo.yamlSee the README for the config format, the "Add a bot" guide, and
how the botnet/skits work, and docs/ for the command, IdleRPG, plugin,
accounts, and federation references.
- Branch off
mainusing<type>/<slug>(e.g.feat/discord-threads,fix/markov-panic). - Keep PRs focused — one logical change per PR.
- Add tests for behavior changes. Every
internal/package has a_test.go;miniredisstands in for the botnet bus, so transports and the engine are testable without live networks. - Make CI pass. Every PR runs
go vet,go test -race ./...,golangci-lint, and a Docker image build — all four must be green.
This repo uses Conventional Commits — the
type drives the changelog and the next release version via release-please:
feat(discord): add thread support
fix(markov): guard against empty-state reload
Common types: feat, fix, perf, refactor, ci, docs, chore.
Sign off every commit (Developer Certificate of Origin):
git commit -s -m "feat(scope): summary"Never commit real tokens or passwords. Secrets are referenced indirectly — each
*_env field in a config names an environment variable populated from a
Kubernetes Secret. See deploy/k8s/overlays/<bot>/secret.example.yaml
for the template. Found a vulnerability? See SECURITY.md — please
don't open a public issue for it.
By contributing, you agree your contributions are licensed under the project's MIT License.