#!/bin/bash # If the install fails, then print an error and exit. function install_fail() { echo "Installation failed" exit 1 } # This is the help fuction. It helps users withe the options function Help(){ echo "Usage: install.sh [option]" echo "Options:" echo " -h: Show this help message and exit" echo " -d: Install only dependencies" echo " -p: Install only python dependencies (including playwright)" echo " -b: Install just the bot" echo " -l: Install the bot and the python dependencies" } # Options while getopts ":hydpbl" option; do case $option in # -h, prints help message h) Help exit 0;; # -y, assumes yes y) ASSUME_YES=1;; # -d install only dependencies d) DEPS_ONLY=1;; # -p install only python dependencies p) PYTHON_ONLY=1;; b) JUST_BOT=1;; l) BOT_AND_PYTHON=1;; # if a bad argument is given, then throw an error \?) echo "Invalid option: -$OPTARG" >&2 Help exit 1;; :) echo "Option -$OPTARG requires an argument." >&2 Help exit 1;; esac done # Install dependencies for MacOS function install_macos(){ # Check if homebrew is installed if [ ! command -v brew &> /dev/null ]; then echo "Installing Homebrew" # if it's is not installed, then install it in a NONINTERACTIVE way NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" # Check for what arcitecture, so you can place path. if [[ "uname -m" == "x86_64" ]]; then echo "export PATH=/usr/local/bin:$PATH" >> ~/.bash_profile && source ~/.bash_profile fi # If not else # Print that it's already installed echo "Homebrew is already installed" fi # Install the required packages echo "Installing required Packages" brew install python@3.10 tcl-tk python-tk } # Function to install for arch (and other forks like manjaro) function install_arch(){ echo "Installing required packages" sudo pacman -S --needed python3 tk git && python3 -m ensurepip || install_fail } # Function to install for debian (and ubuntu) function install_deb(){ echo "Installing required packages" sudo apt install python3 python3-dev python3-tk python3-pip git || install_fail } # Function to install for fedora (and other forks) function install_fedora(){ echo "Installing required packages" sudo dnf install python3 python3-tkinter python3-pip git python3-devel || install_fail } # Function to install for centos (and other forks based on it) function install_centos(){ echo "Installing required packages" sudo yum install -y python3 || install_fail sudo yum install -y python3-tkinter epel-release python3-pip git || install_fail } function get_the_bot(){ echo "Downloading the bot" git clone https://github.com/elebumm/RedditVideoMakerBot.git } #install python dependencies function install_python_dep(){ # tell the user that the script is going to install the python dependencies echo "Installing python dependencies" # cd into the directory cd RedditVideoMakerBot # install the dependencies pip3 install -r requirements.txt # cd out cd .. } # install playwright function function install_playwright(){ # tell the user that the script is going to install playwright echo "Installing playwright" # cd into the directory where the script is downloaded cd RedditVideoMakerBot # run the install script python3 -m playwright install python3 -m playwright install-deps # give a note printfNote, if these gave any errors, playwright may not be officially supported on your OS, check this issues page for support\nhttps://github.com/microsoft/playwright/issues "Note, if these gave any errors, playwright may not be officially supported on your OS, check this issues page for support\nhttps://github.com/microsoft/playwright/issues\n" if [ -x "$(command -v pacman)" ]; then printf "It seems you are on and Arch based distro.\nTry installing these from the AUR for playwright to run:\nenchant1.6\nicu66\nlibwebp052\n" cd .. } # Install depndencies function install_deps(){ # if the platform is mac, install macos if [ "$(uname)" == "Darwin" ]; then install_macos || install_fail # if pacman is found elif [ -x "$(command -v pacman)" ]; then # install for arch install_arch || install_fail # if apt-get is found elif [ -x "$(command -v apt-get)" ]; then # install fro debian install_deb || install_fail # if dnf is found elif [ -x "$(command -v dnf)" ]; then # install for fedora install_fedora || install_fail # if yum is found elif [ -x "$(command -v yum)" ]; then # install for centos install_centos || install_fail # else else # print an error message and exit printf "Your OS is not supported\n Please install python3, pip3 and git manually\n After that, run the script again with the -pb option to install python and playwright dependencies\n If you want to add support for your OS, please open a pull request on github\n https://github.com/elebumm/RedditVideoMakerBot" exit 1 fi } # Main function function install_main(){ # Print that are installing echo "Installing..." # if -y (assume yes) continue if [[ ASSUME_YES -eq 1 ]]; then echo "Assuming yes" # else, ask if they want to continue else echo "Continue? (y/n)" read answer # if the answer is not yes, then exit if [ "$answer" != "y" ]; then echo "Aborting" exit 1 fi fi # if the -d (only dependencies) options is selected install just the dependencies if [[ DEPS_ONLY -eq 1 ]]; then echo "Installing only dependencies" install_deps elif [[ PYTHON_ONLY -eq 1 ]]; then # if the -p (only python dependencies) options is selected install just the python dependencies and playwright echo "Installing only python dependencies" install_python_dep install_playwright # if the -b (only the bot) options is selected install just the bot elif [[ JUST_BOT -eq 1 ]]; then echo "Installing only the bot" get_the_bot # if the -l (bot and python) options is selected install just the bot and python dependencies elif [[ BOT_AND_PYTHON -eq 1 ]]; then echo "Installing only the bot and python dependencies" get_the_bot install_python_dep # else, install everything else echo "Installing all" install_deps get_the_bot install_python_dep install_playwright fi DIR="./RedditVideoMakerBot" if [ -d "$DIR" ]; then printf "\nThe bot is already installed, want to run it?" # if -y (assume yes) continue if [[ ASSUME_YES -eq 1 ]]; then echo "Assuming yes" # else, ask if they want to continue else echo "Continue? (y/n)" read answer # if the answer is not yes, then exit if [ "$answer" != "y" ]; then echo "Aborting" exit 1 fi fi cd RedditVideoMakerBot python3 main.py fi } # Run the main function install_main