########################### # 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 "
(.+?)
" [::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 }