Skip to content.
Script > XNatChat > XNatChat024Versione

#!/usr/bin/perl
#
#SCRIPT: XNatChat.pl
#
#VERSIONE: 0.1
#
#AUTORE:
# Vittorio Zuccala' (nathanvi)
# perlmonk@nathanvi.it
#
#LICENZA
#Questo programma e' free software; puoi redistribuirlo e/o modificarlo
# nei termini della GNU General Public License come e' stata pubblicata 
# dalla Free Software Foundation dalla versione 2 della Licenza.
# Questo programma e' distribuito nella speranza di essere utile,
# ma SENZA ALCUNA GARANZIA; non si fornisce alcuna garanzia di
# COMMERCIALIZZAZIONE o FUNZIONAMENTO.  Consulta la
# GNU General Public License per maggiori dettagli.
#Originale: http://www.gnu.org/licenses/gpl.txt
#Italiano: http://www.softwarelibero.it/gnudoc/gpl.it.txt
#
#Per informazioni sulla licenza consulta il file di testo:
#   doc/LICENZA
#
#Per informazioni sull'installazione, configurazione e requisiti
#di sitema consulta il file di testo:
#   doc/INSTALL
#   
#Per avere delle informazioni sulle funzionalita' dello script si
#consulti il file:
#   doc/HELP


BEGIN{
        if($^O=~/Win/i){
                eval "use Win32";
                die $@ if $@;
        }
}


###################################################
#   ATTENZIONE
#   SE SI HANNO PROBLEMI A SENTIRE I SUONI
#   SI CAMBI LA VARIABILE $snd_cmd.
#   La prima nel caso si sia in un sistema linux, la seconda
#   se si e' in un sistema windows e si metta il percorso
#   del programma per la riproduzione di file WAV
###################################################
my $snd_cmd;
my @dir;
my $dirscript;
my $tmp;

$snd_cmd='/usr/bin/aplay' if $^O=~/Linux/i;
$snd_cmd=$ENV{PROGRAMFILES}.'\Windows Media Player\mplayer2.exe' if $^O=~/Win/i;

#Sotto directory in cui stanno i suoni. 
#Si puo' lasciare il valore indicato
my $snd_dir="snd";   

#I suoni sono impostati nella funzione "sound"
my $snd_private="matrixsound.wav";
my $snd_hilight="4magnum.wav";
my $snd_mention="whoa3.wav";
my $snd_init=   "20th.wav";


#####################################
##########
##########   NON TOCCARE DA QUI!!
##########
#####################################

#Moduli da caricare all'inizio dello script.
#Sono tutti moduli standard.
use strict;
use File::Find;


#Configurazione:
#Directory in cui e' inserito lo script
#In Linux e' la dir da dove parte lo script
#In windows la vado a cercare assumendo che se non e'
#nella dir di default dei dati delle applicazioni, di solito
#c:\Document and Settings\utente\application data\X-Chat2 o qualcosa di simile
#non trova nulla...


if ($^O=~/Linux/i){
        chdir($ENV{HOME}); 
        @dir=<.x*hat*>; 
        find(\&wanted, @dir);
        sub wanted {
                /$snd_dir\/$snd_init/i 
                && -d $File::Find::name;
                $tmp=$File::Find::dir;
        }
        $dirscript=$ENV{HOME}.'/'.$tmp;
        $dirscript=~s/\\/\//g;
}



if ($^O=~/Win/i){
        chdir($ENV{APPDATA}); 
        @dir=<X*hat*>; 
        find(\&wanted, @dir);
        sub wanted {
                /$snd_init/i;
                $tmp=$File::Find::dir if $_=~/$snd_init/;
        }
        $dirscript=$ENV{APPDATA}.'/'.$tmp;
        $dirscript=~s/\//\\/g;
}



#Stringa che contrassegna in ~/.xchat/xchat.conf i valori da evidenziare
my $hlt="irc_extra_hilight";



my $script="XNatChat";
my $ver="v0.2.4";
my ($xver, $mynick, $chan, $server, $xdir, $away, $netname, $serverhost, $chantopic);


