Ik heb de volgende perl code
het enigste wat de bovenstaande code doet is iedere keer het commando /users en /list uit voeren op IRC en dat een een log file schrijven, dat doet hij goed.
alleen hij doet het achter mekaar,
nu wil ik dat hij dat 1x in de 20 minuten doet.
maar als ik er een sleep 1200 ; tussen zet dan doet hij maar om de 20 min een regel schrijven in het desbetrefende log filetje.
weet iemand of hier een appart commando voor is anders dan sleep? of een andere handig commandotje dat het loggen toch doorgaat?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| #!/usr/bin/perl
use IO::Socket;
$| = 1 ;
$server = "192.168.0.1" ;
$port = 6667 ;
$nick = "statserv" ;
$host = "statserv.fearnet.nl" ;
$pass = "3kkdzoeh" ;
&connect ;
sub connect {
while (1) {
$iaddr = inet_aton($server);
$paddr = sockaddr_in($port, $iaddr);
$proto = getprotobyname('tcp');
socket(IRC_SOCK, PF_INET, SOCK_STREAM, $proto) or die "[ERROR] kan socket niet maken: $!\n";
connect(IRC_SOCK, $paddr) or die "[ERROR] Kan geen Verbinding maken met $server:$port \nError: $!\n\n" ;
&login;
&join ;
while (<IRC_SOCK>) {
&parse($_);
}
close IRC_SOCK;
$login = undef;
sleep(2);
}
}
sub login {
raw("NICK $nick");
raw("USER $nick $host $server :$nick");
raw("NICKSERV identify $pass");
sleep 1;
raw("OPER $nick $pass") ;
}
sub raw {
select(IRC_SOCK);
$| = 1;
print IRC_SOCK "$_[0]\n";
}
sub parse {
chop($_);
chop($_);
if (/^PING \:(.+)/) {
raw("PONG :$1");
}
&stats ;
if (/^\:(.+?) 265 /) {
open(LOG, ">log");
@stat = split /\:/ ;
print LOG "##### /USERS #####\n" ;
print LOG "$stat[2] $stat[3] $stat[4]\n" ;
close(LOG) ;
}
if (/^\:(.+?) 266 /) {
open(LOG, ">>log");
@stat = split /\:/ ;
print LOG "$stat[2] $stat[3] $stat[4]\n" ;
print LOG "##### /LIST #####\n";
close(LOG) ;
}
if (/^\:(.+?) 322 /) {
open(LOG, ">>log");
@stat = split /\s/ ;
print LOG "$stat[3] $stat[4]\n" ;
close(LOG) ;
}
}
sub join {
raw("JOIN #services.log");
raw("PART #fearnet");
}
sub stats {
raw("USERS");
raw("LIST >0");
} |
het enigste wat de bovenstaande code doet is iedere keer het commando /users en /list uit voeren op IRC en dat een een log file schrijven, dat doet hij goed.
alleen hij doet het achter mekaar,
nu wil ik dat hij dat 1x in de 20 minuten doet.
maar als ik er een sleep 1200 ; tussen zet dan doet hij maar om de 20 min een regel schrijven in het desbetrefende log filetje.
weet iemand of hier een appart commando voor is anders dan sleep? of een andere handig commandotje dat het loggen toch doorgaat?
specs : http://specs.tweak.to/7435