2 # RootWarn.pl: Warn people about usage of root on IRC.
4 # Version: v0.3 (20000923)
11 my ($nick,$user,$host,$chan) = @_;
12 my $attempt = &dbGet("rootwarn", "nick", lc($nick), "attempt") || 0;
14 if ($attempt == 0) { # first timer.
15 if (&IsParam("rootWarnMode") && $param{'rootWarnMode'} =~ /aggressive/i) {
16 &status(">>> Detected root user; notifying nick and channel.");
17 rawout("PRIVMSG $chan :R".("O" x int(rand 80 + 2))."T has landed!");
19 &status(">>> Detected root user; notifying user");
22 if ($_ = &getFactoid("root")) {
23 &msg($nick, "root is $_");
25 &status("root needs to be defined in database.");
28 } elsif ($attempt < 2) { # 2nd/3rd time occurrance.
29 &status("RootWarn: not first time root user; msg'ing $nick.");
30 if ($_ = &getFactoid("root again")) {
33 &status("root again needs to be defined in database.");
36 } else { # >3rd time occurrance.
37 if (&IsParam("rootWarnMode")) {
38 if ($param{'rootWarnMode'} =~ /aggressive/i) {
39 if ($channels{$chan}{'o'}{$ident}) {
40 &status("RootWarn: $nick... sigh... bye bye.");
41 rawout("MODE $chan +b *!root\@$host"); # ban
42 &kick($chan,$nick,"bye bye");
49 ### TODO: OPTIMIZE THIS.
50 &dbSet("rootwarn", "nick", lc($nick), "attempt", $attempt);
51 &dbSet("rootwarn", "nick", lc($nick), "time", time());
52 &dbSet("rootwarn", "nick", lc($nick), "host", $user."\@".$host);
53 &dbSet("rootwarn", "nick", lc($nick), "channel", $chan);
61 my $count = &countKeys("rootwarn");
64 &performReply("no-one has been warned about root, woohoo");
69 $reply = "there ".&fixPlural("has",$count) ." been \002$i\002 ".
70 &fixPlural("rooter",$count) ." warned about root.";
72 if ($param{'DBType'} !~ /^mysql$/i) {
73 &FIXME("rootwarn does not yet support non-mysql.");
79 my $query = "SELECT attempt FROM rootwarn WHERE attempt > 2";
80 my $sth = $dbh->prepare($query);
83 while (my @row = $sth->fetchrow_array) {
90 $reply .= " Of which, \002$found\002 ".
91 &fixPlural("rooter",$found)." ".
92 &fixPlural("has",$found).
93 " done it at least 3 times.";
96 &performStrictReply($reply);