All pastes #993833 Raw Edit

Miscellany

public text v1 · immutable
#993833 ·published 2008-04-22 21:56 UTC
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

}