babelfishtranslator.tcl

babelfishtranslator.tcl

This script allow you to translate words or sentences from/to various languages by typing "!translate ".

Postat de Copyright Categorie Review user Vizualizari Data
btc MenzAgitat text-input Cod netestat 485 2023-12-24 23:10:57

 ###############################################
#                                               #
#   B A B E L   F I S H   T R A N S L A T O R   #
#      v1.1en (13/10/2007)   by MenzAgitat      #
#                                               #
#          http://www.boulets-roxx.com          #
#        IRC:  irc.teepi.net    #boulets        #
#              irc.epiknet.org  #boulets        #
#                                               #
#        You can download my scripts at         #
#            http://www.egghelp.org             #
#                                               #
 ###############################################
# The Tinyurl procedure has been written by
# Tomekk (tomekk@oswiecim.eu.org), thanks to him.

#
# Description:
#   This script allow you to translate words or sentences
#   from/to various languages by typing "!translate <languages> <word or sentence>".
#
# Changelog:
#   1.0:  First version
#   1.01: Fixed the available languages list that was wrong (thanks to raktivist).
#          (only for english version, the french one do not have this problem)
#   1.1:  - It is now possible to do a request in private msg with the bot like this :
#            /msg botname !translate en-fr This is a test
#         - Integration in a namespace

# LICENCE:
#   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., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA


namespace eval bftrans {
	###########################
	#        SETTINGS         #
	###########################

	##### Public command
	set translatorcmd "!translate"

	##### Authorizations for the public command
	set translatoraut "-|-"

	##### Allow private requests ? (0 = no, 1 = yes)
	set translatorprivate "1"

	##### Private command
	set translatorprivcmd "!translate"

	##### Authorizations for the private command
	set translatorprivaut "-|-"

	##### Channels on which the translator will be active.
	##### Add as many as you want or leave just one.
	set translatorchans "#chan1 #chan2 #chan3"


################################################################
#                                                              #
# DO NOT MODIFY ANYTHING BELOW THIS BOX IF YOU DON'T KNOW TCL  #
#                                                              #
################################################################

package require http
	variable translatorversion "1.1en"
	variable DEBUGMODE 0
	variable useragent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"
	variable translatorlanguages "en-fr en-de en-nl en-it en-pt en-es fr-en de-en nl-en it-en pt-en es-en"
	variable private 0
	bind pub $translatoraut $translatorcmd bftrans::translate
	bind msg $translatorprivaut $translatorprivcmd bftrans::translate_priv
}

##### Main procedure
proc bftrans::translate {nick host hand chan arg}  {
	variable private
	##### Do we have permission to use this command on this chan ?
	if {([channel_check_translator $chan] == 0) && ($chan ne "#****")} {return}
	if { $private == 1 } {set chan $nick}
	set arg [string trim $arg]
  if {$arg == ""} {
  	bftrans::translator_syntax $chan
		if $private {set private 0}
		return
  } elseif {$arg == "langlist"} {
		putserv "PRIVMSG $nick :\037Available languages:\037"
    putserv "PRIVMSG $nick :\002fr-en\002 覧 French/English"
    putserv "PRIVMSG $nick :\002de-en\002 覧 German/English"
    putserv "PRIVMSG $nick :\002nl-en\002 覧 Dutch/English"
    putserv "PRIVMSG $nick :\002it-en\002 覧 Italian/English"
    putserv "PRIVMSG $nick :\002pt-en\002 覧 Portuguese/English"
    putserv "PRIVMSG $nick :\002es-en\002 覧 Spanish/English"
    putserv "PRIVMSG $nick :\002en-fr\002 覧 English/French"
    putserv "PRIVMSG $nick :\002en-de\002 覧 English/German"
    putserv "PRIVMSG $nick :\002en-nl\002 覧 English/Dutch"
    putserv "PRIVMSG $nick :\002en-it\002 覧 English/Italian"
    putserv "PRIVMSG $nick :\002en-pt\002 覧 English/Portuguese"
    putserv "PRIVMSG $nick :\002en-es\002 覧 English/Spanish"
		if $private {set private 0}
		return
	} else {
		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 $bftrans::DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 langtype = $langtype"}

##### Are the requested languages	in the allowed languages list ?
		set lang_permission_result [bftrans::language_check_translator $langtype]
		if $bftrans::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."
			bftrans::translator_syntax $chan
			if $private {set private 0}
#			return -code break
			return
		}
		set langtype [string map {- _} $langtype]
		set text [string range $arg 6 end]
		if $bftrans::DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 text = $text"}
		if {$text == ""} {
			puthelp "privmsg $chan :\00314You must specify what you want to translate."
			bftrans::translator_syntax $chan
			if $private {set private 0}
#			return -code break
			return
		}
##### 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 $bftrans::DEBUGMODE {putlog "\00304\[BABEL DEBUG\]\003 url = $url"}
  	::http::config -useragent $bftrans::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 $bftrans::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 $chan :\00314\037Translation\037:\003 $res"
				}
			} 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
		if $private {set private 0}
	}
}

proc bftrans::translate_priv {nick host hand arg} {
	if !$bftrans::translatorprivate {return}
	variable private
	variable private 1
	bftrans::translate $nick $host $hand #**** $arg
	return
}

##### Syntax
proc bftrans::translator_syntax { chan } {
	variable private
	if $private {set private 0}
	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
}


##### Check if the requested language is in the allowed languages list
proc bftrans::language_check_translator { langtype } {
	if {[lsearch -exact $bftrans::translatorlanguages $langtype] != -1} {
		return 1
	} else {
		return 0
	}
}


##### Check if the chan is in the allowed chans list
proc bftrans::channel_check_translator { chan } {
	if {[lsearch -exact $bftrans::translatorchans $chan] != -1} {
		return 1
	} else {
		return 0
	}
}


putlog "\002*Babel Fish Translator v$bftrans::translatorversion*\002 by MenzAgitat (\037\00312http://www.boulets-roxx.com\003\037) has been loaded"