Wildcards, If und onchan...

#1
Hallo,
ich habe für meinen Bot einige Befehle erstellt, die abhängig davon, ob die Person online ist, einen Satz ausgeben:
Code:
proc Beispiel {nick host handle channel arg} {
    global funstuff_enabled botnick

    if {[onchan Beispiel $channel]} {
    set txt "Der Bot sieht: Beispiel ist schon Online."
    } else {
    set txt "Der Bot ruft Beispiel!"
    }

    mxirc_action $channel $txt
}
So, jetzt stehe ich aber vor dem Problem, dass ich auch Nutzer abfragen will, von denen ich nur den Anfang des Namens weiß. Denn wenn man sich über den Webchat verbindet, bekommt man den Namen "Beispiel". Ist aber schon jemand mit diesem Namen online, so wird "Beispiel_x" als Nickname genommen, wobei x für irgendeine Zahl steht, meist tausend bis zehntausend.
Wie frage ich nun nach dem Namen? Ich bekomme es einfach nicht hin, da eine Wildcard hinzusetzen.

Gruß,
Allekatrase
 

Rushh0ur

Well-Known Member
c-b Experte
#2
Vorweg, ich kenne mich mit IRC Bots nicht aus. Die sind anscheinend in TCL programmiert.

Deine Beispielfunktion ist anscheinend eine Callback Funktion mit den angegeben Parametern, wobei nick der Name des Benutzers ist der sich eingeloggt hat. Mit einem einfachen String Vergleich sollte man dann auch Wildcards erkennen:

Code:
 if {[string match "Beispiel*" $nick]}
 
#3
Das Problem ist, dass "$nick" nicht definiert ist. "{nick host handle channel arg}" stehen eigentlich nur da, damit es nicht zu Verwirrungen beim Bot kommt, wenn jemand doch noch Parameter an den Befehl übergibt.
Die Lösung, die ich jetzt gefunden habe:
Code:
proc new {nick host handle channel arg} {
    global funstuff_enabled botnick

    if {[lsearch [chanlist #CHANNEL] Beispiel*] > -1 } {
    set txt "sieht: Beispiel  ist online."
    } else {
    set txt "Beispiel ist offline !"
    }

    mxirc_action $channel $txt
}
Gruß,
Allekatrase
 
Oben