Archiv verlassen und diese Seite im Standarddesign anzeigen : X-Chat perl script
Chakotay
28-07-2006, 18:44
mit
IRC::add_message_handler("NOTICE","test_NOTICE");
sub test_NOTICE {
Xchat::command("SAY gelb");
return 1 ;
}
screibt mein script bei jeder art von NOTICE das word "gelb" ins irc
das iss mir zu allgemein
leider weiss ich nicht wie ich ihn nur auf ein word in der NOTICE (zB. IDENTIFY) reagieren lasse :-(
kennt sich hier jemand damit aus :-)
Der Text, der den callback ausgelöst hat, wird normalerweise als erstes Argument in @_ übergeben.
Also als erste Zeile in die Subfunktion einfügen:
my $text=shift;
Dann kannst Du den Inhalt auswerten.
Chakotay
29-07-2006, 21:27
jo
und wie sag ich ihm dann das er den befehl nur ausführen soll wenn $text IDENTIFY enthällt ?
iss doch bestimmt wieder n if oder ?
ich hasse if's ^^
IRC::add_message_handler("NOTICE","test_NOTICE");
sub test_NOTICE {
my $text=shift;
if ($text =~ m/IDENTIFY/)
{
Xchat::command("SAY gelb");
}
return 1 ;
}
Wenn keine RE verwendet werden sollen, geht auch
if (index($text,'IDENTIFY') >= 0) (index liefert -1 wenn kein Suchtreffer erfolgt)
oder
if (substr($text,0,8) eq 'IDENTIFY') (wenn das IDENTIFY direkt am Stringanfang steht)
Es gibt sicher noch ein paar mehr Möglichkeiten.
if beißt nicht und tut nicht weh!
Chakotay
30-07-2006, 15:18
danke
ich weiss ja das se nicht beissen
nur leider wollen se bei mir nie so wie ich^^
---
edit
kann man dem if auch noch hinzufügen das
er er einmal ausgeführt wurde
er nicht nochmal innerhalb 5 sec gestartet werden kann ???
es kommt hier bei mir nämlich zu ner lustigen dauerschleife^^
Ich hab die Doku von den Xchat-Skripten mal vor Jahren überflogen, hatte aber nie richtig Zeit für eigene Entwürfe.
Wenn Xchat die Subroutinen selber einbindet, dann kann man vermutlich keine globalen Variablen nutzen, um sich die Aufrufzeit zu merken. Dann bleibt beispielsweise, die Ausgabe von time in einer Datei zu speichern, wenn die Funktion aufgerufen wurde (im Funktionsblock von if und diesen Wert vor jedem Aufruf zu prüfen.
Vielleicht hilft ja schon ein sleep(5) im Funktionsblock, wenn Xchat dieselbe Funktion pro Server nicht mehrfach gleichzeitig aufruft.
Chakotay
31-07-2006, 18:18
Xchat::hook_timer(1000) muss da irgendwie zwischen
aber wo wir gerade bei den if's sind^^
wie sag ich ihm das der befehl nur startet wenn 2 variabelen passen
sub test_NOTICE {
my $text = $_[0][0];
my $text2 = $_[0][1];
if ($text =~ m/IDENTIFY/) ??? ($text2 =~ m/password/) ???
{
Xchat::command("SAY gelb");
} else {
Xchat::command("SAY schwartz");
}
return 1 ;
}
---
edit
wie kann ich eine variabele die im inneren einer sub definiert werden muss auch in anderen sub's mitbenutzten ?
---
edit2
hat sich erledigt bin selber druff gekommen das ein
sub test_NOTICE {
my $text = $_[0][0];
my $text2 = $_[0][1];
if ($text =~ m/IDENTIFY/) {
if ($text2 =~ m/password/) {
Xchat::command("SAY gelb");
} else {
Xchat::command("SAY schwartz");
}
}
return 1 ;
}
die lösung war^^
Statt verschachtelten ifs, geht bei Deinem alten Ansatz auch:
if ($text =~ m/IDENTIFY/) ??? ($text2 =~ m/password/) ???
if (($text =~ m/IDENTIFY/) and ($text2 =~ m/password/)) ???
wie kann ich eine variabele die im inneren einer sub definiert werden muss auch in anderen sub's mitbenutzten ?
Kann ich nur ahnen was gemeint ist.
Vielleicht meinst Du sowas:
my $Ozahl=0;
$Ozahl=&abcd{$Ozahl);
$Ozahl=&abcde{$Ozahl);
sub abcd {my $zahl=shift; $zahl++; return $zahl;}
sub abcde {my $zahl=shift; $zahl+=2; return $zahl;}
Voraussetzung ist aber, dass das Hauptprogramm zwischen den subs weiterläuft und sich die eigentliche Variable merkt. Werden die subs auch noch von Eventhandlern ausgelöst, sind race-conditions zu erwarten.
Chakotay
08-08-2006, 11:48
zu 1 : cool :-) das verkleinert meine ifs enorm :-D
zu 2 meinte ich eig was wie
sub start {
my $mess = shift;
***hier mach ich mehrere ding mit dem $mess ^^***
return 1;
}
sub weiter_im_text {
***hier will ich $mess nochmal verwenden***
return 1;
}
hab ich jetzt aber schon selber gelöst durch
sub erster_start {
my $mess = shift;
sub start {
***hier mach ich mehrere ding mit dem $mess ^^***
return 1;
}
sub weiter_im_text {
***hier verwenden ich $mess nochmal***
return 1;
}
return 1;
}
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.