diff --git a/doc/CHANGELOG b/doc/CHANGELOG index fe6953b..984d082 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -3,6 +3,7 @@ Auto IRC Bot 3.0: Change Log 3.0 Indev =============================================================================== + * Added command level 3 for logchan-only command. * Added a LinkTitle module for getting the title of a web page posted in a channel. diff --git a/lib/API/Std.pm b/lib/API/Std.pm index a4a10c3..93c57a4 100644 --- a/lib/API/Std.pm +++ b/lib/API/Std.pm @@ -115,12 +115,12 @@ sub cmd_add $cmd = uc $cmd; if (defined $API::Std::CMDS{$cmd}) { return; } - if ($lvl =~ m/[^0-2]/sm) { return; } ## no critic qw(RegularExpressions::RequireExtendedFormatting) + if ($lvl =~ m/[^0-3]/sm) { return; } ## no critic qw(RegularExpressions::RequireExtendedFormatting) $API::Std::CMDS{$cmd}{lvl} = $lvl; $API::Std::CMDS{$cmd}{help} = $help; $API::Std::CMDS{$cmd}{priv} = $priv; - $API::Std::CMDS{$cmd}{sub} = $sub; + $API::Std::CMDS{$cmd}{'sub'} = $sub; return 1; } diff --git a/lib/Parser/IRC.pm b/lib/Parser/IRC.pm index c6107bd..57ab722 100644 --- a/lib/Parser/IRC.pm +++ b/lib/Parser/IRC.pm @@ -603,18 +603,40 @@ sub privmsg } else { # Else give them the boot. - API::IRC::notice($data{svr}, $data{nick}, API::Std::trans("Permission denied")."."); + API::IRC::notice($data{svr}, $data{nick}, API::Std::trans('Permission denied').q{.}); } } else { # Else continue executing without any extra checks. - &{ $API::Std::CMDS{$cmd}{'sub'} }(\%data, @argv) if $rprefix eq $cprefix; + &{ $API::Std::CMDS{$cmd}{'sub'} }(\%data, @argv); } } else { # Send them a notice about their bad deed. API::IRC::notice($data{svr}, $data{nick}, trans('Rate limit exceeded').q{.}); } + } + elsif ($API::Std::CMDS{$cmd}{lvl} == 3) { + # Or if it's a logchan command... + my ($lcn, $lcc) = split '/', (conf_get('logchan'))[0][0]; + if ($lcn eq $data{svr} and lc $lcc eq lc $data{chan}) { + # Check if it's being sent from the logchan. + if ($API::Std::CMDS{$cmd}{priv}) { + # If this command takes a privilege... + if (API::Std::has_priv(API::Std::match_user(%data), $API::Std::CMDS{$cmd}{priv})) { + # Make sure they have it. + &{ $API::Std::CMDS{$cmd}{'sub'} }(\%data, @argv); + } + else { + # Else give them the boot. + API::IRC::notice($data{svr}, $data{nick}, API::Std::trans('Permission denied').q{.}); + } + } + else { + # Else continue executing without any extra checks. + &{ $API::Std::CMDS{$cmd}{'sub'} }(\%data, @argv); + } + } } } }