3 use URI
::Find
qw(find_uris);
7 use vars
qw($VERSION %IRSSI $dbh);
11 authors
=> "John Runyon",
13 description
=> "Log URLs to MySQL",
14 license
=> "public domain",
15 url
=> "https://github.com/zonidjan/irssi-scripts",
16 contact
=> "https://github.com/zonidjan"
19 our @MAPPING = split(//, 'abcdefghijklmnopqrstuvwxyz0123456789');
24 sub urllog
{ our $INURLLOG; return if $INURLLOG; $INURLLOG = 1; _urllog
(@_); $INURLLOG = 0; }
26 my ($dest, $text, $stripped) = @_;
27 return if $stripped =~ /URL:/;
29 if (defined($dest->{server
}) && defined($dest->{server
}->{tag
}) && defined($dest->{target
}) && $dest->{server
}->{tag
} && $dest->{target
}) {
31 find_uris
($stripped, sub { found_url
($dest->{server
}->{tag
}, $dest->{target
}, \
$output, $stripped, @_); });
32 unless ($output eq '') {
33 $dest->{window
}->print($text =~ s/%/%%/gr, $dest->{level
});
35 if (lc($dest->{target
}) eq '#minix') {
36 $dest->{window
}->command("msg ".$dest->{target
}." URL: ".$output);
38 $dest->{window
}->print("URL: ".$output, $dest->{level
});
44 sub found_url
{ # found_url($server_tag, $target_name, \$output_buffer, $full_line, @find_uris_callback_args)
45 my ($tag, $target, $output, $line, $uriobj, $url) = @_;
46 my $ignorechansre = Irssi
::settings_get_str
('ignore_chans_re');
48 ($ignorechansre && $target =~ m/$ignorechansre/i)
49 or $url =~ m!://jfr\.im/u[0-9a-z]+!i
50 or $line =~ m!\] has quit \[.*?\Q$url\E.*?\]$!;
51 $dbh->do("INSERT INTO urls(server,target,url,fullline) VALUES (?,?,?,?)", undef, $tag, $target, $url, $line);
52 $$output .= "http://jfr.im/u".numtoalpha
($dbh->last_insert_id((undef) x
4))." ";
62 $alpha = $MAPPING[$num % scalar @MAPPING].$alpha;
63 $num = int($num / scalar @MAPPING);
69 Irssi
::settings_add_str
('urllog', 'db_dsn', 'DBI:mysql:urllog');
70 Irssi
::settings_add_str
('urllog', 'db_username', 'urllog');
71 Irssi
::settings_add_str
('urllog', 'db_password', '');
72 Irssi
::settings_add_str
('urllog', 'ignore_chans_re', '');
75 Irssi
::settings_get_str
('db_dsn'),
76 Irssi
::settings_get_str
('db_username'),
77 Irssi
::settings_get_str
('db_password'),
78 ) or warn $DBI::errstr
;
81 Irssi
::signal_add
('print text', 'urllog');
82 Irssi
::print('%G>>%n '.$IRSSI{name
}.' '.$VERSION.' loaded');
87 CREATE DATABASE
`urllog`;
88 CREATE TABLE
`urllog`.`urls` (
89 `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY
,
90 `server` varchar
(25) NULL DEFAULT NULL
,
91 `target` varchar
(100) NULL DEFAULT NULL
,
92 `nick` varchar
(40) NULL DEFAULT NULL
,
94 `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
,
95 `fullline` text NOT NULL
97 GRANT INSERT ON
`urllog`.`urls` TO
'urllog'@'localhost';