easterobot

CI : Docs CI : Lint CI : Tests PyPI : easterobot Python : versions License : MIT

Discord bot for easter.

Documentation

Documentation is available on https://dashstrom.github.io/easterobot.

Installation

# Using pip
pip install easterobot
# Using uv (install in your project dependencies)
uv add easterobot
# Using pipx (install as a tool in a venv)
pipx install easterobot
# Using uv (install as a tool in a venv)
uv tool install easterobot

Usage as CLI

Once installed, you can use it directly.

easterobot run -t YOU_MUST_PUT_YOUR_TOKEN_HERE

Or you can generate a custom configuration for your own needs !

easterobot generate -i data
easterobot run -c data/config.yml

Usage with Docker

You can install easterobot using uv from PyPI.

git clone https://github.com/Dashstrom/easterobot
cd easterobot
echo "DISCORD_TOKEN=YOU_MUST_PUT_YOUR_TOKEN_HERE" > .env

# Can be unsafe (and for each update)
chmod -R 700 . && mkdir data -p && chmod 777 data

# Run the docker container
docker compose up -d

# Stop it
docker compose stop

# Remove the container (not the data)
docker compose down --rmi all

# Update
git reset --hard HEAD && git pull

# One-line update
docker compose down --rmi all && git reset --hard HEAD && git pull && chmod -R 700 . && mkdir data -p && chmod 777 data && docker compose up -d

Configuration directory

data                          Root directory
├── .gitignore                Avoid pushing sensitive data
├── config.yml                Configuration file
├── easterobot.db             Database
├── logs                      Logging directory
│   ├── easterobot.log        Latest log file
│   └── easterobot.log.1      Rotating log file
└── resources                 Resource directory
    ├── config.example.yml    An example of config
    ├── credits.txt           Credits of emotes
    ├── emotes                Directory loaded as application emotes
    │   ├── eggs              Directory for eggs
    │   |   └── egg_01.png    Emoji to use for egg
    │   ├── icons             Misc emotes to load
    │   │   └── arrow.png     Emoji used in messages
    │   ├── placements        Directory for emoji used in grid
    │   │   └── s1.png        Single blue emoji with one on it
    │   └── skyjo             Skyjo cards
    │       └── skyjo_m1.png  Card with minus -1 with deep blue
    ├── logging.conf          Logging configuration
    ├── alembic.ini           Configure for alembic
    └── logo.png              Logo used by the bot

Development

Contributing

Contributions are very welcome. Tests can be run with poe check, please ensure the coverage at least stays the same before you submit a pull request.

Prerequisite

First, You need to install git following the official guide and configure it.

Then, you need to install uv and update shell path with this command:

uv tool update-shell

Finally, run these commands for setup the project with dev dependencies.

git clone https://github.com/Dashstrom/easterobot
cd easterobot
uv sync --all-extras --python 3.10
uv run poe setup

Poe

Poe is available for help you to run tasks: uv run poe {task} or poe task within the venv.

test                  Run test suite.
lint                  Run linters: ruff checker and ruff formatter and mypy.
format                Run linters in fix mode.
check                 Run all checks: lint, test and docs.
check-tag             Check if the current tag match the version.
cov                   Run coverage for generate report and html.
open-cov              Open html coverage report in webbrowser.
doc                   Build documentation.
open-doc              Open documentation in webbrowser.
setup                 Setup pre-commit.
pre-commit            Run pre-commit.
clean                 Clean cache files.

How to add dependency

uv add 'PACKAGE'

Ignore illegitimate warnings

To ignore illegitimate warnings you can add :

  • # noqa: ERROR_CODE on the same line for ruff.
  • # type: ignore[ERROR_CODE] on the same line for mypy.
  • # pragma: no cover on the same line to ignore line for coverage.
  • # doctest: +SKIP on the same line for doctest.

License

This work is licensed under MIT.