@@ -15,9 +15,8 @@ sub said
1515 return ;
1616 }
1717 $key =~ s / ^\W *(\w +)\W *$/ $1 / g ;
18- return if $key eq $said_hr -> {' who' };
1918 my $channel_id = $self -> get_channel_id($said_hr -> {' channel' });
20- my $value = change_value($self , $operation , $channel_id , $key );
19+ my $value = change_value($self , $operation , $channel_id , $key , 1 );
2120 return " Karma for $key is now " . $value ;
2221 }
2322 return ;
@@ -32,30 +31,43 @@ sub get_karma
3231{
3332 my ($self , $said_hr ) = @_ ;
3433
35- my $key = $said_hr -> {' body' };
36- my $result = $self -> schema-> resultset(' Karma' )-> find(
37- {
38- ' channel_id' => $self -> get_channel_id($said_hr -> {' channel' }),
39- ' key' => $key ,
40- },
41- );
42- my $value = defined $result ? $result -> value : 0;
34+ my ( $key , $operation ) = split /\s /, $said_hr -> {' body' }, 2;
35+
36+ my $channel_id = $self -> get_channel_id($said_hr -> {' channel' });
37+ my $value ;
38+
39+ if ( defined $operation && $operation =~ / \s *\+\s *(\d +)/ ) {
40+ $value = change_value($self , ' ++' , $channel_id , $key , $1 );
41+ }
42+ elsif ( defined $operation && $operation =~ / \s *\-\s *(\d +)/ ) {
43+ $value = change_value($self , --, $channel_id , $key , $1 );
44+ }
45+ else {
46+ my $result = $self -> schema-> resultset(' Karma' )-> find(
47+ {
48+ ' channel_id' => $channel_id ,
49+ ' key' => $key ,
50+ },
51+ );
52+ $value = defined $result ? $result -> value : 0;
53+ }
54+
4355 return " $key has $value karma" ;
4456
4557}
4658
4759sub change_value
4860{
49- my ($self , $operation , $channel_id , $key ) = @_ ;
61+ my ($self , $operation , $channel_id , $key , $value ) = @_ ;
5062 my $value ;
5163 my $karma =
5264 $self -> schema-> resultset(' Channel' )-> find({ ' id' => $channel_id })
5365 -> karma-> find_or_new({ key => $key });
5466 if ($operation eq ' ++' ) {
55- $karma -> value($karma -> value + 1 );
67+ $karma -> value($karma -> value + $value );
5668 }
5769 else {
58- $karma -> value($karma -> value - 1 );
70+ $karma -> value($karma -> value - $value );
5971 }
6072 $karma -> insert_or_update;
6173 return $karma -> value;
0 commit comments