#!/usr/bin/perl -w # RitBits is Jen's first script... first of anything like this actually. So expect bugs. # Official Page: http://caffeinated-dreams.net/2005/06/28/rit-bits-perl-script-for-x-chat/ # Version: 0.3.2 (June 30th, 2005) # Do whatever to this script. I don't care. # ################ Credits ################ # Gamakichi for being awesome, hardrive/cpu/netstat/uptime display improvement and perl support. # Neovanglist for FreeBSD-fu. # Good folks in #Xion on IRC for support and allowing us to spam our testing. That's probably only because they were sleeping though. =) # # # TODO RAM display improvement, temperature sensors(?), xmms/beep media player/amarok support (??!) # # Only edit hardrive information ($hdd2), the part that may need editing is labled. Otherwise do not touch below this unless you know what you're doing. :P IRC::register("RitBits", "0.4", "", ""); IRC::print "\cC2\cBRitBits loaded!\003 Commands are: /ritbits /client /gfx /os /desktop /cpu /sound /netstat /disk /uptime"; IRC::add_command_handler("ritbits", "ritbits"); IRC::add_command_handler("gfx", "gfx"); IRC::add_command_handler("os", "os"); IRC::add_command_handler("client", "client"); IRC::add_command_handler("desktop", "desktop"); IRC::add_command_handler("cpu", "cpu"); IRC::add_command_handler("sound", "sound"); IRC::add_command_handler("netstat", "netstat"); IRC::add_command_handler("disk", "disk"); IRC::add_command_handler("uptime", "uptime"); # About sub ritbits { IRC::command("\cC2\cBRitBits\cB\003 - A n00b script by Jen for X-Chat, version 0.4 (\cBhttp://caffeinated-dreams.net\cB)"); return 1; } # Video card, resolution sub gfx { $xorg = `xdpyinfo | grep X.Org"."version`; chomp ($xorg); $res = `xdpyinfo | grep dimensions | awk '{print \$2}'`; chomp ($res); $vid = `sysctl dev.drm.0.\%desc | cut -d : -f 2`; chomp ($vid); @bits = `xwininfo -root`; foreach (@bits) { if (/^ +?Depth: (.+)/i) {$bits = $1;} } IRC::command("( \cC2\cBGraphics\cB\003 ) \cB $vid \cB,\cB\ $xorg \cB\ ( \cC2\cBResolution\cB\003 ) \cB $res \cB ( \cC2\cBBits\cB\003 ) \cB $bits \cB "); return 1; } # Operating System sub os { $os =`uname -srm`; chomp ($os); IRC::command("( \cC2\cBOperating System\cB\003 ) \cB $os \cB"); return 1; } # Desktop Environment sub desktop { if ( length(`ps -a | grep startkde`) != 0 ) { $desktop = `kde-config -version | grep KDE`; chomp ($desktop); } elsif ( length(`ps -a | grep gnome-session`) != 0 ) { $desktop = `gnome-config --version | grep gnome`; chomp ($desktop); } elsif ( length(`ps -a | grep fluxbox`) != 0 ) { $desktop = `fluxbox -version | cut -d" " -f1-2`; chomp ($desktop); } elsif ( length(`ps -a | grep xfce4 | grep session`) != 0 ) { $desktop = `xfwm4 --version | grep Xfce | cut -c10-50 | cut -d" " -f5,6`; chomp ($desktop); } elsif ( length(`ps -a | grep enlightenment`) != 0 ) { $desktop = `enlightenment -version | cut -d" " -f1,3`; chomp ($desktop); } else { die "Oops, something went wrong." }; IRC::command("( \cC2\cBDesktop Environment\cB\003 ) \cB $desktop \cB"); return 1; } # CPU sub cpu { system "dmesg | grep CPU: > .cpu"; open(AWKFILE, ">.cpuawk"); print AWKFILE '{ print $6 }'; system "awk -f .cpuawk .cpu > .cpu2"; $model = `sysctl hw.model | cut -d : -f 2`; chomp ($model); $freq = `cut -c2-8 .cpu2`; chomp ($freq); IRC::command("( \cC2\cBCPU\cB\003 ) \cB $model \cB ( \cC2\cBFrequency\cB\003 ) \cB $freq \cB MHz"); close AWKFILE; system "rm .cpu*"; return 1; } # Hardrives, can support multiple disks. # Uncomment the lines below for a second disk. sub disk { open(AWKU, ">.awkU"); open(AWKT, ">.awkT"); print AWKU '{ print $3 }'; print AWKT '{ print $2 }'; $A = `df -h | grep -m1 /usr | awk -f .awkU`; $B = `df -h | grep -m1 /usr | awk -f .awkT`; $C = `df -h | grep -m1 /usr2 | awk -f .awkU`; $D = `df -h | grep -m1 /usr2 | awk -f .awkT`; chomp ($A); chomp ($B); chomp ($C); chomp ($D); IRC::command("( \cC2\cBHardrives\cB\003 ) /usr: \cBUsed: ".$A." \\ Total: ".$B." \cB/usr2: \cBUsed: ".$C." \\ Total: ".$D.""); close AWKU; close AWKT; system "rm .awk*"; return 1; } # Soundcard sub sound { $sound = `sysctl dev.pcm.0.\%desc | cut -d: -f2`; chomp ($sound); IRC::command("( \cC2\cBSoundcard\cB\003 ) \cB $sound \cB"); return 1; } # Network statistic, shows KB down and up. sub netstat { open(AWKFILEI, ">.awkI") or die "Can't open .awkI: $!"; open(AWKFILEO, ">.awkO") or die "Can't open .awkO: $!"; print AWKFILEI '{ print $7 }'; print AWKFILEO '{ print $10 }'; $Idata = `netstat -bi | grep Link#1 | awk -f .awkI`; $Odata = `netstat -bi | grep Link#1 | awk -f .awkO`; chomp ($Idata); chomp ($Odata); $Idata /= 1024 ; $Odata /= 1024 ; $In = sprintf("%.2f", $Idata); $Out = sprintf("%.2f", $Odata); IRC::command("( \cC2\cBNetwork Statistics\cB\003 ) \cB Down\: $In KB \\ Up\: $Out KB \cB"); close AWKFILEI; close AWKFILEO; system "rm .awk*"; return 1; } # Uptime sub uptime { $up = `uptime`; open(AWK1, ">.t1"); open(AWK2, ">.t2"); open(AWK3, ">.t3"); open(AWK4, ">.t4"); open(AWK5, ">.t5"); open(AWK6, ">.t6"); print AWK1 '{ print $1 }'; print AWK2 '{ print $2 }'; print AWK3 '{ print $3 }'; print AWK4 '{ print $4 }'; print AWK5 '{ print $5 }'; print AWK6 '{ print $6 }'; $when1 = `uptime | awk -f .t6`; $when2 = `uptime | awk -f .t5`; $when3 = `uptime | awk -f .t3`; $when4 = `uptime | awk -f .t4`; if ( length($up) >= 66 ) { if ( $when1 =~ /sec/ ) { $timeD = `uptime | awk -f .t3`; $timeS = `uptime | awk -f .t5`; chomp($timeD); chomp($timeS); IRC::command("( \cC2\cBCurrent Uptime\cB\003 ) \cB".$timeD."d ".$timeS."sec"); } elsif ( $when1 =~ /min/ ) { $timeD = `uptime | awk -f .t3`; $timeM = `uptime | awk -f .t5`; chomp($timeD); chomp($timeM); IRC::command("( \cC2\cBCurrent Uptime\cB\003 ) \cB".$timeD."d ".$timeM."min"); } else { if ( $when2 =~ /:/ ) { $timeH = `uptime | awk -f .t5 | awk -F: -f .t1`; $timeM = `uptime | awk -f .t5 | awk -F: -f .t2 | cut -c1-2`; $timeD = `uptime | awk -f .t3`; chomp($timeD); chomp($timeH); chomp($timeM); IRC::command("( \cC2\cBCurrent Uptime\cB\003 ) \cB".$timeD."d ".$timeH."hr ".$timeM."min"); }; }; } elsif ( $when3 =~ /:/ ) { $timeH = `uptime | awk -f .t3 | awk -F: -f .t1`; $timeM = `uptime | awk -f .t3 | awk -F: -f .t2 | cut -c1-2`; chomp($timeH); chomp($timeM); IRC::command("( \cC2\cBCurrent Uptime\cB\003 ) \cB".$timeH."hr ".$timeM."min"); } else { if ( $when4 =~ /sec/ ) { $timeS = `uptime | awk -f .t3`; chomp($timeS); IRC::command("Uptime: ".$timeS."sec"); } elsif ( $when4 =~ /min/ ) { $timeM = `uptime | awk -f .t3`; chomp($timeM); IRC::command("( \cC2\cBCurrent Uptime\cB\003 ) \cB".$timeM."min"); }; }; close AWK1; close AWK2; close AWK3; close AWK4; close AWK5; close AWK6; system "rm .t*"; return 1; } # X-Chat version sub client { $client = IRC::get_info(0); chomp ($client); IRC::command("( \cC2\cBIRC Client\cB\003 ) \cB X-Chat $client \cB"); return 1; }