From: Michael Andreen Date: Sat, 16 May 2009 15:53:55 +0000 (+0200) Subject: Converted .whois and .flags, removing the redundant functionality X-Git-Url: https://ruin.nu/git/?a=commitdiff_plain;h=b7392dc113b14a269fe73871c57795e18fe7e271;p=NDIRC.git Converted .whois and .flags, removing the redundant functionality --- diff --git a/Commands/Usermgm.pm b/Commands/Usermgm.pm index 4ea75c1..be87acb 100644 --- a/Commands/Usermgm.pm +++ b/Commands/Usermgm.pm @@ -128,4 +128,38 @@ WHERE uid = ? $f->finish; } +sub whois + : Help(syntax: .whois [username] | % can be used for wildcards \%arro% will match barrow. If no username is given then all flags will be listed) + : Alias(flags) + : ACL(irc_whois) +{ + my ($self,$c,$msg) = @_; + my ($nick) = $msg =~ /^(\S+)?$/ or die 'ARGS'; + my $dbh = $c->model; + + unless ($nick){ + my ($flags) = $dbh->selectrow_array(q{ +SELECT TRIM(', ' FROM concat(flag||':'||groupname||', ')) FROM groups + }); + $c->reply("Current flags: $flags"); + return; + } + + my $f = $dbh->prepare(q{ +SELECT username, pnick, hostmask, concat(flag) AS flags +FROM users u + LEFT OUTER JOIN (SELECT uid,flag FROM groupmembers + NATURAL JOIN groups ORDER BY uid,flag ) g USING (uid) +WHERE username ILIKE ? +GROUP BY username,pnick,hostmask LIMIT 5 + }); + $f->execute($nick); + while (my $user = $f->fetchrow_hashref){ + $c->reply("$user->{username} (/$user->{pnick}) flags: ($user->{flags}) host: $user->{hostmask}"); + } + if ($f->rows == 0){ + $c->reply("No hit, maybe spelling mistake, or add % as wildcard"); + } +} + 1; diff --git a/Usermgm.pm b/Usermgm.pm index 3c1c9bb..493c05c 100644 --- a/Usermgm.pm +++ b/Usermgm.pm @@ -25,54 +25,7 @@ require Exporter; our @ISA = qw/Exporter/; -our @EXPORT = qw/whois flags flag laston addPoints chattrG setHost setPNick getShips getFleet/; - -sub whois { - my ($msg, $command) = @_; - - my ($nick); - if(defined $msg && $msg =~ /^(\S+)$/){ - $nick = $1; - }else{ - $ND::server->command("notice $ND::nick syntax: .$command nick | % can be used for wildcards \%arro% will match barrow"); - return; - } - if (officer() || ia()){ - my $f = $ND::DBH->prepare("SELECT username, hostmask, concat(flag) FROM users u LEFT OUTER JOIN (SELECT uid,flag FROM groupmembers NATURAL JOIN groups ORDER BY uid,flag ) g ON g.uid = u.uid WHERE username ILIKE ? GROUP BY username,hostmask"); - $f->execute($nick); - while (my @row = $f->fetchrow()){ - $ND::server->command("msg $ND::target $row[0] flags: ($row[2]) host: $row[1]"); - } - if ($f->rows == 0){ - $ND::server->command("msg $ND::target No hit, maybe spelling mistake, or add % as wildcard"); - } - }else{ - $ND::server->command("msg $ND::target Only officers are allowed to check that"); - } -} - -sub flags { - my ($msg, $command) = @_; - - my ($nick); - if(defined $msg && $msg =~ /^(\S+)$/){ - $nick = $1; - }else{ - my ($flags) = $ND::DBH->selectrow_array("SELECT TRIM(', ' FROM concat(flag||':'||groupname||', ')) FROM groups"); - $ND::server->command("notice $ND::nick syntax: .$command nick | % can be used for wildcards \%arro% will match barrow | Current flags: $flags"); - return; - } - if (hc()){ - my $f = $ND::DBH->prepare("SELECT username, concat(flag), TRIM(', ' FROM concat(groupname||', ')) FROM users u LEFT OUTER JOIN (SELECT uid,flag,groupname FROM groupmembers NATURAL JOIN groups ORDER BY uid,flag ) g ON g.uid = u.uid WHERE username ILIKE ? GROUP BY username,hostmask"); - $f->execute($nick); - while (my @row = $f->fetchrow()){ - $ND::server->command("msg $ND::target Flags for $row[0] on: $ND::target: $row[1]| (Global: $row[2])"); - } - if ($f->rows == 0){ - $ND::server->command("msg $ND::target No hit, maybe spelling mistake, or add % as wildcard"); - } - } -} +our @EXPORT = qw/flag laston addPoints setHost setPNick getShips getFleet/; sub flag { my ($msg, $command) = @_; diff --git a/database/roles.sql b/database/roles.sql index c000716..78bf112 100644 --- a/database/roles.sql +++ b/database/roles.sql @@ -12,6 +12,7 @@ INSERT INTO roles VALUES('irc_sms'); INSERT INTO roles VALUES('irc_adduser'); INSERT INTO roles VALUES('irc_deactivateuser'); INSERT INTO roles VALUES('irc_chattr'); +INSERT INTO roles VALUES('irc_whois'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_nick'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_p_intel'); @@ -25,6 +26,7 @@ INSERT INTO group_roles (gid,role) VALUES(1,'irc_sms'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_adduser'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_deactivateuser'); INSERT INTO group_roles (gid,role) VALUES(1,'irc_chattr'); +INSERT INTO group_roles (gid,role) VALUES(1,'irc_whois'); INSERT INTO group_roles (gid,role) VALUES(2,'irc_gs'); INSERT INTO group_roles (gid,role) VALUES(2,'irc_scan'); @@ -40,6 +42,7 @@ INSERT INTO group_roles (gid,role) VALUES(3,'irc_sms'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_adduser'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_deactivateuser'); INSERT INTO group_roles (gid,role) VALUES(3,'irc_chattr'); +INSERT INTO group_roles (gid,role) VALUES(3,'irc_whois'); INSERT INTO group_roles (gid,role) VALUES(4,'irc_points_others'); @@ -56,5 +59,6 @@ INSERT INTO group_roles (gid,role) VALUES(8,'irc_anonscan'); INSERT INTO group_roles (gid,role) VALUES(18,'irc_p_nick'); INSERT INTO group_roles (gid,role) VALUES(18,'irc_p_intel'); INSERT INTO group_roles (gid,role) VALUES(18,'irc_points_others'); +INSERT INTO group_roles (gid,role) VALUES(18,'irc_whois'); INSERT INTO group_roles (gid,role) VALUES(19,'irc_p_intel');