# QuizBot Open source Discord bot for quizzes and quest-like events. ## Installation ### Dependencies - [Python 3.11+](https://www.python.org) - [MongoDB](https://www.mongodb.com) - [Redis](https://redis.io)/[Valkey](https://valkey.io) or [Memcached](https://memcached.org) (used for caching, optional) - [Git](https://git-scm.com) (only if installing from source) ### Installation from release 1. Download the release archive from [Releases](https://git.end-play.xyz/profitroll/QuizBot/releases) 2. Unpack the archive to a directory of your choice 3. Go to the project's directory 4. Create a virtual environment: `python3 -m venv .venv` 5. Activate the virtual environment: - Linux: `source .venv/bin/activate` - Windows (cmd): `.venv/bin/activate.bat` - Windows (PowerShell): `.venv/bin/activate.ps1` 6. Install requirements: `pip install -r requirements.txt` 7. Copy example config to a real file: `cp config_example.json config.json` 8. Configure the bot (see [Configuration](#configuration)) 9. Start the bot: `python main.py` 10. The bot can be stopped by a keyboard interrupt (`Ctrl+C`) and a virtual environment can be deactivated using `deactivate` ### Installation from source 1. Clone the repository: `git clone https://git.end-play.xyz/profitroll/QuizBot.git` 2. Go to the project's directory: `cd QuizBot` 3. Continue from step 4 of [Installation from release](#installation-from-release) ## Configuration ```json { "locale": "en-US", // Bot's default locale. Based on file name from locale/ "debug": false, // Debug mode setting "bot": { "owners": [ 0 // Discord ID of bot's owner ], "debug_guilds": [ 0 // Discord ID of the debug guild ], "bot_token": "", // Bot's token "timezone": "UTC", // Bot's timezone "status": { "enabled": true, // Whether activity is enabled "activity_type": "playing", // Type of the activity. Can be: playing, watching, listening, streaming, competing and custom "activity_text": "The Game Of Life" // Text of the activity } }, "database": { "user": null, // User name for database connection. null if without auth "password": null, // User password for database connection. null if without auth "host": "127.0.0.1", // Database host "port": 27017, // Database port "name": "quiz_bot" // Database name }, "cache": { "type": null, // Type of caching engine. Can be: memcached and redis "memcached": { "uri": "127.0.0.1:11211" // Memcached URI }, "redis": { "uri": "redis://127.0.0.1:6379/0" // Redis URI } }, "emojis": { "guess_wrong": null // Markdown of a Discord emoji to be used for wrong guesses } } ``` ## Upgrading ### Upgrading from release Installing over the older version is not supported. Fresh installation is necessary to prevent data corruption. 1. Make a backup of the project's directory. Some of the old files will be reused 2. Follow the [Installation from release](#installation-from-release) from the beginning and stop before 7th step 3. Copy file `config.json` and directory `data` from the backup you made into the new installation's directory 4. While still in the virtual environment, migrate the database: `python main.py --migrate` After these steps are performed, the bot is ready to be started and used. ### Upgrading from source 1. Make a backup of the project's directory 2. Go to the project's directory 3. Update the project: `git pull` 4. Activate the virtual environment: - Linux: `source .venv/bin/activate` - Windows (cmd): `.venv/bin/activate.bat` - Windows (PowerShell): `.venv/bin/activate.ps1` 5. Migrate the database: `python main.py --migrate` After these steps are performed, the bot is ready to be started and used. ## Usage 1. Invite the bot to your server with permissions `137707834448` and `applications.commands` scope. You can also use the following URL template to invite your bot after replacing `CLIENT_ID` with you bot's client ID: `https://discord.com/oauth2/authorize?client_id=CLIENT_ID&permissions=137707834448&integration_type=0&scope=applications.commands+bot` 2. Go to "Server Settings > Integrations > QuizBot" and disable access to admin commands for you default role. Only admins should have access to following commands: `/config`, `/event`, `/stage` and `/user`. Allowing access to `/status` is not recommended, however won't do any harm if done so. 3. Configure bot for usage on your server using `/config set` providing all the necessary arguments. Timezones are compatible with daylight saving time (e.g. `CET` will be interpreted as `CEST` during daylight saving).