Common.pm 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package Pisg::Common;
  2. use Exporter;
  3. @ISA = ('Exporter');
  4. @EXPORT = qw(add_alias add_aliaswild add_ignore is_ignored find_alias match_url match_email);
  5. use strict;
  6. $^W = 1;
  7. my (%aliases, %aliaswilds, @ignored);
  8. # add_alias assumes that the first argument is the true nick and the second is
  9. # the alias, but will accomidate other arrangements if necessary.
  10. sub add_alias {
  11. my ($nick, $alias) = @_;
  12. my $lcnick = lc($nick);
  13. my $lcalias = lc($alias);
  14. if (not defined $aliases{$lcnick} and not defined $aliases{$lcalias}) {
  15. $aliases{$lcnick} = $nick;
  16. $aliases{$lcalias} = $nick;
  17. } elsif (defined $aliases{$lcnick} and not defined $aliases{$lcalias}) {
  18. $aliases{$lcalias} = $aliases{$lcnick};
  19. } elsif (not defined $aliases{$lcnick} and defined $aliases{$lcalias}) {
  20. $aliases{$lcnick} = $aliases{$lcalias};
  21. } else { # Both are defined.
  22. # If both point to the same nick, all is well. Otherwise, redefine
  23. # the alias's alias.
  24. if ($aliases{$lcnick} ne $aliases{$lcalias}) {
  25. $aliases{$lcalias} = $aliases{$lcnick};
  26. }
  27. }
  28. #$debug->("Alias added: $alias -> $aliases{$lcalias}");
  29. }
  30. sub add_aliaswild {
  31. my ($nick, $alias) = @_;
  32. my $lcnick = lc($nick);
  33. my $lcalias = lc($alias);
  34. if (not defined $aliases{$lcnick}) {
  35. $aliases{$lcnick} = $nick;
  36. }
  37. $aliaswilds{$lcalias} = $nick;
  38. #$debug->("Aliaswild added: $alias -> $aliaswilds{$lcalias}");
  39. }
  40. sub add_ignore {
  41. my ($nick) = @_;
  42. push @ignored, find_alias($nick);
  43. }
  44. sub is_ignored {
  45. my ($nick) = @_;
  46. my $realnick = find_alias($nick);
  47. return grep /^\Q$realnick\E$/, @ignored;
  48. }
  49. sub find_alias {
  50. my $nick = shift;
  51. my $lcnick = lc($nick);
  52. if ($aliases{$lcnick}) {
  53. return $aliases{$lcnick};
  54. } else {
  55. foreach (keys %aliaswilds) {
  56. if ($nick =~ /^$_$/i) {
  57. add_alias($aliaswilds{$_}, $lcnick);
  58. return $aliaswilds{$_};
  59. }
  60. }
  61. }
  62. add_alias($nick, $nick);
  63. return $nick;
  64. }
  65. sub match_url {
  66. my ($str) = @_;
  67. if ($str =~ /(http|https|ftp|telnet|news)(:\/\/[-a-zA-Z0-9_]+\.[-a-zA-Z0-9.,_~=:;&@%?#\/+]+)/) {
  68. return "$1$2";
  69. }
  70. return undef;
  71. }
  72. sub match_email {
  73. my ($str) = @_;
  74. if ($str =~ /([-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+\.[-a-zA-Z0-9._]+)/) {
  75. return $1;
  76. }
  77. return undef;
  78. }
  79. 1;