diff --git a/README.md b/README.md
index 058f379..208b1be 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1 @@
-# Pandabot
-
+# Pandabot
\ No newline at end of file
diff --git a/bin/setuptg.php b/bin/setuptg.php
index b4b482c..503d1b1 100755
--- a/bin/setuptg.php
+++ b/bin/setuptg.php
@@ -5,6 +5,6 @@
date_default_timezone_set('Europe/Berlin');
$date=gmdate("Y-m-d H:i:s", time()+date("Z"));
- $sendMsg="madeline as client registered : ".$date."
";
+ $sendMsg="Madeline as client has been registered : ".$date."
";
$out=made("messages", "sendMessage", array("peer" => $globalsettings["bot"]["pandaownerid"], "message" => $sendMsg, "parse_mode" => "html"));
// print_r($out);
\ No newline at end of file
diff --git a/bot.sh b/bot.sh
index 0dac404..9947f98 100755
--- a/bot.sh
+++ b/bot.sh
@@ -1,4 +1,129 @@
-#!/bin/bash
+#!/bin#!/bin/bash
+
+# Get the current timestamp for logging or unique identifier
+startDate=$(date "+%Y%m%d%H%M%S")
+
+# Log file for all actions
+log_file="/var/log/pandabot.log"
+
+# Function to log messages to both console and log file with timestamp
+log_message() {
+ local message=$1
+ local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
+
+ # Log to console
+ echo "$timestamp - $message"
+
+ # Log to file
+ echo "$timestamp - $message" >> "$log_file"
+}
+
+# Source external bot configuration and utility functions
+. inc/sh/inc.bot.sh
+
+# Define various bot service paths and session files
+bot_root=$(pwd)
+bot_pid="${bot_root}/log/tmp/pandabot.pid"
+madeline_session="${bot_root}/session.madeline"
+madeline_pid=$(ps -ef | grep "${madeline_session}" | grep -v grep | awk '{print $2}')
+apache_pid="${bot_root}/log/tmp/httpd.pid"
+fpm_pid="${bot_root}/log/tmp/php-fpm.pid"
+
+# Configuration file for bot and services
+pandabotconf="${bot_root}/conf/pandabot.conf"
+services="bot|web|apache|fpm|madeline|"
+
+# Check if pandabot.conf exists before attempting to read
+if [ ! -f "$pandabotconf" ]; then
+ log_message "ERROR: pandabot.conf not found at $pandabotconf"
+ exit 2
+fi
+
+# Get the wait timer from the configuration file
+waittimer=$(getpandabotconf "${pandabotconf}" "botsh_restart_wait_timer")
+if [ $? -ne 0 ]; then
+ log_message "ERROR: botsh_restart_wait_timer not configured @ ${pandabotconf}"
+ exit 2
+fi
+
+# Check if madeline session file exists before trying to use it
+if [ ! -f "$madeline_session" ]; then
+ log_message "ERROR: Madeline session file not found at $madeline_session"
+ exit 2
+fi
+
+# Ensure that at least one argument is provided
+if [ $# -eq 0 ]; then
+ bot_sh_usage
+ exit 1
+fi
+
+# Process command line arguments and options
+OPTIND=2
+while getopts "s:" arg; do
+ case "${arg}" in
+ s) service=${OPTARG} ;; # Set the service if -s option is used
+ esac
+done
+
+# Check if the specified service is valid
+if [ ! -z "${service}" ]; then
+ out=$(checkservice "${service}" "${services}")
+ if [ $? -ne 0 ]; then
+ log_message "ERROR: Service '${service}' not found in the list: ${services}"
+ bot_sh_usage
+ exit 4
+ fi
+else
+ service="all" # Default to all services if no specific service is given
+fi
+
+# Main logic for managing services based on the command
+case "$1" in
+ "start")
+ start_service "${service}"
+ log_message "Started service: ${service}"
+ ;;
+
+ "stop")
+ stop_service "${service}"
+ log_message "Stopped service: ${service}"
+ ;;
+
+ "restart")
+ stop_service "${service}"
+ log_message "Stopped service: ${service}"
+ echo "Wait ${waittimer} seconds"
+
+ # Validate waittimer (ensure it's a positive integer)
+ if ! [[ "${waittimer}" =~ ^[0-9]+$ ]] || [ "${waittimer}" -le 0 ]; then
+ log_message "ERROR: Invalid waittimer value in ${pandabotconf}. Must be a positive integer."
+ exit 3
+ fi
+ sleep "${waittimer}"
+ start_service "${service}"
+ log_message "Restarted service: ${service}"
+ ;;
+
+ "setuptg")
+ echo "Setting up TG for service: ${service}"
+ log_message "Setting up TG for service: ${service}"
+ bin/setuptg.php
+ ;;
+
+ "status")
+ status_service "${service}"
+ log_message "Checked status of service: ${service}"
+ ;;
+
+ *)
+ # Default case: show usage if no valid argument is given
+ bot_sh_usage
+ log_message "ERROR: Invalid argument provided"
+ ;;
+esac
+
+/bash
startDate=`date "+%Y%m%d%H%M%S"`;
. inc/sh/inc.bot.sh
diff --git a/conf/channels.conf b/conf/channels.conf
index 2e047fb..3ed7d43 100755
--- a/conf/channels.conf
+++ b/conf/channels.conf
@@ -1,8 +1,8 @@
-# attention: bot rewrite hes own conf file in human readable form
-# all "to:" channels automatical r mode and will be readed
-# all channels without "to:" will be still readed and saved in database
-# from and section names must be unique, otherwise, the last find will be used
-# example section config:
+# Attention: bot rewrite hes own conf file in human readable form
+# All "to:" channels automatical r mode and will be read.
+# All channels without "to:" will be still read and saved in the database
+# From and section names must be unique, otherwise, the last find will be used
+# Example section config:
# -----------------------
#
# '':
diff --git a/inc/sh/inc.bot.sh b/inc/sh/inc.bot.sh
index b51169b..36d0596 100755
--- a/inc/sh/inc.bot.sh
+++ b/inc/sh/inc.bot.sh
@@ -1,263 +1,342 @@
+# Check if process ID is valid
function checkpid() {
- if [ -f ${1} ]; then
- out=`cat ${1}`
- [ -z "`ps -ef | awk -v pid=${out} '{if ($2 == pid) {print $2}}'`" ] && exit 1
- else
- exit 1
- fi
- echo "${out}"
+ if [ -f "$1" ]; then
+ out=$(cat "$1")
+ if [ -z "$(ps -ef | awk -v pid="$out" '{if ($2 == pid) {print $2}}')" ]; then
+ exit 1
+ fi
+ else
+ exit 1
+ fi
+ echo "$out"
}
+# Kill a service
function kill_service() {
- if [ ${1} -ne 0 ]; then
- echo "${2} not running"
- else
- kill ${4} ${3} > /dev/null 2>&1
- fi
+ if [ "$1" -ne 0 ]; then
+ echo "$2 not running"
+ else
+ kill "$4" "$3" > /dev/null 2>&1
+ fi
}
+# Remove Apache built-in modules
function removeapachebuildinmodules() {
- ${2} -l | grep -v "Compiled in modules" | sed "s|\.c$|.so|g" | while read -r line; do
- sed -i "/^LoadModule.*\/${line}$/d" ${1}
- done
+ "$2" -l | grep -v "Compiled in modules" | sed "s|\.c$|.so|g" | while read -r line; do
+ sed -i "/^LoadModule.*\/${line}$/d" "$1"
+ done
}
+# Get PandaBot configuration from YAML
function getpandabotconf() {
- out=`echo "${1}@@${2}" | php -R '$in=explode("@@", $argn); if (array_key_exists($in[1], yaml_parse_file($in[0]))) { echo yaml_parse_file($in[0])[$in[1]];} else exit(1);'`
- [ $? -ne 0 ] && exit 1
- echo "${out}"
+ out=$(echo "$1@@$2" | php -R '
+ $in=explode("@@", $argn);
+ $config = yaml_parse_file($in[0]);
+ if (array_key_exists($in[1], $config)) {
+ echo $config[$in[1]];
+ } else {
+ exit(1);
+ }
+ ')
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+ echo "$out"
}
+# Get the path of the HTTP daemon (httpd or apache2)
function httpdbin() {
- out=`which httpd 2> /dev/null`
- if [ $? -ne 0 ]; then
- out=`which apache2 2> /dev/null`
- if [ $? -ne 0 ]; then
- exit 1
- fi
- fi
- echo "${out}"
+ out=$(which httpd 2> /dev/null)
+ if [ $? -ne 0 ]; then
+ out=$(which apache2 2> /dev/null)
+ if [ $? -ne 0 ]; then
+ exit 1
+ fi
+ fi
+ echo "$out"
}
+# Find PHP-FPM binary
function phpfpmbin() {
- out=`find /usr/sbin/ -name php-fpm* 2> /dev/null | head -1`
- [ -z "${out}" ] && exit 1
- echo "${out}"
+ out=$(find /usr/sbin/ -name php-fpm* 2> /dev/null | head -1)
+ if [ -z "$out" ]; then
+ exit 1
+ fi
+ echo "$out"
}
+# Find Apache mod_mpm_event.so path
function apachemod() {
- out=`find /usr -name "mod_mpm_event.so" 2> /dev/null | awk -F / '{for (i=1;i /dev/null | awk -F / '{for (i=1;i ${apache_serverroot}/conf/php-fpm.conf
+ cat "${apache_serverroot}/conf/templates/template.php-fpm.conf" | \
+ sed "s|@@apache_serverroot@@|$apache_serverroot|g" \
+ | sed "s|@@apache_user@@|$apache_user|g" \
+ | sed "s|@@apache_group@@|$apache_group|g" \
+ | sed "s|@@apache_port@@|$apache_port|g" \
+ > "${apache_serverroot}/conf/php-fpm.conf"
- ${php_fpm_bin} -y ${apache_serverroot}/conf/php-fpm.conf 2> /dev/null
- if [ $? -ne 0 ]; then
- echo "php-fpm already running"
- out=`checkpid "${fpm_pid}"`
- kill ${out} > /dev/null 2>&1
- ${php_fpm_bin} -y ${apache_serverroot}/conf/php-fpm.conf 2> /dev/null
- echo "php-fpm restarted"
- else
- echo "php-fpm started"
- fi # if [ $? -ne 0 ]; then
+ "$php_fpm_bin" -y "${apache_serverroot}/conf/php-fpm.conf" 2> /dev/null
+ if [ $? -ne 0 ]; then
+ echo "php-fpm already running"
+ out=$(checkpid "$fpm_pid")
+ kill "$out" > /dev/null 2>&1
+ "$php_fpm_bin" -y "${apache_serverroot}/conf/php-fpm.conf" 2> /dev/null
+ echo "php-fpm restarted"
+ else
+ echo "php-fpm started"
+ fi
}
+# Start Apache service
function start_apache() {
- prepare_web
- apachebin=`httpdbin`
- [ $? -ne 0 ] && echo "ERR: apache installation not found" && exit 1
+ prepare_web
+ apachebin=$(httpdbin)
+
+ if [ $? -ne 0 ]; then
+ echo "ERR: apache installation not found"
+ exit 1
+ fi
- apache_modules=`apachemod`
- [ $? -ne 0 ] && echo "ERR: no apache modules pfad found" && exit 1
+ apache_modules=$(apachemod)
+
+ if [ $? -ne 0 ]; then
+ echo "ERR: no apache modules path found"
+ exit 1
+ fi
- rm -rf ${apache_serverroot}/log/access_log > /dev/null 2>&1 # clear access_log file...
+ rm -rf "${apache_serverroot}/log/access_log" > /dev/null 2>&1 # clear access_log file...
- apache_pid=${apache_serverroot}/log/tmp/httpd.pid
- apache_documentroot="${apache_serverroot}/pb-web"
+ apache_pid="${apache_serverroot}/log/tmp/httpd.pid"
+ apache_documentroot="${apache_serverroot}/pb-web"
- cat ${apache_serverroot}/conf/templates/template.httpd.conf \
- | sed "s|@@apache_modules@@|${apache_modules}|g" \
- | sed "s|@@apache_serverroot@@|${apache_serverroot}|g" \
- | sed "s|@@apache_user@@|${apache_user}|g" \
- | sed "s|@@apache_group@@|${apache_group}|g" \
- | sed "s|@@apache_port@@|${apache_port}|g" \
- | sed "s|@@apache_documentroot@@|${apache_documentroot}|g" \
- | sed "s|@@apache_pid@@|${apache_pid}|g" \
- > ${apache_serverroot}/conf/httpd.conf
+ cat "${apache_serverroot}/conf/templates/template.httpd.conf" | \
+ sed "s|@@apache_modules@@|$apache_modules|g" \
+ | sed "s|@@apache_serverroot@@|$apache_serverroot|g" \
+ | sed "s|@@apache_user@@|$apache_user|g" \
+ | sed "s|@@apache_group@@|$apache_group|g" \
+ | sed "s|@@apache_port@@|$apache_port|g" \
+ | sed "s|@@apache_documentroot@@|$apache_documentroot|g" \
+ | sed "s|@@apache_pid@@|$apache_pid|g" \
+ > "${apache_serverroot}/conf/httpd.conf"
- removeapachebuildinmodules "${apache_serverroot}/conf/httpd.conf" "${apachebin}"
+ removeapachebuildinmodules "${apache_serverroot}/conf/httpd.conf" "$apachebin"
- chmod -R a+rwx ${apache_documentroot} 2>&1 /dev/null
- chmod -R a+rwx ${apache_serverroot}/log 2>&1 /dev/null
-
- ${apachebin} -f ${apache_serverroot}/conf/httpd.conf -k restart > /dev/null 2>&1
- if [ $? -eq 0 ]; then
- echo "apache (re)started @ port: ${apache_port}"
- else
- echo "ERR: apache not started, something is wrong..."
- fi # if [ $? -eq 0 ]; then
-}
+ chmod -R a+rwx "$apache_documentroot" 2>&1 /dev/null
+ chmod -R a+rwx "${apache_serverroot}/log" 2>&1 /dev/null
+ "$apachebin" -f "${apache_serverroot}/conf/httpd.conf" -k restart > /dev/null 2>&1
+ if [ $? -eq 0 ]; then
+ echo "Apache (re)started @ port: $apache_port"
+ else
+ echo "ERR: Apache not started, something is wrong..."
+ fi
+}
+
+# Start the bot
function start_bot() {
- out=`checkpid "${bot_pid}"`
- [ ! -z "${out}" ] && echo "bot already running, exit!" && exit 1
+ out=$(checkpid "$bot_pid")
+ if [ -n "$out" ]; then
+ echo "Bot already running, exit!"
+ exit 1
+ fi
- cp conf/channels.conf log/conf/${startDate}_channels.conf
- cp conf/pandabot.conf log/conf/${startDate}_pandabot.conf
+ cp conf/channels.conf "log/conf/${startDate}_channels.conf"
+ cp conf/pandabot.conf "log/conf/${startDate}_pandabot.conf"
- ls -r1 log/*_pandabot.app.log | awk 'begin {c=0;} {c++; if (c>=10) {print $0}}' | xargs -n1 rm -f # logrotation? function?
- ls -r1 log/conf/*pandabot.conf | awk 'begin {c=0;} {c++; if (c>=10) {print $0}}' | xargs -n1 rm -f
- ls -r1 log/conf/*channels.conf | awk 'begin {c=0;} {c++; if (c>=10) {print $0}}' | xargs -n1 rm -f
+ # Clean up old log files
+ ls -r1 log/*_pandabot.app.log | awk 'NR >= 10' | xargs -n1 rm -f
+ ls -r1 log/conf/*pandabot.conf | awk 'NR >= 10' | xargs -n1 rm -f
+ ls -r1 log/conf/*channels.conf | awk 'NR >= 10' | xargs -n1 rm -f
- if [ `id -u` -eq 0 ]; then
- chown -R nobody *
- su nobody -c "nohup bin/pandabot.php 2>&1 | tee log.pandabot.log 2>&1 | tee log/${startDate}_pandabot.app.log > /dev/null &"
- if [ $? -ne 0 ]; then
- echo "change user nobody from nologin to bash"
- usermod -s /usr/bin/bash nobody
- su nobody -c "nohup bin/pandabot.php 2>&1 | tee log.pandabot.log 2>&1 | tee log/${startDate}_pandabot.app.log > /dev/null &"
- [ $? -ne 0 ] && "ERR: change user nobody manually from /sbin/nologin to /bin/bash @ /etc/passwd, or start bot in usercontext" && exit 1
- fi # if [ $? -ne 0 ]; then
- else
- nohup bin/pandabot.php 2>&1 | tee log.pandabot.log 2>&1 | tee log/${startDate}_pandabot.app.log > /dev/null &
- fi # if [ `id -u` -eq 0 ]; then
+ if [ "$(id -u)" -eq 0 ]; then
+ chown -R nobody *
+ su nobody -c "nohup bin/pandabot.php 2>&1 | tee log.pandabot.log 2>&1 | tee log/${startDate}_pandabot.app.log > /dev/null &"
+ if [ $? -ne 0 ]; then
+ echo "Change user nobody from nologin to bash"
+ usermod -s /usr/bin/bash nobody
+ su nobody -c "nohup bin/pandabot.php 2>&1 | tee log.pandabot.log 2>&1 | tee log/${startDate}_pandabot.app.log > /dev/null &"
+ if [ $? -ne 0 ]; then
+ echo "ERR: Change user nobody manually from /sbin/nologin to /bin/bash @ /etc/passwd, or start bot in user context"
+ exit 1
+ fi
+ fi
+ else
+ nohup bin/pandabot.php 2>&1 | tee log.pandabot.log 2>&1 | tee log/${startDate}_pandabot.app.log > /dev/null &
+ fi
}
+# Start a specific service
function start_service() {
- echo "start ${1}"
- case "${1}" in
- "bot")
- start_bot
- ;;
- "apache")
- start_apache
- sleep 2
- status_service "${1}"
- ;;
- "fpm")
- start_fpm
- ;;
- "web")
- start_service "apache"
- start_service "fpm"
- ;;
- "all")
- start_service "bot"
- start_service "web"
- ;;
- esac
+ echo "Start $1"
+ case "$1" in
+ "bot") start_bot ;;
+ "apache")
+ start_apache
+ sleep 2
+ status_service "apache"
+ ;;
+ "fpm") start_fpm ;;
+ "web")
+ start_service "apache"
+ start_service "fpm"
+ ;;
+ "all")
+ start_service "bot"
+ start_service "web"
+ ;;
+ esac
}
+# Stop a specific service
function stop_service() {
- echo "stop ${1}"
- case "${1}" in
- "bot")
- out=`checkpid "${bot_pid}"`
- kill_service "${?}" "${1}" "${out}" "-9"
- ;;
- "apache")
- out=`checkpid "${apache_pid}"`
- kill_service "${?}" "${1}" "${out}" ""
- ;;
- "fpm")
- out=`checkpid "${fpm_pid}"`
- kill_service "${?}" "${1}" "${out}" ""
- ;;
- "madeline")
- kill_service "0" "${1}" "${madeline_pid}" "-9"
- ;;
- "web")
- stop_service "apache"
- stop_service "fpm"
- ;;
- "all")
- stop_service "web"
- stop_service "bot"
- stop_service "madeline"
- ;;
- esac
+ echo "Stop $1"
+ case "$1" in
+ "bot")
+ out=$(checkpid "$bot_pid")
+ kill_service "$?" "$1" "$out" "-9"
+ ;;
+ "apache")
+ out=$(checkpid "$apache_pid")
+ kill_service "$?" "$1" "$out" ""
+ ;;
+ "fpm")
+ out=$(checkpid "$fpm_pid")
+ kill_service "$?" "$1" "$out" ""
+ ;;
+ "madeline")
+ kill_service "0" "$1" "$madeline_pid" "-9"
+ ;;
+ "web")
+ stop_service "apache"
+ stop_service "fpm"
+ ;;
+ "all")
+ stop_service "web"
+ stop_service "bot"
+ stop_service "madeline"
+ ;;
+ esac
}
-status_service() {
- case "${1}" in
- "bot")
- out=`checkpid "${bot_pid}"`
- if [ ${?} -eq 0 ]; then echo "${1} running"; else echo "${1} not running"; fi
- ;;
- "apache")
- out=`checkpid "${apache_pid}"`
- if [ ${?} -eq 0 ]; then
- apache_ip_running=`ip -br address | grep -iwv lo | awk '{print $3}' | awk -F / '{print $1}'`
- apache_port=`getpandabotconf "${pandabotconf}" "apache_port"`
- echo "${1} running on: http://${apache_ip_running}:${apache_port}/";
- else
- echo "${1} not running"
- fi
- ;;
- "fpm")
- out=`checkpid "${fpm_pid}"`
- if [ ${?} -eq 0 ]; then echo "${1} running"; else echo "${1} not running"; fi
- ;;
- "madeline") ## grummel
- if [ ${?} -eq 0 ]; then echo "${1} running"; else echo "${1} not running"; fi
- ;;
- "web")
- echo "status ${1}"
- status_service "apache"
- status_service "fpm"
- ;;
- "all")
- echo "status ${1}"
- status_service "web"
- status_service "bot"
- status_service "madeline"
- ;;
- esac
+# Get the status of a service
+function status_service() {
+ case "$1" in
+ "bot")
+ out=$(checkpid "$bot_pid")
+ if [ $? -eq 0 ]; then
+ echo "$1 running"
+ else
+ echo "$1 not running"
+ fi
+ ;;
+ "apache")
+ out=$(checkpid "$apache_pid")
+ if [ $? -eq 0 ]; then
+ apache_ip_running=$(ip -br address | grep -iwv lo | awk '{print $3}' | awk -F / '{print $1}')
+ apache_port=$(getpandabotconf "$pandabotconf" "apache_port")
+ echo "$1 running on: http://$apache_ip_running:$apache_port/"
+ else
+ echo "$1 not running"
+ fi
+ ;;
+ "fpm")
+ out=$(checkpid "$fpm_pid")
+ if [ $? -eq 0 ]; then
+ echo "$1 running"
+ else
+ echo "$1 not running"
+ fi
+ ;;
+ "madeline")
+ if [ $? -eq 0 ]; then
+ echo "$1 running"
+ else
+ echo "$1 not running"
+ fi
+ ;;
+ "web")
+ echo "Status $1"
+ status_service "apache"
+ status_service "fpm"
+ ;;
+ "all")
+ echo "Status $1"
+ status_service "web"
+ status_service "bot"
+ status_service "madeline"
+ ;;
+ esac
}
+# Bot script usage guide
function bot_sh_usage() {
-echo "usage:
+ echo "Usage:
./bot.sh start
./bot.sh stop
./bot.sh restart
@@ -269,7 +348,7 @@ echo "usage:
./bot.sh stop -s [bot|web]
./bot.sh restart -s [bot|web]
./bot.sh status -s [bot|web]
-eg.
+Example:
./bot.sh restart -s bot
./bot.sh restart -s web
"
diff --git a/pb-web/index.html b/pb-web/index.html
index 81e67ff..cafbddc 100755
--- a/pb-web/index.html
+++ b/pb-web/index.html
@@ -2,7 +2,7 @@
- pandabot
+ Pandabot
diff --git a/pb-web/js/pandabot.js b/pb-web/js/pandabot.js
index 2a4eb80..200c18e 100755
--- a/pb-web/js/pandabot.js
+++ b/pb-web/js/pandabot.js
@@ -1,5 +1,5 @@
- setInterval(readLogFile, 4000);
+ setInterval(readLogFile, 4000);
setInterval(stats, 15000);
setInterval(queuestats, 2000);
window.onload = start;
@@ -20,7 +20,7 @@ function gettitle() {
function start() {
gettitle();
- $(".fulllogbuttonhide" ).hide();
+ $(".fulllogbuttonhide" ).hide();
$(".fulllog" ).hide();
$(".editout" ).hide();
$(".botcmdout" ).hide();
@@ -131,12 +131,12 @@ function sortchannels(option, cmd) { // hmmm
});
$(function(){
- $("#floghide").click(function() {
+ $("#floghide").click(function() {
$( ".fulllogbutton" ).show();
$( "#botcmdid" ).show();
$( ".fulllogbuttonhide" ).hide();
$( ".fulllog" ).empty();
- $( ".viewcontainer" ).show();
+ $( ".viewcontainer" ).show();
$( ".viewborder" ).show();
$( ".fulllog" ).hide();
$(".confmain").show();
@@ -213,12 +213,12 @@ function botcmd(option, cmd) {
function botcmdokay() {
if ($(".mainfade").css("opacity") == 1) {
- $(".mainfade").fadeTo(1000, 0.05);
- $( ".botcmdout" ).fadeTo(500, 1);
+ $(".mainfade").fadeTo(1000, 0.05);
+ $( ".botcmdout" ).fadeTo(500, 1);
}
if ($(".mainfade").css("opacity") == 0.05) {
- $(".mainfade").fadeTo(1000, 1);
- $( ".botcmdout" ).hide();
+ $(".mainfade").fadeTo(1000, 1);
+ $( ".botcmdout" ).hide();
}
$("#botcmdid").attr('disabled', false);
$("#flog").attr('disabled', false);
@@ -231,7 +231,7 @@ function botcmdokay() {
});
$(function(){
- $("#editokaybutton").click(function() {
+ $("#editokaybutton").click(function() {
editdone();
});
});
diff --git a/prepare_centos9.sh b/prepare_centos9.sh
deleted file mode 100755
index c17ef66..0000000
--- a/prepare_centos9.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-[ `id -u` -ne 0 ] && echo "ERR: must be run as: root" && exit 1
-[ ! -f /etc/centos-release ] && echo "ERR: works only on centos" && exit 1
-
-dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y
-dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
-dnf module install php:remi-8.3 -y
-
-yum install net-tools postgresql postgresql-server httpd php-fpm -y
-yum install php-pecl-yaml php-pgsql php-pdo -y
-
-/usr/bin/postgresql-setup --initdb
-cd /var/lib/pgsql/data
-cat pg_hba.conf | sed 's|host all all 127.0.0.1/32 ident|host all all 0.0.0.0/0 trust|g' > pg_hba.conf1
-cp pg_hba.conf1 pg_hba.conf
-rm -rf pg_hba.conf1
-
-systemctl restart postgresql
-
-su - postgres -c 'echo "CREATE DATABASE pandabot;" | psql'
-
-printf "\n------------------------- --- -- - -\n"
-echo "edit conf/pandabot.conf && conf/channels.conf"
-echo "dbname: pandabot"
-echo "dbhost: `ip -br address | grep -iwv lo | awk '{print $3}' | awk -F / '{print $1}'`"
-echo "dbport: 5432"
-echo "dbuser: postgres"
-echo "dbpass: false"
-printf "\n"
-echo "setup tg session with ./bot.sh setuptg"
-echo "start bot with ./bot.sh start"
-echo "stop bot with ./bot.sh stop"
-echo "------------------------- --- -- - -"
diff --git a/prepare_server/Prepare_RHEL-Debian.sh b/prepare_server/Prepare_RHEL-Debian.sh
new file mode 100644
index 0000000..64e585f
--- /dev/null
+++ b/prepare_server/Prepare_RHEL-Debian.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+
+# Ensure the script is run as root
+[ "$(id -u)" -ne 0 ] && echo "ERR: must be run as: root" && exit 1
+
+# Detect the operating system
+OS=$(cat /etc/*release | grep -i "centos\|debian" | head -n 1 | awk -F= '{print $2}' | tr -d '[:space:]')
+
+if [[ "$OS" =~ "CentOS" ]]; then
+ PACKAGE_MANAGER="dnf"
+ REPO_INSTALL_CMD="dnf install"
+ PHP_INSTALL_CMD="dnf module install php:remi-8.3 -y"
+elif [[ "$OS" =~ "Debian" ]]; then
+ PACKAGE_MANAGER="apt"
+ REPO_INSTALL_CMD="apt-get install"
+ PHP_INSTALL_CMD="apt-get install php php-cli php-fpm php-pgsql php-yaml php-pdo -y"
+else
+ echo "ERR: Unsupported OS, must be CentOS or Debian."
+ exit 1
+fi
+
+# Install necessary repositories for CentOS or Debian
+if [[ "$OS" =~ "CentOS" ]]; then
+ $REPO_INSTALL_CMD https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y
+ $REPO_INSTALL_CMD https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
+ $PHP_INSTALL_CMD
+elif [[ "$OS" =~ "Debian" ]]; then
+ $REPO_INSTALL_CMD lsb-release wget curl -y
+ # PHP installation is already included in the above command
+fi
+
+# Install required packages (PostgreSQL, Apache, PHP, and utilities)
+$REPO_INSTALL_CMD net-tools postgresql postgresql-server httpd php-fpm -y
+$REPO_INSTALL_CMD php-pecl-yaml php-pgsql php-pdo -y
+
+# Setup PostgreSQL
+if [[ "$OS" =~ "CentOS" ]]; then
+ /usr/bin/postgresql-setup --initdb
+ systemctl enable postgresql
+ systemctl start postgresql
+elif [[ "$OS" =~ "Debian" ]]; then
+ service postgresql start
+fi
+
+# Configure PostgreSQL to allow external connections securely
+cd /var/lib/pgsql/data || exit
+cp pg_hba.conf pg_hba.conf.backup
+
+# Allow connections from any IP (recommended to restrict IP range later)
+sed -i 's|host all all 127.0.0.1/32 ident|host all all 0.0.0.0/0 md5|g' pg_hba.conf
+
+# Restart PostgreSQL to apply changes
+systemctl restart postgresql
+
+# Create the Pandabot database
+su - postgres -c 'psql -c "CREATE DATABASE pandabot;"'
+
+# Display configuration instructions
+echo -e "\n------------------------- --- -- - -"
+echo "Edit conf/pandabot.conf and conf/channels.conf"
+echo "Database settings:"
+echo "dbname: pandabot"
+echo "dbhost: $(hostname -I | awk '{print $1}')"
+echo "dbport: 5432"
+echo "dbuser: postgres"
+echo "dbpass: "
+
+echo -e "\nTo setup the Telegram session, run: ./bot.sh setuptg"
+echo "To start the bot, run: ./bot.sh start"
+echo "To stop the bot, run: ./bot.sh stop"
+echo -e "------------------------- --- -- - -\n"
+
+# Check if firewall is enabled and add necessary rules for PostgreSQL and Apache
+if systemctl is-active --quiet firewalld; then
+ echo "Configuring firewall for PostgreSQL (5432) and HTTP (80/443)"
+ firewall-cmd --zone=public --add-port=5432/tcp --permanent
+ firewall-cmd --zone=public --add-service=http --permanent
+ firewall-cmd --reload
+elif ufw status | grep -q "active"; then
+ echo "Configuring UFW for PostgreSQL (5432) and HTTP (80/443)"
+ ufw allow 5432/tcp
+ ufw allow http
+ ufw allow https
+ ufw reload
+fi
+
+# SELinux setup for CentOS (optional step, recommended to allow postgresql and httpd)
+if [[ "$OS" =~ "CentOS" ]]; then
+ echo "Setting up SELinux to allow PostgreSQL and Apache to work together"
+ setsebool -P httpd_can_network_connect_db 1
+ setsebool -P httpd_can_network_connect 1
+fi
+
+echo "Installation and setup complete."