Selasa, 02 Februari 2010

simple bot guard mirc

#!/usr/bin/perl
use strict();
use warnings();
use IO::Socket;


#default Options
my $network = "irc.freenodel.org"; #Network to connect to
my @channels = ("#trea"); #Channels to join in
my $op = "bla.vhost.at"; #Admin Vhost
my $nick = "aBot"; #Nick bot uses
my $user = "abot \"localhost\" \"".$network."\" :aBot"; #Username
my $chancount = 0; #How much channels are default ?!

sub send_pong;
sub join_chans;
sub parse_cmds;
sub do_command;
sub send_raw;

my $socket = IO::Socket::INET->new
(PeerAddr => $network,
PeerPort => 6667,
Proto => "tcp",
Type => SOCK_STREAM) or die("Can't Connect");
send_raw ("user $user\n");
send_raw ("nick $nick\n");
while(<$socket>) {
parse_cmds($_);
if($_ =~ '376')
{
print "[!] End of MOTD reached\n";
print "[!] Joining Channels\n";
join_chans($_);
}
}

close($socket);

sub do_command{
($name_, $to_, $host_, $cmd_) = @_;
if($cmd_ =~ /^!help/){
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :#User Commands\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !help - shows help menu\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !chancount - shows how much channels needs me\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !chanlist - shows in wich channels im\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !sqrt - prints the root of the given number;example: 9 is 3\n");
}
if($cmd_ =~ /^!sqrt (\d*)/){
$root = $1;
send_raw("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :".$root." is ".sqrt($root)."\n");
}
if($cmd_ =~ /^!chancount/){
send_raw("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :im in $chancount Channel(s)\n");
send_raw("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :write !chanlist if you want to see in wich channels im\n");
}
if($cmd_ =~ /^!chanlist/){
send_raw("PRIVMSG ".$name_." :im in:\n");
foreach $chanl (@channels){
send_raw("PRIVMSG ".$name_." :".$chanl.", \n");
}
}
if($host_ eq $op){
if($cmd_ =~ /^!help/){
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :#Adminstrative Commands\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !kick - kicks a user outta a channel\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !kickban - kickban's a user outta a channel\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !op <+/-> : - give operator/take operator rights from a user\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !voice <+/-> : - give voice/take voice rights from a user\n");
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." : !chanmode - set channel modes\n");
}
if($cmd_ =~ /^!chanmode (.*)/ ){
$mode = $1;
send_raw("MODE $to_ $mode\n");
}
if($cmd_ =~ /^!voice (.+?) (.+?) \:(.*)/){
$chan = $2;
$who = $3;
$mode = $1;

if($chan !~ /^#(.*)/){
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :arg1 is no channel\n");
return;
}
if($mode eq "+"){
send_raw("MODE ".$chan." +v ".$who."\n");
}
elsif($mode eq "-"){
send_raw("MODE ".$chan." -v ".$who."\n");
}
}
if($cmd_ =~ /^!op (.+?) (.+?) \:(.*)/){
$chan = $2;
$who = $3;
$mode = $1;
if($chan !~ /#(.*)/){
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :arg1 is no channel\n");
return;
}
if($mode eq "+"){
send_raw("MODE ".$chan." +o ".$who."\n");
}
elsif($mode eq "-"){
send_raw("MODE ".$chan." -o ".$who."\n");
}
}
if($cmd_ =~ /^!eval (.*)/){
eval $1;
}
if($cmd_ =~ /^!join (.*)/){
if($1 !~ /#(.*)/){
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :arg1 is no channel\n");
return;
}
else {
$channels[$chancount] = "#".$1;
print "[!] Joining Channel: ".$channels[$chancount]."\n";
send_raw ("JOIN ".$channels[$chancount]."\n");
$chancount++;
}
}
if($cmd_ =~ /!kick (.*) (.*)/){
$kchan = $1;
$knick = $2;
if($1 !~ /#(.*)/){
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :arg1 is no channel\n");
return;
}
else{
send_raw("KICK $kchan $knick\n");
}
}
if($cmd_ =~ /^!kickban (.*) (.*)/){
$kchan = $1;
$knick = $2;
if($1 !~ /#(.*)/){
send_raw ("PRIVMSG ".(($to_ =~/#(.*)/)? $to_ : $name_)." :arg1 is no channel\n");
return;
}
else{
send_raw("MODE ".$kchan." +b ".$knick."\n");
send_raw("KICK $kchan $knick\n");
}
}
}
}

sub parse_cmds{
$cmds = shift;
if($cmds =~ /^PING/){
send_pong($_);
}
elsif ($cmds =~ /^\:(.+?)\!(.+?)\@(.+?) PRIVMSG (.+?) \:(.+)/){
my $name=$1; my $host=$3; my $from=$4; my $args=$5;
if ($args =~ /^VERSION$/) {
send_raw ("PRIVMSG ".$name." :Dont disturb me!\n");
}
if($args =~ /^\!(.*)/)
{
do_command($name, $from, $host, $args);
}
}
}

sub join_chans{

foreach $jchan (@channels){
send_raw("join $jchan\n");
$chancount++;
printf "[!] Joining Channel: ".$jchan."\n";

}
}

sub send_raw{
my $tosend = shift;
print $socket "$tosend";
}

sub send_pong{
$pong = shift;
if($pong =~ /^PING (.*)/){
send_raw("PONG $1");
}
}
  • Digg
  • Delicious
  • Facebook
  • Mixx
  • Google
  • Furl
  • Reddit
  • StumbleUpon
  • Technorati
  • 1 komentar:

    Unknown mengatakan...

    itu guna irc ye

    Posting Komentar

    6ELB © 2008. Design by :Yanku Templates Sponsored by: Tutorial87 Commentcute