Advertisement
Guest User

Untitled

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