#Il terzo parametro e' la shutdown routine ovvero cosa deve fare quando chiudo
#il programma. Per esempio potrei scegliere di salvare dei file di configurazione
#Il quarto parametro è riservato per usi futuri.

IRC::register($script, $ver, "", "");

#Spiegazione di come funziona lo script per l'utente.

IRC::print("\cC0\cB$script $ver by \cB\cC4N\cC7athan\cC5VI\cO is loaded\n");
IRC::print("/helpnat per avere informazioni sui comandi messi a disposizione dallo script\n");
IRC::command("/exec $snd_cmd $dirscript/$snd_init & 2>/dev/null") if $^O=~/Linux/i;
system("\"$snd_cmd\" \"$dirscript\\$snd_init\"") if $^O=~/Win/i;


####################################################################
############
############ INFORMAZIONI
############
#####################################################################


IRC::add_command_handler("informazioni", "informazioni");
sub informazioni{
        $xver      = IRC::get_info(0);
        $mynick      = IRC::get_info(1); 
        $chan      = IRC::get_info(2); 
        $server      = IRC::get_info(3);
        $xdir      = IRC::get_info(4);
        $away      = IRC::get_info(5);
        $netname   = IRC::get_info(6);
        $serverhost   = IRC::get_info(7);
        $chantopic   = IRC::get_info(8);
        
        IRC::print("Versione XChat: $xver,\nTuo nick: $mynick,\nChannel attuale: $chan,\n");
        IRC::print("Server: $server,\nDirectory XChat: $xdir,\nStato away: $away,\n");
        IRC::print("Network name: $netname,\nServer HostName: $serverhost,\nChannel Topic: $chantopic");
}

####################################################################
############
############ HELP all'utente che vuole sapere i comandi dello script
############
#####################################################################

IRC::add_command_handler("helpnat", "helpnat");
sub helpnat{
        IRC::print("\cBComandi disponibili:\n");
        IRC::print("\cC4/helpnat\cC0\cB Stampa questo menu'!.\n");
        IRC::print("\cC4/sound on|off\cC0\cB permette di abilitare o disabilitare gli effetti sonori.\n");
        IRC::print("\cC4/informazioni\cC0\cB Fornisce le informazioni su utente e programma.\n\n");
        IRC::print("\cC4/var\cC0\cB Fa vedere tutte le variabili di sistema\n");
        IRC::print("\cC4/ef\cC0\cB Esclama una imprecazione forte!.\n");
        IRC::print("\cC4/es\cC0\cB Esclama una imprecazione soft!.\n\n");
        IRC::print("\cC4/sys\cC0\cB Fornisce tutte le info di sistema elencate di seguito\n");   
        IRC::print("\cC4/os\cC0\cB Fornisce le info sul OS\n");
        IRC::print("\cC4/uptime\cC0\cB Fornisce il tempo di uptime della macchina\n");
        IRC::print("\cC4/mem\cC0\cB Fornisce le info sulla memoria disponibile/usata\n");
        IRC::print("\cC4/cpu\cC0\cB Fornisce le info sullo stato della cpu\n");
        IRC::print("\cC4/bh\cC0\cB Permette di eseguire dei comandi di shell e vedere autoput su Xchat\n");
        IRC::print("\cC4/bhs\cC0\cB Come /bh ma fa vedere autoput a altri utenti\n");
}



IRC::add_command_handler("var", "var");
sub var{
        IRC::print("\cBVariabili:\n");
        IRC::print("\cB\$Comando riproduzione suoni:$snd_cmd\n"); 
        IRC::print("\cB\$Directory dello script $dirscript\n");
        foreach (keys(%ENV)){
                IRC::print("\c0\$ENV{$_} = $ENV{$_}\n");         }
        
        if($^O=~/Win/i){
                IRC::print("MODULO WIN32\n");
                
                my $BuildNum=Win32::BuildNumber();
                IRC::print("Active Perl Build Number: $BuildNum\n");
                
                my $FsType=Win32::FsType();
                IRC::print("FS Type: $FsType\n");
                
                my $Arch=Win32::GetArchName();
                IRC::print("Arch Name: $Arch\n");
                
                my $Chip=Win32::GetChipName(); 
                IRC::print("Chip: $Chip\n");
                
                my $PWD=Win32::GetCwd();
                IRC::print("Per impostare variabile... PWD: $PWD\n");
                
                my $OSTipo=Win32::GetOSVersion();
                IRC::print("OS Version: $OSTipo\n");
                
                my $OSName=Win32::GetOSName();
                IRC::print("OS Name: $OSName\n");
                
                my $Login=Win32::LoginName();
                IRC::print("Login: $Login\n");
                
                my $Nodo=Win32::NodeName();
                IRC::print("NodeName: $Nodo\n");
                
                IRC::print("Comando suono: $snd_cmd $dirscript\n");
        }
        
}

