Advertisement
tuvok81

eggdrop config mit Dialog and errors

Jan 10th, 2025
38
0
21 hours
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 30.47 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # === Konfigurations-Assistent für Eggdrop ===
  4. # Dieses Skript erstellt eine neue Konfigurationsdatei basierend auf der Standard-eggdrop.conf.
  5.  
  6. # Beende das Skript bei Fehlern und bei der Verwendung nicht gesetzter Variablen
  7. set -e
  8. set -u
  9.  
  10. # Pfade zur Default-Config (eggdrop.conf) und zur neuen Config
  11. default_config="eggdrop.conf"
  12.  
  13. # Prüfen, ob die Default-Config existiert
  14. if [[ ! -f "$default_config" ]]; then
  15.     echo "Fehler: Default-Config ($default_config) nicht gefunden!"
  16.     exit 1
  17. fi
  18.  
  19. # Temporäre Datei für Server-Liste
  20. tempfile_server=$(mktemp)
  21.  
  22. # Hilfsfunktion zum Escapen für sed
  23. function escape_sed() {
  24.     echo "$1" | sed -e 's/[\/&]/\\&/g'
  25. }
  26.  
  27. # Prüft IPv4-Syntax (4 Oktette, 0–255)
  28. function isValidIPv4() {
  29.     local ip="$1"
  30.     [[ "$ip" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] || return 1
  31.     local IFS='.'
  32.     read -ra parts <<< "$ip"
  33.     for part in "${parts[@]}"; do
  34.         if (( part < 0 || part > 255 )); then
  35.             return 1
  36.         fi
  37.     done
  38.     return 0
  39. }
  40.  
  41. # Prüft starre IPv6-Syntax (8 Blöcke à 1-4 Hex in [0-9A-Fa-f])
  42. function isValidIPv6Strict() {
  43.     local ip="$1"
  44.     [[ "$ip" =~ ^([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4}$ ]] || return 1
  45.     return 0
  46. }
  47.  
  48. # Dialog-Menü mit „Zurück“
  49. function dialog_with_back() {
  50.     local title="$1"
  51.     local message="$2"
  52.     shift 2
  53.     local choices=("$@")
  54.  
  55.     while true; do
  56.         local result
  57.         result=$(
  58.             dialog --clear \
  59.                    --backtitle "Konfigurations-Assistent" \
  60.                    --title "$title" \
  61.                    --menu "$message" 15 60 10 \
  62.                    "${choices[@]}" \
  63.                    3>&1 1>&2 2>&3
  64.         )
  65.         if [[ $? -eq 1 ]]; then
  66.             # ESC/Abbrechen
  67.             echo "back"
  68.             return
  69.         else
  70.             echo "$result"
  71.             return
  72.         fi
  73.     done
  74. }
  75.  
  76. # Funktion zum Setzen einer exakten Konfigurationszeile
  77. function set_config_line() {
  78.     local key="$1"
  79.     local value="$2"
  80.     local quote="${3:-}"  # Optional: ' oder "
  81.     local config_file="$new_config"
  82.  
  83.     # Präziseres Muster: Zeile beginnt (mit optionalem # und Whitespace), gefolgt von 'set', genauem Schlüssel und dann dem Wert
  84.     sed -i "s|^[#]*[[:space:]]*set[[:space:]]\+$key[[:space:]]\+\".*\"$|set $key ${quote}${value}${quote}|" "$config_file"
  85. }
  86.  
  87. # Funktion zum Einfügen der neuen 'channel add' Zeile an der gleichen Position
  88. function insert_channel_add() {
  89.     local new_channel="$1"
  90.     # Sucht nach der ersten 'channel add' Zeile (kommentiert oder nicht)
  91.     # und ersetzt die gesamte Zeile mit der neuen 'channel add' Zeile
  92.     if grep -q '^[#]*[[:space:]]*channel add ' "$new_config"; then
  93.         sed -i "0,/^[#]*[[:space:]]*channel add .*/s|^[#]*[[:space:]]*channel add .*|channel add #${new_channel}|" "$new_config"
  94.     else
  95.         # Falls keine 'channel add' Zeile gefunden wurde, füge sie am Ende der Datei hinzu
  96.         echo "channel add #${new_channel}" >> "$new_config"
  97.     fi
  98. }
  99.  
  100. # Funktion zum Einfügen der server add Zeilen nach set default-port
  101. function insert_server_add_after_default_port() {
  102.     local new_server_lines="$1"
  103.     # Find the line number of set default-port
  104.     local line_num
  105.     line_num=$(grep -n '^set default-port' "$new_config" | cut -d':' -f1 | head -n1)
  106.     if [[ -n "$line_num" ]]; then
  107.         # Insert the server add lines after this line
  108.         awk -v n="$line_num" '
  109.        NR==n {print; while(getline line < "-" > "/dev/null") {print "server add " line} next}
  110.        {print}
  111.        ' "$new_config" < <(echo "$new_server_lines") > "${new_config}.tmp"
  112.         mv "${new_config}.tmp" "$new_config"
  113.     else
  114.         # If set default-port not found, append at end
  115.         echo "" >> "$new_config"
  116.         echo "# Benutzerdefinierte Server-Liste:" >> "$new_config"
  117.         while IFS= read -r line; do
  118.             [[ -z "$line" ]] && continue
  119.             echo "server add $line" >> "$new_config"
  120.         done <<< "$server_lines"
  121.     fi
  122. }
  123.  
  124. # Funktion zum Einfügen von ctcp-version nach set ctcp-mode
  125. function insert_ctcp_version() {
  126.     local ctcp_version="$1"
  127.     # Suche nach der ersten Zeile, die mit 'set ctcp-mode' beginnt
  128.     if grep -q '^set ctcp-mode' "$new_config"; then
  129.         # Füge 'set ctcp-version' direkt nach 'set ctcp-mode' ein
  130.         sed -i "/^set ctcp-mode/c\\
  131. &\\
  132. set ctcp-version \"$ctcp_version\"
  133. " "$new_config"
  134.     else
  135.         # Falls 'set ctcp-mode' nicht gefunden wird, füge 'set ctcp-version' am Ende hinzu
  136.         echo "set ctcp-version \"$ctcp_version\"" >> "$new_config"
  137.     fi
  138. }
  139.  
  140. # Funktion zum Einfügen der listen Zeile nach set offset
  141. function insert_listen() {
  142.     local listen_line="$1"
  143.     # Suche nach der Zeile, die mit 'set offset' beginnt
  144.     if grep -q '^set offset' "$new_config"; then
  145.         # Füge die listen Zeile direkt nach 'set offset' ein
  146.         sed -i "/^set offset/c\\
  147. &\\
  148. $listen_line
  149. " "$new_config"
  150.     else
  151.         # Falls 'set offset' nicht gefunden wird, füge die listen Zeile am Ende hinzu
  152.         echo "$listen_line" >> "$new_config"
  153.     fi
  154. }
  155.  
  156. # Funktion zum Setzen von addlang
  157. function set_addlang() {
  158.     local lang="$1"
  159.     if grep -q '^[#]*[[:space:]]*addlang ' "$new_config"; then
  160.         # Ersetze die bestehende addlang Zeile mit der neuen, nicht kommentiert
  161.         sed -i "s|^[#]*[[:space:]]*addlang .*|addlang \"$lang\"|" "$new_config"
  162.     else
  163.         # Falls keine addlang Zeile gefunden wird, füge sie am Ende hinzu
  164.         echo "addlang \"$lang\"" >> "$new_config"
  165.     fi
  166. }
  167.  
  168. # Hauptkonfigurationsfunktion
  169. function configure() {
  170.     local step=1
  171.  
  172.     # Variablen aus den Dialogen
  173.     local username=""
  174.     local admin=""
  175.     local owners=""
  176.     local network_choice=""
  177.     local net_type_choice=""
  178.     local realname_value=""
  179.     local tz_name="CET"
  180.     local tz_offset="-1"
  181.     local listen_port="3333"
  182.     local language="english"
  183.     local prefer_ipv6="0"
  184.     local vhost4_value=""
  185.     local vhost6_value=""
  186.     local channel_name=""  # Einzelner Kanal
  187.     local default_port="6667"
  188.     local server_lines=""
  189.     local nick_len="15"
  190.     local ident_method="0"
  191.     local ssl_ciphers="ALL"  # Standardwert für ssl-ciphers
  192.  
  193.     # Extrahiere den bestehenden Kanal aus der Default-Konfiguration
  194.     existing_channel=$(grep '^[#]*[[:space:]]*channel add ' "$default_config" | head -n1 | awk '{print $3}')
  195.     # Entferne führende '#' falls vorhanden
  196.     existing_channel="${existing_channel#\#}"
  197.  
  198.     while true; do
  199.         case $step in
  200.             ##################################################################
  201.             # 1) Username
  202.             ##################################################################
  203.             1)
  204.                 username=$(dialog --inputbox "Geben Sie den Benutzernamen ein:" 8 50 "lamest" 3>&1 1>&2 2>&3)
  205.                 [[ $? -eq 1 ]] && continue  # ESC => erneut
  206.                 step=2
  207.                 ;;
  208.             ##################################################################
  209.             # 2) Admin
  210.             ##################################################################
  211.             2)
  212.                 admin=$(dialog --inputbox "Geben Sie den Admin-Namen ein:" 8 50 "Lamer <email: lamer@lamest.lame.org>" 3>&1 1>&2 2>&3)
  213.                 [[ $? -eq 1 ]] && { step=1; continue; }
  214.                 step=3
  215.                 ;;
  216.             ##################################################################
  217.             # 3) Owner
  218.             ##################################################################
  219.             3)
  220.                 owners=$(dialog --inputbox "Geben Sie den/die Owner-Handle(s) ein (Komma-getrennt):" 8 50 "" 3>&1 1>&2 2>&3)
  221.                 [[ $? -eq 1 ]] && { step=2; continue; }
  222.                 step=4
  223.                 ;;
  224.             ##################################################################
  225.             # 4) Netzwerk (EFnet / IRCnet) => set network
  226.             ##################################################################
  227.             4)
  228.                 local menu_network
  229.                 menu_network=$(dialog_with_back "Wert für 'set network' wählen" "Nur EFnet oder IRCnet verfügbar." \
  230.                     1 "EFnet" \
  231.                     2 "IRCnet"
  232.                 )
  233.                 if [[ "$menu_network" == "back" ]]; then
  234.                     step=3
  235.                     continue
  236.                 fi
  237.                 case "$menu_network" in
  238.                     1) network_choice="EFnet";;
  239.                     2) network_choice="IRCnet";;
  240.                     *) network_choice="";;
  241.                 esac
  242.                 step=5
  243.                 ;;
  244.             ##################################################################
  245.             # 5) net-type (10 Auswahlen)
  246.             ##################################################################
  247.             5)
  248.                 local net_menu
  249.                 net_menu=$(dialog_with_back \
  250.                     "IRC-Netzwerk (net-type)" \
  251.                     "Wählen Sie den net-type:" \
  252.                     1 "EFnet" \
  253.                     2 "IRCnet" \
  254.                     3 "Undernet" \
  255.                     4 "DALnet" \
  256.                     5 "Libera" \
  257.                     6 "freenode" \
  258.                     7 "QuakeNet" \
  259.                     8 "Rizon" \
  260.                     9 "Twitch" \
  261.                     10 "Other"
  262.                 )
  263.                 if [[ "$net_menu" == "back" ]]; then
  264.                     step=4
  265.                     continue
  266.                 fi
  267.                 case "$net_menu" in
  268.                     1) net_type_choice="EFnet";;
  269.                     2) net_type_choice="IRCnet";;
  270.                     3) net_type_choice="Undernet";;
  271.                     4) net_type_choice="DALnet";;
  272.                     5) net_type_choice="Libera";;
  273.                     6) net_type_choice="freenode";;
  274.                     7) net_type_choice="QuakeNet";;
  275.                     8) net_type_choice="Rizon";;
  276.                     9) net_type_choice="Twitch";;
  277.                     10)
  278.                         net_type_choice=$(dialog --inputbox "Bitte Wert für net-type eingeben:" 8 50 "OtherNet" 3>&1 1>&2 2>&3)
  279.                         [[ $? -eq 1 ]] && { step=4; continue; }
  280.                         ;;
  281.                     *) net_type_choice="IRCnet";;
  282.                 esac
  283.                 step=6
  284.                 ;;
  285.             ##################################################################
  286.             # 6) Realname
  287.             ##################################################################
  288.             6)
  289.                 realname_value=$(dialog --inputbox \
  290.                     "Geben Sie den Realnamen an:\n(Standard: '/msg $username hello')" \
  291.                     10 60 \
  292.                     "/msg $username hello" \
  293.                     3>&1 1>&2 2>&3)
  294.                 [[ $? -eq 1 ]] && { step=5; continue; }
  295.                 if [[ -z "$realname_value" ]]; then
  296.                     realname_value="/msg $username hello"
  297.                 fi
  298.                 step=7
  299.                 ;;
  300.             ##################################################################
  301.             # 7) Zeitzone
  302.             ##################################################################
  303.             7)
  304.                 local timezone_choice
  305.                 timezone_choice=$(dialog_with_back \
  306.                     "Zeitzone wählen" \
  307.                     "Wählen Sie die Zeitzone aus:" \
  308.                     1 "CET" \
  309.                     2 "EST" \
  310.                     3 "Systemzeit automatisch erkennen"
  311.                 )
  312.                 if [[ "$timezone_choice" == "back" ]]; then
  313.                     step=6
  314.                     continue
  315.                 fi
  316.                 case "$timezone_choice" in
  317.                     1)
  318.                         tz_name="CET"
  319.                         tz_offset=$(dialog --inputbox "Bitte Offset für CET (z. B. -1):" 8 50 "-1" 3>&1 1>&2 2>&3)
  320.                         [[ -z "$tz_offset" ]] && tz_offset="-1"
  321.                         ;;
  322.                     2)
  323.                         tz_name="EST"
  324.                         tz_offset=$(dialog --inputbox "Bitte Offset für EST (z. B. +5):" 8 50 "+5" 3>&1 1>&2 2>&3)
  325.                         [[ -z "$tz_offset" ]] && tz_offset="+5"
  326.                         ;;
  327.                     3)
  328.                         local local_offset sign hour_str hour
  329.                         local_offset=$(date +%z)
  330.                         sign="${local_offset:0:1}"
  331.                         hour_str="${local_offset:1:2}"
  332.                         hour=$((10#$hour_str))
  333.                         if [[ "$sign" == "+" && ( "$hour" == 1 || "$hour" == 2 ) ]]; then
  334.                             tz_name="CET"
  335.                             tz_offset="-$hour"
  336.                         elif [[ "$sign" == "-" && ( "$hour" == 4 || "$hour" == 5 ) ]]; then
  337.                             tz_name="EST"
  338.                             tz_offset="+$hour"
  339.                         else
  340.                             tz_name="UTC"
  341.                             tz_offset="0"
  342.                         fi
  343.                         ;;
  344.                     *)
  345.                         dialog --msgbox "Ungültige Auswahl." 8 50
  346.                         continue
  347.                         ;;
  348.                 esac
  349.                 step=8
  350.                 ;;
  351.             ##################################################################
  352.             # 8) Listen-Port
  353.             ##################################################################
  354.             8)
  355.                 listen_port=$(dialog --inputbox "Bitte Listen-Port eingeben (nur Zahlen):" 8 50 "3333" 3>&1 1>&2 2>&3)
  356.                 [[ $? -eq 1 ]] && { step=7; continue; }
  357.                 if ! [[ "$listen_port" =~ ^[0-9]+$ ]]; then
  358.                     dialog --msgbox "Fehler: Der Listen-Port muss eine Zahl sein." 8 50
  359.                     continue
  360.                 fi
  361.                 step=9
  362.                 ;;
  363.             ##################################################################
  364.             # 9) Sprache
  365.             ##################################################################
  366.             9)
  367.                 local lang_menu
  368.                 lang_menu=$(dialog_with_back \
  369.                     "Sprache wählen" \
  370.                     "Wählen Sie die Sprache für addlang:" \
  371.                     1 "English" \
  372.                     2 "German"
  373.                 )
  374.                 if [[ "$lang_menu" == "back" ]]; then
  375.                     step=8
  376.                     continue
  377.                 fi
  378.                 case "$lang_menu" in
  379.                     1) language="english";;
  380.                     2) language="german";;
  381.                     *)
  382.                        dialog --msgbox "Ungültige Auswahl." 8 50
  383.                        continue
  384.                        ;;
  385.                 esac
  386.                 step=10
  387.                 ;;
  388.             ##################################################################
  389.             # 10) prefer-ipv6
  390.             ##################################################################
  391.             10)
  392.                 local ipv6res
  393.                 ipv6res=$(dialog_with_back "IPv6-Präferenz" "IPv6 bevorzugen?" \
  394.                     0 "Nein" \
  395.                     1 "Ja"
  396.                 )
  397.                 if [[ "$ipv6res" == "back" ]]; then
  398.                     step=9
  399.                     continue
  400.                 fi
  401.                 case "$ipv6res" in
  402.                     0|1) prefer_ipv6="$ipv6res";;
  403.                     *)
  404.                        dialog --msgbox "Ungültige Auswahl." 8 50
  405.                        continue
  406.                        ;;
  407.                 esac
  408.                 step=11
  409.                 ;;
  410.             ##################################################################
  411.             # 11) vHost4 / vHost6
  412.             ##################################################################
  413.             11)
  414.                 local vhostres
  415.                 vhostres=$(dialog_with_back \
  416.                     "vHost-Konfiguration" \
  417.                     "Welchen vHost wollen Sie verwenden?" \
  418.                     1 "vhost4 (IPv4 oder Hostname)" \
  419.                     2 "vhost6 (IPv6 oder Hostname)"
  420.                 )
  421.                 if [[ "$vhostres" == "back" ]]; then
  422.                     step=10
  423.                     continue
  424.                 fi
  425.                 if [[ "$vhostres" == "1" ]]; then
  426.                     while true; do
  427.                         local v4
  428.                         v4=$(dialog --inputbox "Bitte vhost4 eingeben (IPv4 oder Hostname):" 8 60 "virtual.host.com" 3>&1 1>&2 2>&3)
  429.                         [[ $? -eq 1 ]] && { step=10; break; }
  430.                         if [[ "$v4" =~ ^[0-9.]+$ ]]; then
  431.                             if isValidIPv4 "$v4"; then
  432.                                 vhost4_value="$v4"
  433.                                 vhost6_value=""  # Deaktivieren von vhost6
  434.                                 break
  435.                             else
  436.                                 dialog --msgbox "Ungültige IPv4." 6 50
  437.                                 continue
  438.                             fi
  439.                         else
  440.                             vhost4_value="$v4"
  441.                             vhost6_value=""  # Deaktivieren von vhost6
  442.                             break
  443.                         fi
  444.                     done
  445.                     step=12
  446.                 elif [[ "$vhostres" == "2" ]]; then
  447.                     while true; do
  448.                         local v6
  449.                         v6=$(dialog --inputbox "Bitte vhost6 eingeben (IPv6 oder Hostname):" 8 60 "my.ipv6.host.com" 3>&1 1>&2 2>&3)
  450.                         [[ $? -eq 1 ]] && { step=10; break; }
  451.                         if [[ "$v6" =~ ^[0-9A-Fa-f:]+$ ]]; then
  452.                             if isValidIPv6Strict "$v6"; then
  453.                                 vhost6_value="$v6"
  454.                                 vhost4_value=""  # Deaktivieren von vhost4
  455.                                 break
  456.                             else
  457.                                 dialog --msgbox "Ungültige IPv6 (8 Blöcke à 4 HEX)." 6 60
  458.                                 continue
  459.                             fi
  460.                         else
  461.                             vhost6_value="$v6"
  462.                             vhost4_value=""  # Deaktivieren von vhost4
  463.                             break
  464.                         fi
  465.                     done
  466.                     step=12
  467.                 else
  468.                     dialog --msgbox "Ungültige Auswahl." 8 50
  469.                     continue
  470.                 fi
  471.                 ;;
  472.             ##################################################################
  473.             # 12) Channel
  474.             ##################################################################
  475.             12)
  476.                 # Zeige den bestehenden Kanal als Standardwert
  477.                 default_channel="#${existing_channel}"
  478.                 channel_name=$(dialog --inputbox "Welchen Kanal soll der Bot joinen?" 8 50 "$default_channel" 3>&1 1>&2 2>&3)
  479.                 [[ $? -eq 1 ]] && { step=11; continue; }
  480.                 # Entferne führendes '#' falls vorhanden und stelle sicher, dass der Kanal mit '#' beginnt
  481.                 channel_name="${channel_name#\#}"
  482.                 # Validierung: Keine Leerzeichen und keine zusätzlichen '#'
  483.                 if [[ "$channel_name" =~ [[:space:]] ]]; then
  484.                     dialog --msgbox "Fehler: Der Kanalname darf keine Leerzeichen enthalten." 6 50
  485.                     continue
  486.                 fi
  487.                 step=13
  488.                 ;;
  489.             ##################################################################
  490.             # 13) default-port
  491.             ##################################################################
  492.             13)
  493.                 default_port=$(dialog --inputbox "Bitte default-port eingeben (Standard 6667):" 8 50 "6667" 3>&1 1>&2 2>&3)
  494.                 if [[ $? -eq 1 || -z "$default_port" ]]; then
  495.                     default_port="6667"
  496.                 fi
  497.                 step=14
  498.                 ;;
  499.             ##################################################################
  500.             # 14) Server-Liste
  501.             ##################################################################
  502.             14)
  503.                 # Vorab definierte spezifische Serverzeilen hinzufügen
  504.                 cat <<EOF > "$tempfile_server"
  505. server add you.need.to.change.this 6667
  506. server add another.example.com 6669 password
  507. server add 2001:db8:618:5c0:263:: 6669 password
  508. server add ssl.example.net +7000
  509. EOF
  510.  
  511.                 # Entferne die spezifischen Serverzeilen aus der temporären Datei
  512.                 sed -i '/you.need.to.change.this 6667/d' "$tempfile_server"
  513.                 sed -i '/another.example.com 6669 password/d' "$tempfile_server"
  514.                 sed -i '/2001:db8:618:5c0:263:: 6669 password/d' "$tempfile_server"
  515.                 sed -i '/ssl.example.net +7000/d' "$tempfile_server"
  516.  
  517.                 # Öffne den Editierdialog für die Server-Liste
  518.                 dialog --title "Server-Liste bearbeiten" --editbox "$tempfile_server" 20 70 3>&1 1>&2 2>&3
  519.  
  520.                 if [[ $? -eq 1 ]]; then
  521.                     # Wenn der Benutzer ESC drückt oder Abbricht, setze server_lines auf leer
  522.                     server_lines=""
  523.                 else
  524.                     # Lese den Inhalt des temporären Files
  525.                     server_lines=$(< "$tempfile_server")
  526.                 fi
  527.                 step=15
  528.                 ;;
  529.             ##################################################################
  530.             # 15) nick-len
  531.             ##################################################################
  532.             15)
  533.                 nick_len=$(dialog --inputbox "Bitte nick-len eingeben (Standard 15):" 8 50 "15" 3>&1 1>&2 2>&3)
  534.                 if [[ $? -eq 1 || -z "$nick_len" ]]; then
  535.                     nick_len="15"
  536.                 fi
  537.                 step=16
  538.                 ;;
  539.             ##################################################################
  540.             # 16) ident-method (0=oidentd, 1=builtin)
  541.             ##################################################################
  542.             16)
  543.                 local imenu
  544.                 imenu=$(dialog_with_back \
  545.                     "Ident-Konfiguration" \
  546.                     "Wählen Sie ident-method:\n0 = oidentd\n1 = Builtin" \
  547.                     0 "oidentd (0)" \
  548.                     1 "Builtin (1)"
  549.                 )
  550.                 if [[ "$imenu" == "back" ]]; then
  551.                     step=15
  552.                     continue
  553.                 fi
  554.                 if [[ "$imenu" == "0" || "$imenu" == "1" ]]; then
  555.                     ident_method="$imenu"
  556.                 else
  557.                     ident_method="0"
  558.                 fi
  559.                 step=17
  560.                 ;;
  561.             ##################################################################
  562.             # 17) ssl-ciphers setzen
  563.             ##################################################################
  564.             17)
  565.                 ssl_ciphers=$(dialog --inputbox "Geben Sie den Wert für ssl-ciphers ein:" 8 50 "ALL" 3>&1 1>&2 2>&3)
  566.                 [[ $? -eq 1 || -z "$ssl_ciphers" ]] && ssl_ciphers="ALL"  # Wenn abgebrochen oder leer, Standardwert setzen
  567.                 step=18
  568.                 ;;
  569.             ##################################################################
  570.             # 18) Fertig => Config anlegen
  571.             ##################################################################
  572.             18)
  573.                 break
  574.                 ;;
  575.         esac
  576.     done
  577.  
  578.     ########################################################################
  579.     # === Jetzt: Anlegen der neuen Konfiguration (username.conf) ===
  580.     ########################################################################
  581.     new_config="${username}.conf"
  582.     cp "$default_config" "$new_config"
  583.  
  584.     # === Aktivieren und Überschreiben der spezifischen Zeilen ===
  585.  
  586.     # 1. set userfile "username.user"
  587.     set_config_line "userfile" "${username}.user" "\""
  588.  
  589.     # 2. set botnet-nick "username"
  590.     set_config_line "botnet-nick" "$username" "\""
  591.  
  592.     # 3. set resolve-timeout "5"
  593.     set_config_line "resolve-timeout" "5"
  594.  
  595.     # 4. set ssl-privatekey "eggdrop.key"
  596.     set_config_line "ssl-privatekey" "eggdrop.key" "\""
  597.  
  598.     # 5. set ssl-certificate "eggdrop.crt"
  599.     set_config_line "ssl-certificate" "eggdrop.crt" "\""
  600.  
  601.     # 6. set ssl-protocols "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3"
  602.     set_config_line "ssl-protocols" "TLSv1 TLSv1.1 TLSv1.2 TLSv1.3" "\""
  603.  
  604.     # 7. set ssl-ciphers "ALL" (aus dem Dialog)
  605.     set_config_line "ssl-ciphers" "$(escape_sed "$ssl_ciphers")" "\""
  606.  
  607.     # 8. loadmodule python
  608.     sed -i 's|^[#]*[[:space:]]*loadmodule[[:space:]]\+python|loadmodule python|' "$new_config"
  609.  
  610.     # 9. set chanfile "username.chan" (ersetze "LamestBot.chan" mit username)
  611.     set_config_line "chanfile" "${username}.chan" "\""
  612.  
  613.     # 10. channel add "#channel_name"
  614.     # Ersetze die erste gefundene 'channel add' Zeile mit der neuen 'channel add' Zeile
  615.     insert_channel_add "$channel_name"
  616.  
  617.     # 11. set username "username"
  618.     set_config_line "username" "$(escape_sed "$username")" "\""
  619.  
  620.     # 12. set nick "username"
  621.     set_config_line "nick" "$(escape_sed "$username")" "\""
  622.  
  623.     # 13. set altnick "username"
  624.     set_config_line "altnick" "$(escape_sed "$username")" "\""
  625.  
  626.     # 14. set admin "admin_value"
  627.     set_config_line "admin" "$(escape_sed "$admin")" "\""
  628.  
  629.     # 15. set owner "owners"
  630.     set_config_line "owner" "$(escape_sed "$owners")" "\""
  631.  
  632.     # 16. set network "network_choice"
  633.     if [[ -z "$network_choice" ]]; then
  634.         # Kommentar setzen, falls keine Auswahl
  635.         sed -i 's|^[#]*[[:space:]]*set network .*|#set network "EFnet"|' "$new_config"
  636.     else
  637.         # Aktivieren und Setzen der Auswahl
  638.         set_config_line "network" "$(escape_sed "$network_choice")" "\""
  639.     fi
  640.  
  641.     # 17. set net-type "net_type_choice"
  642.     set_config_line "net-type" "$(escape_sed "$net_type_choice")" "\""
  643.  
  644.     # 18. set realname "/msg username hello"
  645.     set_config_line "realname" "$(escape_sed "$realname_value")" "\""
  646.  
  647.     # 19. set timezone "tz_name"
  648.     set_config_line "timezone" "$(escape_sed "$tz_name")" "\""
  649.  
  650.     # 20. set offset "tz_offset"
  651.     set_config_line "offset" "$(escape_sed "$tz_offset")" "\""
  652.  
  653.     # 21. set env(TZ)
  654.     sed -i 's|^[#]*[[:space:]]*set env(TZ)|set env(TZ)|' "$new_config"
  655.  
  656.     # 22. Listen-Port
  657.     # Entferne alle existierenden listen Zeilen (kommentiert und aktiv)
  658.     sed -i '/^[#]*[[:space:]]*listen /d' "$new_config"
  659.  
  660.     # Füge die gewünschte listen Zeile an der richtigen Position ein
  661.     listen_line="listen ${listen_port} all"
  662.     insert_listen "$listen_line"
  663.  
  664.     # 23. Sprache => addlang "language"
  665.     set_addlang "$language"
  666.  
  667.     # 24. set prefer-ipv6 "prefer_ipv6"
  668.     set_config_line "prefer-ipv6" "$(escape_sed "$prefer_ipv6")"
  669.  
  670.     # 25. vhost4 / vHost6
  671.     if [[ -n "$vhost4_value" ]]; then
  672.         # Kommentar alle vhost6 Zeilen
  673.         sed -i 's|^[#]*[[:space:]]*set vhost6 .*|#set vhost6 "2001:db8::c001:b07"|' "$new_config"
  674.  
  675.         # Setze vhost4 neu
  676.         set_config_line "vhost4" "$(escape_sed "$vhost4_value")" "\""
  677.     elif [[ -n "$vhost6_value" ]]; then
  678.         # Kommentar alle vhost4 Zeilen
  679.         sed -i 's|^[#]*[[:space:]]*set vhost4 .*|#set vhost4 "99.99.0.0"|' "$new_config"
  680.  
  681.         # Setze vhost6 neu
  682.         set_config_line "vhost6" "$(escape_sed "$vhost6_value")" "\""
  683.     else
  684.         # Beide deaktivieren
  685.         sed -i 's|^[#]*[[:space:]]*set vhost4 .*|#set vhost4 "99.99.0.0"|' "$new_config"
  686.         sed -i 's|^[#]*[[:space:]]*set vhost6 .*|#set vhost6 "2001:db8::c001:b07"|' "$new_config"
  687.     fi
  688.  
  689.     # 26. default-port "default_port"
  690.     set_config_line "default-port" "$(escape_sed "$default_port")"
  691.  
  692.     # 27. Server-Liste
  693.     if [[ -n "$server_lines" ]]; then
  694.         # Entferne alle bestehenden server add Zeilen vor dem Hinzufügen neuer
  695.         sed -i '/^[#]*[[:space:]]*server add /d' "$new_config"
  696.  
  697.         # Insert server add lines nach set default-port
  698.         insert_server_add_after_default_port "$server_lines"
  699.     fi
  700.  
  701.     # 28. nick-len "nick_len" (aus dem Dialog)
  702.     set_config_line "nick-len" "$(escape_sed "$nick_len")" "\""
  703.  
  704.     # 29. ident loadmodule + ident-method
  705.     # loadmodule ident
  706.     sed -i 's|^[#]*[[:space:]]*loadmodule[[:space:]]\+ident|loadmodule ident|' "$new_config"
  707.  
  708.     # set ident-method "ident_method"
  709.     set_config_line "ident-method" "$(escape_sed "$ident_method")"
  710.  
  711.     # 30. Transfer-, Share-, Compress-, Woobie-, Assoc-Module aktivieren
  712.     for module in transfer share compress woobie assoc; do
  713.         if grep -q "^#[[:space:]]*loadmodule $module" "$new_config"; then
  714.             sed -i "s|^#[[:space:]]*loadmodule[[:space:]]\+$module|loadmodule $module|" "$new_config"
  715.         elif grep -q "^loadmodule $module" "$new_config"; then
  716.             # Bereits aktiviert, nichts tun
  717.             :
  718.         else
  719.             echo "loadmodule $module" >> "$new_config"
  720.         fi
  721.     done
  722.  
  723.     # 31. set compress-level "9"
  724.     set_config_line "compress-level" "$(escape_sed "9")"
  725.  
  726.     # 32. set ctcp-version "ZNC 1.9.1 - http://znc.in"
  727.     insert_ctcp_version "ZNC 1.9.1 - http://znc.in"
  728.  
  729.     # 33. set ctcp-version bereits durch insert_ctcp_version behandelt
  730.  
  731.     # 34. set use-exempts 1 aktivieren
  732.     sed -i 's|^[#]*[[:space:]]*set[[:space:]]\+use-exempts[[:space:]]\+0|set use-exempts 1|' "$new_config"
  733.  
  734.     # 35. set use-invites 1 aktivieren
  735.     sed -i 's|^[#]*[[:space:]]*set[[:space:]]\+use-invites[[:space:]]\+0|set use-invites 1|' "$new_config"
  736.  
  737.     # 36. set nick "username"
  738.     set_config_line "nick" "$(escape_sed "$username")" "\""
  739.  
  740.     # 37. set altnick "username"
  741.     set_config_line "altnick" "$(escape_sed "$username")" "\""
  742.  
  743.     # 38. set notefile "username.notes"
  744.     set_config_line "notefile" "$(escape_sed "${username}.notes")" "\""
  745.  
  746.     # 39. Aktivieren von pbkdf2-method "SHA256"
  747.     set_config_line "pbkdf2-method" "$(escape_sed "SHA256")" "\""
  748.  
  749.     # 40. Aktivieren von pbkdf2-rounds "16000" (aus dem Dialog)
  750.     set_config_line "pbkdf2-rounds" "$(escape_sed "16000")" "\""
  751.  
  752.     # 41. Aktivieren von pidfile "pid.username"
  753.     set_config_line "pidfile" "$(escape_sed "pid.${username}")" "\""
  754.  
  755.     # === Entferne alle Zeilen mit "Please make sure you edit your config file completely." ===
  756.     sed -i '/Please make sure you edit your config file completely./d' "$new_config"
  757.  
  758.     echo "Die neue Konfiguration wurde in $new_config gespeichert."
  759. }
  760.  
  761. # Hauptaufruf
  762. configure
  763.  
  764. # Aufräumen
  765. rm -f "$tempfile_server"
  766.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement