m1ster_b1t
04-01-2009, 01:22
Ciao a tutti, sto facendo un Bot IRC in perl ,questo bot fa in modo da poter registrare delle richieste degli user , le elenca ,e le dovrebbe eliminare, solo che il mio problema sta nella parte dell'eliminazione della richiesta ora copio il code....
#Bot Richieste
	
if ($line =~ /\!richiedo\s+(.*?)\s+(.*)\s+(\d+)\s+(.*)/){
my $nickadd = $1;
my $richiestadd = $2;
my $annoadd = $3;
my $datadd = $4;
sleep(1);
if (my $pid = fork) {
waitpid($pid, 0);
}
else {
if (fork) {
exit;
}
else {
open(SUKA, '>>', "richieste.db");
print SUKA "$nickadd§$richiestadd§$annoadd§$datadd\r\n";
close (SUKA);
print $sk "PRIVMSG $canale2 :7.::9(8Richieste9)7::.7.::10 $nickadd ha richiesto 7.::9(6 $richiestadd dell'anno $annoadd 9)7::. richiesto il9 $datadd\r\n";
print $sk "PRIVMSG $canale2 :7.::9(8Grazie4 $nickadd 9)7::.10,NoN Appena La richiesta sara soddisfatta, Verra Inserita Nelle Richieste Soddisfatte\r\n";
exit;
}
}
}
if ($line=~/\!elenco/) {
sleep(1);
if (my $pid = fork) {
waitpid($pid, 0);
}
else {
if (fork) {
exit;
}
else {
open(SUKA , "richieste.db");
while ($_ = <SUKA>) {
my $cont = 0;
my @info=split(/\§/,$_);
my $nick2= @info[0];
my $richiesta22= @info[1];
my $anno22= @info[2];
my $data22= @info[3];
print $sk "PRIVMSG $canale3 :-----------------------------------------------------------------------------------------\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Nick 4)7::8. $nick2\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Ha richiesto 4)7::8. $richiesta22\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( data uscita della richiesta 4)7::8. $anno22\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Ha effettuato la richiesta Il 4)7::8. $data22\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Stato 4)7::8.4 richiesta ancora non soddisfatta da parte dello staff\r\n";
print $sk "PRIVMSG $canale3 :-----------------------------------------------------------------------------------------\r\n";
}
close (SUKA);
exit;
}
}
}
if ($line=~/\!cerca\s+(.*)/) {
my $ricerca = $1;
my $cont = 0;
print $sk "PRIVMSG $canale3 :8.7::4( Ricerca 4)7::8. $ricerca\r\n";
open(SUKA , "richieste.db");
while (<SUKA>) {
my @info=split(/\§/,$_);
if ($info[0]=~/$ricerca/i) {
if ($info[0] == @info[0]) {
$cont++;
print $sk "PRIVMSG $canale3 : .:( Trovato ):. $info[0]\r\n";
print $sk "PRIVMSG $canale3 :-------------------------------------\r\n";
print $sk "PRIVMSG $canale3 : .:( Richiesta ):. $info[1]\r\n";
print $sk "PRIVMSG $canale3 : .:( Anno ):. $info[2]\r\n";
print $sk "PRIVMSG $canale3 : .:( Data della richiesta ):. $info[3]\r\n";
print $sk "PRIVMSG $canale3 :-------------------------------------\r\n";
}
if ($cont == 0 ) {
print $sk "PRIVMSG $canale3 :8.7::4( Nessun Risultato 4)7::8.\r\n";
}
else {
print $sk "PRIVMSG $canale3 :8.7::4( Ricerca Terminata 4)7::8.\r\n";
}
close (SUKA);
}
}
}
if ($line=~/\!elimina\s+(.*)/){
my $ricerca = $1;
my $cont = 0;
open(SUKA , "richieste.db");
open SUKA2,">richieste.temp";
while ($_ = <SUKA>) {
chomp($_);
my @info=split(/\§/,$_);
if ($info[0]=~/$ricerca/i) {
	 
$cont++;
}else {
print SUKA2 "$info[0]§$info[1]§$info[2]§$info[3]§$info[4]";
}
}
if ($cont == 0 ) {
print $sk "PRIVMSG $canale3 :8.7::4( Nessun Risultato 4)7::8.\r\n";
system("del richieste.temp");
}
else {
print $sk "PRIVMSG $canale3 :8.7::4( Eliminato 4)7::8. $ricerca\r\n";
system("copy richieste.temp richieste.db");
system("del richieste.temp");
}
close (SUKA);
close (SUKA2);
system("del richieste.temp");
}
}
Come dicevo prima il problema sta nella parte dell'elimina, faccio un esempio per capire cosa succede:
all'interno di richieste.db vengono inserite le richieste in questo modo
mister§film§2008§23/12
m1k1fu0r1§stocazzo§1990§12/23
mister_bit§film2§2008§23/12
Ma il problema sta che quando io digito !elimina mister lui lo trova e elimina le informazioni ma mi cambia la disposizione delle rimanenti all'interno del file richieste.db tipo:
m1k1fu0r1§stocazzo§1990§12/23
mister_bit§film2§2008§23/12
le rimanenti sul file richieste.db risultano poi cosi messe una dietro laltra e quindi non me le riconosce piu se digito !elenco.
Come posso fare per risolvere?
:mc:
#Bot Richieste
if ($line =~ /\!richiedo\s+(.*?)\s+(.*)\s+(\d+)\s+(.*)/){
my $nickadd = $1;
my $richiestadd = $2;
my $annoadd = $3;
my $datadd = $4;
sleep(1);
if (my $pid = fork) {
waitpid($pid, 0);
}
else {
if (fork) {
exit;
}
else {
open(SUKA, '>>', "richieste.db");
print SUKA "$nickadd§$richiestadd§$annoadd§$datadd\r\n";
close (SUKA);
print $sk "PRIVMSG $canale2 :7.::9(8Richieste9)7::.7.::10 $nickadd ha richiesto 7.::9(6 $richiestadd dell'anno $annoadd 9)7::. richiesto il9 $datadd\r\n";
print $sk "PRIVMSG $canale2 :7.::9(8Grazie4 $nickadd 9)7::.10,NoN Appena La richiesta sara soddisfatta, Verra Inserita Nelle Richieste Soddisfatte\r\n";
exit;
}
}
}
if ($line=~/\!elenco/) {
sleep(1);
if (my $pid = fork) {
waitpid($pid, 0);
}
else {
if (fork) {
exit;
}
else {
open(SUKA , "richieste.db");
while ($_ = <SUKA>) {
my $cont = 0;
my @info=split(/\§/,$_);
my $nick2= @info[0];
my $richiesta22= @info[1];
my $anno22= @info[2];
my $data22= @info[3];
print $sk "PRIVMSG $canale3 :-----------------------------------------------------------------------------------------\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Nick 4)7::8. $nick2\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Ha richiesto 4)7::8. $richiesta22\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( data uscita della richiesta 4)7::8. $anno22\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Ha effettuato la richiesta Il 4)7::8. $data22\r\n";
print $sk "PRIVMSG $canale3 :8.7::4( Stato 4)7::8.4 richiesta ancora non soddisfatta da parte dello staff\r\n";
print $sk "PRIVMSG $canale3 :-----------------------------------------------------------------------------------------\r\n";
}
close (SUKA);
exit;
}
}
}
if ($line=~/\!cerca\s+(.*)/) {
my $ricerca = $1;
my $cont = 0;
print $sk "PRIVMSG $canale3 :8.7::4( Ricerca 4)7::8. $ricerca\r\n";
open(SUKA , "richieste.db");
while (<SUKA>) {
my @info=split(/\§/,$_);
if ($info[0]=~/$ricerca/i) {
if ($info[0] == @info[0]) {
$cont++;
print $sk "PRIVMSG $canale3 : .:( Trovato ):. $info[0]\r\n";
print $sk "PRIVMSG $canale3 :-------------------------------------\r\n";
print $sk "PRIVMSG $canale3 : .:( Richiesta ):. $info[1]\r\n";
print $sk "PRIVMSG $canale3 : .:( Anno ):. $info[2]\r\n";
print $sk "PRIVMSG $canale3 : .:( Data della richiesta ):. $info[3]\r\n";
print $sk "PRIVMSG $canale3 :-------------------------------------\r\n";
}
if ($cont == 0 ) {
print $sk "PRIVMSG $canale3 :8.7::4( Nessun Risultato 4)7::8.\r\n";
}
else {
print $sk "PRIVMSG $canale3 :8.7::4( Ricerca Terminata 4)7::8.\r\n";
}
close (SUKA);
}
}
}
if ($line=~/\!elimina\s+(.*)/){
my $ricerca = $1;
my $cont = 0;
open(SUKA , "richieste.db");
open SUKA2,">richieste.temp";
while ($_ = <SUKA>) {
chomp($_);
my @info=split(/\§/,$_);
if ($info[0]=~/$ricerca/i) {
$cont++;
}else {
print SUKA2 "$info[0]§$info[1]§$info[2]§$info[3]§$info[4]";
}
}
if ($cont == 0 ) {
print $sk "PRIVMSG $canale3 :8.7::4( Nessun Risultato 4)7::8.\r\n";
system("del richieste.temp");
}
else {
print $sk "PRIVMSG $canale3 :8.7::4( Eliminato 4)7::8. $ricerca\r\n";
system("copy richieste.temp richieste.db");
system("del richieste.temp");
}
close (SUKA);
close (SUKA2);
system("del richieste.temp");
}
}
Come dicevo prima il problema sta nella parte dell'elimina, faccio un esempio per capire cosa succede:
all'interno di richieste.db vengono inserite le richieste in questo modo
mister§film§2008§23/12
m1k1fu0r1§stocazzo§1990§12/23
mister_bit§film2§2008§23/12
Ma il problema sta che quando io digito !elimina mister lui lo trova e elimina le informazioni ma mi cambia la disposizione delle rimanenti all'interno del file richieste.db tipo:
m1k1fu0r1§stocazzo§1990§12/23
mister_bit§film2§2008§23/12
le rimanenti sul file richieste.db risultano poi cosi messe una dietro laltra e quindi non me le riconosce piu se digito !elenco.
Come posso fare per risolvere?
:mc: