A minimalist Discord bot that sends notifications of gained/lost villages.
renovate
cdf770646f
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #87 Co-authored-by: renovate <renovate@noreply.localhost> Co-committed-by: renovate <renovate@noreply.localhost> |
||
---|---|---|
build/docker/dcbot | ||
cmd/dcbot | ||
docs | ||
internal | ||
k8s | ||
.commitlintrc.yml | ||
.dockerignore | ||
.drone.yml | ||
.envrc | ||
.gitignore | ||
.golangci.yml | ||
.pre-commit-config.yaml | ||
go.mod | ||
go.sum | ||
LICENSE | ||
Makefile | ||
README.md | ||
renovate.json | ||
skaffold.yml |
dcbot
A minimalist Discord bot that sends notifications of gained/lost villages.
Getting started
Development
Setting up the environment
Prerequisites:
- Go (>= 1.19)
- Node.js (LTS, needed for commitlint)
- Kubernetes (>= 1.25.0)
- minikube
- Docker Desktop
- Docker CLI
- Skaffold
- pre-commit
- IDE/Code editor (e.g. Goland, VSCode, vim, neovim)
- API from core
- Bot token
- direnv (optional, but recommended)
# if you have direnv installed
direnv allow
# install git hooks and required tools
make install
# copy secret.example.yml
cp ./k8s/overlays/dev/secret.example.yml ./k8s/overlays/dev/secret.yml
# encode a bot token
echo -n 'token' | base64
# add the encoded token to secret.yml
vim ./k8s/overlays/dev/secret.yml
# run all required services
skaffold run --port-forward=true --tail=true
# stop all of them
skaffold delete
Running unit tests
At least one of the following is required to run unit tests:
- Docker (dockertest will spin up a database)
- Postgres database
# Docker
go test -v ./...
# Postgres database
TESTS_DB_DSN=postgres://dcbot:dcbot_pass@127.0.0.1/dcbot go test -v ./...
Creating a new database migration
# create a migration
go run ./cmd/dcbot/main.go db create go migration 1
Configuration options
Configuration options can be specified via environment variables.
Env variable | Default | Description |
---|---|---|
APP_MODE |
development |
Whether to use development or production settings |
DB_DSN |
Required. Only Postgres is supported. Example: postgres://user:password@host:5432/dbname?sslmode=disable (https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING) |
|
DB_MAX_OPEN_CONNECTIONS |
5 |
Maximum number of open connections to the database (https://pkg.go.dev/database/sql#DB.SetMaxOpenConns) |
DB_MAX_IDLE_CONNECTIONS |
2 |
Maximum number of connections in the idle connection pool (https://pkg.go.dev/database/sql#DB.SetMaxIdleConns) |
DB_CONNECTION_MAX_LIFETIME |
3m |
Maximum amount of time a connection may be reused (https://pkg.go.dev/database/sql#DB.SetConnMaxLifetime) |
TWHELP_URL |
Required. API URL (e.g. https://tribalwarshelp.com) | |
TWHELP_TIMEOUT |
10s |
Time limit for requests to TWHelp |
BOT_TOKEN |
Required. https://discord.com/developers/docs/topics/oauth2#bots | |
BOT_MAX_GROUPS_PER_SERVER |
10 |
Max number of groups per server |
BOT_MAX_MONITORS_PER_GROUP |
10 |
Max number of monitors per group |
License
Distributed under the MIT License. See LICENSE
for more information.
Contact
Dawid Wysokiński - contact@dwysokinski.me