diff --git a/Modules/Ignore.pm b/Modules/Ignore.pm index f2162830e3e083240423d6a8424a51c592617d4b..f786f631071b072c3be46ab90ee98967b563d925 100644 --- a/Modules/Ignore.pm +++ b/Modules/Ignore.pm @@ -1,8 +1,11 @@ package Ignore; # right = owner ; command = ignore +use Storable; + # Liste des utilisateurs ignorés -my %ignore_list = (); +my %ignore__list = (); + # ### @@ -53,13 +56,13 @@ sub ignore_add $userhost = lc $ref_params->[0]; - if(defined($ignore_list{$userhost})) + if(defined($ignore__list{$userhost})) { $conn->privmsg($reply_to, "$userhost already in the ignore list"); } else { - $ignore_list{$userhost} = time(); + $ignore__list{$userhost} = time(); $conn->privmsg($reply_to, "$userhost added in the ignore list"); } @@ -79,9 +82,9 @@ sub ignore_remove $userhost = lc $ref_params->[0]; - if(defined($ignore_list{$userhost})) + if(defined($ignore__list{$userhost})) { - delete $ignore_list{$userhost}; + delete $ignore__list{$userhost}; $conn->privmsg($reply_to, "$userhost removed from the ignore list"); } else @@ -101,6 +104,8 @@ sub ignore_list { my ($conn, $event, $reply_to, $ref_params) = @_; + my @userhost = (); + if(defined($ref_params->[0])) { my $mask = undef; @@ -112,15 +117,14 @@ sub ignore_list return 1; } - my @userhost = (); - foreach my $uh (keys(%ignore_list)) + foreach my $uh (keys(%ignore__list)) { push @userhost, $uh if($uh =~ $mask); } } else { - my @userhost = keys %ignore_list; + @userhost = keys %ignore__list; } if(defined($userhost[0])) @@ -131,7 +135,7 @@ sub ignore_list } else { - $conn->privmsg($reply_to, $userhost[0] . ' at ' . localtime($ignore_list{$userhost[0]})); + $conn->privmsg($reply_to, $userhost[0] . ', added ' . localtime($ignore__list{$userhost[0]})); } } else @@ -143,6 +147,22 @@ sub ignore_list } # ignore_list +# ### +# ignore_on_public +# Handler pour un évènement public, pour savoir si on ignore la personne ou non +# ### +sub ignore_on_public +{ + my ($conn, $event) = @_; + + if(defined($ignore__list{lc $event->{'userhost'}})) + { + EventHandler::prevent_default($event, 1); + $::logger->info($event->{'userhost'} . " is ignored\n"); + } +} # Fin ignore_on_public + + # ### # ignore_help # Affiche l'aide de la commande '!ignore' @@ -159,3 +179,49 @@ sub ignore_help return 1; } # Fin ignore_help + +# ### +# ignore_save +# Sauvegarde les ignore des utilisateurs +# ### +sub ignore_save +{ + my (undef, $folder, $reloading) = @_; + my $file_ignore = "/ignore".$Config::suffixe.".sav"; + + store \%ignore__list, $folder.$file_ignore; + + if($reloading) + { + # On se désenregistre sinon on risque d'avoir deux fois le handler d'appelé + EventHandler::remove_event("public", "before", \&ignore_on_public); + } + + return 1; +} # Fin ignore_save + + +# ### +# ignore_load +# Charge l'ignore__list au démarrage +# ### +sub ignore_load +{ + shift; + my $folder = shift; + my $file_ignore = "/ignore".$Config::suffixe.".sav"; + + my $stateref = retrieve $folder.$file_ignore; + + %ignore__list = %{$stateref}; + + # Ajout d'un handler pour ignorer les gens lorsqu'ils disent quelque chose + EventHandler::init_add_event("public", "before", \&ignore_on_public); + + return 1; +} # Fin ignore_load + +1; + +__END__ +