# Configs: set urltitle(ignore) "bdkqr|dkqr" ;# User flags script will ignore input from set urltitle(pubmflags) "-|-" ;# user flags required for channel eggdrop use set urltitle(length) 5 ;# minimum url length to trigger channel eggdrop use set urltitle(delay) 1 ;# minimum seconds to wait before another eggdrop use set urltitle(timeout) 60000 ;# geturl timeout (1/1000ths of a second) ################################################################################################################ # Script begins: package require http ;# You need the http package.. set urltitle(last) 111 ;# Internal variable, stores time of last eggdrop use, don't change.. setudef flag urltitle ;# Channel flag to enable script. setudef flag logurltitle ;# Channel flag to enable logging of script. set urltitlever "0.01a" bind pubm $urltitle(pubmflags) {*://*} pubm:urltitle proc pubm:urltitle {nick host user chan text} { global urltitle if {([channel get $chan urltitle]) && ([expr [unixtime] - $urltitle(delay)] > $urltitle(last)) && \ (![matchattr $user $urltitle(ignore)])} { foreach word [split $text] { if {[string length $word] >= $urltitle(length) && \ [regexp {^(f|ht)tp(s|)://} $word] && \ ![regexp {://([^/:]*:([^/]*@|\d+(/|$))|.*/\.)} $word]} { set urltitle(last) [unixtime] set urtitle [urltitle $word] if {[string length $urtitle]} { #puthelp "PRIVMSG $chan :$nick: URL Title for $word - \002$urtitle\002" puthelp "PRIVMSG $chan :$urtitle" } break } } } if {[channel get $chan logurltitle]} { foreach word [split $text] { if {[string match "*://*" $word]} { putlog "<$nick:$chan> $word -> $urtitle" } } } # change to return 0 if you want the pubm trigger logged additionally.. return 1 } proc urltitle {url} { if {[info exists url] && [string length $url]} { catch {set http [::http::geturl $url -timeout $::urltitle(timeout)]} error if {[string match -nocase "*couldn't open socket*" $error]} { #return "Error: couldn't connect..Try again later" return "" } if { [::http::status $http] == "timeout" } { #return "Error: connection timed out while trying to contact $url" return "" } set data [::http::data $http] ::http::cleanup $http set title "" if {[regexp -nocase {(.*?)} $data match title]} { set title [string trim [string map { {href=} "" \" "" \n "" \r ""} $title]] set words [regexp -all -inline {[a-zA-Z0-9öäåÖÄÅ]+} $title] set words_count 0 set words_found 0 foreach {word} $words { incr words_count if {[regexp -nocase $word $url match]} { incr words_found } } if {$words_found > [expr $words_count / 2]} { return "" } return $title } else { #return "No title found." return "" } } } putlog "Url Title Grabber $urltitlever (rosc) script loaded.."