From 5d1037e05b56009a64e64b467d59af2e5e43e65e Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Mon, 3 Feb 2020 23:56:07 -0800 Subject: [PATCH] Capabilities: `cap add/remove` is now `cap group/ungroup` --- PBot/Capabilities.pm | 52 ++++++++++++++++++++------------------------ 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/PBot/Capabilities.pm b/PBot/Capabilities.pm index e1118c80..e231a1ce 100644 --- a/PBot/Capabilities.pm +++ b/PBot/Capabilities.pm @@ -38,8 +38,8 @@ sub initialize { # add some basic capabilities $self->add('can-modify-capabilities', undef, 1); - $self->add('can-add-capabilities', undef, 1); - $self->add('can-remove-capabilities', undef, 1); + $self->add('can-group-capabilities', undef, 1); + $self->add('can-ungroup-capabilities', undef, 1); # add admin capabilities group $self->add('admin', 'chanop', 1); # add chanop capabilities group -- see ChanOpCommands.md @@ -130,6 +130,10 @@ sub remove { if (exists $self->{caps}->{hash}->{$cap}) { delete $self->{caps}->{hash}->{$cap}->{$subcap}; } + + if (keys %{$self->{caps}->{hash}->{$cap}} == 1) { + delete $self->{caps}->{hash}->{$cap}; + } } $self->{caps}->save; } @@ -226,49 +230,39 @@ sub capcmd { } } - when ('add') { + when ('group') { my $cap = $self->{pbot}->{interpreter}->shift_arg($stuff->{arglist}); my $subcap = $self->{pbot}->{interpreter}->shift_arg($stuff->{arglist}); - return "Usage: cap add [sub-capability]" if not defined $cap; + return "Usage: cap group " if not defined $cap or not defined $subcap; + return "No such capability $subcap." if not $self->exists($subcap); + return "You cannot group a capability with itself." if lc $cap eq lc $subcap; my $u = $self->{pbot}->{users}->loggedin($from, "$nick!$user\@$host"); - return "You must be logged into your user account to add capabilities." if not defined $u; - return "You must have the can-add-capabilities capability to add capabilities." if not $self->userhas($u, 'can-add-capabilities'); + return "You must be logged into your user account to group capabilities together." if not defined $u; + return "You must have the can-group-capabilities capability to group capabilities together." if not $self->userhas($u, 'can-group-capabilities'); - if (not defined $subcap) { - return "Capability $cap already exists. Did you mean to add a sub-capability to it? Usage: cap add [sub-capability]" if $self->exists($cap); - $self->add($cap); - return "Capability $cap added."; - } else { - return "You cannot add a capability to itself." if lc $cap eq lc $subcap; - return "No such capability $subcap." if not $self->exists($subcap); - $self->add($cap, $subcap); - return "Capability $subcap added to $cap."; - } + $self->add($cap, $subcap); + return "Capability $subcap added to the $cap capability group."; } - when ('remove') { + when ('ungroup') { my $cap = $self->{pbot}->{interpreter}->shift_arg($stuff->{arglist}); my $subcap = $self->{pbot}->{interpreter}->shift_arg($stuff->{arglist}); - return "Usage: cap remove [sub-capability]" if not defined $cap; + return "Usage: cap ungroup " if not defined $cap or not defined $subcap; return "No such capability $cap." if not $self->exists($cap); + return "No such capability $subcap." if not $self->exists($subcap); my $u = $self->{pbot}->{users}->loggedin($from, "$nick!$user\@$host"); - return "You must be logged into your user account to remove capabilities." if not defined $u; - return "You must have the can-remove-capabilities capability to remove capabilities." if not $self->userhas($u, 'can-remove-capabilities'); + return "You must be logged into your user account to remove capabilities from groups." if not defined $u; + return "You must have the can-remove-capabilities capability to remove capabilities from groups." if not $self->userhas($u, 'can-ungroup-capabilities'); - if (not defined $subcap) { - $self->remove($cap); - return "Capability $cap removed."; - } else { - return "Capability $cap does not have a $subcap sub-capability." if not $self->has($cap, $subcap); - $self->remove($cap, $subcap); - return "Capability $subcap removed from $cap."; - } + return "Capability $subcap does not belong to the $cap capability group." if not $self->has($cap, $subcap); + $self->remove($cap, $subcap); + return "Capability $subcap removed from the $cap capability group."; } default { - $result = "Usage: cap list [capability] | cap add [sub-capability] | cap remove [sub-capability] | cap userhas [capability]"; + $result = "Usage: cap list [capability] | cap group | cap ungroup | cap userhas [capability]"; } } return $result;