1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Eggdrop soll sc_trans starten bzw. stopen

Dieses Thema im Forum "Eggdrop Scripting" wurde erstellt von Tappi112, 31. März 2013.

  1. Tappi112

    Tappi112 Member

    Ich hatte etwas gesucht und habe es in diesem Forum auch gefunden http://www.coding-board.de/showthread.php/8482-PHP-amp-Shell-Befehle?p=76832&viewfull=1#post76832 und wie man sieht habe ich schon etwas versucht, leider bekomme ich es aber nicht hin :mauer:

    Also wir haben einen sc_trans (Jukebox, Autostream ...) auf dem Server laufen, um nun auf den Stream zu gelangen muss man ihn kicken. Aber es passiert oft, das die Jukebox schneller ist als der Moderator und so muss dann erneut gekickt werden. Neulich gab es etwas mehr Probleme, da sind die Moderatoren vom Stream geflogen. Ob das nun an der Jukebox lag .... ?

    Auf jeden Fall wäre es schöner beim Sendebeginn sc_trans komplett zu stopen und der letzte Moderator startet sc_trans dann wieder.

    Ich kann sc_trans per ssh also auf der Shell starten und stopen, nur wie bekomme ich es hin, das dies halt der Eggdrop macht?

    Bei !start ... soll also die Jukebox gestartet werden und bei !stop halt gestopt werden.

    Ich habe mal in meinen ganzen Backups geschaut, welche ich von früher noch habe und da habe ich folgendes gefunden:

    Code:
    set radiochannel "#retter-team #casting-retter"
    
    bind pub - !plattenkiste plattenkiste
    
    proc plattenkiste {nick uhost hand chan arg} {
        global radiochannel
        if {[lsearch -exact [string tolower $radiochannel] [string tolower $chan]] != -1 } {
                    if {$arg == ""} {
                            putquick "NOTICE $nick : --- Hilfe ---"
                            putquick "NOTICE $nick :'!plattenkiste stop' Stopt die Plattenkiste innerhalb von 60 Sekunden fuer etwa 10 Minuten"
                    }
                    if {$arg == "hilfe"} {
                            putquick "NOTICE $nick : --- Hilfe ---"
                            putquick "NOTICE $nick :'!plattenkiste stop' Stopt die Plattenkiste innerhalb von 60 Sekunden fuer etwa 10 Minuten"
                    }
                    if {$arg == "stop"} {
                            set cs [clock format [expr [clock seconds] +600] -format {%H%M}]
                            set cs2 [clock format [expr [clock seconds] +600] -format {%H:%M}]
                            putquick "NOTICE $nick :Die Plattenkiste wird innerhalb von 60 Sekunden gestoppt und um $cs2 automatisch wieder gestartet, einen Start innerhalb von 60 Sekunden kannst Du mit !plattenkiste start durchfuehren"
                  #exec /home/streams/plattenkiste/plattenkiste_stop > /dev/null &
                  #exec sudo -u streams /home/streams/plattenkiste/plattenkiste_stop > /dev/null &
                   exec sudo -u root /home/streams/plattenkiste/plattenkiste_stop > /dev/null &
                    }
                    if {$arg == "start"} {
                            putquick "NOTICE $nick :Dieser Befehl hat KEINE Funktion und macht GARNICHTS."
                    }
    
            }
    return 0
    }
    
    Nur leider weiß ich nicht mehr wie das genau lief damals und vor allem ruft er ja plattenkiste_stop auf .... :confused:

    Was ich auf der Shell eingeben muss zum starten bzw. stopen sieht so aus:

    webtrans/sc_trans/./sc_trans start

    webtrans/sc_trans/./sc_trans stop

    Ich habe auch schon die Suche benutzt, Google gequält und mich hier durch das ganze Eggdropforum gelesen, aber nichts gefunden was mir weiter helfen könnte.
    Außer einem Beitrag wo auf catch hingewiesen wird, damit kann ich aber leider nichts anfangen

    Vielleicht klappt es ja doch mit der anderen Sache welche ich gefunden habe, das ich da halt noch etwas anpassen muss oder so? Die Pfade habe ich zumindest angegeben
  2. Toushirou

    Toushirou New Member

    ich habe so etwas ähnliches für ein webradio schon einmal geschrieben hier hast du die abgespeckte version.
    einfach transcodername, transdir, configfile und internchan anpassen.

    dann musst du nur noch dein bind und proc schreiben und transcoder::start bzw. transcoder::stop verwenden

    Code:
    namespace eval transcoder {
    
        variable pid ""
        variable transcodername "sc_trans"
        variable transdir "/user/blabla/sc_trans"
        variable configfile "asdasd.conf"
        variable internchan "#channel"
        
    
    
        
        #Ist der Transcoder an?
        #Return: 1 wenn Transcoder gefunden wurde 0 wenn nicht.
        proc running {} {
            variable transdir
            variable configfile
            variable transcodername        
            set result [exec "ps" x -o "%c"]
            foreach line [split $result \n] {
                if { [string equal -nocase "$transcodername" $line] } {
                    return 1
                }
            }
            return 0
        }
        
        #Wenn der Transcoder an sein sollte gib mir die PID zurück.
        #Return: pid wenn Transcoder an ist und gefunden wurde, ansonsten -1.
        proc sc:pid {} {
            variable transdir
            variable configfile
            variable transcodername        
            if { [running] } {
                set result [exec "ps" x -o "%c : %p"]
                foreach line [split $result \n] {
                    foreach {cmd pid} [split [string map {" " ""} $line] :] {
                        if { [string equal -nocase $transcodername $cmd] } {
                            return $pid
                        }
                    }
                }
            }
            return -1
        }
        
        #Kill den Transcoder.
        #Return: Gibt 1 zurück wenn der Transcoder aus ist ansonsten 0.
        proc kill {} {
            variable transdir
            variable configfile
            variable transcodername        
            variable pipe
            if { [set pid [sc:pid]] != -1 } {
                set result [exec killall -9 $transcodername]
                if {$result == ""} {
                    catch {close $pipe}
                    return 1
                }
            }
            return 0
        }
        
        #Erstellt ein pipe mittels open um den Transcoder zu starten.
        #Return: Gibt bei Erfolg 1 zurück ansonsten 0
        proc start {} {
            variable transdir
            variable configfile
            variable transcodername
            variable pipe
            if { ![running] } {
                set dir [pwd]
                cd $transdir
                catch {close $pipe}
                if { ![catch {set pipe [open "| ./$transcodername $configfile" r+]} error] } {
                    fconfigure $pipe -blocking 0 -buffering none
                    if { [running] } {
                        #fileevent $pipe readable 
    [list [namespace current]::file:event]
                        cd $dir
                        return 1
                    }
                }
            }
            if { [info exists dir] } { cd $dir }
            catch {close $pipe}
            return 0
        }
        
        #Restart vom Transcoder.
        #Return: Gibt nichts zurück, sendet aber automatisch Nachrichten an den internen Channel.
        proc restart {} {
            
            variable pipe
            if { [running] } {
                putserv "PRIVMSG $internchan :Playlist wird neugestartet."
                if { [kill] } {
                    if { [start] } {
                        putserv "PRIVMSG $internchan :Playlist gestartet."
                    } else {
                        putserv "PRIVMSG $internchan :Es ist ein Fehler beim starten aufgetretten."
                    }
                } else {
                    putserv "PRIVMSG $internchan :Konnte den Transcoder nicht beenden."
                }
            }
        }
    }
    
  3. Tappi112

    Tappi112 Member

    Hi Toushirou,

    danke dir, werde es mal austesten.

    Er scheint mit der ersten Zeile nicht klar zu kommen

    |31/03/13| • 23:57:02 <RetterBote> [23:57:05] Tcl error in file 'eggdrop.conf':
    |31/03/13| • 23:57:02 <RetterBote> [23:57:05] missing close-brace
    |31/03/13| • 23:57:02 <RetterBote> while executing
    |31/03/13| • 23:57:02 <RetterBote> "namespace eval transcoder {
    |31/03/13| • 23:57:02 <RetterBote> variable pid ""
    |31/03/13| • 23:57:02 <RetterBote> variable transcodername "sc_trans"
    |31/03/13| • 23:57:02 <RetterBote> variable transdir "/var/www/web0/html/webtrans/sc_trans"
    |31/03/13| • 23:57:02 <RetterBote> ..."
    |31/03/13| • 23:57:02 <RetterBote> (file "scripts/pk_an_aus.tcl" line 1)
    |31/03/13| • 23:57:02 <RetterBote> invoked from within
    |31/03/13| • 23:57:02 <RetterBote> "source scripts/pk_an_aus.tcl"
    |31/03/13| • 23:57:02 <RetterBote> (file "eggdrop.conf" line 1392)
    |31/03/13| • 23:57:02 <RetterBote> [23:57:05] * KONFIGURATIONSDATEI NICHT GELADEN (NICHT GEFUNDEN ODER FEHLER)

    An dem bind und proc bin ich gerade bei
    Zuletzt bearbeitet: 1. April 2013
  4. Toushirou

    Toushirou New Member

    ich habe mal das mit der pipe ganz raus genommen schau mal ob das geht
    Code:
    namespace eval transcoder {
    
        variable pid ""
        variable transcodername "sc_trans"
        variable transdir "/user/blabla/sc_trans"
        variable configfile "asdasd.conf"
        variable internchan "#channel"
        
    
    
        
        #Ist der Transcoder an?
        #Return: 1 wenn Transcoder gefunden wurde 0 wenn nicht.
        proc running {} {
            variable transdir
            variable configfile
            variable transcodername        
            set result [exec "ps" x -o "%c"]
            foreach line [split $result \n] {
                if { [string equal -nocase "$transcodername" $line] } {
                    return 1
                }
            }
            return 0
        }
        
        #Wenn der Transcoder an sein sollte gib mir die PID zurück.
        #Return: pid wenn Transcoder an ist und gefunden wurde, ansonsten -1.
        proc sc:pid {} {
            variable transdir
            variable configfile
            variable transcodername        
            if { [running] } {
                set result [exec "ps" x -o "%c : %p"]
                foreach line [split $result \n] {
                    foreach {cmd pid} [split [string map {" " ""} $line] :] {
                        if { [string equal -nocase $transcodername $cmd] } {
                            return $pid
                        }
                    }
                }
            }
            return -1
        }
        
        #Kill den Transcoder.
        #Return: Gibt 1 zurück wenn der Transcoder aus ist ansonsten 0.
        proc kill {} {
            variable transdir
            variable configfile
            variable transcodername        
            variable pipe
            if { [set pid [sc:pid]] != -1 } {
                set result [exec killall -9 $transcodername]
                if {$result == ""} {
                    catch {close $pipe}
                    return 1
                }
            }
            return 0
        }
        
        #Erstellt ein pipe mittels open um den Transcoder zu starten.
        #Return: Gibt bei Erfolg 1 zurück ansonsten 0
        proc start {} {
            variable transdir
            variable configfile
            variable transcodername
            variable pipe
            if { ![running] } {
                set dir [pwd]
                cd $transdir
                catch {close $pipe}
                if { ![catch {set pipe [open "| ./$transcodername $configfile" r+]} error] } {
                    fconfigure $pipe -blocking 0 -buffering none
                    if { [running] } {
                        cd $dir
                        return 1
                    }
                }
            }
            if { [info exists dir] } { cd $dir }
            catch {close $pipe}
            return 0
        }
        
        #Restart vom Transcoder.
        #Return: Gibt nichts zurück, sendet aber automatisch Nachrichten an den internen Channel.
        proc restart {} {
            
            variable pipe
            if { [running] } {
                putserv "PRIVMSG $internchan :Playlist wird neugestartet."
                if { [kill] } {
                    if { [start] } {
                        putserv "PRIVMSG $internchan :Playlist gestartet."
                    } else {
                        putserv "PRIVMSG $internchan :Es ist ein Fehler beim starten aufgetretten."
                    }
                } else {
                    putserv "PRIVMSG $internchan :Konnte den Transcoder nicht beenden."
                }
            }
        }
    }
    
  5. Tappi112

    Tappi112 Member

    Also, ich habe das erste noch mal umgeändert gehabt, aber gleiche Meldung.
    Dann habe ich das andere genommen ohne dem Pipe .... kommt aber auch die selbe Meldung

    Code:
    namespace eval transcoder {
    
        variable pid ""
        variable transcodername "sc_trans"
        variable transdir "/var/www/web0/html/webtrans/sc_trans"
        variable configfile "sc_trans.conf"
        variable internchan "#retter-team" 
        
        bind pub -|- !pk start
        bind pub -|- !pk stop 
    
    
        
        #Ist der Transcoder an?
        #Return: 1 wenn Transcoder gefunden wurde 0 wenn nicht.
        proc running {} {
            variable transdir
            variable configfile
            variable transcodername        
            set result [exec "ps" x -o "%c"]
            foreach line [split $result \n] {
                if { [string equal -nocase "$transcodername" $line] } {
                    return 1
                }
            }
            return 0
        }
        
        #Wenn der Transcoder an sein sollte gib mir die PID zurück.
        #Return: pid wenn Transcoder an ist und gefunden wurde, ansonsten -1.
        proc sc:pid {} {
            variable transdir
            variable configfile
            variable transcodername        
            if { [running] } {
                set result [exec "ps" x -o "%c : %p"]
                foreach line [split $result \n] {
                    foreach {cmd pid} [split [string map {" " ""} $line] :] {
                        if { [string equal -nocase $transcodername $cmd] } {
                            return $pid
                        }
                    }
                }
            }
            return -1
        }
        
        #Kill den Transcoder.
        #Return: Gibt 1 zurück wenn der Transcoder aus ist ansonsten 0.
        proc pk stop {} {
            variable transdir
            variable configfile
            variable transcodername        
            variable pipe
            if { [set pid [sc:pid]] != -1 } {
                set result [exec killall -9 $transcodername]
                if {$result == ""} {
                    catch {close $pipe}
                    return 1
                }
            }
            return 0
        }
        
        #Erstellt ein pipe mittels open um den Transcoder zu starten.
        #Return: Gibt bei Erfolg 1 zurück ansonsten 0
        proc pk start {} {
            variable transdir
            variable configfile
            variable transcodername
            variable pipe
            if { ![running] } {
                set dir [pwd]
                cd $transdir
                catch {close $pipe}
                if { ![catch {set pipe [open "| ./$transcodername $configfile" r+]} error] } {
                    fconfigure $pipe -blocking 0 -buffering none
                    if { [running] } {
                        cd $dir
                        return 1
                    }
                }
            }
            if { [info exists dir] } { cd $dir }
            catch {close $pipe}
            return 0
        }
        
        #Restart vom Transcoder.
        #Return: Gibt nichts zurück, sendet aber automatisch Nachrichten an den internen Channel.
        proc restart {} {
            
            variable pipe
            if { [running] } {
                putserv "PRIVMSG $internchan :Plattenkiste wird neugestartet."
                if { [kill] } {
                    if { [start] } {
                        putserv "PRIVMSG $internchan :Plattenkiste gestartet."
                    } else {
                        putserv "PRIVMSG $internchan :Es ist ein Fehler beim starten aufgetretten."
                    }
                } else {
                    putserv "PRIVMSG $internchan :Konnte die Plattenkiste nicht beenden."
                }
            }
        }
    }

    Selbst das bind habe ich verschieden benutzt

    bind pub -|- !pk start
    bind pub -|- !pk stop

    bind pub -|- !pk ::transcoder::start
    bind pub -|- !pk ::transcoder::stop

    bind pub -|- !pk transcoder::start
    bind pub -|- !pk transcoder::stop

    Bei den bind pub -|- !pk ::transcoder::start sowie beim bind pub -|- !pk transcoder::start geschah nichts, nur TCL Errormeldungen

    Tcl error [stop]: invalid command name "stop"

    Tcl error [:transcoder:stop]: invalid command name ":transcoder:stop"

    Tcl error [::transcoder::stop]: wrong # args: should be "::transcoder::stop"

    Wobei diesem Meldungen kamen, weil er es nicht finden konnte, das habe ich dann verstanden und habe aus dem proc start .... ein proc pk start bzw. stop gemacht .... aber dann schmiert alles ab

    Achja hier noch eine Meldung aus der Shell

    [22:50:19] Tcl error in file 'eggdrop.conf':
    [22:50:19] wrong # args: should be "proc name args body"
    while executing
    "proc pk stop {} {
    variable transdir
    variable configfile
    variable transcodername
    variable pipe
    if { [se..."
    (in namespace eval "::transcoder" script line 50)
    invoked from within
    "namespace eval transcoder {

    variable pid ""
    variable transcodername "sc_trans"
    variable transdir "/var/www/web0/html/webtrans/sc_trans"
    ..."
    (file "scripts/pk_an_aus2.tcl" line 1)
    invoked from within
    "source scripts/pk_an_aus2.tcl"
    (file "eggdrop.conf" line 1393)
    [22:50:19] * KONFIGURATIONSDATEI NICHT GELADEN (NICHT GEFUNDEN ODER FEHLER)



    Ich tüftel mal weiter .... wär doch gelacht wenn ich das nicht hinbekomme

    Edit:

    Irgendwie klappt es nicht mit dem bind pub proc

    [23:20:46] Tcl error in file 'eggdrop.conf':
    [23:20:46] wrong # args: should be "bind type flags cmd/mask ?procname?"
    while executing
    "bind pub - !pk stop pkstop"
    (in namespace eval "::transcoder" script line 46)
    invoked from within
    "namespace eval transcoder {

    variable pid ""
    variable transcodername "sc_trans"
    variable transdir "/var/www/web0/html/webtrans/sc_trans"
    ..."
    (file "scripts/pk_an_aus2.tcl" line 1)
    invoked from within
    "source scripts/pk_an_aus2.tcl"
    (file "eggdrop.conf" line 1393)
    [23:20:46] * KONFIGURATIONSDATEI NICHT GELADEN (NICHT GEFUNDEN ODER FEHLER)



    Code:
    #Kill den Transcoder.
        #Return: Gibt 1 zurück wenn der Transcoder aus ist ansonsten 0.
        bind pub - !pk stop pkstop
        proc pkstop {} {
    
    !pk stop geändert zu !pkstop und ich konnte den Eggdrop wieder starten ... nur bekomme ich jetzt wieder ein TCL Error

    |01/04/13| • 23:24:18 <*Tappi|Hg> !pkstop
    |01/04/13| • 23:24:29 <*Tappi|Hg> [23:24:22] Tcl error [pkstop]: invalid command name "pkstop"

    Jetzt noch mal mit dem trancoder gespielt

    |01/04/13| • 23:33:45 <RetterBote> [23:33:49] Tcl error in file 'eggdrop.conf':
    |01/04/13| • 23:33:45 <RetterBote> [23:33:49] can't create procedure "transcoder::stop": unknown namespace
    |01/04/13| • 23:33:45 <RetterBote> while executing
    |01/04/13| • 23:33:45 <RetterBote> "proc transcoder::stop {} {
    |01/04/13| • 23:33:45 <RetterBote> variable transdir
    |01/04/13| • 23:33:45 <RetterBote> variable configfile
    |01/04/13| • 23:33:45 <RetterBote> variable transcodername
    |01/04/13| • 23:33:45 <RetterBote> variable pipe
    |01/04/13| • 23:33:45 <RetterBote> ..."
    |01/04/13| • 23:33:45 <RetterBote> (in namespace eval "::transcoder" script line 47)
    |01/04/13| • 23:33:45 <RetterBote> invoked from within
    |01/04/13| • 23:33:45 <RetterBote> "namespace eval transcoder {
    |01/04/13| • 23:33:45 <RetterBote> variable pid ""
    |01/04/13| • 23:33:45 <RetterBote> variable transcodername "sc_trans"
    |01/04/13| • 23:33:45 <RetterBote> variable transdir "/var/www/web0/html/webtrans/sc_trans"
    |01/04/13| • 23:33:45 <RetterBote> ..."
    |01/04/13| • 23:33:45 <RetterBote> (file "scripts
    |01/04/13| • 23:33:45 <RetterBote> [23:33:49] * KONFIGURATIONSDATEI NICHT GELADEN (NICHT GEFUNDEN ODER FEHLER)
    Zuletzt bearbeitet: 1. April 2013
  6. Tappi112

    Tappi112 Member

    Hmm also ich hab echt keine Idee mehr wie ich das bind da noch eingeben kann/soll/muss

    Das Proc steht ja schon drin

    In der Partyline kam

    Tcl error [transcoder::start]: wrong # args: should be "transcoder::start"

    Code:
    namespace eval transcoder {
    
        variable pid ""
        variable transcodername "sc_trans"
        variable transdir "/var/www/web0/html/webtrans/sc_trans"
        variable configfile "sc_trans.conf"
        variable internchan "#retter-team"
    
        bind pub -|- !stop transcoder::start
        bind pub -|- !start transcoder::stop
        bind pub -|- !restart transcoder::stop 
    
        
        #Ist der Transcoder an?
        #Return: 1 wenn Transcoder gefunden wurde 0 wenn nicht.
        proc running {} {
            variable transdir
            variable configfile
            variable transcodername        
            set result [exec "ps" x -o "%c"]
            foreach line [split $result \n] {
                if { [string equal -nocase "$transcodername" $line] } {
                    return 1
                }
            }
            return 0
        }
        
        #Wenn der Transcoder an sein sollte gib mir die PID zurück.
        #Return: pid wenn Transcoder an ist und gefunden wurde, ansonsten -1.
        proc sc:pid {} {
            variable transdir
            variable configfile
            variable transcodername        
            if { [running] } {
                set result [exec "ps" x -o "%c : %p"]
                foreach line [split $result \n] {
                    foreach {cmd pid} [split [string map {" " ""} $line] :] {
                        if { [string equal -nocase $transcodername $cmd] } {
                            return $pid
                        }
                    }
                }
            }
            return -1
        }
        
        #Kill den Transcoder.
        #Return: Gibt 1 zurück wenn der Transcoder aus ist ansonsten 0.
        proc stop {} {
            variable transdir
            variable configfile
            variable transcodername        
            variable pipe
            if { [set pid [sc:pid]] != -1 } {
                set result [exec killall -9 $transcodername]
                if {$result == ""} {
                    catch {close $pipe}
                    return 1
                }
            }
            return 0
        }
        
        #Erstellt ein pipe mittels open um den Transcoder zu starten.
        #Return: Gibt bei Erfolg 1 zurück ansonsten 0
        proc start {} {
            variable transdir
            variable configfile
            variable transcodername
            variable pipe
            if { ![running] } {
                set dir [pwd]
                cd $transdir
                catch {close $pipe}
                if { ![catch {set pipe [open "| ./$transcodername $configfile" r+]} error] } {
                    fconfigure $pipe -blocking 0 -buffering none
                    if { [running] } {
                        #fileevent $pipe readable 
    
    [list [namespace current]::file:event]
                        cd $dir
                        return 1
                    }
                }
            }
            if { [info exists dir] } { cd $dir }
            catch {close $pipe}
            return 0
        }
        
        #Restart vom Transcoder.
        #Return: Gibt nichts zurück, sendet aber automatisch Nachrichten an den internen Channel.
        proc restart {} {
            
            variable pipe
            if { [running] } {
                putserv "PRIVMSG $internchan :Plattenkiste wird neugestartet."
                if { [kill] } {
                    if { [start] } {
                        putserv "PRIVMSG $internchan :Plattenkiste gestartet."
                    } else {
                        putserv "PRIVMSG $internchan :Es ist ein Fehler beim starten aufgetretten."
                    }
                } else {
                    putserv "PRIVMSG $internchan :Konnte die Plattenkiste nicht beenden."
                }
            }
        }
    }
    
  7. Toushirou

    Toushirou New Member

    ich kann mir gerade keinen überblick verschaffen weil es eine stressige woche ist :p ich kann mir erst samstag einen überblick verschaffen.

    allerdings kann ich dir bei der meldung
    schon einmal helfen.

    die meldung sagt dir nichts anderes das die proc einfach nur ohne parameter aufgerufen wird.
    wenn du allerdings bind pub -|- "!stop" ::transcoder::stop schreibst fügt eggdrop intern noch parameter hinzu.
    die proc wird dann so aufgerufen:
    Code:
    ::transcoder::stop <nickname> <user@host> <eggdropHandle> <channel> <text>
    
    es gibt die möglichkeit das man andere procs drumrum baut oder einfach anstelle von {} ein {args} macht dann ist es egal wie viele parameter übergeben werden.
  8. Tappi112

    Tappi112 Member

    Hi Toushirou,

    also verstehe ich das richtig, das es dann so aussehen muss: bind pub -|- "!stop" ..... ohne dem :transcoder::stop ?

    Denn im proc habe ich es ja entsprechend abgeändert, wenn man !stop eingibt, was ja mit der Zeile angegeben ist:

    bind pub -|- !stop

    Und dann kommt ja schon die proc:

    #Kill den Transcoder. #Return: Gibt 1 zurück wenn der Transcoder aus ist ansonsten 0. proc stop {} {

    Nur das habe ich ja jetzt schon alles versucht und getestet....

    Oder muss ich das bind pub -|- !stop direkt über die proc Zeile schreiben? Wobei *kopfkratz* ich meine das ich das auch schon getestet hatte.

    :confused:
  9. Toushirou

    Toushirou New Member

    hi,
    nein du hast es falsch verstanden.

    ein bind übergibt der proc immer parameter, bei bind pub ist es der username, userhost, handle, channel und text.
    die proc transcoder::kill erwartet allerdings keine parameter.
    es gibt zwei möglichkeiten das zu ändern; man passt die signatur der proc an oder man schreibt sich eine proc drum rum die einfach die procs aufrufen.

    beide möglichkeiten habe ich dir mal zusammengesetzt:
    http://paste.tclhelp.net/?id=d4r (will den thread nicht fluten :D).

    bei möglichkeit 2 siehst du unten das dort eine proc transcoder::bind hinzugefügt wird die je nach aufruf ("!transcoder <cmd>") handelt.
    man könnte natürlich nun die rückgabewerte abfangen und sowas aber man kann es auch lassen :D
  10. Tappi112

    Tappi112 Member

    Ah mensch da war ich ja vollkommen auf dem Holzweg, aber naja nur so lernt man es ...
    Was mir aber auch noch aufgefallen ist, das ich in der Shell den sc_trans mit Root starte bzw. stope ... also müsste ich dem Eggdrop noch sagen, das er sich zum root machen muss und dann erst den Befehl ausführen .....
    Weil aktuell führt bzw. versucht er es ja als User Eggdrop ... richtig?
    Wenn dem so ist, da habe ich aber noch einen Code ... werde mal die Tage rumtesten

    Danke dir erstmal :)
  11. Toushirou

    Toushirou New Member

    iirc lässt sich eggdrop nicht als root starten und das wäre auch nicht zu empfehlen.
    wir hatten das damals so gelöst das der eggdrop user die nötigen rechte kriegte um die dateien zu lesen, erstellen und auch auszuführen.
    allerdings war der eggdrop nur im internen channel und nicht im öffentlichen channel.
  12. Tappi112

    Tappi112 Member

    Hi Toushi

    früher hatten wir etwas ähnliches, da machte sich den Eggdrop irgendwie zum root?

    Code:
    #exec /home/streams/plattenkiste/plattenkiste_stop > /dev/null &
    #exec sudo -u streams /home/streams/plattenkiste/plattenkiste_stop > /dev/null &
     exec sudo -u root /home/streams/plattenkiste/plattenkiste_stop > /dev/null &
    
    die Plattenkiste damals war ebenfalls ein sc_trans 040

    Aber wie das ging und was da war und so ..... ???

    Edit: allerdings müsste der sc_trans ja auch unter einem User eingebaut worden sein? Das wurde uns installiert, sonst wüßte ich das *g*
    Ich schau mal ob ich das irgendwie rausbekomme, weil dann wäre es ja einfacher

    Ist das alles kompliziert

    Nochmal edit: Also habe gerade geschaut, sc_trans mit der webtrans Oberfläche (welche nicht richtig funktioniert) ist bei einem User drin. Also, sollte es machbar sein, den auch als User zu starten bzw. zu stopen