privmsg($event->replyto, "This bot has been running for " . (time - $::starttime) . " seconds" . ", is tracking " . (scalar (keys %::sn)) . " nicks" . " across " . (scalar (keys %::sc)) . " tracked channels." . " It is using " . $size . "KB of RAM" . " and has used " . $cputime . " of CPU time."); ]]> privmsg($event->replyto, $1 . " is on: " . ASM::Util->commaAndify(sort @{$::sn{lc $1}->{mship}})); ]]> privmsg($event->replyto, "source is at http://svn.linuxrulz.org/repos/antispammeta"); ]]> {DBH}; if ($1 eq 'log') { $dbh = $::db->{DBH_LOG}; } $::db->raw($conn, $event->{to}->[0], $dbh, $2); ]]> getLink(lc $chan); if ( lc $link ne lc $chan ) { $conn->privmsg($event->replyto, "Error: $chan is linked to $link - use $link instead."); return; } $::channels->{channel}->{$chan}->{monitor} = $switch; ASM::XML->writeChannels(); $conn->privmsg($event->replyto, "Monitor flag for $chan set to $switch"); ]]> privmsg($event->replyto, "help is at http://meta.wikimedia.org/wiki/User:WHeimbigner/AntiSpamMeta"); $conn->privmsg($event->replyto, "You can also get faster help by emailing william dot heimbigner at ttu dot edu - or bug ErrantEgo or tomaw"); ]]> privmsg($event->replyto, "db is at http://antispammeta.net/query.html"); ]]> query($channel, $nuh[0], $nuh[2], $nuh[4]); $conn->privmsg($event->replyto, "$result results found."); ]]> privmsg($event->replyto, "The d flag may not be assigned over IRC. Edit the configuration manually."); return; } $::users->{person}->{$acct} = { 'flags' => $flags }; ASM::XML->writeUsers(); $conn->privmsg($event->replyto, "Flags for NickServ account $acct set to $flags"); ]]> privmsg($event->replyto, "This command has been deprecated"); ]]> {person}->{$nick}->{flags})) { $conn->privmsg($event->replyto, "Flags for $nick: $::users->{person}->{$nick}->{flags}"); } else { $conn->privmsg($event->replyto, "$nick has no flags"); } ]]> privmsg($event->replyto, "The d flag may not be assigned over IRC. Edit the configuration manually."); return; } $::users->{person}->{$nick}->{flags} = $flags; ASM::XML->writeUsers(); $conn->privmsg($event->replyto, "Flags for $nick set to $flags"); ]]> {person}->{$nick}); ASM::XML->writeUsers(); $conn->privmsg($event->replyto, "Byebye $nick"); ]]> getLink(lc $chan); if ( lc $link ne lc $chan ) { $conn->privmsg($event->replyto, "Error: $chan is linked to $link - use $link instead."); return; } if ($level eq '') { $level = 'low'; } unless (defined($::channels->{channel}->{$chan}->{msgs})) { $::channels->{channel}->{$chan}->{msgs} = {}; } unless (defined($::channels->{channel}->{$chan}->{msgs}->{$level})) { $::channels->{channel}->{$chan}->{msgs}->{$level} = []; } my @tmphl = @{$::channels->{channel}->{$chan}->{msgs}->{$level}}; push(@tmphl, $nick); $::channels->{channel}->{$chan}->{msgs}->{$level} = \@tmphl; ASM::XML->writeChannels(); $conn->privmsg($event->replyto, "$nick added to $level risk messages for $chan"); ]]> getLink(lc $chan); if ( lc $link ne lc $chan ) { $conn->privmsg($event->replyto, "Error: $chan is linked to $link - use $link instead."); return; } foreach my $risk ( keys %::RISKS ) { next unless defined($::channels->{channel}->{$chan}->{msgs}->{$risk}); my @ppl = @{$::channels->{channel}->{$chan}->{msgs}->{$risk}}; @ppl = grep { lc $_ ne lc $nick } @ppl; $::channels->{channel}->{$chan}->{msgs}->{$risk} = \@ppl; } ASM::XML->writeChannels(); $conn->privmsg($event->replyto, "$nick removed from targets for $chan"); ]]> {channel}})) { foreach my $level (keys(%{$::channels->{channel}->{$chan}->{hilights}})) { if (grep(/^${nick}$/i, @{$::channels->{channel}->{$chan}->{hilights}->{$level}})) { push @channels, $chan . " ($level)"; } } } if (! @channels) { $conn->privmsg($event->replyto, "$nick isn't on any hilights"); } else { $conn->privmsg($event->replyto, "$nick is hilighted for " . join(', ', @channels)); } ]]> privmsg($event->replyto, "Error: I don't recognize $level as a valid level."); return; } my $link = ASM::Util->getLink(lc $chan); if ( lc $link ne lc $chan ) { $conn->privmsg($event->replyto, "Error: $chan is linked to $link - use $link instead."); return; } unless (defined($::channels->{channel}->{$chan}->{hilights})) { $::channels->{channel}->{$chan}->{hilights} = {}; } unless (defined($::channels->{channel}->{$chan}->{hilights}->{$level})) { $::channels->{channel}->{$chan}->{hilights}->{$level} = []; } foreach my $nick (@nicks) { my @tmphl = @{$::channels->{channel}->{$chan}->{hilights}->{$level}}; push(@tmphl, $nick); $::channels->{channel}->{$chan}->{hilights}->{$level} = \@tmphl; } ASM::XML->writeChannels(); $conn->privmsg($event->replyto, ASM::Util->commaAndify(@nicks) . " added to $level risk hilights for $chan"); ]]> getLink(lc $chan); if ( lc $link ne lc $chan ) { $conn->privmsg($event->replyto, "Error: $chan is linked to $link - use $link instead."); return; } foreach my $risk ( keys %::RISKS ) { next unless defined($::channels->{channel}->{$chan}->{hilights}->{$risk}); my @ppl = @{$::channels->{channel}->{$chan}->{hilights}->{$risk}}; foreach my $nick (@nicks) { @ppl = grep { lc $_ ne lc $nick } @ppl; } $::channels->{channel}->{$chan}->{hilights}->{$risk} = \@ppl; } ASM::XML->writeChannels(); $conn->privmsg($event->replyto, "Removing hilights for " . ASM::Util->commaAndify(@nicks) . " in $chan"); ]]> {channel}->{$chan})) { $::channels->{channel}->{$chan} = { }; ASM::XML->writeChannels(); } $conn->join($chan); my @autojoins = @{$::settings->{autojoins}}; @autojoins = (@autojoins, $chan); $::settings->{autojoins} = \@autojoins; ASM::XML->writeSettings(); ]]> part($chan); my @autojoins = @{$::settings->{autojoins}}; @autojoins = grep { lc $_ ne lc $chan } @autojoins; $::settings->{autojoins} = \@autojoins; ASM::XML->writeSettings(); ]]> sl($1); ]]> quit($1); ]]> readXML(); my @strbl = io('string_blacklist.txt')->getlines; chomp @strbl; @::string_blacklist = @strbl; my @eline=io('exempt.txt')->getlines; chomp @eline; %::eline = (); foreach my $item (@eline) { $::eline{lc $item} = 1; } $conn->privmsg($event->replyto, 'config files were re-read'); ]]> privmsg($event->replyto, $1); ]]> me($event->replyto, $1); ]]> privmsg($event->replyto, "This command is now deprecated. Use ;restrict nick/account/host lineToRestrict +notrigger instead, i.e. ;restrict account eir +notrigger"); ]]> {$type . 's'}->{$type}->{$who}->{$restriction}; $conn->privmsg($event->replyto, "Removed $restriction restriction for $type $who"); } if ($mode eq '+') { if (! defined($::restrictions->{$type . 's'}->{$type}->{$who})) { $::restrictions->{$type . 's'}->{$type}->{$who} = {}; } $::restrictions->{$type . 's'}->{$type}->{$who}->{$restriction} = $restriction; $conn->privmsg($event->replyto, "Added $restriction restriction for $type $who"); } ASM::XML->writeRestrictions(); ]]> notRestricted(lc $event->{nick}, "noops")) { my $tgt = lc $event->{to}->[0]; $tgt = lc $1 if (defined($1)); my $msg = $1; $msg = $2 if defined($2); unless (defined($::sc{$tgt}{users}{lc $event->{nick}})) { return; #they're not on the channel they're calling !ops for } unless (defined($::ignored{$tgt}) && ($::ignored{$tgt} >= $::RISKS{'opalert'})) { if (lc $event->{to}->[0] eq '##linux') { $conn->privmsg($event->{nick}, "I've summoned op attention. In the future, please use /msg " . "$conn->{_nick} !ops $event->{to}->[0] reasonGoesHere - this allows ops to " . "be notified while minimizing channel hostility."); } elsif ((lc $event->{to}->[0] eq '#wikipedia-en-help') && (!defined($msg))) { $conn->privmsg($event->{nick}, "I've summoned op attention, but in the future, please specify " . "a reason, e.g. !ops reasongoeshere - so ops know what is going on. Thanks! :)"); } elsif (lc $event->{to}->[0] eq lc $conn->{_nick}) { if (lc $tgt eq lc $conn->{_nick}) { # they privmsged the bot without providing a target $conn->privmsg($event->{nick}, "Sorry, it looks like you've tried to use the !ops command " . "via PM but haven't specified a target. Try again with /msg $conn->{_nick} " . "!ops #channelGoesHere ReasonGoesHere"); return; } else { $conn->privmsg($event->{nick}, "Thanks, I'm notifying $tgt ops."); } } $::ignored{$tgt} = $::RISKS{'opalert'}; $conn->schedule(30, sub { delete($::ignored{$tgt})}); my $hilite=ASM::Util->commaAndify(ASM::Util->getAlert($tgt, 'opalert', 'hilights')); my $txtz = "[\x02$tgt\x02] - $event->{nick} wants op attention ($msg)"; if ((time-$::sc{$tgt}{users}{lc $event->{nick}}{jointime}) > 90) { # return; #they've been on the channel for less than 90 seconds, probably nuisance botspam $txtz = $txtz . " " . $hilite; } my @tgts = ASM::Util->getAlert($tgt, 'opalert', 'msgs'); ASM::Util->sendLongMsg($conn, \@tgts, $txtz); $::log->incident($tgt, "$tgt: $event->{nick} requested op attention\n"); } else { # ops has recently been called if (lc $event->{to}->[0] eq '##linux') { $conn->privmsg($event->{nick}, "I've already been recently asked to summon op attention. " . "In the future, please use /msg $conn->{_nick} !ops $event->{to}->[0] reasonGoesHere" . " - this allows ops to be notified while minimizing channel hostility."); } elsif (lc $event->{to}->[0] eq lc $conn->{_nick}) { if (lc $tgt eq lc $conn->{_nick}) { # they privmsged the bot without providing a target $conn->privmsg($event->{nick}, "Sorry, it looks like you've tried to use the !ops command " . "via PM but haven't specified a target. Try again with /msg $conn->{_nick} " . "!ops #channelGoesHere ReasonGoesHere"); return; } else { $conn->privmsg($event->{nick}, "I've already recently notified $tgt ops."); } } } } ]]> > io 'string_blacklist.txt'; $conn->privmsg($event->replyto, "$str blacklisted"); ]]> {nick} plugin)\x02 - ${reason}; ping "; $txtz = $txtz . ASM::Util->commaAndify(ASM::Util->getAlert(lc $chan, $risk, 'hilights')) if (ASM::Util->getAlert(lc $chan, $risk, 'hilights')); $txtz = $txtz . ' !att-' . $chan . '-' . $risk; my @tgts = ASM::Util->getAlert($chan, $risk, 'msgs'); if (length($txtz) <= 380) { $conn->privmsg(\@tgts, $txtz); } else { my $splitpart = rindex($txtz, " ", 380); $conn->privmsg(\@tgts, substr($txtz, 0, $splitpart)); $conn->privmsg(\@tgts, substr($txtz, $splitpart)); } ]]>