Add individual change-logs for factoid triggers

This commit is contained in:
Pragmatic Software 2015-12-13 13:58:01 -08:00
parent 31cd5d8388
commit e6e7f325fb
3 changed files with 56 additions and 2 deletions

View File

@ -99,6 +99,25 @@ sub call_factoid {
return $self->{pbot}->{factoids}->interpreter($from, $nick, $user, $host, 1, $trigger, $args, undef, $channel); return $self->{pbot}->{factoids}->interpreter($from, $nick, $user, $host, 1, $trigger, $args, undef, $channel);
} }
sub log_factoid {
my $self = shift;
my ($channel, $trigger, $hostmask, $msg) = @_;
$channel = 'global' if $channel eq '.*';
my $path = $self->{pbot}->{registry}->get_value('general', 'data_dir') . '/factlog';
open my $fh, ">> $path/$trigger.$channel";
if (not $fh) {
$self->{pbot}->{logger}->log("Failed to open factlog for $channel/$trigger: $!\n");
return;
}
my $now = gettimeofday;
print $fh "$now $hostmask $msg\n";
close $fh;
}
sub factset { sub factset {
my $self = shift; my $self = shift;
my ($from, $nick, $user, $host, $arguments) = @_; my ($from, $nick, $user, $host, $arguments) = @_;
@ -151,7 +170,19 @@ sub factset {
} }
} }
return $self->{pbot}->{factoids}->{factoids}->set($channel, $trigger, $key, $value); my $oldvalue = $self->{pbot}->{factoids}->{factoids}->hash->{$channel}->{$trigger}->{$key};
my $result = $self->{pbot}->{factoids}->{factoids}->set($channel, $trigger, $key, $value);
if ($result =~ m/set to/) {
if (defined $oldvalue and $oldvalue ne $value) {
$self->log_factoid($channel, $trigger, "$nick!$user\@$host", "set $key from $oldvalue to $value");
} else {
$self->log_factoid($channel, $trigger, "$nick!$user\@$host", "set $key to $value");
}
}
return $result;
} }
sub factunset { sub factunset {
@ -204,7 +235,14 @@ sub factunset {
} }
} }
return $self->{pbot}->{factoids}->{factoids}->unset($channel, $trigger, $key); my $oldvalue = $self->{pbot}->{factoids}->{factoids}->hash->{$channel}->{$trigger}->{$key};
my $result = $self->{pbot}->{factoids}->{factoids}->unset($channel, $trigger, $key);
if ($result =~ m/unset/) {
$self->log_factoid($channel, $trigger, "$nick!$user\@$host", "unset $key (value: $oldvalue)");
}
return $result;
} }
sub list { sub list {
@ -391,9 +429,16 @@ sub factmove {
$found_src_channel = 'global' if $found_src_channel eq '.*'; $found_src_channel = 'global' if $found_src_channel eq '.*';
$target_channel = 'global' if $target_channel eq '.*'; $target_channel = 'global' if $target_channel eq '.*';
my $path = $self->{pbot}->{registry}->get_value('general', 'data_dir') . '/factlog';
if (not rename "$path/$found_source.$found_src_channel", "$path/$target.$target_channel") {
$self->{pbot}->{logger}->log("Failed to move factlog $found_source.$found_src_channel to $target.$target_channel: $!\n");
}
if($src_channel eq $target_channel) { if($src_channel eq $target_channel) {
$self->log_factoid($target_channel, $target, "$nick!$user\@$host", "renamed from $found_source to $target");
return "[$found_src_channel] $found_source renamed to $target"; return "[$found_src_channel] $found_source renamed to $target";
} else { } else {
$self->log_factoid($target_channel, $target, "$nick!$user\@$host", "moved from $found_src_channel/$found_source to $target_channel/$target");
return "[$found_src_channel] $found_source moved to [$target_channel] $target"; return "[$found_src_channel] $found_source moved to [$target_channel] $target";
} }
} }
@ -537,6 +582,8 @@ sub factrem {
($channel, $trigger) = ($factoids[0]->[0], $factoids[0]->[1]); ($channel, $trigger) = ($factoids[0]->[0], $factoids[0]->[1]);
} }
$channel = '.*' if $channel eq 'global';
if($factoids->{$channel}->{$trigger}->{type} eq 'module') { if($factoids->{$channel}->{$trigger}->{type} eq 'module') {
$self->{pbot}->{logger}->log("$nick!$user\@$host attempted to remove $trigger [not factoid]\n"); $self->{pbot}->{logger}->log("$nick!$user\@$host attempted to remove $trigger [not factoid]\n");
return "$trigger is not a factoid."; return "$trigger is not a factoid.";
@ -556,6 +603,7 @@ sub factrem {
$self->{pbot}->{logger}->log("$nick!$user\@$host removed [$channel][$trigger][" . $factoids->{$channel}->{$trigger}->{action} . "]\n"); $self->{pbot}->{logger}->log("$nick!$user\@$host removed [$channel][$trigger][" . $factoids->{$channel}->{$trigger}->{action} . "]\n");
$self->{pbot}->{factoids}->remove_factoid($channel, $trigger); $self->{pbot}->{factoids}->remove_factoid($channel, $trigger);
$self->log_factoid($channel, $trigger, "$nick!$user\@$host", "deleted");
return "$trigger removed from " . ($channel eq '.*' ? 'the global channel' : $channel) . "."; return "$trigger removed from " . ($channel eq '.*' ? 'the global channel' : $channel) . ".";
} }
@ -978,6 +1026,7 @@ sub factchange {
$factoids->{$channel}->{$trigger}->{edited_by} = "$nick!$user\@$host"; $factoids->{$channel}->{$trigger}->{edited_by} = "$nick!$user\@$host";
$factoids->{$channel}->{$trigger}->{edited_on} = gettimeofday; $factoids->{$channel}->{$trigger}->{edited_on} = gettimeofday;
$self->{pbot}->{factoids}->save_factoids(); $self->{pbot}->{factoids}->save_factoids();
$self->log_factoid($channel, $trigger, "$nick!$user\@$host", "changed action to $factoids->{$channel}->{$trigger}->{action}");
return "Changed: $trigger is " . $factoids->{$channel}->{$trigger}->{action}; return "Changed: $trigger is " . $factoids->{$channel}->{$trigger}->{action};
} }
}; };

View File

@ -105,6 +105,10 @@ sub add_factoid {
$self->{factoids}->hash->{$channel}->{$trigger}->{rate_limit} = $self->{pbot}->{registry}->get_value('factoids', 'default_rate_limit'); $self->{factoids}->hash->{$channel}->{$trigger}->{rate_limit} = $self->{pbot}->{registry}->get_value('factoids', 'default_rate_limit');
$self->save_factoids unless $dont_save; $self->save_factoids unless $dont_save;
unless ($dont_save) {
$self->{commands}->log_factoid($channel, $trigger, $owner, "created: $action");
}
} }
sub remove_factoid { sub remove_factoid {

1
data/factlog/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*