#!/bin/bash # set -e # Exit immediately if any command exits with a non-zero status check_venv() { # Check if the venv module is available if python3 -c "import venv" &> /dev/null; then return 0 else echo "The 'venv' module is not available. Please ensure you are using Python 3.3 or later." return 1 fi } create_venv() { python3 -m venv env } activate_venv() { source env/bin/activate } install_dependencies() { pip install --upgrade pip || { echo "Failed to upgrade pip"; exit 1; } pip install gunicorn || { echo "Failed to install Gunicorn"; exit 1; } pip install -e . || { echo "Failed to install dependencies"; exit 1; } } initialize_db() { # Create the database. This also populates it with some goals and votes from the default rewards.py export FLASK_APP=ownchatbot if python -m flask init-db; then echo "Database initialized successfully." else echo "Failed to initialize the database. Please check for errors." exit 1 # Exit the script with a non-zero status fi } generate_key() { KEY=$(< /dev/urandom tr -dc 'A-Za-z0-9' | head -c 32) echo "$KEY" } update_config() { # Generate keys for SECRET_KEY and MGMT_AUTH local key_name="$1" local key_value="$2" local bak_file="instance/config.py.bak" # Update the config file if sed -i.bak "s|$key_name = ''|$key_name = '$key_value'|" "instance/config.py"; then echo "Updated $key_name successfully." rm "$bak_file" # Remove the .bak file if the update was successful else echo "Failed to update $key_name. Backup file remains." exit 1 # Exit the script with a non-zero status fi } read -p "This app includes an option to integrate Kofi donations and membership rewards into your stream. If you use this feature, you acknowledge that you alone are responsible for backing up and securing the OwnchatBot folder, so as not to lose any data related to rewards your viewiers earned by spending money on Kofi. The developer(s) of OwnchatBot assume no responsibility for any loss of such data. Do you agree to these terms? Type \"yes\" or \"no\": " agreement # Prompt the user to accept the agreement if [[ "$agreement" != "yes" ]]; then echo -e "\n\nAgreement declined by user. OwnchatBot not installed.\n\n" exit 0 fi if check_venv; then create_venv else exit 1 fi activate_venv install_dependencies initialize_db deactivate cp ownchatbot/defaults/*py instance/ # Copy the default config files into the instance folder SECRET_KEY=$(generate_key) update_config "SECRET_KEY" "$SECRET_KEY" MGMT_AUTH=$(generate_key) update_config "MGMT_AUTH" "$MGMT_AUTH" read -p "Please enter the port number you would like OwnchatBot to listen on: " OCB_PORT echo " You're ready to start OwnchatBot! Run: env/bin/python -m gunicorn --error-logfile ownchatbot.log -b 0.0.0.0:$OCB_PORT -w 1 'ownchatbot:create_app()' To configure your bot, go to: http://localhost:$OCB_PORT/mgmt?auth=$MGMT_AUTH "