A polling based listener converting multiple Ankama related feed updates to Discord Webhooks.
There is also an official Website for very easy and fast Webhook creation using this API.
The full API documentation can be found integrated in the Dofusdude Docs.
With the integration into the Dofusdude API, there are also SDKs ready to use, so you don't need to write the API function mappings and types yourself. You can find them at the docs.
The server polls the Twitter API and RSS feeds and checks whether new content is available. If so, it sends a POST request to the configured URLs.
The Almanax listeners wait until a subscribed Webhook time is set to fire. Then it uses the Dofusdude API to get the Almanax data and sends a custom request defined by personal settings to the registered URLs.
The URLs include keys to a channel with write access. This API is meant to be public but leaking the URLs would be a security issue. To replace them, there are random IDs that should be kept secret or only shown to the user. With the IDs, the user can update or delete the Webhook but can't retrieve the URL.
For the official instance I don't want to spam every imaginable Twitter account or RSS feed. So I only added the ones I think are interesting for everyone. If you want to add a feed, just open an issue or a PR.
I won't allow adding feeds programmatically to the public API. If you read the database code, you'll see the official
flag. This could be a way to add feeds via the API in the future, but it definitely will be with authentication and authorization.
The official instance has an IP based rate limit of 1 request/second with a burst of 5.
It only allows Discord Webhooks to be used as target. Otherwise, it would basically become a DDoS service. In the future, I want to add custom targets but (again) only with authentication and authorization.
Because of this (and I don't want Discord to be the default), the json field format
must be set to 'discord' on creation. This way, the schema stays flexible for the future.
You can easily self-host this service, but you should be mindful of the URLs. Always see them as plain-text passwords saved in a database. So never serve unprotected endpoints to the public.
- golang-migrate
- PostgreSQL 14
- Docker (optional, only used for database in README)
- Go 1.19 (only for building from source)
cd $GOPATH/src
mkdir -p github.com/dofusdude && cd github.com/dofusdude
git clone git@github.com:dofusdude/ankama-discord-hooks.git && cd ankama-discord-hooks
# create a .env file
cp .env.example .env
# export .env to shell
set -o allexport
source .env
set +o allexport
# setup database
docker run --rm --name webhooks-postgres --env-file .env -p 5432:5432 -d postgres:14-alpine
make migrate-up
go test -cover
go run .
# cleanup database
docker stop webhooks-postgres
Check the Releases tab and download the latest version of the binary for your platform.
Create a PostgreSQL database and run the migrations (like above).
Set the environment variables as described in the .env.example
file or override ENV_DIR
to a directory with an .env file (no trailing slash) and run the binary.
For running the binary in the background as a service, you can use systemd:
Create a service file, for example /etc/systemd/system/webhooks.service
.
[Unit]
Description=Webhooks Server
[Service]
ExecStart=/bin/ankama-discord-hooks
User=dofusdude
Environment=ENV_DIR=/home/dofusdude/ankama-discord-hooks
[Install]
WantedBy=multi-user.target
Then enable and start the service.
systemctl enable webhooks
systemctl start webhooks
The Docker image is available on Docker Hub.
docker-compose up -d db
# wait a few seconds for the database to run migrations and get ready.
docker-compose up -d webhooks