####################################################################
############
############ HANDLER a cui si da in pasto ciò che scrivono gli altri
############ effettuando dei controlli.
############
#####################################################################


IRC::add_message_handler("PRIVMSG", "privmsg");
sub privmsg{
        my $line = shift;
        $line =~ /:.*?\s*([^!]*)!([^@]*@[^ ]*) +(.*?)\s*:(.*)/;
        my ($nick, $host, $chan, $text) = ($1, $2, $3, $4);
        if ($text =~ /^\cA.*\cA$/) { return 0 };
        $chan =~ s/PRIVMSG\s*//;
        my $cur_nick = IRC::get_info(1);
        my $awaystat=IRC::get_info(5);
        
        if ($chan =~ /\Q$cur_nick\E/i) {
                if ($snd_private) {
                        IRC::command("/exec $snd_cmd $dirscript/$snd_private &") if $^O=~/Linux/i;
                        system("\"$snd_cmd\" \"$dirscript\\$snd_private\"") if $^O=~/Win/i;
                }
        }
        if ($text =~ /\b\Q$cur_nick\E\b/i) {
                if ($text =~ /^\s*$cur_nick/i) {
                        if ($snd_hilight) {
                                IRC::command("/exec $snd_cmd $dirscript/$snd_hilight &") if $^O=~/Linux/i;
                                system("\"$snd_cmd\" \"$dirscript\\$snd_hilight\"") if $^O=~/Win/i;
                        }
                } else {
                        if ($snd_mention) {
                                IRC::command("/exec $snd_cmd $dirscript/$snd_mention &") if $^O=~/Linux/i;
                                system("\"$snd_cmd\" \"$dirscript\\$snd_mention\"") if $^O=~/Win/i;
                                
                        }
                }
                
        }
        
        
        
        if(($text =~ /^$cur_nick/i) && $awaystat){
                IRC::command("/say \cC0Sono la Segretaria di \cC4$cur_nick \cC0Al momento non c'e', riprova piu' tardi, mi ha detto di preparargli il caffe' quindi torna...");
        }
        
        if(($text =~ /'.*'/i) && $nick eq $cur_nick){
                IRC::command("/say \c0Comando: \cC8$1");
        }
        
        return 0;
}


####################################################################
############
############ COMANDI
############
#####################################################################



#ESCLAMAZIONI FORTI

IRC::add_command_handler("ef", "ehard");
sub ehard{
        
        my @aM=("Porca","Baldracca","Vacca", "Puttana", 
        "Merda", "Fanculo", "Bocchinara", "Fagottara", "Pornostar",
        "Putrefatta", "Appestata", "Necrofila", "Corsara", "Mongoloide",
        "Pelandrona", "Psicotica");
        my @bM=("la Juve","la miseria", "la Eva", "la vacca", 
        "la troia", "la galera", "ogni squadra di calcio ma soprattutto la Juve",
        "la vergine che non la da");
        my @cM=("e zoccola la miseria!","e finocchi i suoi figli!",
        "e complicata la vita!","e gioventù sprecata!",
        "ed anche assassina!", "ed anche lebbrosa!", 
        "ed anche mercenaria!", "e la Juve fallita!");
        
        my($index,$a,$b,$c);
        
        srand;
        $index = rand @aM;
        $a = @aM[$index];
        $index = rand @bM;
        $b = @bM[$index];
        $index = rand @cM;
        $c = @cM[$index];
        
        IRC::command("/say $a $b $c");
        return 1;
        
}

