Code: Select all
#############################################
# gconvert.tcl v2.0 by AkiraX #
# <#AnimeFiends@EFNet> #
#############################################
####### DESCRIPTION #########################
# Uses the google calculator to perform
# conversions and mathematics
#############################################
####### USAGE ###############################
# !convert <quantity> to <quantity>
# !math <equation> : perform mathematics
# !calc <equation> : same as !math
#############################################
####### CHANGELOG ###########################
# v2.1 : fixed functionality, repaired by Scott Glover
# v2.0 : allow convert code to perform math
# v1.0 : support for google conversions
#############################################
####### LICENSE #############################
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, U
#############################################
package require http
bind pub -|- !convert gconvert:run
proc gconvert:run { nick host handle chan text } {
set convert(nick) [join [lrange [split $nick] 0 0]]
set convert(input) [join [lrange [split $text] 0 end]]
# create google URL
set token [http::config -useragent "Mozilla"]
set convert(url) [gconvert:webstring "convert $convert(input)"]
set convert(url) "http://www.google.com/search?hl=en&q=$convert(url)"
set num_tries 0
set try_again 1
while { $try_again } {
incr num_tries
if { $num_tries > 3 } {
set try_again 0
break
}
# grab the info from google
set token [http::geturl $convert(url) -timeout 15000]
upvar #0 $token state
if { $state(status) == "timeout" } {
puthelp "PRIVMSG $chan :Sorry, your request timed out."
return
}
set convert(html) [split [http::data $token] "\n"]
http::cleanup $token
# find the answer
set num_lines 0
set convert(answer) ""
foreach line $convert(html) {
incr num_lines
if { $num_lines > 100 } {
set try_again 0
break
}
# take suggestions
if { [regexp {Did you mean:} $line] } {
# grab the new URL and start over
regexp {Did you mean: </font><a href=(.*?) class=p>} $line match convert(url)
set convert(url) "http://www.google.com$convert(url)"
break
}
# find the calculator
if { [regexp {src=/images/calc_img.gif} $line] } {
regexp "calc_img.+?nowrap>(.+?)/h" $line - convert(answer)
regexp "<b>(.*)</b>" $convert(answer) match convert(answer)
set try_again 0
break
}
}
}
if { $convert(answer) == "" } {
puthelp "PRIVMSG $chan :Sorry, didn't work out."
return
}
puthelp "PRIVMSG $chan :[gconvert:gstring $convert(answer)]"
return
}
bind pub -|- !math gconvert:math
bind pub -|- !calc gconvert:math
proc gconvert:math { nick host handle chan text } {
set calc(nick) [join [lrange [split $nick] 0 0]]
set calc(input) [join [lrange [split $text] 0 end]]
# create google URL
set token [http::config -useragent "Mozilla"]
set calc(url) [gconvert:webstring "$calc(input)"]
set calc(url) "http://www.google.com/search?hl=en&q=$calc(url)"
set num_tries 0
set try_again 1
while { $try_again } {
incr num_tries
if { $num_tries > 2 } {
set try_again 0
break
}
# grab the info from google
set token [http::geturl $calc(url) -timeout 15000]
upvar #0 $token state
if { $state(status) == "timeout" } {
puthelp "PRIVMSG $chan :Sorry, your request timed out."
return
}
set calc(html) [split [http::data $token] "\n"]
http::cleanup $token
# find the answer
set num_lines 0
set calc(answer) ""
foreach line $calc(html) {
incr num_lines
if { $num_lines > 100 } {
set try_again 0
break
}
# take suggestions
if { [regexp {Did you mean:} $line] } {
# grab the new URL and start over
regexp {Did you mean: </font><a href=(.*?) class=p>} $line match calc(url)
set calc(url) "http://www.google.com$calc(url)"
break
}
# find the calculator
if { [regexp {src=/images/calc_img.gif} $line] } {
regexp "calc_img.+?nowrap>(.+?)/h" $line - calc(answer)
regexp "<b>(.*)</b>" $calc(answer) match calc(answer)
set try_again 0
break
}
}
}
if { $calc(answer) == "" } {
puthelp "PRIVMSG $chan :Sorry, didn't work out."
return
}
puthelp "PRIVMSG $chan :[gconvert:gstring $calc(answer)]"
return
}
proc gconvert:webstring { input } {
set input [string map { {%} {%25} } $input]
set input [string map { {&} {&} } $input]
set input [string map { {*} {%2A} } $input]
set input [string map { {+} {%2B} } $input]
set input [string map { {,} {%2C} } $input]
set input [string map { {-} {%2D} } $input]
set input [string map { {/} {%2F} } $input]
set input [string map { {^} {%5E} } $input]
set input [string map { {<} {<} } $input]
set input [string map { {>} {>} } $input]
#set input [string map { {"} {"} } $input]
set input [string map { {"} {} } $input]
set input [string map { {'} {'} } $input]
set input [string map { { } {+} } $input]
return $input
}
proc gconvert:gstring { input } {
set input [string map { {<font size=-2> </font>} {,} } $input]
set input [string map { {×} {x} } $input]
set input [string map { {10<sup>} {10^} } $input]
set input [string map { {</sup>} {} } $input]
return $input
}
putlog "*Google Convert v2.0* Loaded"
Haw. You prefer the script correct mispellings and not broadcast them allowing the user to requery. You'd rather the bot just go hey, your wrong, and then query using the 'did you mean' instead? I won't do this. So yeah, your better off using that broken script if thats what you want. I prefer having a spell checker with mine.. Yours will not function this way.holycrap wrote:I like this better.
Code: Select all
snipped
<speechles> !spell .it pizzs
<sp33chy> Forse cercavi: pizza?
<speechles> !spell .fr le français Never Surrendr, oui droit
<sp33chy> Essayez avec cette orthographe : le français Never Surrender, oui droit?
<speechles> !spell havign a spll checkr si ncie
<sp33chy> Did you mean: having a spell checker is nice?
Code: Select all
set convert(nick) [join [lrange [split $nick] 0 0]]
set convert(input) [join [lrange [split $text] 0 end]]
Code: Select all
set convert(nick) $nick
set convert(input) $text
holycrap wrote:The script is down again.
The one I've posted works indeed. The one you posted depends on the </h2> tag which isn't present anymore all on the same line.<speechles> !convert 2+2-7*pi - 3.14159^100
<sp33chy> 2 + 2 - (7 * pi) - (3.14159^100) = -5.18741013 × 10^49
<speechles> !convert fturama
<sp33chy> Did you mean: futurama?
<speechles> !convert 2 pounds + 6 euro + the answer to life, the universe and everything $ in peso
<sp33chy> (2 British pounds) + (6 Euros) + (the answer to life, the universe and everything US$) = 570.020365 Mexican pesos
Code: Select all
regexp "calc_img.+?nowrap>(.+?)/h" $line - convert(answer)
Sorry mate, just made a temporary solution, and since I have no experience with regex, it was trial and errorspeechles wrote:Whoever made that line had no idea what they were doing, the reason there is an /h there is because of.. well, because they intended to stop the parsing at </h2> tag. But, since they had no idea what they were doing, they forgot the "<"??! This is why I would rather not touch that script or use any of it's code, it's silly
The text I used to convey my message wasn't intended to have a mean tone to it. I chose the word silly to reflect that fact. I was only explaining the real difference between the script I posted and the script posted with that fix, that was all. If it was you amending the script to add that fix with no experience, then it certainly makes sense why it appeared like it did. I didn't mean for it to come off as some arrogant cocky statement if thats what it sounded like (it sounds like that to me on rereading ).texke wrote:Sorry mate, just made a temporary solution, and since I have no experience with regex, it was trial and errorspeechles wrote:Whoever made that line had no idea what they were doing, the reason there is an /h there is because of.. well, because they intended to stop the parsing at </h2> tag. But, since they had no idea what they were doing, they forgot the "<"??! This is why I would rather not touch that script or use any of it's code, it's silly