CI : Docs CI : Lint CI : Tests PyPI : easterobot Python : versions License : MIT
Discord bot for easter.
Documentation is available on https://dashstrom.github.io/easterobot.
# 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
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
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
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
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.
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 setupPoe 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.
uv add 'PACKAGE'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.
E_NOTROOT=87 # Non-root exit error. E_INSTALLED=1 if ! $(sudo -l &> /dev/null); then >&2 echo 'Error: root privileges are needed to run this script' exit $E_NOTROOT fi if ! id easterobot >/dev/null 2>&1; then useradd --system --create-home --home-dir /home/easterobot easterobot fi if [ ! -d /home/easterobot/easterobot ]; then sudo -u easterobot -g easterobot -- git clone https://github.com/Dashstrom/easterobot /home/easterobot/easterobot fi cd /home/easterobot/easterobot systemctl disable easterobot || true systemctl stop easterobot || true sudo -u easterobot -g easterobot -- git pull sudo -u easterobot -g easterobot -- python3 -m venv /home/easterobot/easterobot/.venv sudo -u easterobot -g easterobot -- /home/easterobot/easterobot/.venv/bin/python3 -m pip install . sudo -u easterobot -g easterobot -- /home/easterobot/easterobot/.venv/bin/easterobot generate -i /home/easterobot/easterobot/data if [ ! -f /lib/systemd/system/easterobot.service ]; then mkdir -p /lib/systemd/system cat > /lib/systemd/system/easterobot.service << EOF [Unit] Description=Easterobot After=network-online.target [Service] Type=exec ExecStart=/home/easterobot/easterobot/.venv/bin/easterobot run -c /home/easterobot/easterobot/data/config.yml WorkingDirectory=/home/easterobot/easterobot StandardOutput=inherit StandardError=inherit Restart=always User=easterobot [Install] WantedBy=multi-user.target EOF systemctl daemon-reload fi systemctl enable easterobot systemctl start easterobot systemctl status easterobot
This work is licensed under MIT.