#ESCLAMAZIONI SOFT

IRC::add_command_handler("es", "esoft");
sub esoft{
        
        my @aM=("Per dindirindina...",      "Misericordia",
        "O mannaggia!",         "Santa Blatta",
        "Porcellina la miseriotta!!",    "Per la miseria",
        "Ma pensa te!",         "Per dinci!",
        "Oh gioventù bruciata!");
        
        my($index,$a,$b,$c);
        
        srand;
        $index = rand @aM;
        $a = @aM[$index];
        
        
        IRC::command("/say $a ");
        return 1;
        
}


#IMPOSTAZIONE DEI SUONI

IRC::add_command_handler("sound", "sound");
sub sound{
        my $ok=1;
        my $par=shift;
        if($par eq "on"){
                $snd_private="matrixsound.wav";
                $snd_hilight="4magnum.wav";
                $snd_mention="whoa3.wav";
                $snd_init="20th.wav";
                IRC::print("I suoni sono stati abilitati!");
        }
        elsif($par eq "off"){
                $snd_private="";
                $snd_hilight="";
                $snd_mention="";
                IRC::print("I suoni sono stati esclusi!");   
        }
        else{
                IRC::print("I parametri ammessi da comando sono \cC4\"on\" \cC0e \cC4\"off\"\cC0!");   
        }
}


#PASSAGGIO DI COMANDI SHELL
IRC::add_command_handler("bh", "bash");
sub bash{
        my @par=shift;
        my $result=`@par`;
        IRC::print("$result");   
}



#PASSAGGIO DI COMANDI SHELL E STAMPA A VIDEO
IRC::add_command_handler("bhs", "bashscreen");
sub bashscreen{
        my @par=shift;
        my $result=`@par`;
        IRC::command("/say $result ");
        
}

##############################################################
##########
##########   INFORMAZIONI DI SISTEMA
##########
##############################################################

# Tutte le informazioni
IRC::add_command_handler("sys", "sys_handler");
sub sys_handler{
        IRC::command("/os");
        IRC::command("/cpu");
        IRC::command("/mem");
        IRC::command("/uptime");
        IRC::command("/procs");
        return 1;
}   

#OPERATING SYSTEM
IRC::add_command_handler("os", "os_handler");                      
sub os_handler{
        my $kerver=`uname -nrsm` if $^O=~/Linux/i;
        my $kerver=Win32::GetOSName() if $^O=~/Win/i;
        chomp($kerver);
        IRC::command("/say \cBOS::\cC4 $kerver");
        return 1;
}

#UPTIME
IRC::add_command_handler("uptime", "uptime_handler");
sub uptime_handler{
        if($^O=~/Linux/i){
                my $uptime=`/usr/bin/uptime`;
                my (@fuptime,@fuptime,@puptime,@uptimea);
                
                if ($uptime =~ /days/) {
                        @fuptime=split("  load", $uptime);
                        IRC::command("/say \cBUPTIME::\cC4 $fuptime[0]");
                        return 1;
                }
                if ($uptime =~ /day/){
                        @fuptime=split("  load", $uptime);
                        IRC::command("/say \cBUPTIME::\cC4 $fuptime[0]");
                        return 1;      
                }
                if ($uptime =~ /min/)
                {
                        @uptimea=split("up ", $uptime);
                        @fuptime=split(" min", $uptimea[1]);
                        IRC::command("/say \cBUPTIME::\cC4 [$fuptime[0] Mins]");
                        return 1;
                }
                else
                {
                        @uptimea=split(",", $uptime);
                        @fuptime=split("up ", $uptimea[0]);
                        @puptime=split(":", $fuptime[1]);
                        IRC::command("/say \cBUPTIME::\cC4 [$puptime[0] Hours]:[$puptime[1] Mins]");
                        return 1;
                }
        }
        elsif($^O=~/Win/i){
                IRC::command("/say UPTIME? Sono davvero in imbarazzo. Davvero puoi chiedere tanto a un sistema windows?");
                return 1;
        }
        else{
                IRC::command("/say Purtroppo il mio plugin non ha riconosciuto il sistema e quindi non sa determinare l'UPTIME");
                return 1;
        }
}



