@@ -23,6 +23,15 @@ sub listener_specs {
2323 return unless $e -> text =~ / \A set\s +(my|\w +'s)/in ;
2424 },
2525 },
26+ {
27+ name => ' clear' ,
28+ method => ' handle_clear' ,
29+ exclusive => 1,
30+ predicate => sub ($self , $e ) {
31+ return unless $e -> was_targeted;
32+ return unless $e -> text =~ / \A clear\s +(my|\w +'s)/in ;
33+ },
34+ },
2635 {
2736 name => ' list_all_preferences' ,
2837 method => ' handle_list' ,
@@ -48,16 +57,38 @@ sub listener_specs {
4857}
4958
5059sub handle_set ($self , $event ) {
51- my ($who , $comp_name , $ pref_name , $pref_value ) =
60+ my ($who , $pref_name , $pref_value ) =
5261 $event -> text =~ m {\A set \s + (my|\w +'s) \s + # set my
53- ([-_a-z0-9]+) \. ( [-_a-z0-9]+) # component.pref
62+ ([-_a-z0-9]+ \. [-_a-z0-9]+) # component.pref
5463 \s + to \s + (.*) # to value
5564 } x ;
5665
57- return unless $who ;
66+ return $self -> _set_pref($event , $who , $pref_name , $pref_value );
67+ }
68+
69+ sub handle_clear ($self , $event ) {
70+ my ($who , $pref_name , $rest ) =
71+ $event -> text =~ m {\A clear \s + (my|\w +'s) \s + # set my
72+ ([-_a-z0-9]+ \. [-_a-z0-9]+) # component.pref
73+ \s * (.+)?
74+ } x ;
75+
76+ return $event -> error_reply(" You can't pass a value to 'clear'" )
77+ if $rest ;
5878
79+ return $self -> _set_pref($event , $who , $pref_name , undef );
80+ }
81+
82+ sub _set_pref ($self , $event , $who , $full_name , $pref_value ) {
83+ return unless $who ;
5984 $who =~ s / 's$// ;
6085
86+ my $user = $self -> hub-> user_directory-> resolve_name($who , $event -> from_user);
87+ return $event -> error_reply(" Sorry, I couldn't find a user for <$who >" )
88+ unless $user ;
89+
90+ my ($comp_name , $pref_name ) = split /\./, $full_name , 2;
91+
6192 my $component ;
6293 try {
6394 $component = $self -> hub-> component_named($comp_name );
@@ -68,10 +99,6 @@ sub handle_set ($self, $event) {
6899
69100 return unless $component ;
70101
71- my $user = $self -> hub-> user_directory-> resolve_name($who , $event -> from_user);
72- return $event -> error_reply(" Sorry, I couldn't find a user for <$who >" )
73- unless $user ;
74-
75102 if ($user != $event -> from_user && ! $event -> from_user-> is_master) {
76103 return $event -> error_reply(
77104 " Sorry, only master users can set preferences for other people"
0 commit comments