rendered paste body###########################
# SETTINGS #
###########################
##### Public command
set translatorcmd ".translate"
##### Channels on which the translator will be active
set translatorchans "#russian"
# The available languages list relate to french translation by default
# but can be easily modified. Just edit the translatorlanguages variable
# and the languages list given in notice by the bot.
################################################################
# #
# DO NOT MODIFY ANYTHING BELOW THIS BOX IF YOU DON'T KNOW TCL #
# #
################################################################
package require http
http::config -urlencoding utf-8
set translatorversion "1.01"
set DEBUGMODE 0
set useragent "Mozilla/5.0 (Linux; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"
set translatorlanguages "en-fr en-de en-nl en-it en-pt en-es en-ru ru-en fr-en de-en nl-en it-en pt-en es-en"
bind pub -|- $translatorcmd pub:translate
##### Main procedure
proc pub:translate {nick host hand chan arg} {
##### Do we have permission to use this command on this chan ?
set permission_result [channel_check_translator $chan]
if {$permission_result == 0} {return}
set arg [string trim $arg]
if {$arg == ""} {
translator_syntax $chan
} elseif {$arg == "langlist"} {
putserv "NOTICE $nick :\037Available languages:\037"
putserv "NOTICE $nick :\002ru-en\002 �� Russian/English"
putserv "NOTICE $nick :\002fr-en\002 �� French/English"
putserv "NOTICE $nick :\002de-en\002 �� German/English"
putserv "NOTICE $nick :\002nl-en\002 �� Dutch/English"
putserv "NOTICE $nick :\002it-en\002 �� Italian/English"
putserv "NOTICE $nick :\002pt-en\002 �� Portuguese/English"
putserv "NOTICE $nick :\002es-en\002 �� Spanish/English"
putserv "NOTICE $nick :\002en-fr\002 �� English/French"
putserv "NOTICE $nick :\002en-de\002 �� English/German"
putserv "NOTICE $nick :\002en-nl\002 �� English/Dutch"
putserv "NOTICE $nick :\002en-it\002 �� English/Italian"
putserv "NOTICE $nick :\002en-pt\002 �� English/Portuguese"
putserv "NOTICE $nick :\002en-es\002 �� English/Spanish"
putserv "NOTICE $nick :\002en-ru\002 �� English/Russian"
} else {
global useragent DEBUGMODE
set url1 "http://babelfish.altavista.com/babelfish/tr?doit=done&intl=1&lp="
set url2 "&urltext="
set res ""
putcmdlog "$nick@$chan translate $arg"
set langtype [string range $arg 0 4]
if $DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 langtype = $langtype"}
##### Are the requested languages in the allowed languages list ?
set lang_permission_result [language_check_translator $langtype]
if $DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 lang_permission_result = $lang_permission_result"}
if {$lang_permission_result == 0} {
puthelp "privmsg $chan :\00314This is not a valid language."
translator_syntax $chan
return -code break
}
set langtype [string map {- _} $langtype]
set text [string range $arg 6 end]
if $DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 text = $text"}
if {$text == ""} {
puthelp "privmsg $chan :\00314You must specify what you want to translate."
translator_syntax $chan
return -code break
}
##### URL construction
set text [string map {
" " "%20" "\"" "%22" "#" "%23" "$" "%24" "%" "%25"
"&" "%26" "'" "%27" "\(" "%28" "\)" "%29" "*" "%2A"
"+" "%2B" "," "%2C" "." "%2E" "\/" "%2F" ":" "%3A"
";" "%3B" "<" "%3C" "=" "%3D" ">" "%3E" "?" "%3F"
"@" "%40" "\[" "%5B" "\\" "%5C" "\]" "%5D" "^" "%5E"
"\{" "%7B" "|" "%7C" "\}" "%7D" "~" "%7E" "�" "%A1"
"�" "%A2" "�" "%A3" "�" "%A4" "�" "%A5" "�" "%A6"
"�" "%A7" "�" "%A8" "�" "%A9" "�" "%AA" "�" "%AB"
"�" "%AC" "�" "%AD" "�" "%AE" "�" "%AF" "�" "%B0"
"�" "%B1" "�" "%B2" "�" "%B3" "�" "%B4" "�" "%B5"
"�" "%B6" "�" "%B7" "�" "%B8" "�" "%B9" "�" "%BA"
"�" "%BB" "�" "%BC" "�" "%BD" "�" "%BE" "�" "%BF"
"�" "%C0" "�" "%C1" "�" "%C2" "�" "%C3" "�" "%C4"
"�" "%C5" "�" "%C6" "�" "%C7" "�" "%C8" "�" "%C9"
"�" "%CA" "�" "%CB" "�" "%CC" "�" "%CD" "�" "%CE"
"�" "%CF" "�" "%D0" "�" "%D1" "�" "%D2" "�" "%D3"
"�" "%D4" "�" "%D5" "�" "%D6" "�" "%D7" "�" "%D8"
"�" "%D9" "�" "%DA" "�" "%DB" "�" "%DC" "�" "%DD"
"�" "%DE" "�" "%DF" "�" "%E0" "�" "%E1" "�" "%E2"
"�" "%E3" "�" "%E4" "�" "%E5" "�" "%E6" "�" "%E7"
"�" "%E8" "�" "%E9" "�" "%EA" "�" "%EB" "�" "%EC"
"�" "%ED" "�" "%EE" "�" "%EF" "�" "%F0" "�" "%F1"
"�" "%F2" "�" "%F3" "�" "%F4" "�" "%F5" "�" "%F6"
"�" "%F7" "�" "%F8" "�" "%F9" "�" "%FA" "�" "%FB"
"�" "%FC" "�" "%FD" "�" "%FE" "�" "%FF"
} $text]
set url "$url1$langtype$url2$text"
if $DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 url = $url"}
::http::config -useragent $useragent
set token [::http::geturl "$url"]
if {[::http::status $token] == "ok"} {
regexp "<td bgcolor=white class=s><div style=padding:10px;>(.+?)</div></td>" [::http::data $token] res
if $DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 $res"}
if { $res != "" } {
regsub -all "\n" $res " " res
regsub -all "<\[^<\]*>" $res "" res
set res [encoding convertfrom "utf-8" $res ]
if {$res != ""} {
puthelp "privmsg $nick :\00314\037Translation\037:\003 $res"
return -code break
}
} else {
puthelp "privmsg $chan :\00314$nick > Translation is impossible\003"
}
} else {
puthelp "privmsg $chan :\00314The connexion to Babel Fish can't be established. Maybe the website suffer technical difficulties. Try again later.\003"
}
::http::cleanup $token
}
}
##### Syntax
proc translator_syntax { chan } {
puthelp "privmsg $chan :\037Syntax :\037 \002.translate\002 \00314<\003languages\00314> <\003word or sentence\00314> \00307| \003Display the translation for a given word or sentence. For a list of available languages, type \002.translate langlist\002"
return done
}
##### Check if the requested language is in the allowed languages list
proc language_check_translator { langtype } {
global translatorlanguages
if {[lsearch -exact $translatorlanguages $langtype] != -1} {
set lang_permission 1
} else {
set lang_permission 0
}
return $lang_permission
}
##### Check if the chan is in the allowed chans list
proc channel_check_translator { chan } {
global translatorchans
if {[lsearch -exact $translatorchans $chan] != -1} {
set permission 1
} else {
set permission 0
}
return $permission
}