#CPU

IRC::add_command_handler("cpu", "cpu_handler");
sub cpu_handler{
        if($^O=~/Linux/i){
                my $cpu_name=`cat /proc/cpuinfo | grep "model name"`;
                chomp($cpu_name);
                my @name=split(":", $cpu_name);
                my $fname=$name[1];
                my $cpu_speed=`cat /proc/cpuinfo | grep "cpu MHz"`;
                chomp($cpu_speed);
                my @speed=split(":", $cpu_speed);
                my $fspeed=$speed[1];
                my $full=`procinfo`;
                my @lcpu=split("\n", $full);
                my @luser=split(":", $lcpu[8]);
                my @lnice=split(":", $lcpu[9]);
                my @lsyst=split(":", $lcpu[10]);
                my @lidle=split(":", $lcpu[11]);
                my @user=split("  ", $luser[3]);
                my @nice=split("  ", $lnice[3]);
                my @syst=split("  ", $lsyst[3]);
                my @idle=split("  ", $lidle[3]);
                
                IRC::command("/say \cBCPU:: [Model:$fname]:[Speed:$fspeed MHz]");
                IRC::command("/say \cBCPU:: [User: $user[1]][Nice $nice[1]][System $syst[1]][Idle $idle[1]]");
                return 1;
        }
        elsif($^O=~/Win/i){
                my $cpu_name=eval"Win32::GetChipName.\":\".$ENV{PROCESSOR_IDENTIFIER}";
                
                chomp($cpu_name);
                IRC::command("/say \cBCPU:: [Model:$cpu_name]");
                return 1;
        }
        else{
                IRC::command("/say Purtroppo il mio plugin non ha riconosciuto il sistema e quindi non sa determinare la CPU");
        }
}        


#MEMORIA DISPONIBILE

IRC::add_command_handler("mem", "mem_handler");
sub mem_handler{
        if($^O=~/Linux/i){
                my $membar;
                my $tot=`cat /proc/meminfo | grep MemTotal`;
                chomp($tot);
                my @ftot=split(" ", $tot);
                my $free=`cat /proc/meminfo | grep MemFree`;
                chomp($free);
                my @ffree=split(" ", $free);
                my $used=$ftot[1]-$ffree[1];
                my $pertot=100/$ftot[1];
                my $peruse=$pertot*$used;
                my $checkram=substr($peruse, "0", "1");
                if ($checkram == 0) { $membar="\cB||||||||||"; }
                if ($checkram == 1) { $membar="|\cB|||||||||"; }
                if ($checkram == 2) { $membar="||\cB||||||||"; }
                if ($checkram == 3) { $membar="|||\cB|||||||"; }
                if ($checkram == 4) { $membar="||||\cB||||||"; }
                if ($checkram == 5) { $membar="|||||\cB|||||"; }
                if ($checkram == 6) { $membar="||||||\cB||||"; }
                if ($checkram == 7) { $membar="|||||||\cB|||"; }
                if ($checkram == 8) { $membar="||||||||\cB||"; }
                if ($checkram == 9) { $membar="|||||||||\cB|"; }
                my $checkram=substr($peruse, "0", "3");
                if ($checkram == 100) { $membar="||||||||||"; }       
                
                IRC::command("/say \cBMEM::\cC4 [Free: $ffree[1] kB]:[Used: $used kB]:[Total $ftot[1] kB]");
                IRC::command("/say \cBMEM::\cC4 [Usage:$peruse%]:[Bar: $membar]");
                return 1;
        }
        elsif($^O=~/Win/i){
                IRC::command("/say Memoria? Ti prego, non mettermi in imbarazzo; siamo su windows. Senza le finestrelle come si fa a vedere la memoria? ;-)");
                return 1;
        }   
        else{
                IRC::command("/say Purtroppo il mio plugin non ha riconosciuto il sistema e quindi non sa determinare la CPU");
        }
        
}

-- VittorioZuccala - 06 Jan 2005


Ultima versione: r1.1 - 06 Jan 2005 - 19:51 - Main.guest
 
Se riconosciuto dal sistema come utente: Main.guest