PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : if abfrage + ausgabe bei bestimmter irc server ausgabe


core
14.07.2003, 18:03
folgendes:
ich bekomm nen text zugeschickt (vom irc server, also ohne nick usw) der so aussieht:
Information for channel ''

Creation time:: Mon Aug 11 02:30:53 2003
Topic:: <none>
Channel mode(s):: <none>
Users (@ = op, + = voice, * = clone)
@Q (TheQBot@cserve.irc4c.net) (The Q Bot)
@L (TheLBot@lightweight.service.irc4c.net) (go m00)
@ix7` (your@server2.web4clans.com) (ix7 is your god!) ix7

Total users:: 3 (3 ops, 0 voiced, 0 clones)

Bans on channel::
<none>

mit diesem code hier frag ich die ausgabe von oben ab. nun möchte ich aber das wenn in dem text von oben bei "Users" was mit "TheLBot@lightweight.service.irc4c.net" steht eine ausgabe bekommen, nen print langt erstmal. wenn nix von "TheLBot@lightweight.service.irc4c.net" auftaucht soll das script einfach weiterlaufen. also keine ausgabe.
hab gestern ewig dran gesessen und nix hinbekommen.
# CHECK parsing
if($buffer =~ /:server2.web4clans.com 286 $botnick :Information for channel (\S+)/i) {
my $chan=$1;
$chan =~ s/\'//g; # To handle different versions of qnet patch.
$check = 1; # Damn you Durzel.
$chandata = {
chan => "",
ctime => "",
topic => "",
modes => "",
users => "",
stats => ""};
$$chandata{'chan'}=$chan;
}
if($check) {
if($buffer =~ /:server2.web4clans.com 290 $botnick :.+Creation time:: (.+)$/i) {
$$chandata{'ctime'}=$1;
}
if($buffer =~ /:server2.web4clans.com 290 $botnick :.+Topic:: (.+)$/i) {
$$chandata{'topic'}=$1;
}
if($buffer =~ /:server2.web4clans.com 290 $botnick :.*Channel mode.s.:: (.+)$/i) {
$$chandata{'modes'}=($1);
chomp($$chandata{'modes'});
}
if($buffer =~ /:server2.web4clans.com 287 $botnick :\s+.\s+(\S+) \((\S+)\)\s+(.+)$/i) {
my $nick = $1;
my $host = $2;
my $ircname = $3;
$ircname =~ s/\r//; # Remove CR
$$chandata{'users'}=$$chandata{'users'} . "$nick!$host$ircname<br />\n";
}



if($buffer =~ /:server2.web4clans.com 290 $botnick :Total users:: (\d+) \S(\d+) ops, \d+ voiced, (\d+) clones\S/i) {
if($2 < 2) {
&connsend($$current{'conn'},<<"EOF");
<b>Failed:</b> you have too few users/ops on that channel.
</ul>
</body>
</html>
EOF
$select->remove($$current{'conn'});
$$current{'conn'}->close;
$check=0;
$ready=1;
next;
}
if($3 > 2) { # Allow 2 clones, in case of someone reconnecting.
&connsend($$current{'conn'},<<"EOF");
<b>Failed:</b> you have clones on that channel.</li>
</ul>
</body>
</html>
EOF
$select->remove($$current{'conn'});
$$current{'conn'}->close;
$check=0;
$ready=1;
next;
}
$$chandata{'stats'}="U: $1 O: $2 C: $3";
}
if($buffer =~ /:server2.web4clans.com 290 $botnick :Bans/i) {
&addtoqueue();
}
}
}
}


Jan Krüger
15.07.2003, 00:31
Es handelt sich ja anscheinend um dieses Stückchen Code hier:
if($buffer =~ /:server2.web4clans.com 287 $botnick :\s+.\s+(\S+) \((\S+)\)\s+(.+)$/i) {
my $nick = $1;
my $host = $2;

Und da steht jetzt praktischerweise in $host der user@host-String zu dem User drin, der gerade geparst wird. Kannst du also an der Stelle einfach mit deinem Lightweight@sonstwas vergleichen.
Noch Fragen? :)

core
19.07.2003, 21:54
bis dahin geht alles. danke !

[edit] hoffentlich ist es nun verständlich *g*
nun muss ich diese zeile auslesen@testnick1 (ix7@ix7.home.core6.de) (www.core6.de) test
wenn da "@testnick1" nicht steht ist es falsch.
wenn da nur "testnick1" (also ohne dem @, oder wenn da nen + steht) ist es auch falsch. den text testnick1 hab ich in ner var $nick.

also @$nick

Jan Krüger
20.07.2003, 12:23
Achso, du willst überprüfen, ob in der Zeile ein bestimmter Nick zu finden ist, und das als Op, ja?
Das würde dann so aussehen...

if($buffer =~ /:server2.web4clans.com 287 $botnick :\s+.\s+\@$nick/i) {
...

core
20.07.2003, 16:10
ich danke dir :)
wollte grad =~ durch !~ ersetzen, brauch ja die ausgabe wenn der user kein op hat. ging net ...
zum glück gibts else *g*
danke !

[edit]
:confused:
was ich nicht blick ...if($buffer =~ /:$requestpage 287 $botnick :\s+.\s+\@$nick1/i) {
} else {

ich hab ausversehen $nick1 geschrieben. das ist aber nirgends eingetragen. wenn ich nur $nick hinschreib gehts nicht!
da es mit $nick1 geht, lass ich es erstmal so.
echt komisch :confused:

core
03.08.2003, 00:21
der part von oben geht nun gar nicht mehr. fragt nicht warum!

ich brauch nur noch den check ob der user im channel op hat.
ich nutz den /chech #channel befehl.
der teil mit der gewüschten ausgabe könnte so aussehen:
##
:de.irc4c.net 287 R : test4 (test4@test4.home.core6.de) (test4) test4
:de.irc4c.net 287 R : ix7 (your@de.irc4c.net) (www.core6-de!) ix7
:de.irc4c.net 287 R : test2 (test2@test2.home.core6.de) (test2) test2
:de.irc4c.net 287 R : @test1 (test1@test1.home.core6.de) (test1) test1
:de.irc4c.net 287 R : test3 (test3@test3.home.core6.de) (test3) test3
##
so ist mein script aufgebaut.

while(my $buffer = $irc->getline) {

...

if($buffer =~ /:$requestpage 287 $botnick :xxxxxxxxxxxxxxxxxxx) {
} else {

...

für xxxxxxxxxxxxxxxxxxx brauch ich den part um nach @test1 zu suchen.
wenn @test1 gefunden wurde soll das script die else funktion überspringen.
wenn @test1 NICHT gefunden wurde soll else aktiv werden.
test1 hab ich als var -> $user

Jan Krüger
03.08.2003, 00:56
\@$user\s

core
03.08.2003, 01:47
was ich vergessen hab ...

ich muss die lines erst alle auslesen.
wenn nirgends (also in keiner zeile) @test1 auftaucht soll else aktiv werden.
wenn @test1 in irgendeiner zeile steht soll mein else übergangen werden.

Jan Krüger
03.08.2003, 01:49
Das ist doch jetzt nur noch klassische Programmierlogik...

while() {
if() {
$usergefunden = 1;
}
}
if (!$usergefunden) {
# Gesuchter User ist nirgendwo aufgetaucht
return;
}