diff --git a/Modules/Ignore.pm b/Modules/Ignore.pm new file mode 100644 index 0000000000000000000000000000000000000000..f2162830e3e083240423d6a8424a51c592617d4b --- /dev/null +++ b/Modules/Ignore.pm @@ -0,0 +1,161 @@ +package Ignore; # right = owner ; command = ignore + + +# Liste des utilisateurs ignorés +my %ignore_list = (); + + +# ### +# ignore_main +# Permet de gérer la liste des ignorance des utilisateurs +# +# Usage : +# !ignore {add|remove} <user>@<host> +# !ignore list [<mask>] +# ### +sub ignore_main +{ + my ($conn, $event , $reply_to, $ref_params) = @_; + + if(defined($ref_params->[0])) + { + if($ref_params->[0] eq 'add') + { + shift(@{$ref_params}); + return 1 if(ignore_add($conn, $event, $reply_to, $ref_params)); + } + elsif($ref_params->[0] eq 'remove') + { + shift(@{$ref_params}); + return 1 if(ignore_remove($conn, $event, $reply_to, $ref_params)); + } + elsif($ref_params->[0] eq 'list') + { + shift(@{$ref_params}); + return 1 if(ignore_list($conn, $event, $reply_to, $ref_params)); + } + } + + $ref_params->[0] = 'ignore'; + Help::help_main($conn, $event, $reply_to, $ref_params); +} # Fin ignore_main + + +# ### +# ignore_add +# Ajoute un utilisateur à la liste d'ignore +# ### +sub ignore_add +{ + my ($conn, $event, $reply_to, $ref_params) = @_; + + return 0 unless defined $ref_params->[0]; + + $userhost = lc $ref_params->[0]; + + if(defined($ignore_list{$userhost})) + { + $conn->privmsg($reply_to, "$userhost already in the ignore list"); + } + else + { + $ignore_list{$userhost} = time(); + $conn->privmsg($reply_to, "$userhost added in the ignore list"); + } + + return 1; +} # ignore_add + + +# ### +# ignore_remove +# Enlève un utilisateur de la liste d'ignore +# ### +sub ignore_remove +{ + my ($conn, $event, $reply_to, $ref_params) = @_; + + return 0 unless defined $ref_params->[0]; + + $userhost = lc $ref_params->[0]; + + if(defined($ignore_list{$userhost})) + { + delete $ignore_list{$userhost}; + $conn->privmsg($reply_to, "$userhost removed from the ignore list"); + } + else + { + $conn->privmsg($reply_to, "$userhost isn't in the ignore list"); + } + + return 1; +} # ignore_remove + + +# ### +# ignore_list +# Affiche la liste des ignore +# ### +sub ignore_list +{ + my ($conn, $event, $reply_to, $ref_params) = @_; + + if(defined($ref_params->[0])) + { + my $mask = undef; + my $tmp = $ref_params->[0]; + + if(!eval{ $mask = qr/$tmp/i }) + { + $conn->privmsg($reply_to, "'$tmp' doesn't seem to be a correct regex"); + return 1; + } + + my @userhost = (); + foreach my $uh (keys(%ignore_list)) + { + push @userhost, $uh if($uh =~ $mask); + } + } + else + { + my @userhost = keys %ignore_list; + } + + if(defined($userhost[0])) + { + if(defined($userhost[1])) + { + $conn->privmsg($reply_to, join(', ', @userhost)); + } + else + { + $conn->privmsg($reply_to, $userhost[0] . ' at ' . localtime($ignore_list{$userhost[0]})); + } + } + else + { + $conn->privmsg($reply_to, "There's noone in the ignore list, yet."); + } + + return 1; +} # ignore_list + + +# ### +# ignore_help +# Affiche l'aide de la commande '!ignore' +# ### +sub ignore_help +{ + my ($conn, $event, $reply_to, $ref_params) = @_; + + $conn->privmsg($reply_to, "`".$Config::command_sign."ignore {add|remove} <user>\@<host>` => " + ."add/remove an ignore on <user>\@<host> (whatever nick this user uses)"); + $conn->privmsg($reply_to, "`".$Config::command_sign."ignore list [<mask>]` => " + ."list ignored users using <mask> as a filter (<mask> has to be a valid regex)"); + + return 1; +} # Fin ignore_help +