Common.pm 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 = shift;
  42. $ignored{$nick} = 1;
  43. }
  44. sub is_ignored {
  45. my $nick = shift;
  46. if ($ignored{$nick}) {
  47. return 1;
  48. }
  49. }
  50. sub find_alias {
  51. my ($nick) = @_;
  52. my $lcnick = lc($nick);
  53. if ($aliases{$lcnick}) {
  54. return $aliases{$lcnick};
  55. } else {
  56. foreach (keys %aliaswilds) {
  57. if ($nick =~ /^$_$/i) {
  58. add_alias($aliaswilds{$_}, $lcnick);
  59. return $aliaswilds{$_};
  60. }
  61. }
  62. }
  63. add_alias($nick, $nick);
  64. return $nick;
  65. }
  66. sub match_url {
  67. my ($str) = @_;
  68. if ($str =~ /(http|https|ftp|telnet|news)(:\/\/[-a-zA-Z0-9_]+\.[-a-zA-Z0-9.,_~=:;&@%?#\/+]+)/) {
  69. return "$1$2";
  70. }
  71. return undef;
  72. }
  73. sub match_email {
  74. my ($str) = @_;
  75. if ($str =~ /([-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+\.[-a-zA-Z0-9._]+)/) {
  76. return $1;
  77. }
  78. return undef;
  79. }
  80. 1;