diff options
Diffstat (limited to 'idalius.pl')
-rwxr-xr-x | idalius.pl | 77 |
1 files changed, 42 insertions, 35 deletions
@@ -18,6 +18,8 @@ $| = 1; my $current_nick = $config{nick}; +# Hack: coerce into numeric type ++$config{url_on}; +$config{url_len}; # New PoCo-IRC object @@ -62,6 +64,42 @@ sub drop_priv { setuid($config{uid}) or die "Failed to setuid: $!\n"; } +sub url_get_title +{ + my $url = $_[0]; + my $response = HTTP::Tiny->new((timeout => 5))->head($url); + if (!$response->{success}) { + print "Something broke: $response->{content}\n"; + return; + } + + if (!$response->{headers}->{"content-type"} =~ m,text/html ?,) { + print("Not html, giving up now"); + return; + } + + $response = HTTP::Tiny->new((timeout => 5))->get($url); + if (!$response->{success}) { + print "Something broke: $response->{content}\n"; + return; + } + + my $html = $response->{content}; + + my $parser = HTML::HeadParser->new; + $parser->parse($html); + + # get title and unpack from utf8 (assumption) + my $title = $parser->header("title"); + return unless $title; + + my $shorturl = $url; + $shorturl = (substr $url, 0, $config{url_len}) . "β¦" if length ($url) > $config{url_len}; + + my $composed_title = "$title ($shorturl)"; + return $composed_title; +} + sub _start { my $heap = $_[HEAP]; my $irc = $heap->{irc}; @@ -114,44 +152,13 @@ sub irc_public { my $me = $irc->nick_name; - # Parse urls in all other regular messages - if ($what =~ /(https?:\/\/[^ ]+)/i) + if ($config{url_on} and $what =~ /(https?:\/\/[^ ]+)/i) { - my $url = $1; - my $response = HTTP::Tiny->new((timeout => 5))->head($url); - if (!$response->{success}) { - print "Something broke: $response->{content}\n"; - return; - } - - if (!$response->{headers}->{"content-type"} =~ m,text/html ?,) { - print("Not html, giving up now"); - return; - } - - $response = HTTP::Tiny->new((timeout => 5))->get($url); - if (!$response->{success}) { - print "Something broke: $response->{content}\n"; - return; - } - - my $html = $response->{content}; - - my $parser = HTML::HeadParser->new; - $parser->parse($html); - - # get title and unpack from utf8 (assumption) - my $title = $parser->header("title"); - return unless $title; - - my $shorturl = $url; - $shorturl = (substr $url, 0, $config{url_len}) . "β¦" if length ($url) > $config{url_len}; - - print "Title: $title ($url)\n"; - $irc->yield(privmsg => $channel => "$title ($shorturl)"); + my $title = url_get_title($1); + print "Title: $title\n"; + $irc->yield(privmsg => $channel => $title); } - my $gathered = ""; my @expressions = (keys %{$config{triggers}}); my $expression = join '|', @expressions; |