Common.pm 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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}) {
  15. if (not defined $aliases{$lcalias}) {
  16. $aliases{$lcnick} = $nick;
  17. $aliases{$lcalias} = $nick;
  18. } elsif (defined $aliases{$lcalias}) {
  19. $aliases{$lcnick} = $aliases{$lcalias};
  20. }
  21. } elsif (not defined $aliases{$lcalias}) {
  22. $aliases{$lcalias} = $aliases{$lcnick};
  23. }
  24. #$debug->("Alias added: $alias -> $aliases{$lcalias}");
  25. }
  26. sub add_aliaswild {
  27. my ($nick, $alias) = @_;
  28. my $lcnick = lc($nick);
  29. my $lcalias = lc($alias);
  30. if (not defined $aliases{$lcnick}) {
  31. $aliases{$lcnick} = $nick;
  32. }
  33. $aliaswilds{$lcalias} = $nick;
  34. #$debug->("Aliaswild added: $alias -> $aliaswilds{$lcalias}");
  35. }
  36. sub add_ignore {
  37. my $nick = shift;
  38. $ignored{$nick} = 1;
  39. }
  40. sub is_ignored {
  41. my $nick = shift;
  42. if ($ignored{$nick} || $ignored{find_alias($nick)}) {
  43. return 1;
  44. }
  45. }
  46. sub find_alias {
  47. my ($nick) = @_;
  48. my $lcnick = lc($nick);
  49. if ($aliases{$lcnick}) {
  50. return $aliases{$lcnick};
  51. } else {
  52. foreach (keys %aliaswilds) {
  53. if ($nick =~ /^$_$/i) {
  54. add_alias($aliaswilds{$_}, $lcnick);
  55. return $aliaswilds{$_};
  56. }
  57. }
  58. }
  59. add_alias($nick, $nick);
  60. return $nick;
  61. }
  62. sub match_url {
  63. my ($str) = @_;
  64. if ($str =~ /(http|https|ftp|telnet|news)(:\/\/[-a-zA-Z0-9_]+\.[-a-zA-Z0-9.,_~=:;&@%?#\/+]+)/) {
  65. return "$1$2";
  66. }
  67. return undef;
  68. }
  69. sub match_email {
  70. my ($str) = @_;
  71. if ($str =~ /([-a-zA-Z0-9._]+@[-a-zA-Z0-9_]+\.[-a-zA-Z0-9._]+)/) {
  72. return $1;
  73. }
  74. return undef;
  75. }
  76. 1;