146 lines
4.3 KiB
Bash
146 lines
4.3 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
# Function to handle errors
|
||
|
handle_error() {
|
||
|
echo "Error: $1"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
# Function to handle sudo errors
|
||
|
handle_sudo_error() {
|
||
|
echo -e "\e[31mError: Failed to execute sudo command: $1\e[0m"
|
||
|
exit 1
|
||
|
}
|
||
|
|
||
|
# Function to execute sudo commands with error handling
|
||
|
sudo_execute() {
|
||
|
echo -e "\e[31m$ sudo $@\e[0m"
|
||
|
sudo "$@" || handle_sudo_error "$*"
|
||
|
}
|
||
|
|
||
|
# Function to create .env file with provided content
|
||
|
create_env() {
|
||
|
echo -e "MATRIX_URL = \"$1\"\nMATRIX_USER = \"$2\"\nMATRIX_PASS = \"$3\"" > .env || handle_error "Failed to create .env file"
|
||
|
}
|
||
|
|
||
|
# Function to prompt user for input
|
||
|
prompt_user() {
|
||
|
read -p "$1: " input
|
||
|
echo "$input"
|
||
|
}
|
||
|
|
||
|
# Store current directory
|
||
|
current_dir=$(pwd)
|
||
|
|
||
|
# Setup python virtual environment
|
||
|
python3 -m venv venv
|
||
|
source venv/bin/activate
|
||
|
|
||
|
# Check if simplematrixbotlib directory already exists
|
||
|
if [ -d "simplematrixbotlib" ] && [ "$(ls -A simplematrixbotlib)" ]; then
|
||
|
echo "simplematrixbotlib directory already exists."
|
||
|
else
|
||
|
# Clone the simplematrixbotlib repository
|
||
|
git clone https://codeberg.org/imbev/simplematrixbotlib.git || handle_error "Failed to clone simplematrixbotlib repository"
|
||
|
fi
|
||
|
|
||
|
# Copy the patch file to the simplematrixbotlib directory
|
||
|
cp api.py.patch "$current_dir/simplematrixbotlib/" || handle_error "Failed to copy patch file"
|
||
|
|
||
|
# Change directory to simplematrixbotlib
|
||
|
cd "$current_dir/simplematrixbotlib/" || handle_error "Failed to change directory to simplematrixbotlib"
|
||
|
|
||
|
# Apply the patch
|
||
|
git apply api.py.patch || handle_error "Failed to apply patch"
|
||
|
|
||
|
# Install simplematrixbotlib
|
||
|
pip install . || handle_error "Failed to install simplematrixbotlib"
|
||
|
|
||
|
# Change back to the original directory
|
||
|
cd "$current_dir"
|
||
|
|
||
|
# Install requirements
|
||
|
pip install -r requirements.txt || handle_error "Failed to install requirements"
|
||
|
|
||
|
# Prompt for Matrix homeserver
|
||
|
read -p "Do you want to use the default homeserver https://matrix.org? (Y/n): " use_default_hs
|
||
|
if [[ $use_default_hs =~ ^[Nn]$ ]]; then
|
||
|
homeserver=$(prompt_user "Enter Matrix homeserver URL (e.g., example.com): ")
|
||
|
homeserver="https://$homeserver"
|
||
|
else
|
||
|
homeserver="https://matrix.org"
|
||
|
fi
|
||
|
|
||
|
# Prompt for username
|
||
|
username=$(prompt_user "Enter Matrix username: ")
|
||
|
|
||
|
# Prompt for password
|
||
|
password=$(prompt_user "Enter Matrix password: ")
|
||
|
|
||
|
# Create .env file
|
||
|
create_env "$homeserver" "$username" "$password"
|
||
|
|
||
|
# Print ASCII art
|
||
|
cat << "EOF"
|
||
|
_____ ____ _
|
||
|
| ___| _ _ __ __ _ _ _ _ _ | __ ) ___ | |_
|
||
|
| |_ | | | | '_ \ / _\` | | | | | | | | _ \ / _ \| __|
|
||
|
| _|| |_| | | | | (_| | |_| | |_| | | |_) | (_) | |_
|
||
|
|_| \__,_|_| |_|\__, |\__,_|\__, | |____/ \___/ \__|
|
||
|
|___/ |___/
|
||
|
By HB (@hashborgir@mozilla.org)
|
||
|
--------------------------------------------------------
|
||
|
EOF
|
||
|
|
||
|
# Echo setup completion message
|
||
|
echo "Setting up funguy bot..."
|
||
|
echo "Setting up systemd service..."
|
||
|
|
||
|
working_directory=$current_dir
|
||
|
|
||
|
# Prompt for user and group
|
||
|
user=$(prompt_user "Enter user")
|
||
|
same_group=$(prompt_user "Is group same as user? (Y/n): ")
|
||
|
if [[ $same_group =~ ^[Yy]$ ]]; then
|
||
|
group=$user
|
||
|
else
|
||
|
group=$(prompt_user "Enter group")
|
||
|
fi
|
||
|
|
||
|
# Create systemd service file
|
||
|
cat <<EOF > funguybot.service
|
||
|
[Unit]
|
||
|
Description=Funguy Bot Service
|
||
|
After=network.target
|
||
|
|
||
|
[Service]
|
||
|
Type=simple
|
||
|
User=$user
|
||
|
Group=$group
|
||
|
WorkingDirectory=$working_directory
|
||
|
ExecStart=$working_directory/start-funguy.sh
|
||
|
Restart=on-failure
|
||
|
StandardOutput=syslog
|
||
|
StandardError=syslog
|
||
|
SyslogIdentifier=funguybot
|
||
|
|
||
|
[Install]
|
||
|
WantedBy=multi-user.target
|
||
|
EOF
|
||
|
|
||
|
# Copy systemd service file
|
||
|
sudo_execute cp funguybot.service /etc/systemd/system/ || handle_sudo_error "Failed to copy systemd service file"
|
||
|
|
||
|
# Enable and start the service
|
||
|
sudo_execute systemctl daemon-reload || handle_sudo_error "Failed to reload systemd daemon"
|
||
|
sudo_execute systemctl enable funguybot || handle_sudo_error "Failed to enable funguybot service"
|
||
|
sudo_execute systemctl start funguybot || handle_sudo_error "Failed to start funguybot service"
|
||
|
|
||
|
echo "Funguy bot has been successfully installed and the service has been enabled."
|
||
|
echo "Before starting the service, make sure to edit the .env file and add your bot account's homeserver URL, username, and password."
|
||
|
echo ""
|
||
|
echo "Once done, start the service by running the following command:"
|
||
|
echo ""
|
||
|
echo ""
|
||
|
echo "sudo systemctl start funguybot"
|