# Discord-reminder-bot Discord bot that allows you to set reminders. ![Bot](/Bot.png) Theme is [DiscordNight by KillYoy](https://github.com/KillYoy/DiscordNight) ## Usage !remind message_date can be anything that is time or date. For example: * `in 2 days` * `August 14, 2021 EST`, * `tomorrow` * `1 เดือนตุลาคม 2025, 1:00 AM` message_reason is the message the bot will send time ## Environment Variables * `BOT_TOKEN` - Discord bot token ([Where to get one](https://discord.com/developers/applications)) * `TIMEZONE` - Your time zone ([List of time zones](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)) * `SQLITE_LOCATION` - (Optional) Where to store the database. Docker users need to change this to "/data/jobs.sqlite" * `LOG_LEVEL` - Can be CRITICAL, ERROR, WARNING, INFO or DEBUG ## Installation You have two choices, [install directly on your computer](#Install-directly-on-your-computer) or using [Docker](#docker-compose-with-env-file). [Docker Hub](https://registry.hub.docker.com/r/thelovinator/discord-reminder-bot) | [docker-compose.yml](docker-compose.yml) | [Dockerfile](Dockerfile) ### Install directly on your computer * Install latest version of Python 3 for your operating system * (Optional) Create a virtual environment: * `python -m venv .venv` * Activate virtual environment: * Windows: `.\.venv\Scripts\activate` * Not windows: `source .venv/bin/activate` * Install requirements * `pip install -r requirements.txt` * Rename .env.example to .env and fill it out. * Start the bot (inside the virtual environment if you made one): * `python main.py` ### Start the bot when your Linux server boots * Keep services running after logout * `loginctl enable-linger` * Move service file to correct location (You may have to modify WorkingDirectory and/or ExecStart) * `cp discord-reminder-bot.service ~/.config/systemd/user/discord-reminder-bot.service` * Start bot now and at boot * `systemctl --user enable --now discord-reminder-bot` #### systemd examples * Start bot automatically at boot * `systemctl --user enable discord-reminder-bot` * Don't start automatically * `systemctl --user disable discord-reminder-bot` * Restart * `systemctl --user restart discord-reminder-bot` * Stop * `systemctl --user stop discord-reminder-bot` * Start * `systemctl --user start discord-reminder-bot` * Check status * `systemctl --user status discord-reminder-bot` * Reading the journal * `journalctl --user-unit discord-reminder-bot` ## Docker ### docker-compose with .env file More information on [Docker Hub](https://hub.docker.com/repository/docker/thelovinator/discord-reminder-bot) ```yaml version: "3" services: discord-reminder-bot: image: thelovinator/discord-reminder-bot env_file: - .env container_name: discord-reminder-bot environment: - BOT_TOKEN=${BOT_TOKEN} - TIMEZONE=${TIMEZONE} - LOG_LEVEL=${LOG_LEVEL} - SQLITE_LOCATION=/data/jobs.sqlite restart: unless-stopped volumes: - data_folder:/home/botuser/data/ volumes: data_folder: ``` ### docker cli ```console docker run -d \ --name=discord-reminder-bot \ -e BOT_TOKEN=JFIiasfjioFIAOJFOIJIOSAF.AFo-7A.akwFakeopfaWPOKawPOFKOAKFPA \ -e TIMEZONE=Europe/Stockholm \ -e LOG_LEVEL=INFO \ -e SQLITE_LOCATION=/data/jobs.sqlite \ -v /path/to/data:/home/botuser/data/ \ --restart unless-stopped \ thelovinator/discord-reminder-bot ``` > **_NOTE:_** SQLITE_LOCATION must be on a volume to keep the reminders if you restart the Docker container! ## Docker Environment Variables | Parameter | Function | | :------------------------------------------------------------------------: | ----------------------------------------------------------------------------------- | | `-e BOT_TOKEN=JFIiasfjioFIAOJFOIJIOSAF.AFo-7A.akwFakeopfaWPOKawPOFKOAKFPA` | Discord bot token ([Where to get one](https://discord.com/developers/applications)) | | `-e TZ=Europe/London` | Specify a time zone to use, this is used by the time zone converter and APScheduler | | `-e SQLITE_LOCATION=/home/botuser/data/` | Where to store the database file. It should be stored on a volume | | `-e LOG_LEVEL=INFO` | Log severity. Can be CRITICAL, ERROR, WARNING, INFO or DEBUG | | `-v /path/to/data:/home/botuser/data/` | Folder to store the database | ## Application Setup Add reminders with the `![remind|reminder|remindme|at] ` command. ## Support Info * Shell access whilst the container is running: `docker exec -it discord-reminder-bot /bin/bash` * To monitor the logs of the container in real-time: `docker logs -f discord-reminder-bot` ## Updating ### Via Docker Compose * Update all images: `docker-compose pull` * or update a single image: `docker-compose pull discord-reminder-bot` * Let compose update all containers as necessary: `docker-compose up -d` * or update a single container: `docker-compose up -d discord-reminder-bot` * You can also remove the old dangling images: `docker image prune` ### Via Docker Run * Update the image: `docker pull thelovinator/discord-reminder-bot` * Stop the running container: `docker stop discord-reminder-bot` * Delete the container: `docker rm discord-reminder-bot` * Recreate a new container with the same docker run parameters as instructed above (if you mapped `/home/botuser/data/` to your computer your `jobs.sqlite` file and reminders will be preserved) * You can also remove the old dangling images: `docker image prune` ## Building locally If you want to make local modifications to these images for development purposes or just to customize the logic: ```console git clone https://github.com/TheLovinator1/discord-reminder-bot.git cd discord-reminder-bot docker build \ --no-cache \ --pull \ -t thelovinator/discord-reminder-bot:latest . ``` ### Acknowledgments The Docker part of this README is based on the READMEs from [LinuxServer.io](https://github.com/linuxserver) ## Help * Email: tlovinator@gmail.com * Discord: TheLovinator#9276 * Steam: [steamcommunity.com/id/TheLovinator/](https://steamcommunity.com/id/TheLovinator/) ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details