Advertisement
Guest User

Untitled

a guest
Jun 2nd, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 7.69 KB | None | 0 0
  1. #!/usr/bin/perl
  2. print "POE IRC Bot. Skeleton by Caaz.\n";
  3. print "SERVER PORT NICK\n";
  4. chomp($Connect = <STDIN>);
  5.  
  6. # Tuesday, June 29th, 2010.
  7.  
  8. use POE::Component::IRC;
  9. use POE;
  10.  
  11. BOTVARS: {
  12.     $BotNick = "MyBot";     # Nick
  13.     $BotUser = ".";     # Username "indent"
  14.     $BotName = "a Perl bot. Skeleton by Caaz";  # Real Name
  15.     $BotPass = "PASSWORD";      # Nickserv Password
  16.     $BotOwner = "Caaz";     # Owner of the Bot
  17.     $BotPath = "/Users/Caaz/Desktop/Perl/BOT/";     # Path to any files.
  18. }
  19. RANDOMJUNKNOONENEEDSTOKNOWABOUT: {
  20.     open DATA, "<".$BotPath.(split / /, $Connect)[0]."-AutoJoin.txt";
  21.     @Channels=<DATA>;
  22.     close DATA;chomp(@Channels);
  23.     $BotChannels = $Channels[0];
  24.     $Connect = $Connect." ".$BotNick;
  25.     $BotNick = (split / /, $Connect)[2];
  26. }
  27.  
  28. my ($irc) = POE::Component::IRC->spawn();
  29. POE::Session->create(inline_states => {
  30.     _start     => sub {
  31.         $irc->yield(register => "all");
  32.         $irc->yield( connect => {
  33.             Nick     => (split / /, $Connect)[2],
  34.             Username => $BotUser,
  35.             Ircname  => $BotName,
  36.             Server   => (split / /, $Connect)[0],
  37.             Port     => (split / /, $Connect)[1],
  38.         });
  39.     },
  40.     irc_001 => sub {
  41.         $irc->yield(mode => $BotNick." +B");
  42.         $irc->yield(privmsg => "Nickserv" => "id ".$BotPass);
  43.         my $alarm_id = $irc->delay( [ join => $BotChannels ], 2 );
  44.     },
  45.     irc_error => sub {
  46.         my ($kernel, $IRCWhat) = @_[KERNEL, ARG0];
  47.         print $IRCWhat."\n";
  48.     },
  49.     irc_ctcp_action => sub {
  50.         my ($kernel, $IRCWho, $where, $IRCWhat) = @_[KERNEL, ARG0, ARG1, ARG2];
  51.         $IRCWhere = $where->[0];
  52.         print GetTime()."$IRCWhere >    * ".(split /!/, $IRCWho)[0]." $IRCWhat\n";
  53.         Bot("ACTION",(split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere,$IRCWhat);
  54.     },
  55.     irc_join => sub {
  56.         my ($kernel, $IRCWho, $IRCWhere) = @_[KERNEL, ARG0, ARG1];
  57.         print GetTime()."Join       * ".(split /!/, $IRCWho)[0]." joins $IRCWhere\n";
  58.         Bot("JOIN",(split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere);
  59.     },
  60.     irc_invite => sub {
  61.         my ($kernel, $IRCWho, $IRCWhere) = @_[KERNEL, ARG0, ARG1];
  62.         print GetTime()."Invi       * ".(split /!/, $IRCWho)[0]." invites you to $IRCWhere\n";
  63.         Bot("INVITE", (split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere);
  64.     },
  65.     irc_kick => sub {
  66.         my ($kernel, $IRCWho, $IRCWhere, $IRCWhoElse, $IRCWhat) = @_[KERNEL, ARG0, ARG1, ARG2, ARG3];
  67.         print GetTime()."Kick       * ".(split /!/, $IRCWho)[0]." kicks $IRCWhoElse out of $IRCWhere ($IRCWhat)\n";
  68.         Bot("KICK",(split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere,$IRCWhoElse,$IRCWhat);
  69.     },
  70.     irc_msg => sub {
  71.         my ($kernel, $IRCWho, $where, $IRCWhat) = @_[KERNEL, ARG0, ARG1, ARG2];
  72.         $IRCWhere = $where->[0];
  73.         print GetTime()."Priv\a>        <".(split /!/, $IRCWho)[0].">   $IRCWhat\n";
  74.         Bot("PRIVMSG",(split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere,$IRCWhat);
  75.     },
  76.     irc_nick => sub {
  77.         my ($kernel, $IRCWho, $IRCWhoElse) = @_[KERNEL, ARG0, ARG1];
  78.         print GetTime()."Nick       * ".(split /!/, $IRCWho)[0]." changes nick to $IRCWhoElse\n";
  79.         Bot("NICK", (split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhoElse);
  80.     },
  81.     irc_notice => sub {
  82.         my ($kernel, $IRCWho, $where, $IRCWhat) = @_[KERNEL, ARG0, ARG1, ARG2];
  83.         $IRCWhere = $where->[0];
  84.         print GetTime()."Noti       <".(split /!/, $IRCWho)[0].">   $IRCWhat\n";
  85.         Bot("NOTICE",(split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere,$IRCWhat);
  86.     },
  87.     irc_part => sub {
  88.         my ($kernel, $IRCWho, $IRCWhere, $IRCWhat) = @_[KERNEL, ARG0, ARG1, ARG2];
  89.         print GetTime()."Part       * ".(split /!/, $IRCWho)[0]." left channel $IRCWhere \(".$IRCWhat."\)\n";
  90.         Bot("PART",(split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere,$IRCWhat);
  91.     },
  92.     irc_public => sub {
  93.         my ($kernel, $IRCWho, $where, $IRCWhat) = @_[KERNEL, ARG0, ARG1, ARG2];
  94.         $IRCWhere = $where->[0];
  95.         print GetTime()."$IRCWhere >    <".(split /!/, $IRCWho)[0].">   $IRCWhat\n";
  96.         Bot("CHANMSG",(split /!/, $IRCWho)[0],(split /!/, $IRCWho)[1],$IRCWhere,$IRCWhat);
  97.     },
  98.     irc_disconnected => sub { print "Disconnected.\n"; exit 1; }, # Ends on disconnect.
  99. },);
  100. sub Bot {
  101.     $Event = $_[0];
  102.     if($Event =~ /CHANMSG/) { $Com = "privmsg ".$_[3]." "; $UserMsg = $_[4]; $Where = $_[3]; }
  103.     elsif($Event =~ /NOTICE/) { $Com = "notice ".$_[1]." "; $UserMsg = $_[4]; $Where = $_[1]; }
  104.     elsif($Event =~ /PRIVMSG/) { $Com = "notice ".$_[1]." "; $UserMsg = $_[4]; $Where = $_[1]; }
  105.     elsif($Event =~ /INVITE/) { $Com = "notice ".$_[1]." "; $UserMsg = $_[3]; $Where = $_[1]; if ($UserMsg !~ /Spp/i) { $irc->yield(join => $UserMsg); }} # Joins on invite, if it's not spp. heh.
  106.     elsif($Event =~ /JOIN/) { $Com = "notice ".$_[3]." "; $UserMsg = $_[3]; $Where = $_[1]; }
  107.     elsif($Event =~ /NICK/) { if($_[1] =~ /^$BotOwner$/i) { print "Owner changing...\n"; $BotOwner = Regexit($_[3]) } }
  108.     $UserNick = Regexit($_[1]);
  109.     $UserHost = $_[2];
  110.     $UserMsg = POE::Component::IRC::Common::strip_color($UserMsg);
  111.     $CurSec = SpamProtect();
  112.     if($Event =~ /(CHANMSG|NOTICE|PRIVMSG)/) {
  113.         #####################
  114.         #   Owner commands  #
  115.         #####################
  116.         if(($UserMsg =~ /^!End$/i) && ($UserNick =~ /^$BotOwner$/i)) {
  117.             $irc->yield(quit => POE::Component::IRC::Common::MAGENTA."~ Goodbye ~");
  118.         }
  119.         elsif($UserMsg =~ /^!Do (.*?) (.*?) (.*)/i) {
  120.             @Temp = ($1,$2,$3);
  121.             if($UserNick =~ /^$BotOwner$/i) {
  122.                 $irc->yield($Temp[0] => $Temp[1] => $Temp[2]);
  123.             }
  124.         }
  125.         elsif($UserMsg =~ /^!Nick (.*)/i) {
  126.             $tring = $1;
  127.             if($UserNick =~ /^$BotOwner$/i) {
  128.                 $BotNick = $tring;
  129.                 $irc->yield(nick => $tring);
  130.             }
  131.         }
  132.         elsif($UserMsg =~ /^!Amsg (.*)/i) {
  133.             $tring = $1;
  134.             if($UserNick =~ /^$BotOwner$/i) {
  135.                 $irc->yield(privmsg => $BotChannels => $tring);
  136.             }
  137.         }
  138.         #####################
  139.         #Important Commands #
  140.         #####################
  141.         elsif($UserMsg =~ /^!(Help|Commands)$/i) {
  142.             Command($Com."Skeleton by Caaz.");
  143.         }
  144.         elsif($UserMsg =~ /^!AJ$/i) {
  145.             open DATA, "<".$BotPath.(split / /, $Connect)[0].(split / /, $Connect)[1]."-AutoJoin.txt";
  146.             @Channels=<DATA>;
  147.             close DATA;
  148.             if($Channels[0] !~ /$Where,/i) {
  149.                 open DATA, ">>".$BotPath.(split / /, $Connect)[0].(split / /, $Connect)[1]."-AutoJoin.txt"; print DATA "$Where,"; close DATA;
  150.                 Command($Com."Channel added to AutoJoin.");
  151.             }
  152.             else {
  153.                 Command($Com."Channel already in AutoJoin.");
  154.             }
  155.         }
  156.         elsif($UserMsg =~ /^!Alert$/i) {
  157.             print "\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a\a ANNOYING BEEPS ACTIVATED.\n";
  158.         }
  159.         #####################
  160.         #  Random Commands  #
  161.         #####################
  162.         elsif($UserMsg =~ /^!Nothing$/i) {
  163.             Command($Com."\a\a\a\a\a\a\a\a\a");
  164.         }
  165.         #####################
  166.         #        END        #
  167.         #####################
  168.     }
  169. }
  170. sub Regexit {
  171.     ($Reg = $_[0]) =~ s/\\/\\\\/gs;
  172.     $Reg =~ s/(\?|\(|\)|\||\[|\|\{|\}|\.)/\\$1/gs;
  173.     $Reg =~ s/\*/\(\.\*\)/gs;
  174.     return $Reg;
  175. }
  176. sub SpamProtect {
  177.     my($Sec, $Min, $Hour, $Day, $mon, $year, $WDay, $YDay) = localtime;
  178.     return (((($YDay * 24) * 60) * 60) + (($Hour * 60) * 60) + ($Min * 60) + $Sec);
  179. }
  180. sub Command {
  181.     $PrivmsgA = $_[0];
  182.     @PrivmsgB = split / /, $PrivmsgA;
  183.     $ComA = shift(@PrivmsgB);
  184.     $ComB = shift(@PrivmsgB);
  185.     if($BotNick =~ /Luka/i) { $BotFont = "〜"; $irc->yield($ComA => $ComB => POE::Component::IRC::Common::MAGENTA.(join " ", @PrivmsgB)." 〜"); }
  186.     elsif($BotNick =~ /Pichu/i) { $BotFont = "⚡"; $irc->yield($ComA => $ComB => POE::Component::IRC::Common::ORANGE.(join " ", @PrivmsgB)." ⚡"); }
  187.     else { $irc->yield($ComA => $ComB => POE::Component::IRC::Common::MAGENTA.(join " ", @PrivmsgB)." 〜"); }
  188. }
  189. sub GetTime { # This is just for timestamps, just leave it.
  190.     my($Sec, $Min, $Hour, $Day, $Mon, $Year, $WDay, $YDay) = localtime;
  191.     my $APM = "AM";
  192.     if($Hour > 12) { $Hour -= 12; $APM = "PM"; }
  193.     if($Hour < 10) { $Hour = "0".$Hour; }
  194.     if($Min < 10) { $Min = "0".$Min; }
  195.     if($Sec < 10) { $Sec = "0".$Sec; }
  196.     return "[ $Hour:$Min:$Sec $APM ]    ";
  197. }
  198. # Caaz was here.
  199. $poe_kernel->run();
  200. exit 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement